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 15 namespace extensions { 16 17 // The implementation of ExtensionsClient for Chrome, which encapsulates the 18 // global knowledge of features, permissions, and manifest fields. 19 class ChromeExtensionsClient : public ExtensionsClient { 20 public: 21 ChromeExtensionsClient(); 22 virtual ~ChromeExtensionsClient(); 23 24 virtual void Initialize() OVERRIDE; 25 26 virtual const PermissionsProvider& GetPermissionsProvider() const OVERRIDE; 27 virtual const PermissionMessageProvider& GetPermissionMessageProvider() const 28 OVERRIDE; 29 virtual FeatureProvider* GetFeatureProviderByName(const std::string& name) 30 const OVERRIDE; 31 virtual void FilterHostPermissions( 32 const URLPatternSet& hosts, 33 URLPatternSet* new_hosts, 34 std::set<PermissionMessage>* messages) const OVERRIDE; 35 virtual void SetScriptingWhitelist(const ScriptingWhitelist& whitelist) 36 OVERRIDE; 37 virtual const ScriptingWhitelist& GetScriptingWhitelist() const OVERRIDE; 38 virtual URLPatternSet GetPermittedChromeSchemeHosts( 39 const Extension* extension, 40 const APIPermissionSet& api_permissions) const OVERRIDE; 41 virtual bool IsScriptableURL(const GURL& url, std::string* error) const 42 OVERRIDE; 43 // Get the LazyInstance for ChromeExtensionsClient. 44 static ChromeExtensionsClient* GetInstance(); 45 46 private: 47 const ChromeAPIPermissions chrome_api_permissions_; 48 const ChromePermissionMessageProvider permission_message_provider_; 49 50 // A whitelist of extensions that can script anywhere. Do not add to this 51 // list (except in tests) without consulting the Extensions team first. 52 // Note: Component extensions have this right implicitly and do not need to be 53 // added to this list. 54 ScriptingWhitelist scripting_whitelist_; 55 56 friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsClient>; 57 58 DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsClient); 59 }; 60 61 } // namespace extensions 62 63 #endif // CHROME_COMMON_EXTENSIONS_CHROME_EXTENSIONS_CLIENT_H_ 64