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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_
6 #define CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_
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"
25 namespace extensions {
27 class ChromeComponentExtensionResourceManager;
28 class ChromeExtensionsAPIClient;
29 class ChromeProcessManagerDelegate;
30 class ContentSettingsPrefsObserver;
32 // Implementation of extensions::BrowserClient for Chrome, which includes
33 // knowledge of Profiles, BrowserContexts and incognito.
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).
38 class ChromeExtensionsBrowserClient : public ExtensionsBrowserClient {
40 ChromeExtensionsBrowserClient();
41 virtual ~ChromeExtensionsBrowserClient();
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 bool IsWebViewRequest(net::URLRequest* request) const OVERRIDE;
64 virtual net::URLRequestJob* MaybeCreateResourceBundleRequestJob(
65 net::URLRequest* request,
66 net::NetworkDelegate* network_delegate,
67 const base::FilePath& directory_path,
68 const std::string& content_security_policy,
69 bool send_cors_header) OVERRIDE;
70 virtual bool AllowCrossRendererResourceLoad(net::URLRequest* request,
72 const Extension* extension,
73 InfoMap* extension_info_map)
75 virtual PrefService* GetPrefServiceForContext(
76 content::BrowserContext* context) OVERRIDE;
77 virtual void GetEarlyExtensionPrefsObservers(
78 content::BrowserContext* context,
79 std::vector<ExtensionPrefsObserver*>* observers) const OVERRIDE;
80 virtual ProcessManagerDelegate* GetProcessManagerDelegate() const OVERRIDE;
81 virtual scoped_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate()
83 virtual bool DidVersionUpdate(content::BrowserContext* context) OVERRIDE;
84 virtual void PermitExternalProtocolHandler() OVERRIDE;
85 virtual scoped_ptr<AppSorting> CreateAppSorting() OVERRIDE;
86 virtual bool IsRunningInForcedAppMode() OVERRIDE;
87 virtual ApiActivityMonitor* GetApiActivityMonitor(
88 content::BrowserContext* context) OVERRIDE;
89 virtual ExtensionSystemProvider* GetExtensionSystemFactory() OVERRIDE;
90 virtual void RegisterExtensionFunctions(
91 ExtensionFunctionRegistry* registry) const OVERRIDE;
92 virtual scoped_ptr<extensions::RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
93 content::BrowserContext* context) const OVERRIDE;
94 virtual ComponentExtensionResourceManager*
95 GetComponentExtensionResourceManager() OVERRIDE;
96 virtual net::NetLog* GetNetLog() OVERRIDE;
99 friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsBrowserClient>;
101 // Observer for Chrome-specific notifications.
102 ChromeNotificationObserver notification_observer_;
104 // Support for ProcessManager.
105 scoped_ptr<ChromeProcessManagerDelegate> process_manager_delegate_;
107 // Client for API implementations.
108 scoped_ptr<ChromeExtensionsAPIClient> api_client_;
110 scoped_ptr<ChromeComponentExtensionResourceManager> resource_manager_;
112 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsBrowserClient);
115 } // namespace extensions
117 #endif // CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_