|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef EXTENSIONS_SHELL_BROWSER_SHELL_EXTENSIONS_BROWSER_CLIENT_H_ | 
|  | #define EXTENSIONS_SHELL_BROWSER_SHELL_EXTENSIONS_BROWSER_CLIENT_H_ | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | #include "base/compiler_specific.h" | 
|  | #include "base/macros.h" | 
|  | #include "build/build_config.h" | 
|  | #include "extensions/browser/extensions_browser_client.h" | 
|  |  | 
|  | class PrefService; | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | class ExtensionsAPIClient; | 
|  |  | 
|  | // An ExtensionsBrowserClient that supports a single content::BrowserContent | 
|  | // with no related incognito context. | 
|  | class ShellExtensionsBrowserClient : public ExtensionsBrowserClient { | 
|  | public: | 
|  | // |context| is the single BrowserContext used for IsValidContext() below. | 
|  | // |pref_service| is used for GetPrefServiceForContext() below. | 
|  | ShellExtensionsBrowserClient(content::BrowserContext* context, | 
|  | PrefService* pref_service); | 
|  | ~ShellExtensionsBrowserClient() override; | 
|  |  | 
|  | // ExtensionsBrowserClient overrides: | 
|  | bool IsShuttingDown() override; | 
|  | bool AreExtensionsDisabled(const base::CommandLine& command_line, | 
|  | content::BrowserContext* context) override; | 
|  | bool IsValidContext(content::BrowserContext* context) override; | 
|  | bool IsSameContext(content::BrowserContext* first, | 
|  | content::BrowserContext* second) override; | 
|  | bool HasOffTheRecordContext(content::BrowserContext* context) override; | 
|  | content::BrowserContext* GetOffTheRecordContext( | 
|  | content::BrowserContext* context) override; | 
|  | content::BrowserContext* GetOriginalContext( | 
|  | content::BrowserContext* context) override; | 
|  | #if defined(OS_CHROMEOS) | 
|  | std::string GetUserIdHashFromContext( | 
|  | content::BrowserContext* context) override; | 
|  | #endif | 
|  | bool IsGuestSession(content::BrowserContext* context) const override; | 
|  | bool IsExtensionIncognitoEnabled( | 
|  | const std::string& extension_id, | 
|  | content::BrowserContext* context) const override; | 
|  | bool CanExtensionCrossIncognito( | 
|  | const Extension* extension, | 
|  | content::BrowserContext* context) const override; | 
|  | net::URLRequestJob* MaybeCreateResourceBundleRequestJob( | 
|  | net::URLRequest* request, | 
|  | net::NetworkDelegate* network_delegate, | 
|  | const base::FilePath& directory_path, | 
|  | const std::string& content_security_policy, | 
|  | bool send_cors_header) override; | 
|  | bool AllowCrossRendererResourceLoad(net::URLRequest* request, | 
|  | bool is_incognito, | 
|  | const Extension* extension, | 
|  | InfoMap* extension_info_map) override; | 
|  | PrefService* GetPrefServiceForContext( | 
|  | content::BrowserContext* context) override; | 
|  | void GetEarlyExtensionPrefsObservers( | 
|  | content::BrowserContext* context, | 
|  | std::vector<ExtensionPrefsObserver*>* observers) const override; | 
|  | ProcessManagerDelegate* GetProcessManagerDelegate() const override; | 
|  | std::unique_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() override; | 
|  | bool DidVersionUpdate(content::BrowserContext* context) override; | 
|  | void PermitExternalProtocolHandler() override; | 
|  | bool IsRunningInForcedAppMode() override; | 
|  | bool IsLoggedInAsPublicAccount() override; | 
|  | ExtensionSystemProvider* GetExtensionSystemFactory() override; | 
|  | void RegisterExtensionFunctions( | 
|  | ExtensionFunctionRegistry* registry) const override; | 
|  | void RegisterMojoServices(content::RenderFrameHost* render_frame_host, | 
|  | const Extension* extension) const override; | 
|  | std::unique_ptr<RuntimeAPIDelegate> CreateRuntimeAPIDelegate( | 
|  | content::BrowserContext* context) const override; | 
|  | const ComponentExtensionResourceManager* | 
|  | GetComponentExtensionResourceManager() override; | 
|  | void BroadcastEventToRenderers( | 
|  | events::HistogramValue histogram_value, | 
|  | const std::string& event_name, | 
|  | std::unique_ptr<base::ListValue> args) override; | 
|  | net::NetLog* GetNetLog() override; | 
|  | ExtensionCache* GetExtensionCache() override; | 
|  | bool IsBackgroundUpdateAllowed() override; | 
|  | bool IsMinBrowserVersionSupported(const std::string& min_version) override; | 
|  | ExtensionWebContentsObserver* GetExtensionWebContentsObserver( | 
|  | content::WebContents* web_contents) override; | 
|  |  | 
|  | // Sets the API client. | 
|  | void SetAPIClientForTest(ExtensionsAPIClient* api_client); | 
|  |  | 
|  | private: | 
|  | // The single BrowserContext for app_shell. Not owned. | 
|  | content::BrowserContext* browser_context_; | 
|  |  | 
|  | // The PrefService for |browser_context_|. Not owned. | 
|  | PrefService* pref_service_; | 
|  |  | 
|  | // Support for extension APIs. | 
|  | std::unique_ptr<ExtensionsAPIClient> api_client_; | 
|  |  | 
|  | // The extension cache used for download and installation. | 
|  | std::unique_ptr<ExtensionCache> extension_cache_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(ShellExtensionsBrowserClient); | 
|  | }; | 
|  |  | 
|  | }  // namespace extensions | 
|  |  | 
|  | #endif  // EXTENSIONS_SHELL_BROWSER_SHELL_EXTENSIONS_BROWSER_CLIENT_H_ |