| 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(
|
|
|