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 17namespace base { 18class CommandLine; 19} 20 21namespace content { 22class BrowserContext; 23} 24 25namespace extensions { 26 27class ChromeComponentExtensionResourceManager; 28class ChromeExtensionsAPIClient; 29class ChromeProcessManagerDelegate; 30class ContentSettingsPrefsObserver; 31 32// Implementation of extensions::BrowserClient for Chrome, which includes 33// knowledge of Profiles, BrowserContexts and incognito. 34// 35// NOTE: Methods that do not require knowledge of browser concepts should be 36// implemented in ChromeExtensionsClient even if they are only used in the 37// browser process (see chrome/common/extensions/chrome_extensions_client.h). 38class ChromeExtensionsBrowserClient : public ExtensionsBrowserClient { 39 public: 40 ChromeExtensionsBrowserClient(); 41 virtual ~ChromeExtensionsBrowserClient(); 42 43 // BrowserClient overrides: 44 virtual bool IsShuttingDown() OVERRIDE; 45 virtual bool AreExtensionsDisabled(const base::CommandLine& command_line, 46 content::BrowserContext* context) OVERRIDE; 47 virtual bool IsValidContext(content::BrowserContext* context) OVERRIDE; 48 virtual bool IsSameContext(content::BrowserContext* first, 49 content::BrowserContext* second) OVERRIDE; 50 virtual bool HasOffTheRecordContext( 51 content::BrowserContext* context) OVERRIDE; 52 virtual content::BrowserContext* GetOffTheRecordContext( 53 content::BrowserContext* context) OVERRIDE; 54 virtual content::BrowserContext* GetOriginalContext( 55 content::BrowserContext* context) OVERRIDE; 56 virtual bool IsGuestSession(content::BrowserContext* context) const OVERRIDE; 57 virtual bool IsExtensionIncognitoEnabled( 58 const std::string& extension_id, 59 content::BrowserContext* context) const OVERRIDE; 60 virtual bool CanExtensionCrossIncognito( 61 const extensions::Extension* extension, 62 content::BrowserContext* context) 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 ProcessManagerDelegate* GetProcessManagerDelegate() const OVERRIDE; 80 virtual scoped_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() 81 OVERRIDE; 82 virtual bool DidVersionUpdate(content::BrowserContext* context) OVERRIDE; 83 virtual void PermitExternalProtocolHandler() OVERRIDE; 84 virtual scoped_ptr<AppSorting> CreateAppSorting() OVERRIDE; 85 virtual bool IsRunningInForcedAppMode() OVERRIDE; 86 virtual ApiActivityMonitor* GetApiActivityMonitor( 87 content::BrowserContext* context) OVERRIDE; 88 virtual ExtensionSystemProvider* GetExtensionSystemFactory() OVERRIDE; 89 virtual void RegisterExtensionFunctions( 90 ExtensionFunctionRegistry* registry) const OVERRIDE; 91 virtual scoped_ptr<extensions::RuntimeAPIDelegate> CreateRuntimeAPIDelegate( 92 content::BrowserContext* context) const OVERRIDE; 93 virtual ComponentExtensionResourceManager* 94 GetComponentExtensionResourceManager() OVERRIDE; 95 virtual void BroadcastEventToRenderers( 96 const std::string& event_name, 97 scoped_ptr<base::ListValue> args) OVERRIDE; 98 virtual net::NetLog* GetNetLog() OVERRIDE; 99 100 private: 101 friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsBrowserClient>; 102 103 // Observer for Chrome-specific notifications. 104 ChromeNotificationObserver notification_observer_; 105 106 // Support for ProcessManager. 107 scoped_ptr<ChromeProcessManagerDelegate> process_manager_delegate_; 108 109 // Client for API implementations. 110 scoped_ptr<ChromeExtensionsAPIClient> api_client_; 111 112 scoped_ptr<ChromeComponentExtensionResourceManager> resource_manager_; 113 114 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsBrowserClient); 115}; 116 117} // namespace extensions 118 119#endif // CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_ 120