172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/remoting_ui.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/profiles/profile.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/chrome_url_data_manager.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemotingHTMLSource 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RemotingUIHTMLSource : public ChromeURLDataManager::DataSource { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RemotingUIHTMLSource() 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : DataSource(chrome::kChromeUIRemotingHost, MessageLoop::current()) {} 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when the network layer has requested a resource underneath 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the path we registered. 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void StartDataRequest(const std::string& path, 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_incognito, 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int request_id); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual std::string GetMimeType(const std::string&) const { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "pepper-application/x-chromoting"; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~RemotingUIHTMLSource() {} 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(RemotingUIHTMLSource); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RemotingUIHTMLSource::StartDataRequest(const std::string& path, 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_incognito, 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int request_id) { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Dummy data. Not used, but we need to send something back in the response. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string full_html = "remoting"; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes()); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch html_bytes->data.resize(full_html.size()); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin()); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SendResponse(request_id, html_bytes); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RemotingUI 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenRemotingUI::RemotingUI(TabContents* contents) : WebUI(contents) { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RemotingUIHTMLSource* html_source = new RemotingUIHTMLSource(); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set up the chrome://remoting source. 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochRefCountedMemory* RemotingUI::GetFaviconResourceBytes() { 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ResourceBundle::GetSharedInstance(). 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(garykac): Have custom remoting icon created. 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoadDataResourceBytes(IDR_PLUGIN); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RemotingUI::RegisterUserPrefs(PrefService* prefs) { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(garykac): Add remoting prefs (if needed). 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 84