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_COMMON_EXTENSIONS_CHROME_EXTENSIONS_CLIENT_H_ 6 #define CHROME_COMMON_EXTENSIONS_CHROME_EXTENSIONS_CLIENT_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "base/lazy_instance.h" 11 #include "chrome/common/extensions/permissions/chrome_api_permissions.h" 12 #include "chrome/common/extensions/permissions/chrome_permission_message_provider.h" 13 #include "extensions/common/extensions_client.h" 14 #include "extensions/common/permissions/extensions_api_permissions.h" 15 16 namespace extensions { 17 18 // The implementation of ExtensionsClient for Chrome, which encapsulates the 19 // global knowledge of features, permissions, and manifest fields. 20 class ChromeExtensionsClient : public ExtensionsClient { 21 public: 22 ChromeExtensionsClient(); 23 virtual ~ChromeExtensionsClient(); 24 25 virtual void Initialize() OVERRIDE; 26 27 virtual const PermissionMessageProvider& GetPermissionMessageProvider() const 28 OVERRIDE; 29 virtual scoped_ptr<FeatureProvider> CreateFeatureProvider( 30 const std::string& name) const OVERRIDE; 31 virtual scoped_ptr<JSONFeatureProviderSource> CreateFeatureProviderSource( 32 const std::string& name) const OVERRIDE; 33 virtual void FilterHostPermissions( 34 const URLPatternSet& hosts, 35 URLPatternSet* new_hosts, 36 std::set<PermissionMessage>* messages) const OVERRIDE; 37 virtual void SetScriptingWhitelist(const ScriptingWhitelist& whitelist) 38 OVERRIDE; 39 virtual const ScriptingWhitelist& GetScriptingWhitelist() const OVERRIDE; 40 virtual URLPatternSet GetPermittedChromeSchemeHosts( 41 const Extension* extension, 42 const APIPermissionSet& api_permissions) const OVERRIDE; 43 virtual bool IsScriptableURL(const GURL& url, std::string* error) const 44 OVERRIDE; 45 virtual bool IsAPISchemaGenerated(const std::string& name) const OVERRIDE; 46 virtual base::StringPiece GetAPISchema(const std::string& name) const 47 OVERRIDE; 48 virtual void RegisterAPISchemaResources(ExtensionAPI* api) const OVERRIDE; 49 virtual bool ShouldSuppressFatalErrors() const OVERRIDE; 50 51 // Get the LazyInstance for ChromeExtensionsClient. 52 static ChromeExtensionsClient* GetInstance(); 53 54 private: 55 const ChromeAPIPermissions chrome_api_permissions_; 56 const ExtensionsAPIPermissions extensions_api_permissions_; 57 const ChromePermissionMessageProvider permission_message_provider_; 58 59 // A whitelist of extensions that can script anywhere. Do not add to this 60 // list (except in tests) without consulting the Extensions team first. 61 // Note: Component extensions have this right implicitly and do not need to be 62 // added to this list. 63 ScriptingWhitelist scripting_whitelist_; 64 65 friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsClient>; 66 67 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsClient); 68 }; 69 70 } // namespace extensions 71 72 #endif // CHROME_COMMON_EXTENSIONS_CHROME_EXTENSIONS_CLIENT_H_ 73