Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2302)

Unified Diff: chrome/browser/extensions/extension_prefs.cc

Issue 7432006: Add an experimental permissions API for extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_prefs.cc
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
index 2cb6efe1af2e0b1105d29c838fd87cb2ac2d0037..bedacfb679f14f599949582bae230f8ec161dc5d 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -113,6 +113,11 @@ const char kPrefOldGrantedFullAccess[] = "granted_permissions.full";
const char kPrefOldGrantedHosts[] = "granted_permissions.host";
const char kPrefOldGrantedAPIs[] = "granted_permissions.api";
+const char kPrefActiveAPIs[] = "active_permissions.api";
+const char kPrefActiveExplicitHosts[] = "active_permissions.explicit_host";
+const char kPrefActiveScriptableHosts[] =
+ "active_permissions.scriptable_host";
+
// A preference that indicates when an extension was installed.
const char kPrefInstallTime[] = "install_time";
@@ -741,6 +746,74 @@ void ExtensionPrefs::AddGrantedPermissions(
}
}
+ExtensionPermissionSet* ExtensionPrefs::GetActivePermissions(
Mihai Parparita -not on Chrome 2011/07/20 22:03:43 This seems pretty similar to the granted permissio
jstritar 2011/07/22 19:21:55 I factored these out into {Set,Read}ExtensionPrefP
+ const std::string& extension_id) {
+ CHECK(Extension::IdIsValid(extension_id));
+
+ const DictionaryValue* ext = GetExtensionPref(extension_id);
+ if (!ext)
+ return NULL;
+
+ // Retrieve the API permissions.
+ ExtensionAPIPermissionSet apis;
+ const ListValue* api_values = NULL;
+ if (ReadExtensionPrefList(extension_id, kPrefActiveAPIs, &api_values)) {
+ ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
+ for (size_t i = 0; i < api_values->GetSize(); ++i) {
+ std::string permission_name;
+ if (api_values->GetString(i, &permission_name)) {
+ ExtensionAPIPermission *permission = info->GetByName(permission_name);
+ if (permission)
+ apis.insert(permission->id());
+ }
+ }
+ }
+
+ // Retrieve the explicit host permissions.
+ URLPatternSet explicit_hosts;
+ ReadExtensionPrefURLPatternSet(
+ extension_id, kPrefActiveExplicitHosts,
+ &explicit_hosts, Extension::kValidHostPermissionSchemes);
+
+ // Retrieve the scriptable host permissions.
+ URLPatternSet scriptable_hosts;
+ ReadExtensionPrefURLPatternSet(
+ extension_id, kPrefActiveScriptableHosts,
+ &scriptable_hosts, UserScript::kValidUserScriptSchemes);
+
+ return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts);
+}
+
+void ExtensionPrefs::SetActivePermissions(
+ const std::string& extension_id,
+ const ExtensionPermissionSet* permissions) {
+ // Set the API permissions.
+ ListValue* api_values = new ListValue();
+ ExtensionAPIPermissionSet apis = permissions->apis();
+ ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
+ for (ExtensionAPIPermissionSet::const_iterator i = apis.begin();
+ i != apis.end(); ++i) {
+ ExtensionAPIPermission* perm = info->GetByID(*i);
+ if (perm)
+ api_values->Append(Value::CreateStringValue(perm->name()));
+ }
+ UpdateExtensionPref(extension_id, kPrefActiveAPIs, api_values);
+
+ // Set the explicit host permissions.
+ if (!permissions->explicit_hosts().is_empty()) {
+ SetExtensionPrefURLPatternSet(extension_id,
+ kPrefActiveExplicitHosts,
+ permissions->explicit_hosts());
+ }
+
+ // Set the scriptable host permissions.
+ if (!permissions->scriptable_hosts().is_empty()) {
+ SetExtensionPrefURLPatternSet(extension_id,
+ kPrefActiveScriptableHosts,
+ permissions->scriptable_hosts());
+ }
+}
+
bool ExtensionPrefs::IsIncognitoEnabled(const std::string& extension_id) {
return ReadExtensionPrefBoolean(extension_id, kPrefIncognitoEnabled);
}

Powered by Google App Engine
This is Rietveld 408576698