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