diff options
Diffstat (limited to 'chrome/common')
-rw-r--r-- | chrome/common/extensions/chrome_extensions_client.cc | 25 | ||||
-rw-r--r-- | chrome/common/extensions/chrome_extensions_client.h | 9 | ||||
-rw-r--r-- | chrome/common/extensions/extension.cc | 57 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 9 | ||||
-rw-r--r-- | chrome/common/extensions/extension_messages.h | 3 | ||||
-rw-r--r-- | chrome/common/extensions/permissions/permissions_data.cc | 14 |
6 files changed, 41 insertions, 76 deletions
diff --git a/chrome/common/extensions/chrome_extensions_client.cc b/chrome/common/extensions/chrome_extensions_client.cc index dcc4d5f..8d16496 100644 --- a/chrome/common/extensions/chrome_extensions_client.cc +++ b/chrome/common/extensions/chrome_extensions_client.cc @@ -5,6 +5,7 @@ #include "chrome/common/extensions/chrome_extensions_client.h" #include "chrome/common/extensions/chrome_manifest_handlers.h" +#include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/features/base_feature_provider.h" #include "chrome/common/url_constants.h" #include "content/public/common/url_constants.h" @@ -28,6 +29,20 @@ ChromeExtensionsClient::~ChromeExtensionsClient() { void ChromeExtensionsClient::Initialize() { RegisterChromeManifestHandlers(); + + // Set up the scripting whitelist. + // Whitelist ChromeVox, an accessibility extension from Google that needs + // the ability to script webui pages. This is temporary and is not + // meant to be a general solution. + // TODO(dmazzoni): remove this once we have an extension API that + // allows any extension to request read-only access to webui pages. + scripting_whitelist_.push_back(extension_misc::kChromeVoxExtensionId); + + // Whitelist "Discover DevTools Companion" extension from Google that + // needs the ability to script DevTools pages. Companion will assist + // online courses and will be needed while the online educational programs + // are in place. + scripting_whitelist_.push_back("angkfkebojeancgemegoedelbnjgcgme"); } const PermissionsProvider& @@ -67,6 +82,16 @@ void ChromeExtensionsClient::FilterHostPermissions( } } +void ChromeExtensionsClient::SetScriptingWhitelist( + const ExtensionsClient::ScriptingWhitelist& whitelist) { + scripting_whitelist_ = whitelist; +} + +const ExtensionsClient::ScriptingWhitelist& +ChromeExtensionsClient::GetScriptingWhitelist() const { + return scripting_whitelist_; +} + // static ChromeExtensionsClient* ChromeExtensionsClient::GetInstance() { return g_client.Pointer(); diff --git a/chrome/common/extensions/chrome_extensions_client.h b/chrome/common/extensions/chrome_extensions_client.h index f832172..ca7b43b 100644 --- a/chrome/common/extensions/chrome_extensions_client.h +++ b/chrome/common/extensions/chrome_extensions_client.h @@ -32,6 +32,9 @@ class ChromeExtensionsClient : public ExtensionsClient { const URLPatternSet& hosts, URLPatternSet* new_hosts, std::set<PermissionMessage>* messages) const OVERRIDE; + virtual void SetScriptingWhitelist(const ScriptingWhitelist& whitelist) + OVERRIDE; + virtual const ScriptingWhitelist& GetScriptingWhitelist() const OVERRIDE; // Get the LazyInstance for ChromeExtensionsClient. static ChromeExtensionsClient* GetInstance(); @@ -40,6 +43,12 @@ class ChromeExtensionsClient : public ExtensionsClient { const ChromeAPIPermissions chrome_api_permissions_; const ChromePermissionMessageProvider permission_message_provider_; + // A whitelist of extensions that can script anywhere. Do not add to this + // list (except in tests) without consulting the Extensions team first. + // Note: Component extensions have this right implicitly and do not need to be + // added to this list. + ScriptingWhitelist scripting_whitelist_; + friend struct base::DefaultLazyInstanceTraits<ChromeExtensionsClient>; DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsClient); diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index 920f9cb..44e7215 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -62,41 +62,6 @@ const char kKeyInfoEndMarker[] = "KEY-----"; const char kPublic[] = "PUBLIC"; const char kPrivate[] = "PRIVATE"; -// A singleton object containing global data needed by the extension objects. -class ExtensionConfig { - public: - static ExtensionConfig* GetInstance() { - return Singleton<ExtensionConfig>::get(); - } - - Extension::ScriptingWhitelist* whitelist() { return &scripting_whitelist_; } - - private: - friend struct DefaultSingletonTraits<ExtensionConfig>; - - ExtensionConfig() { - // Whitelist ChromeVox, an accessibility extension from Google that needs - // the ability to script webui pages. This is temporary and is not - // meant to be a general solution. - // TODO(dmazzoni): remove this once we have an extension API that - // allows any extension to request read-only access to webui pages. - scripting_whitelist_.push_back(extension_misc::kChromeVoxExtensionId); - - // Whitelist "Discover DevTools Companion" extension from Google that - // needs the ability to script DevTools pages. Companion will assist - // online courses and will be needed while the online educational programs - // are in place. - scripting_whitelist_.push_back("angkfkebojeancgemegoedelbnjgcgme"); - } - ~ExtensionConfig() { } - - // A whitelist of extensions that can script anywhere. Do not add to this - // list (except in tests) without consulting the Extensions team first. - // Note: Component extensions have this right implicitly and do not need to be - // added to this list. - Extension::ScriptingWhitelist scripting_whitelist_; -}; - bool ContainsReservedCharacters(const base::FilePath& path) { // We should disallow backslash '\\' as file path separator even on Windows, // because the backslash is not regarded as file path separator on Linux/Mac. @@ -110,11 +75,6 @@ bool ContainsReservedCharacters(const base::FilePath& path) { } // namespace -#if defined(OS_WIN) -const char Extension::kExtensionRegistryPath[] = - "Software\\Google\\Chrome\\Extensions"; -#endif - const char Extension::kMimeType[] = "application/x-chrome-extension"; const int Extension::kValidWebExtentSchemes = @@ -329,23 +289,6 @@ GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) { content::kStandardSchemeSeparator + extension_id + "/"); } -// static -void Extension::SetScriptingWhitelist( - const Extension::ScriptingWhitelist& whitelist) { - ScriptingWhitelist* current_whitelist = - ExtensionConfig::GetInstance()->whitelist(); - current_whitelist->clear(); - for (ScriptingWhitelist::const_iterator it = whitelist.begin(); - it != whitelist.end(); ++it) { - current_whitelist->push_back(*it); - } -} - -// static -const Extension::ScriptingWhitelist* Extension::GetScriptingWhitelist() { - return ExtensionConfig::GetInstance()->whitelist(); -} - bool Extension::HasAPIPermission(APIPermission::ID permission) const { return PermissionsData::HasAPIPermission(this, permission); } diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index 913e0c24..2ebeeda 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -55,7 +55,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> { public: struct ManifestData; - typedef std::vector<std::string> ScriptingWhitelist; typedef std::map<const std::string, linked_ptr<ManifestData> > ManifestDataMap; @@ -176,10 +175,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> { // Valid schemes for host permission URLPatterns. static const int kValidHostPermissionSchemes; -#if defined(OS_WIN) - static const char kExtensionRegistryPath[]; -#endif - // The mimetype used for extensions. static const char kMimeType[]; @@ -229,10 +224,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> { // Returns the base extension url for a given |extension_id|. static GURL GetBaseURLFromExtensionId(const std::string& extension_id); - // Adds an extension to the scripting whitelist. Used for testing only. - static void SetScriptingWhitelist(const ScriptingWhitelist& whitelist); - static const ScriptingWhitelist* GetScriptingWhitelist(); - // DEPRECATED: These methods have been moved to PermissionsData. // TODO(rdevlin.cronin): remove these once all calls have been updated. bool HasAPIPermission(APIPermission::ID permission) const; diff --git a/chrome/common/extensions/extension_messages.h b/chrome/common/extensions/extension_messages.h index c2b28c1..381a9d7 100644 --- a/chrome/common/extensions/extension_messages.h +++ b/chrome/common/extensions/extension_messages.h @@ -21,6 +21,7 @@ #include "content/public/common/common_param_traits.h" #include "content/public/common/socket_permission_request.h" #include "extensions/common/draggable_region.h" +#include "extensions/common/extensions_client.h" #include "extensions/common/url_pattern.h" #include "extensions/common/url_pattern_set.h" #include "extensions/common/view_type.h" @@ -347,7 +348,7 @@ IPC_MESSAGE_CONTROL1(ExtensionMsg_Unloaded, // only used for testing. IPC_MESSAGE_CONTROL1(ExtensionMsg_SetScriptingWhitelist, // extension ids - extensions::Extension::ScriptingWhitelist) + extensions::ExtensionsClient::ScriptingWhitelist) // Notification that renderer should run some JavaScript code. IPC_MESSAGE_ROUTED1(ExtensionMsg_ExecuteCode, diff --git a/chrome/common/extensions/permissions/permissions_data.cc b/chrome/common/extensions/permissions/permissions_data.cc index f5fe932..d6fb529 100644 --- a/chrome/common/extensions/permissions/permissions_data.cc +++ b/chrome/common/extensions/permissions/permissions_data.cc @@ -18,6 +18,7 @@ #include "content/public/common/url_constants.h" #include "extensions/common/constants.h" #include "extensions/common/error_utils.h" +#include "extensions/common/extensions_client.h" #include "extensions/common/features/feature.h" #include "extensions/common/features/feature_provider.h" #include "extensions/common/manifest.h" @@ -538,16 +539,11 @@ bool PermissionsData::CanExecuteScriptEverywhere(const Extension* extension) { if (extension->location() == Manifest::COMPONENT) return true; - const Extension::ScriptingWhitelist* whitelist = - Extension::GetScriptingWhitelist(); + const ExtensionsClient::ScriptingWhitelist& whitelist = + ExtensionsClient::Get()->GetScriptingWhitelist(); - for (Extension::ScriptingWhitelist::const_iterator iter = whitelist->begin(); - iter != whitelist->end(); ++iter) { - if (extension->id() == *iter) - return true; - } - - return false; + return std::find(whitelist.begin(), whitelist.end(), extension->id()) != + whitelist.end(); } // static |