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