Home | History | Annotate | Download | only in extensions
      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