Index: extensions/renderer/user_script_injector.cc |
diff --git a/extensions/renderer/user_script_injector.cc b/extensions/renderer/user_script_injector.cc |
index 79361557d869f80a3bbc25321d039f8a4f696cab..b355cab4611495148af8488078eeb66a8f7072ca 100644 |
--- a/extensions/renderer/user_script_injector.cc |
+++ b/extensions/renderer/user_script_injector.cc |
@@ -56,10 +56,12 @@ base::LazyInstance<GreasemonkeyApiJsString> g_greasemonkey_api = |
UserScriptInjector::UserScriptInjector( |
const UserScript* script, |
- UserScriptSet* script_list) |
+ UserScriptSet* script_list, |
+ bool is_declarative) |
: script_(script), |
script_id_(script_->id()), |
extension_id_(script_->extension_id()), |
+ is_declarative_(is_declarative), |
user_script_set_observer_(this) { |
user_script_set_observer_.Add(script_list); |
} |
@@ -67,6 +69,10 @@ UserScriptInjector::UserScriptInjector( |
UserScriptInjector::~UserScriptInjector() { |
} |
+bool UserScriptInjector::is_declarative() const { |
+ return is_declarative_; |
+} |
+ |
void UserScriptInjector::OnUserScriptsUpdated( |
const std::set<std::string>& changed_extensions, |
const std::vector<UserScript*>& scripts) { |
@@ -132,13 +138,26 @@ PermissionsData::AccessType UserScriptInjector::CanExecuteOnFrame( |
GURL effective_document_url = ScriptContext::GetEffectiveDocumentURL( |
web_frame, web_frame->document().url(), script_->match_about_blank()); |
- return extension->permissions_data()->GetContentScriptAccess( |
- extension, |
- effective_document_url, |
- top_url, |
- tab_id, |
- -1, // no process id |
- NULL /* ignore error */); |
+ // Declarative scripts use "page access" (from "permissions" section in |
+ // manifest) whereas non-declarative scripts use custom |
+ // "content script access" logic. |
+ if (is_declarative_) { |
+ return extension->permissions_data()->GetPageAccess( |
+ extension, |
+ effective_document_url, |
+ top_url, |
+ tab_id, |
+ -1, // no process id |
+ NULL /* ignore error */); |
+ } else { |
+ return extension->permissions_data()->GetContentScriptAccess( |
+ extension, |
+ effective_document_url, |
+ top_url, |
+ tab_id, |
+ -1, // no process id |
+ NULL /* ignore error */); |
+ } |
} |
std::vector<blink::WebScriptSource> UserScriptInjector::GetJsSources( |