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 ContentSettingsPrefsObserver;
31 // Implementation of extensions::BrowserClient for Chrome, which includes
32 // knowledge of Profiles, BrowserContexts and incognito.
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 {
39 ChromeExtensionsBrowserClient();
40 virtual ~ChromeExtensionsBrowserClient();
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,
71 const Extension* extension,
72 InfoMap* extension_info_map)
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()
85 virtual bool DidVersionUpdate(content::BrowserContext* context) OVERRIDE;
86 virtual scoped_ptr<AppSorting> CreateAppSorting() OVERRIDE;
87 virtual bool IsRunningInForcedAppMode() OVERRIDE;
88 virtual ApiActivityMonitor* GetApiActivityMonitor(
89 content::BrowserContext* context) OVERRIDE;
90 virtual ExtensionSystemProvider* GetExtensionSystemFactory() OVERRIDE;
91 virtual void RegisterExtensionFunctions(
92 ExtensionFunctionRegistry* registry) const OVERRIDE;
93 virtual scoped_ptr<extensions::RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
94 content::BrowserContext* context) const OVERRIDE;
95 virtual ComponentExtensionResourceManager*
96 GetComponentExtensionResourceManager() OVERRIDE;
99 friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsBrowserClient>;
101 // Observer for Chrome-specific notifications.
102 ChromeNotificationObserver notification_observer_;
104 #if defined(ENABLE_EXTENSIONS)
105 // Client for API implementations.
106 scoped_ptr<ChromeExtensionsAPIClient> api_client_;
109 scoped_ptr<ChromeComponentExtensionResourceManager> resource_manager_;
111 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsBrowserClient);
114 } // namespace extensions
116 #endif // CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSIONS_BROWSER_CLIENT_H_