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 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/background_contents.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/background_contents_service.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_message_service.h" 921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/renderer_preferences_util.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/chrome_web_ui_factory.h" 12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/extensions/extension_constants.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/extensions/extension_messages.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/view_types.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browsing_instance.h" 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host.h" 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/site_instance.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/view_messages.h" 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////// 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// BackgroundContents 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBackgroundContents::BackgroundContents(SiteInstance* site_instance, 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int routing_id, 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Delegate* delegate) 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : delegate_(delegate) { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile = site_instance->browsing_instance()->profile(); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(rafaelw): Implement correct session storage. 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick render_view_host_ = new RenderViewHost(site_instance, this, routing_id, NULL); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close ourselves when the application is shutting down. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::APP_TERMINATING, 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Register for our parent profile to shutdown, so we can shut ourselves down 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // as well (should only be called for OTR profiles, as we should receive 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // APP_TERMINATING before non-OTR profiles are destroyed). 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::PROFILE_DESTROYED, 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile)); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Exposed to allow creating mocks. 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBackgroundContents::BackgroundContents() 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : delegate_(NULL), 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick render_view_host_(NULL) { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBackgroundContents::~BackgroundContents() { 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!render_view_host_) // Will be null for unit tests. 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile = render_view_host_->process()->profile(); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::BACKGROUND_CONTENTS_DELETED, 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile), 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Details<BackgroundContents>(this)); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch render_view_host_->Shutdown(); // deletes render_view_host 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenBackgroundContents* BackgroundContents::GetAsBackgroundContents() { 6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return this; 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenRenderViewHostDelegate::View* BackgroundContents::GetViewDelegate() { 6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return this; 6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst GURL& BackgroundContents::GetURL() const { 7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return url_; 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 75731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickViewType::Type BackgroundContents::GetRenderViewType() const { 76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return ViewType::BACKGROUND_CONTENTS; 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickint BackgroundContents::GetBrowserWindowID() const { 80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return extension_misc::kUnknownWindowId; 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::DidNavigate( 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host, 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params) { 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We only care when the outer frame changes. 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!PageTransition::IsMainFrame(params.transition)) 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Note: because BackgroundContents are only available to extension apps, 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // navigation is limited to urls within the app's extent. This is enforced in 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderView::decidePolicyForNaviation. If BackgroundContents become 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // available as a part of the web platform, it probably makes sense to have 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // some way to scope navigation of a background page to its opener's security 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // origin. Note: if the first navigation is to a URL outside the app's 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // extent a background page will be opened but will remain at about:blank. 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_ = params.url; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile = render_view_host->process()->profile(); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::BACKGROUND_CONTENTS_NAVIGATED, 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile), 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Details<BackgroundContents>(this)); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::RunJavaScriptMessage( 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& message, 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& default_prompt, 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& frame_url, 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int flags, 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_msg, 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* did_suppress_message) { 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(rafaelw): Implement, The JavaScriptModalDialog needs to learn about 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // BackgroundContents. 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *did_suppress_message = true; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool BackgroundContents::PreHandleKeyboardEvent( 119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NativeWebKeyboardEvent& event, 120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool* is_keyboard_shortcut) { 121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return false; 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid BackgroundContents::Observe(NotificationType type, 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NotificationSource& source, 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NotificationDetails& details) { 127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // TODO(rafaelw): Implement pagegroup ref-counting so that non-persistent 128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // background pages are closed when the last referencing frame is closed. 129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick switch (type.value) { 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::PROFILE_DESTROYED: 131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick case NotificationType::APP_TERMINATING: { 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick delete this; 133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick default: 136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NOTREACHED() << "Unexpected notification sent."; 137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick break; 138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::OnMessageBoxClosed(IPC::Message* reply_msg, 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool success, 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& prompt) { 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch render_view_host_->JavaScriptMessageBoxClosed(reply_msg, success, prompt); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickgfx::NativeWindow BackgroundContents::GetMessageBoxRootWindow() { 148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NOTIMPLEMENTED(); 149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return NULL; 150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTabContents* BackgroundContents::AsTabContents() { 15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return NULL; 15421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 15521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 15621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenExtensionHost* BackgroundContents::AsExtensionHost() { 15721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return NULL; 15821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 15921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 160731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid BackgroundContents::UpdateInspectorSetting(const std::string& key, 161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& value) { 162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Profile* profile = render_view_host_->process()->profile(); 163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick RenderViewHostDelegateHelper::UpdateInspectorSetting(profile, key, value); 164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 166731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid BackgroundContents::ClearInspectorSettings() { 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Profile* profile = render_view_host_->process()->profile(); 168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick RenderViewHostDelegateHelper::ClearInspectorSettings(profile); 169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::Close(RenderViewHost* render_view_host) { 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile = render_view_host->process()->profile(); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::BACKGROUND_CONTENTS_CLOSED, 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile), 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Details<BackgroundContents>(this)); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete this; 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid BackgroundContents::RenderViewGone(RenderViewHost* rvh, 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TerminationStatus status, 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int error_code) { 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Profile* profile = rvh->process()->profile(); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationService::current()->Notify( 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationType::BACKGROUND_CONTENTS_TERMINATED, 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Source<Profile>(profile), 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Details<BackgroundContents>(this)); 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Our RenderView went away, so we should go away also, so killing the process 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // via the TaskManager doesn't permanently leave a BackgroundContents hanging 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // around the system, blocking future instances from being created 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // (http://crbug.com/65189). 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete this; 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochRendererPreferences BackgroundContents::GetRendererPrefs( 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile) const { 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RendererPreferences preferences; 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch renderer_preferences_util::UpdateFromSystemSettings(&preferences, profile); 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return preferences; 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWebPreferences BackgroundContents::GetWebkitPrefs() { 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(rafaelw): Consider enabling the webkit_prefs.dom_paste_enabled for 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // apps. 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile = render_view_host_->process()->profile(); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return RenderViewHostDelegateHelper::GetWebkitPrefs(profile, 208dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false); // is_web_ui 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid BackgroundContents::ProcessWebUIMessage( 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ExtensionHostMsg_DomMessage_Params& params) { 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(rafaelw): It may make sense for extensions to be able to open 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // BackgroundContents to chrome-extension://<id> pages. Consider implementing. 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen render_view_host_->Send(new ExtensionMsg_Response( 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen render_view_host_->routing_id(), params.request_id, false, 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string(), "Access to extension API denied.")); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::CreateNewWindow( 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int route_id, 22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ViewHostMsg_CreateWindow_Params& params) { 2233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_view_helper_.CreateNewWindow( 2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick route_id, 2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick render_view_host_->process()->profile(), 2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick render_view_host_->site_instance(), 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ChromeWebUIFactory::GetInstance()->GetWebUIType( 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen render_view_host_->process()->profile(), url_), 2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick this, 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen params.window_container_type, 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen params.frame_name); 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::CreateNewWidget(int route_id, 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebKit::WebPopupType popup_type) { 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid BackgroundContents::CreateNewFullscreenWidget(int route_id) { 2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NOTREACHED(); 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::ShowCreatedWindow(int route_id, 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos, 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool user_gesture) { 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* contents = delegate_view_helper_.GetCreatedWindow(route_id); 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (contents) 2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_->AddTabContents(contents, disposition, initial_pos, user_gesture); 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundContents::ShowCreatedWidget(int route_id, 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos) { 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTIMPLEMENTED(); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundContents::ShowCreatedFullscreenWidget(int route_id) { 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NOTIMPLEMENTED(); 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// static 2624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochBackgroundContents* 2634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochBackgroundContents::GetBackgroundContentsByID(int render_process_id, 2644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int render_view_id) { 2654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch RenderViewHost* render_view_host = 2664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch RenderViewHost::FromID(render_process_id, render_view_id); 2674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (!render_view_host) 2684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return NULL; 2694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return render_view_host->delegate()->GetAsBackgroundContents(); 2714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 272