• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef EXTENSIONS_BROWSER_RENDERER_STARTUP_HELPER_H_
6 #define EXTENSIONS_BROWSER_RENDERER_STARTUP_HELPER_H_
7 
8 #include "base/compiler_specific.h"
9 #include "base/memory/singleton.h"
10 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
11 #include "components/keyed_service/core/keyed_service.h"
12 #include "content/public/browser/notification_observer.h"
13 #include "content/public/browser/notification_registrar.h"
14 
15 namespace content {
16 class BrowserContext;
17 class RenderProcessHost;
18 }
19 
20 namespace extensions {
21 
22 // Informs renderers about extensions-related data (loaded extensions, available
23 // functions, etc.) when they start. Sends this information to both extension
24 // and non-extension renderers, as the non-extension renderers may have content
25 // scripts. Lives on the UI thread. Shared between incognito and non-incognito
26 // browser contexts.
27 class RendererStartupHelper : public KeyedService,
28                               public content::NotificationObserver {
29  public:
30   // This class sends messages to all renderers started for |browser_context|.
31   explicit RendererStartupHelper(content::BrowserContext* browser_context);
32   virtual ~RendererStartupHelper();
33 
34   // content::NotificationObserver overrides:
35   virtual void Observe(int type,
36                        const content::NotificationSource& source,
37                        const content::NotificationDetails& details) OVERRIDE;
38 
39  private:
40   content::BrowserContext* browser_context_;  // Not owned.
41 
42   content::NotificationRegistrar registrar_;
43 
44   DISALLOW_COPY_AND_ASSIGN(RendererStartupHelper);
45 };
46 
47 // Factory for RendererStartupHelpers. Declared here because this header is
48 // rarely included and it's probably cheaper to put it here than to make the
49 // compiler generate another object file.
50 class RendererStartupHelperFactory : public BrowserContextKeyedServiceFactory {
51  public:
52   static RendererStartupHelper* GetForBrowserContext(
53       content::BrowserContext* context);
54   static RendererStartupHelperFactory* GetInstance();
55 
56  private:
57   friend struct DefaultSingletonTraits<RendererStartupHelperFactory>;
58 
59   RendererStartupHelperFactory();
60   virtual ~RendererStartupHelperFactory();
61 
62   // BrowserContextKeyedServiceFactory implementation:
63   virtual KeyedService* BuildServiceInstanceFor(
64       content::BrowserContext* profile) const OVERRIDE;
65   virtual content::BrowserContext* GetBrowserContextToUse(
66       content::BrowserContext* context) const OVERRIDE;
67   virtual bool ServiceIsCreatedWithBrowserContext() const OVERRIDE;
68 
69   DISALLOW_COPY_AND_ASSIGN(RendererStartupHelperFactory);
70 };
71 
72 }  // namespace extensions
73 
74 #endif  // EXTENSIONS_BROWSER_RENDERER_STARTUP_HELPER_H_
75