1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chrome_content_browser_client.h" 6 7 #include "chrome/browser/debugger/devtools_handler.h" 8 #include "chrome/browser/desktop_notification_handler.h" 9 #include "chrome/browser/extensions/extension_message_handler.h" 10 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/printing/printing_message_filter.h" 12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" 14 #include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" 15 #include "chrome/browser/spellcheck_message_filter.h" 16 #include "chrome/browser/ui/webui/chrome_web_ui_factory.h" 17 #include "content/browser/renderer_host/browser_render_process_host.h" 18 #include "content/browser/renderer_host/render_view_host.h" 19 20 namespace chrome { 21 22 void ChromeContentBrowserClient::RenderViewHostCreated( 23 RenderViewHost* render_view_host) { 24 new DesktopNotificationHandler(render_view_host); 25 new DevToolsHandler(render_view_host); 26 new ExtensionMessageHandler(render_view_host); 27 } 28 29 void ChromeContentBrowserClient::PreCreateRenderView( 30 RenderViewHost* render_view_host, 31 Profile* profile, 32 const GURL& url) { 33 // Tell the RenderViewHost whether it will be used for an extension process. 34 ExtensionService* service = profile->GetExtensionService(); 35 if (service) { 36 bool is_extension_process = service->ExtensionBindingsAllowed(url); 37 render_view_host->set_is_extension_process(is_extension_process); 38 39 const Extension* installed_app = service->GetInstalledApp(url); 40 static_cast<BrowserRenderProcessHost*>(render_view_host->process())-> 41 set_installed_app(installed_app); 42 } 43 } 44 45 void ChromeContentBrowserClient::BrowserRenderProcessHostCreated( 46 BrowserRenderProcessHost* host) { 47 host->channel()->AddFilter(new ChromeRenderMessageFilter( 48 host->id(), 49 host->profile(), 50 host->profile()->GetRequestContextForPossibleApp( 51 host->installed_app()))); 52 host->channel()->AddFilter(new PrintingMessageFilter()); 53 host->channel()->AddFilter( 54 new SearchProviderInstallStateMessageFilter(host->id(), host->profile())); 55 host->channel()->AddFilter(new SpellCheckMessageFilter()); 56 } 57 58 content::WebUIFactory* ChromeContentBrowserClient::GetWebUIFactory() { 59 return ChromeWebUIFactory::GetInstance(); 60 } 61 62 GURL ChromeContentBrowserClient::GetEffectiveURL(Profile* profile, 63 const GURL& url) { 64 // Get the effective URL for the given actual URL. If the URL is part of an 65 // installed app, the effective URL is an extension URL with the ID of that 66 // extension as the host. This has the effect of grouping apps together in 67 // a common SiteInstance. 68 if (!profile || !profile->GetExtensionService()) 69 return url; 70 71 const Extension* extension = 72 profile->GetExtensionService()->GetExtensionByWebExtent(url); 73 if (!extension) 74 return url; 75 76 // If the URL is part of an extension's web extent, convert it to an 77 // extension URL. 78 return extension->GetResourceURL(url.path()); 79 } 80 81 } // namespace chrome 82