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 10815028: Make ActiveTabPermissionManager also grant the tabs permission. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: oops Created 8 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
« 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 990271e17965fb76156cfce707cc728c617aec50..e632e4930c0defc48e0731ae814d93d5da782d02 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -3452,19 +3452,28 @@ bool Extension::CanSpecifyHostPermission(const URLPattern& pattern,
return true;
}
-bool Extension::HasAPIPermission(
- APIPermission::ID permission) const {
+bool Extension::HasAPIPermission(APIPermission::ID permission) const {
base::AutoLock auto_lock(runtime_data_lock_);
return runtime_data_.GetActivePermissions()->HasAPIPermission(permission);
}
-bool Extension::HasAPIPermission(
- const std::string& function_name) const {
+bool Extension::HasAPIPermission(const std::string& function_name) const {
base::AutoLock auto_lock(runtime_data_lock_);
return runtime_data_.GetActivePermissions()->
HasAccessToFunction(function_name);
}
+bool Extension::HasAPIPermissionForTab(int tab_id,
+ APIPermission::ID permission) const {
+ base::AutoLock auto_lock(runtime_data_lock_);
+ if (runtime_data_.GetActivePermissions()->HasAPIPermission(permission))
+ return true;
+ scoped_refptr<const PermissionSet> tab_specific_permissions =
+ runtime_data_.GetTabSpecificPermissions(tab_id);
+ return tab_specific_permissions.get() &&
+ tab_specific_permissions->HasAPIPermission(permission);
+}
+
const URLPatternSet& Extension::GetEffectiveHostPermissions() const {
base::AutoLock auto_lock(runtime_data_lock_);
return runtime_data_.GetActivePermissions()->effective_hosts();
@@ -3562,10 +3571,10 @@ bool Extension::CanExecuteScriptOnPage(const GURL& page_url,
// If a tab ID is specified, try the tab-specific permissions.
if (tab_id >= 0) {
- const URLPatternSet* tab_permissions =
- runtime_data_.GetTabSpecificHostPermissions(tab_id);
- if (tab_permissions &&
- tab_permissions->MatchesSecurityOrigin(page_url)) {
+ scoped_refptr<const PermissionSet> tab_permissions =
+ runtime_data_.GetTabSpecificPermissions(tab_id);
+ if (tab_permissions.get() &&
+ tab_permissions->explicit_hosts().MatchesSecurityOrigin(page_url)) {
return true;
}
}
@@ -3635,10 +3644,10 @@ bool Extension::CanCaptureVisiblePage(const GURL& page_url,
int tab_id,
std::string *error) const {
if (tab_id >= 0) {
- const URLPatternSet* tab_permissions =
- GetTabSpecificHostPermissions(tab_id);
- if (tab_permissions &&
- tab_permissions->MatchesSecurityOrigin(page_url)) {
+ scoped_refptr<const PermissionSet> tab_permissions =
+ GetTabSpecificPermissions(tab_id);
+ if (tab_permissions.get() &&
+ tab_permissions->explicit_hosts().MatchesSecurityOrigin(page_url)) {
return true;
}
}
@@ -3797,22 +3806,22 @@ bool Extension::HasContentScriptAtURL(const GURL& url) const {
return false;
}
-const URLPatternSet* Extension::GetTabSpecificHostPermissions(
+scoped_refptr<const PermissionSet> Extension::GetTabSpecificPermissions(
int tab_id) const {
base::AutoLock auto_lock(runtime_data_lock_);
- return runtime_data_.GetTabSpecificHostPermissions(tab_id);
+ return runtime_data_.GetTabSpecificPermissions(tab_id);
}
-void Extension::SetTabSpecificHostPermissions(
+void Extension::UpdateTabSpecificPermissions(
int tab_id,
- const URLPatternSet& permissions) const {
+ const PermissionSet* permissions) const {
base::AutoLock auto_lock(runtime_data_lock_);
- runtime_data_.SetTabSpecificHostPermissions(tab_id, permissions);
+ runtime_data_.UpdateTabSpecificPermissions(tab_id, permissions);
}
-void Extension::ClearTabSpecificHostPermissions(int tab_id) const {
+void Extension::ClearTabSpecificPermissions(int tab_id) const {
base::AutoLock auto_lock(runtime_data_lock_);
- runtime_data_.ClearTabSpecificHostPermissions(tab_id);
+ runtime_data_.ClearTabSpecificPermissions(tab_id);
}
bool Extension::CheckPlatformAppFeatures(std::string* utf8_error) {
@@ -3854,25 +3863,29 @@ void Extension::RuntimeData::SetActivePermissions(
active_permissions_ = active;
}
-const URLPatternSet*
- Extension::RuntimeData::GetTabSpecificHostPermissions(int tab_id) const {
+scoped_refptr<const PermissionSet>
+ Extension::RuntimeData::GetTabSpecificPermissions(int tab_id) const {
CHECK_GE(tab_id, 0);
- TabHostPermissionsMap::const_iterator it =
- tab_specific_host_permissions_.find(tab_id);
- return (it != tab_specific_host_permissions_.end()) ? it->second.get() : NULL;
+ TabPermissionsMap::const_iterator it = tab_specific_permissions_.find(tab_id);
+ return (it != tab_specific_permissions_.end()) ? it->second : NULL;
}
-void Extension::RuntimeData::SetTabSpecificHostPermissions(
+void Extension::RuntimeData::UpdateTabSpecificPermissions(
int tab_id,
- const URLPatternSet& hosts) {
+ const PermissionSet* permissions) {
CHECK_GE(tab_id, 0);
- tab_specific_host_permissions_[tab_id] =
- make_linked_ptr(new URLPatternSet(hosts));
+ if (tab_specific_permissions_.count(tab_id)) {
+ tab_specific_permissions_[tab_id] = PermissionSet::CreateUnion(
+ tab_specific_permissions_[tab_id],
+ permissions);
+ } else {
+ tab_specific_permissions_[tab_id] = permissions;
+ }
}
-void Extension::RuntimeData::ClearTabSpecificHostPermissions(int tab_id) {
+void Extension::RuntimeData::ClearTabSpecificPermissions(int tab_id) {
CHECK_GE(tab_id, 0);
- tab_specific_host_permissions_.erase(tab_id);
+ tab_specific_permissions_.erase(tab_id);
}
UnloadedExtensionInfo::UnloadedExtensionInfo(
« 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