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