1// Copyright 2014 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 EXTENSIONS_BROWSER_API_EXTENSIONS_API_CLIENT_H_
6#define EXTENSIONS_BROWSER_API_EXTENSIONS_API_CLIENT_H_
7
8#include <map>
9
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "extensions/browser/api/declarative_content/content_rules_registry.h"
13#include "extensions/browser/api/storage/settings_namespace.h"
14
15class GURL;
16
17template <class T>
18class ObserverListThreadSafe;
19
20namespace content {
21class BrowserContext;
22}
23
24namespace extensions {
25
26class AppViewGuestDelegate;
27class ContentRulesRegistry;
28class ExtensionOptionsGuest;
29class ExtensionOptionsGuestDelegate;
30class MimeHandlerViewGuest;
31class MimeHandlerViewGuestDelegate;
32class WebViewGuest;
33class WebViewGuestDelegate;
34class WebViewPermissionHelper;
35class WebViewPermissionHelperDelegate;
36class WebRequestEventRouterDelegate;
37class RulesCacheDelegate;
38class SettingsObserver;
39class SettingsStorageFactory;
40class ValueStoreCache;
41
42// Allows the embedder of the extensions module to customize its support for
43// API features. The embedder must create a single instance in the browser
44// process. Provides a default implementation that does nothing.
45class ExtensionsAPIClient {
46 public:
47  // Construction sets the single instance.
48  ExtensionsAPIClient();
49
50  // Destruction clears the single instance.
51  virtual ~ExtensionsAPIClient();
52
53  // Returns the single instance of |this|.
54  static ExtensionsAPIClient* Get();
55
56  // Storage API support.
57
58  // Add any additional value store caches (e.g. for chrome.storage.managed)
59  // to |caches|. By default adds nothing.
60  virtual void AddAdditionalValueStoreCaches(
61      content::BrowserContext* context,
62      const scoped_refptr<SettingsStorageFactory>& factory,
63      const scoped_refptr<ObserverListThreadSafe<SettingsObserver> >& observers,
64      std::map<settings_namespace::Namespace, ValueStoreCache*>* caches);
65
66  // Creates the AppViewGuestDelegate.
67  virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const;
68
69  // Returns a delegate for ExtensionOptionsGuest. The caller owns the returned
70  // ExtensionOptionsGuestDelegate.
71  virtual ExtensionOptionsGuestDelegate* CreateExtensionOptionsGuestDelegate(
72      ExtensionOptionsGuest* guest) const;
73
74  // Creates a delegate for MimeHandlerViewGuest.
75  virtual scoped_ptr<MimeHandlerViewGuestDelegate>
76      CreateMimeHandlerViewGuestDelegate(MimeHandlerViewGuest* guest) const;
77
78  // Returns a delegate for some of WebViewGuest's behavior. The caller owns the
79  // returned WebViewGuestDelegate.
80  virtual WebViewGuestDelegate* CreateWebViewGuestDelegate (
81      WebViewGuest* web_view_guest) const;
82
83  // Returns a delegate for some of WebViewPermissionHelper's behavior. The
84  // caller owns the returned WebViewPermissionHelperDelegate.
85  virtual WebViewPermissionHelperDelegate*
86      CreateWebViewPermissionHelperDelegate (
87          WebViewPermissionHelper* web_view_permission_helper) const;
88
89  // TODO(wjmaclean): Remove this as soon as rules_registry_service.* moves to
90  // extensions/browser/api/declarative/.
91  virtual scoped_refptr<RulesRegistry> GetRulesRegistry(
92      content::BrowserContext* browser_context,
93      const RulesRegistry::WebViewKey& webview_key,
94      const std::string& event_name);
95
96  // Creates a delegate for WebRequestEventRouter.
97  virtual WebRequestEventRouterDelegate* CreateWebRequestEventRouterDelegate()
98      const;
99
100  // TODO(wjmaclean): Remove this when (if) ContentRulesRegistry code moves
101  // to extensions/browser/api.
102  virtual scoped_refptr<ContentRulesRegistry> CreateContentRulesRegistry(
103      content::BrowserContext* browser_context,
104      RulesCacheDelegate* cache_delegate) const;
105
106  // NOTE: If this interface gains too many methods (perhaps more than 20) it
107  // should be split into one interface per API.
108};
109
110}  // namespace extensions
111
112#endif  // EXTENSIONS_BROWSER_API_EXTENSIONS_API_CLIENT_H_
113