Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / extensions / browser / renderer_startup_helper.h
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   ~RendererStartupHelper() override;
33
34   // content::NotificationObserver overrides:
35   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   ~RendererStartupHelperFactory() override;
61
62   // BrowserContextKeyedServiceFactory implementation:
63   KeyedService* BuildServiceInstanceFor(
64       content::BrowserContext* profile) const override;
65   content::BrowserContext* GetBrowserContextToUse(
66       content::BrowserContext* context) const override;
67   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_