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

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

Issue 7003098: Start refractoring extension permissions into ExtensionPermissionSet. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix a bad merge Created 9 years, 6 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 c992e5d1ee6bf8878c261dc6f885a178abbd5f33..442f1015827c41ff0eb509477cb53a7160fa1e74 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -457,18 +457,10 @@ bool ExtensionPrefs::ReadExtensionPrefStringSet(
return true;
}
-void ExtensionPrefs::AddToExtensionPrefStringSet(
+void ExtensionPrefs::SetExtensionPrefStringSet(
const std::string& extension_id,
const std::string& pref_key,
- const std::set<std::string>& added_value) {
- std::set<std::string> old_value;
- std::set<std::string> new_value;
- ReadExtensionPrefStringSet(extension_id, pref_key, &old_value);
-
- std::set_union(old_value.begin(), old_value.end(),
- added_value.begin(), added_value.end(),
- std::inserter(new_value, new_value.begin()));
-
+ const std::set<std::string>& new_value) {
ListValue* value = new ListValue();
for (std::set<std::string>::const_iterator iter = new_value.begin();
iter != new_value.end(); ++iter)
@@ -670,30 +662,38 @@ void ExtensionPrefs::SetActiveBit(const std::string& extension_id,
Value::CreateBooleanValue(active));
}
-bool ExtensionPrefs::GetGrantedPermissions(
- const std::string& extension_id,
- bool* full_access,
- std::set<std::string>* api_permissions,
- URLPatternSet* host_extent) {
+ExtensionPermissionSet* ExtensionPrefs::GetGrantedPermissions(
+ const std::string& extension_id, bool* initialized) {
CHECK(Extension::IdIsValid(extension_id));
+ bool full_access;
const DictionaryValue* ext = GetExtensionPref(extension_id);
- if (!ext || !ext->GetBoolean(kPrefGrantedPermissionsAll, full_access))
- return false;
+ if (!ext || !ext->GetBoolean(kPrefGrantedPermissionsAll, &full_access)) {
+ if (initialized != NULL)
+ *initialized = false;
+ return new ExtensionPermissionSet();
+ }
+
+ if (initialized != NULL)
+ *initialized = true;
+ std::set<std::string> api_permissions_str;
ReadExtensionPrefStringSet(
- extension_id, kPrefGrantedPermissionsAPI, api_permissions);
+ extension_id, kPrefGrantedPermissionsAPI, &api_permissions_str);
+ std::set<ExtensionAPIPermission> api_permissions =
+ ExtensionAPIPermission::GetAllByName(api_permissions_str);
- std::set<std::string> host_permissions;
+ std::set<std::string> host_permissions_str;
+ URLPatternSet host_extent;
ReadExtensionPrefStringSet(
- extension_id, kPrefGrantedPermissionsHost, &host_permissions);
+ extension_id, kPrefGrantedPermissionsHost, &host_permissions_str);
bool allow_file_access = AllowFileAccess(extension_id);
// The granted host permissions contain hosts from the manifest's
// "permissions" array and from the content script "matches" arrays,
// so the URLPattern needs to accept valid schemes from both types.
- for (std::set<std::string>::iterator i = host_permissions.begin();
- i != host_permissions.end(); ++i) {
+ for (std::set<std::string>::iterator i = host_permissions_str.begin();
+ i != host_permissions_str.end(); ++i) {
URLPattern pattern(
Extension::kValidHostPermissionSchemes |
UserScript::kValidUserScriptSchemes);
@@ -708,34 +708,40 @@ bool ExtensionPrefs::GetGrantedPermissions(
pattern.set_valid_schemes(
pattern.valid_schemes() & ~URLPattern::SCHEME_FILE);
}
- host_extent->AddPattern(pattern);
+ host_extent.AddPattern(pattern);
}
}
- return true;
+ return new ExtensionPermissionSet(full_access, api_permissions, host_extent);
}
void ExtensionPrefs::AddGrantedPermissions(
const std::string& extension_id,
- const bool full_access,
- const std::set<std::string>& api_permissions,
- const URLPatternSet& host_extent) {
+ const ExtensionPermissionSet& permissions) {
CHECK(Extension::IdIsValid(extension_id));
- UpdateExtensionPref(extension_id, kPrefGrantedPermissionsAll,
- Value::CreateBooleanValue(full_access));
+ scoped_ptr<ExtensionPermissionSet> granted_permissions(
+ GetGrantedPermissions(extension_id, NULL));
- if (!api_permissions.empty()) {
- AddToExtensionPrefStringSet(
- extension_id, kPrefGrantedPermissionsAPI, api_permissions);
- }
+ // The granted permissions are now the union of the already granted
+ // permissions and the newly granted permissions.
+ scoped_ptr<ExtensionPermissionSet> new_perms(
+ ExtensionPermissionSet::CreateUnion(permissions, *granted_permissions));
- if (!host_extent.is_empty()) {
- std::set<std::string> host_permissions;
- ExtentToStringSet(host_extent, &host_permissions);
-
- AddToExtensionPrefStringSet(
- extension_id, kPrefGrantedPermissionsHost, host_permissions);
+ // Set the full access (native code) bit.
+ UpdateExtensionPref(extension_id, kPrefGrantedPermissionsAll,
+ Value::CreateBooleanValue(new_perms->native_code()));
+
+ // Set the api permissions.
+ if (!new_perms->apis().empty())
+ SetExtensionPrefStringSet(extension_id, kPrefGrantedPermissionsAPI,
+ new_perms->GetAPIsAsStrings());
+
+ // Set the host permissions.
+ if (!new_perms->effective_hosts().is_empty()) {
+ std::set<std::string> hosts;
+ ExtentToStringSet(new_perms->effective_hosts(), &hosts);
+ SetExtensionPrefStringSet(extension_id, kPrefGrantedPermissionsHost, hosts);
}
}

Powered by Google App Engine
This is Rietveld 408576698