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 20namespace chrome { 21 22void 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 29void 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 45void 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 58content::WebUIFactory* ChromeContentBrowserClient::GetWebUIFactory() { 59 return ChromeWebUIFactory::GetInstance(); 60} 61 62GURL 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