1 // Copyright 2013 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 CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_ 6 #define CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_ 7 8 #include <map> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/lazy_instance.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "chrome/browser/extensions/chrome_notification_observer.h" 15 #include "extensions/browser/extensions_browser_client.h" 16 17 namespace base { 18 class CommandLine; 19 } 20 21 namespace content { 22 class BrowserContext; 23 } 24 25 namespace extensions { 26 27 class ChromeComponentExtensionResourceManager; 28 class ChromeExtensionsAPIClient; 29 class ContentSettingsPrefsObserver; 30 31 // Implementation of extensions::BrowserClient for Chrome, which includes 32 // knowledge of Profiles, BrowserContexts and incognito. 33 // 34 // NOTE: Methods that do not require knowledge of browser concepts should be 35 // implemented in ChromeExtensionsClient even if they are only used in the 36 // browser process (see chrome/common/extensions/chrome_extensions_client.h). 37 class ChromeExtensionsBrowserClient : public ExtensionsBrowserClient { 38 public: 39 ChromeExtensionsBrowserClient(); 40 virtual ~ChromeExtensionsBrowserClient(); 41 42 // BrowserClient overrides: 43 virtual bool IsShuttingDown() OVERRIDE; 44 virtual bool AreExtensionsDisabled(const base::CommandLine& command_line, 45 content::BrowserContext* context) OVERRIDE; 46 virtual bool IsValidContext(content::BrowserContext* context) OVERRIDE; 47 virtual bool IsSameContext(content::BrowserContext* first, 48 content::BrowserContext* second) OVERRIDE; 49 virtual bool HasOffTheRecordContext( 50 content::BrowserContext* context) OVERRIDE; 51 virtual content::BrowserContext* GetOffTheRecordContext( 52 content::BrowserContext* context) OVERRIDE; 53 virtual content::BrowserContext* GetOriginalContext( 54 content::BrowserContext* context) OVERRIDE; 55 virtual bool IsGuestSession(content::BrowserContext* context) const OVERRIDE; 56 virtual bool IsExtensionIncognitoEnabled( 57 const std::string& extension_id, 58 content::BrowserContext* context) const OVERRIDE; 59 virtual bool CanExtensionCrossIncognito( 60 const extensions::Extension* extension, 61 content::BrowserContext* context) const OVERRIDE; 62 virtual bool IsWebViewRequest(net::URLRequest* request) const OVERRIDE; 63 virtual net::URLRequestJob* MaybeCreateResourceBundleRequestJob( 64 net::URLRequest* request, 65 net::NetworkDelegate* network_delegate, 66 const base::FilePath& directory_path, 67 const std::string& content_security_policy, 68 bool send_cors_header) OVERRIDE; 69 virtual bool AllowCrossRendererResourceLoad(net::URLRequest* request, 70 bool is_incognito, 71 const Extension* extension, 72 InfoMap* extension_info_map) 73 OVERRIDE; 74 virtual PrefService* GetPrefServiceForContext( 75 content::BrowserContext* context) OVERRIDE; 76 virtual void GetEarlyExtensionPrefsObservers( 77 content::BrowserContext* context, 78 std::vector<ExtensionPrefsObserver*>* observers) const OVERRIDE; 79 virtual bool DeferLoadingBackgroundHosts( 80 content::BrowserContext* context) const OVERRIDE; 81 virtual bool IsBackgroundPageAllowed( 82 content::BrowserContext* context) const OVERRIDE; 83 virtual scoped_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() 84 OVERRIDE; 85 virtual bool DidVersionUpdate(content::BrowserContext* context) OVERRIDE; 86 virtual void PermitExternalProtocolHandler() OVERRIDE; 87 virtual scoped_ptr<AppSorting> CreateAppSorting() OVERRIDE; 88 virtual bool IsRunningInForcedAppMode() OVERRIDE; 89 virtual ApiActivityMonitor* GetApiActivityMonitor( 90 content::BrowserContext* context) OVERRIDE; 91 virtual ExtensionSystemProvider* GetExtensionSystemFactory() OVERRIDE; 92 virtual void RegisterExtensionFunctions( 93 ExtensionFunctionRegistry* registry) const OVERRIDE; 94 virtual scoped_ptr<extensions::RuntimeAPIDelegate> CreateRuntimeAPIDelegate( 95 content::BrowserContext* context) const OVERRIDE; 96 virtual ComponentExtensionResourceManager* 97 GetComponentExtensionResourceManager() OVERRIDE; 98 99 private: 100 friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsBrowserClient>; 101 102 // Observer for Chrome-specific notifications. 103 ChromeNotificationObserver notification_observer_; 104 105 #if defined(ENABLE_EXTENSIONS) 106 // Client for API implementations. 107 scoped_ptr<ChromeExtensionsAPIClient> api_client_; 108 #endif 109 110 scoped_ptr<ChromeComponentExtensionResourceManager> resource_manager_; 111 112 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsBrowserClient); 113 }; 114 115 } // namespace extensions 116 117 #endif // CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_ 118