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

Unified Diff: chrome/common/extensions/extension.cc

Issue 10692160: Support socket endpoint permissions for AppsV2 Socket API. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase and fix a unit test Created 8 years, 4 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
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/extension.cc
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 7066091ec35d96b901f240454aeffd236d0f9347..48555a42a254cf14694a09e55c664014df5f2782 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -3337,10 +3337,18 @@ bool Extension::ParsePermissions(const char* key,
for (size_t i = 0; i < permissions->GetSize(); ++i) {
std::string permission_str;
+ const base::Value* permission_detail = NULL;
if (!permissions->GetString(i, &permission_str)) {
- *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidPermission, base::IntToString(i));
- return false;
+ const base::DictionaryValue *dict = NULL;
+ // permission should be a string or a single key dict.
+ if (!permissions->GetDictionary(i, &dict) || dict->size() != 1) {
+ *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
+ errors::kInvalidPermission, base::IntToString(i));
+ return false;
+ }
+ base::DictionaryValue::Iterator it(*dict);
+ permission_str = it.key();
+ permission_detail = &it.value();
}
// NOTE: We need to get the APIPermission before the Feature
@@ -3381,7 +3389,14 @@ bool Extension::ParsePermissions(const char* key,
}
}
- api_permissions->insert(permission->id());
+ scoped_refptr<APIPermissionDetail> detail = permission->CreateDetail();
+ if (!detail->FromValue(permission_detail)) {
+ *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
+ errors::kInvalidPermission, base::IntToString(i));
+ return false;
+ }
+
+ api_permissions->insert(detail);
continue;
}
@@ -3478,6 +3493,13 @@ bool Extension::HasAPIPermissionForTab(int tab_id,
tab_specific_permissions->HasAPIPermission(permission);
}
+bool Extension::CheckAPIPermissionWithDetail(APIPermission::ID permission,
+ const APIPermissionDetail::CheckParam* param) const {
+ base::AutoLock auto_lock(runtime_data_lock_);
+ return runtime_data_.GetActivePermissions()->
+ CheckAPIPermissionWithDetail(permission, param);
+}
+
const URLPatternSet& Extension::GetEffectiveHostPermissions() const {
base::AutoLock auto_lock(runtime_data_lock_);
return runtime_data_.GetActivePermissions()->effective_hosts();
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698