summaryrefslogtreecommitdiffstats
path: root/chrome/common
diff options
context:
space:
mode:
authormpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-03 19:06:11 +0000
committermpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-03 19:06:11 +0000
commitc533bb2982bb58ca7cd8d586bc0bc35e2e7f08ed (patch)
tree512a532854320474e7b5592da5d6170fbb6078ee /chrome/common
parentdf52439b0895260bbbf62c0de16228e8ae5eace7 (diff)
downloadchromium_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.cc54
-rw-r--r--chrome/common/extensions/extension.h28
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.