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

Unified Diff: extensions/common/permissions/permissions_data.cc

Issue 2499493004: Communicate ExtensionSettings policy to renderers (Closed)
Patch Set: Created 4 years, 1 month 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: extensions/common/permissions/permissions_data.cc
diff --git a/extensions/common/permissions/permissions_data.cc b/extensions/common/permissions/permissions_data.cc
index 4025d23c0ff0096e075b60521ae95bb0b0e5675c..b1dc2e9e0f2636a2e592a30a2525a840ee3970ca 100644
--- a/extensions/common/permissions/permissions_data.cc
+++ b/extensions/common/permissions/permissions_data.cc
@@ -87,6 +87,11 @@ bool PermissionsData::ShouldSkipPermissionWarnings(
bool PermissionsData::IsRestrictedUrl(const GURL& document_url,
const Extension* extension,
std::string* error) {
+ if (extension &&
+ extension->permissions_data()->IsRuntimeBlockedHost(document_url)) {
Devlin 2016/11/23 17:22:56 This isn't the same type of restricted url as the
nrpeter 2017/01/02 19:57:45 The idea was to block any manipulation of a webpag
+ *error = manifest_errors::kCannotAccessPage;
+ return true;
+ }
if (extension && CanExecuteScriptEverywhere(extension))
return false;
@@ -140,6 +145,14 @@ void PermissionsData::SetPermissions(
withheld_permissions_unsafe_ = std::move(withheld);
}
+void PermissionsData::SetRuntimeBlockedAllowedHosts(
+ const URLPatternSet runtime_blocked_hosts,
+ const URLPatternSet runtime_allowed_hosts) const {
+ AutoLockOnValidThread lock(runtime_lock_, thread_checker_.get());
+ runtime_blocked_hosts_unsafe_ = runtime_blocked_hosts;
+ runtime_allowed_hosts_unsafe_ = runtime_allowed_hosts;
+}
+
void PermissionsData::SetActivePermissions(
std::unique_ptr<const PermissionSet> active) const {
AutoLockOnValidThread lock(runtime_lock_, thread_checker_.get());
@@ -208,7 +221,8 @@ URLPatternSet PermissionsData::GetEffectiveHostPermissions() const {
bool PermissionsData::HasHostPermission(const GURL& url) const {
base::AutoLock auto_lock(runtime_lock_);
- return active_permissions_unsafe_->HasExplicitAccessToOrigin(url);
+ return active_permissions_unsafe_->HasExplicitAccessToOrigin(url) &&
+ !IsRuntimeBlockedHost(url);
}
bool PermissionsData::HasEffectiveAccessToAllHosts() const {
@@ -327,6 +341,14 @@ bool PermissionsData::HasTabSpecificPermissionToExecuteScript(
return false;
}
+bool PermissionsData::IsRuntimeBlockedHost(const GURL& url) const {
+ if (runtime_blocked_hosts_unsafe_.MatchesURL(url)) {
asargent_no_longer_on_chrome 2016/11/23 01:19:23 It seems like one of 2 things should happen here:
nrpeter 2017/01/02 19:57:45 I may need a little bit of help with this. I tried
+ if (!runtime_allowed_hosts_unsafe_.MatchesURL(url))
+ return true;
+ }
+ return false;
+}
+
PermissionsData::AccessType PermissionsData::CanRunOnPage(
const Extension* extension,
const GURL& document_url,
@@ -337,7 +359,12 @@ PermissionsData::AccessType PermissionsData::CanRunOnPage(
runtime_lock_.AssertAcquired();
if (g_policy_delegate &&
!g_policy_delegate->CanExecuteScriptOnPage(extension, document_url,
- tab_id, error)) {
+ tab_id, error))
+ return ACCESS_DENIED;
+
+ if (IsRuntimeBlockedHost(document_url)) {
+ if (error)
+ *error = manifest_errors::kCannotScriptPageByPolicy;
return ACCESS_DENIED;
}

Powered by Google App Engine
This is Rietveld 408576698