diff options
author | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-03 19:06:11 +0000 |
---|---|---|
committer | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-03 19:06:11 +0000 |
commit | c533bb2982bb58ca7cd8d586bc0bc35e2e7f08ed (patch) | |
tree | 512a532854320474e7b5592da5d6170fbb6078ee /chrome/common | |
parent | df52439b0895260bbbf62c0de16228e8ae5eace7 (diff) | |
download | chromium_src-c533bb2982bb58ca7cd8d586bc0bc35e2e7f08ed.zip chromium_src-c533bb2982bb58ca7cd8d586bc0bc35e2e7f08ed.tar.gz chromium_src-c533bb2982bb58ca7cd8d586bc0bc35e2e7f08ed.tar.bz2 |
Change plugin handling in extension from "plugin_dir" to a "plugin" list of
dictionaries, which allows us to specify properties per plugin.
This is the first part of allowing extensions to have plugins only accessible
by the extension process.
BUG=12960
Review URL: http://codereview.chromium.org/114072
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17510 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
-rw-r--r-- | chrome/common/extensions/extension.cc | 54 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 28 |
2 files changed, 64 insertions, 18 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index 4c2914e..5c55341 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -27,7 +27,9 @@ const wchar_t* Extension::kMatchesKey = L"matches"; const wchar_t* Extension::kNameKey = L"name"; const wchar_t* Extension::kPageActionsKey = L"page_actions"; const wchar_t* Extension::kPermissionsKey = L"permissions"; -const wchar_t* Extension::kPluginsDirKey = L"plugins_dir"; +const wchar_t* Extension::kPluginsKey = L"plugins"; +const wchar_t* Extension::kPluginsPathKey = L"path"; +const wchar_t* Extension::kPluginsPublicKey = L"public"; const wchar_t* Extension::kBackgroundKey = L"background_page"; const wchar_t* Extension::kRunAtKey = L"run_at"; const wchar_t* Extension::kThemeKey = L"theme"; @@ -107,8 +109,12 @@ const char* Extension::kInvalidPermissionError = const char* Extension::kInvalidPermissionSchemeError = "Invalid scheme for 'permissions[*]'. Only 'http' and 'https' are " "allowed."; -const char* Extension::kInvalidPluginsDirError = - "Invalid value for 'plugins_dir'."; +const char* Extension::kInvalidPluginsError = + "Invalid value for 'plugins'."; +const char* Extension::kInvalidPluginsPathError = + "Invalid value for 'plugins[*].path'."; +const char* Extension::kInvalidPluginsPublicError = + "Invalid value for 'plugins[*].public'."; const char* Extension::kInvalidBackgroundError = "Invalid value for 'background'."; const char* Extension::kInvalidRunAtError = @@ -588,14 +594,44 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_id, return true; } - // Initialize plugins dir (optional). - if (source.HasKey(kPluginsDirKey)) { - std::string plugins_dir; - if (!source.GetString(kPluginsDirKey, &plugins_dir)) { - *error = kInvalidPluginsDirError; + // Initialize plugins (optional). + if (source.HasKey(kPluginsKey)) { + ListValue* list_value; + if (!source.GetList(kPluginsKey, &list_value)) { + *error = kInvalidPluginsError; return false; } - plugins_dir_ = path_.AppendASCII(plugins_dir); + + for (size_t i = 0; i < list_value->GetSize(); ++i) { + DictionaryValue* plugin_value; + std::string path; + bool is_public = false; + + if (!list_value->GetDictionary(i, &plugin_value)) { + *error = kInvalidPluginsError; + return false; + } + + // Get plugins[i].path. + if (!plugin_value->GetString(kPluginsPathKey, &path)) { + *error = ExtensionErrorUtils::FormatErrorMessage( + kInvalidPluginsPathError, IntToString(i)); + return false; + } + + // Get plugins[i].content (optional). + if (plugin_value->HasKey(kPluginsPublicKey)) { + if (!plugin_value->GetBoolean(kPluginsPublicKey, &is_public)) { + *error = ExtensionErrorUtils::FormatErrorMessage( + kInvalidPluginsPublicError, IntToString(i)); + return false; + } + } + + plugins_.push_back(PluginInfo()); + plugins_.back().path = path_.AppendASCII(path); + plugins_.back().is_public = is_public; + } } // Initialize background url (optional). diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index 782b823..76f4b20 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -18,7 +18,7 @@ #include "chrome/common/page_action.h" #include "googleurl/src/gurl.h" -// Represents a Chromium extension. +// Represents a Chrome extension. class Extension { public: // What an extension was loaded from. @@ -30,6 +30,12 @@ class Extension { LOAD // --load-extension. }; + // An NPAPI plugin included in the extension. + struct PluginInfo { + FilePath path; // Path to the plugin. + bool is_public; // False if only this extension can load this plugin. + }; + // The name of the manifest inside an extension. static const char kManifestFilename[]; @@ -44,7 +50,10 @@ class Extension { static const wchar_t* kNameKey; static const wchar_t* kPageActionsKey; static const wchar_t* kPermissionsKey; - static const wchar_t* kPluginsDirKey; + static const wchar_t* kPluginsKey; + static const wchar_t* kPluginsPathKey; + static const wchar_t* kPluginsPublicKey; + static const wchar_t* kBackgroundKey; static const wchar_t* kRunAtKey; static const wchar_t* kThemeKey; @@ -78,7 +87,10 @@ class Extension { static const char* kInvalidMatchError; static const char* kInvalidMatchesError; static const char* kInvalidNameError; - static const char* kInvalidPluginsDirError; + static const char* kInvalidPluginsError; + static const char* kInvalidPluginsPathError; + static const char* kInvalidPluginsPublicError; + static const char* kInvalidBackgroundError; static const char* kInvalidRunAtError; static const char* kInvalidToolstripError; @@ -149,11 +161,10 @@ class Extension { const std::string& description() const { return description_; } const UserScriptList& content_scripts() const { return content_scripts_; } const PageActionMap& page_actions() const { return page_actions_; } - const FilePath& plugins_dir() const { return plugins_dir_; } + const std::vector<PluginInfo>& plugins() const { return plugins_; } const GURL& background_url() const { return background_url_; } const std::vector<std::string>& toolstrips() const { return toolstrips_; } - const std::vector<URLPattern>& permissions() const { - return permissions_; } + const std::vector<URLPattern>& permissions() const { return permissions_; } // Retrieves a page action by |id|. const PageAction* GetPageAction(std::string id) const; @@ -217,9 +228,8 @@ class Extension { // A list of page actions. PageActionMap page_actions_; - // Optional absolute path to the directory of NPAPI plugins that the extension - // contains. - FilePath plugins_dir_; + // Optional list of NPAPI plugins and associated properties. + std::vector<PluginInfo> plugins_; // Optional URL to a master page of which a single instance should be always // loaded in the background. |