1 // Copyright 2014 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.
5 #include "extensions/browser/renderer_startup_helper.h"
7 #include "base/values.h"
8 #include "components/keyed_service/content/browser_context_dependency_manager.h"
9 #include "content/public/browser/notification_service.h"
10 #include "content/public/browser/notification_types.h"
11 #include "content/public/browser/render_process_host.h"
12 #include "extensions/browser/extension_function_dispatcher.h"
13 #include "extensions/browser/extension_registry.h"
14 #include "extensions/browser/extensions_browser_client.h"
15 #include "extensions/common/extension_messages.h"
16 #include "extensions/common/extension_set.h"
17 #include "extensions/common/extensions_client.h"
18 #include "ui/base/webui/web_ui_util.h"
20 using content::BrowserContext
;
22 namespace extensions
{
24 RendererStartupHelper::RendererStartupHelper(BrowserContext
* browser_context
)
25 : browser_context_(browser_context
) {
26 DCHECK(browser_context
);
27 registrar_
.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CREATED
,
28 content::NotificationService::AllBrowserContextsAndSources());
31 RendererStartupHelper::~RendererStartupHelper() {}
33 void RendererStartupHelper::Observe(
35 const content::NotificationSource
& source
,
36 const content::NotificationDetails
& details
) {
38 case content::NOTIFICATION_RENDERER_PROCESS_CREATED
: {
39 content::RenderProcessHost
* process
=
40 content::Source
<content::RenderProcessHost
>(source
).ptr();
41 if (!ExtensionsBrowserClient::Get()->IsSameContext(
42 browser_context_
, process
->GetBrowserContext()))
45 // Platform apps need to know the system font.
46 scoped_ptr
<base::DictionaryValue
> fonts(new base::DictionaryValue
);
47 webui::SetFontAndTextDirection(fonts
.get());
48 std::string font_family
, font_size
;
49 fonts
->GetString("fontfamily", &font_family
);
50 fonts
->GetString("fontsize", &font_size
);
51 process
->Send(new ExtensionMsg_SetSystemFont(
52 font_family
, font_size
));
54 // Valid extension function names, used to setup bindings in renderer.
55 std::vector
<std::string
> function_names
;
56 ExtensionFunctionDispatcher::GetAllFunctionNames(&function_names
);
57 process
->Send(new ExtensionMsg_SetFunctionNames(function_names
));
59 // Scripting whitelist. This is modified by tests and must be communicated
61 process
->Send(new ExtensionMsg_SetScriptingWhitelist(
62 extensions::ExtensionsClient::Get()->GetScriptingWhitelist()));
65 std::vector
<ExtensionMsg_Loaded_Params
> loaded_extensions
;
66 const ExtensionSet
& extensions
=
67 ExtensionRegistry::Get(browser_context_
)->enabled_extensions();
68 for (ExtensionSet::const_iterator iter
= extensions
.begin();
69 iter
!= extensions
.end(); ++iter
) {
70 // Renderers don't need to know about themes.
71 if (!(*iter
)->is_theme())
72 loaded_extensions
.push_back(ExtensionMsg_Loaded_Params(iter
->get()));
74 process
->Send(new ExtensionMsg_Loaded(loaded_extensions
));
83 //////////////////////////////////////////////////////////////////////////////
86 RendererStartupHelper
* RendererStartupHelperFactory::GetForBrowserContext(
87 BrowserContext
* context
) {
88 return static_cast<RendererStartupHelper
*>(
89 GetInstance()->GetServiceForBrowserContext(context
, true));
93 RendererStartupHelperFactory
* RendererStartupHelperFactory::GetInstance() {
94 return Singleton
<RendererStartupHelperFactory
>::get();
97 RendererStartupHelperFactory::RendererStartupHelperFactory()
98 : BrowserContextKeyedServiceFactory(
99 "RendererStartupHelper",
100 BrowserContextDependencyManager::GetInstance()) {
101 // No dependencies on other services.
104 RendererStartupHelperFactory::~RendererStartupHelperFactory() {}
106 KeyedService
* RendererStartupHelperFactory::BuildServiceInstanceFor(
107 content::BrowserContext
* context
) const {
108 return new RendererStartupHelper(context
);
111 BrowserContext
* RendererStartupHelperFactory::GetBrowserContextToUse(
112 BrowserContext
* context
) const {
113 // Redirected in incognito.
114 return ExtensionsBrowserClient::Get()->GetOriginalContext(context
);
117 bool RendererStartupHelperFactory::ServiceIsCreatedWithBrowserContext() const {
121 } // namespace extensions