OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/renderer/user_script_set.h" | 5 #include "extensions/renderer/user_script_set.h" |
6 | 6 |
7 #include "content/public/common/url_constants.h" | 7 #include "content/public/common/url_constants.h" |
8 #include "content/public/renderer/render_thread.h" | 8 #include "content/public/renderer/render_thread.h" |
9 #include "extensions/common/extension.h" | 9 #include "extensions/common/extension.h" |
10 #include "extensions/common/extension_messages.h" | 10 #include "extensions/common/extension_messages.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 int tab_id, | 65 int tab_id, |
66 UserScript::RunLocation run_location) { | 66 UserScript::RunLocation run_location) { |
67 GURL document_url = GetDocumentUrlForFrame(web_frame); | 67 GURL document_url = GetDocumentUrlForFrame(web_frame); |
68 for (ScopedVector<UserScript>::const_iterator iter = scripts_.begin(); | 68 for (ScopedVector<UserScript>::const_iterator iter = scripts_.begin(); |
69 iter != scripts_.end(); | 69 iter != scripts_.end(); |
70 ++iter) { | 70 ++iter) { |
71 const Extension* extension = extensions_->GetByID((*iter)->extension_id()); | 71 const Extension* extension = extensions_->GetByID((*iter)->extension_id()); |
72 if (!extension) | 72 if (!extension) |
73 continue; | 73 continue; |
74 scoped_ptr<ScriptInjection> injection = GetInjectionForScript( | 74 scoped_ptr<ScriptInjection> injection = GetInjectionForScript( |
75 *iter, web_frame, tab_id, run_location, document_url, extension); | 75 *iter, |
76 web_frame, | |
77 tab_id, | |
78 run_location, | |
79 document_url, | |
80 extension, | |
81 false /* is_declarative */); | |
76 if (injection.get()) | 82 if (injection.get()) |
77 injections->push_back(injection.release()); | 83 injections->push_back(injection.release()); |
78 } | 84 } |
79 } | 85 } |
80 | 86 |
81 bool UserScriptSet::UpdateUserScripts( | 87 bool UserScriptSet::UpdateUserScripts( |
82 base::SharedMemoryHandle shared_memory, | 88 base::SharedMemoryHandle shared_memory, |
83 const std::set<std::string>& changed_extensions) { | 89 const std::set<std::string>& changed_extensions) { |
84 bool only_inject_incognito = | 90 bool only_inject_incognito = |
85 ExtensionsRendererClient::Get()->IsIncognitoProcess(); | 91 ExtensionsRendererClient::Get()->IsIncognitoProcess(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
136 | 142 |
137 scripts_.push_back(script.release()); | 143 scripts_.push_back(script.release()); |
138 } | 144 } |
139 | 145 |
140 FOR_EACH_OBSERVER(Observer, | 146 FOR_EACH_OBSERVER(Observer, |
141 observers_, | 147 observers_, |
142 OnUserScriptsUpdated(changed_extensions, scripts_.get())); | 148 OnUserScriptsUpdated(changed_extensions, scripts_.get())); |
143 return true; | 149 return true; |
144 } | 150 } |
145 | 151 |
152 scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionByScriptID( | |
153 int script_id, | |
154 blink::WebFrame* web_frame, | |
155 int tab_id, | |
156 UserScript::RunLocation run_location, | |
157 const GURL& document_url, | |
158 const Extension* extension) { | |
159 for (ScopedVector<UserScript>::const_iterator it = scripts_.begin(); | |
160 it != scripts_.end(); | |
161 ++it) { | |
162 if ((*it)->id() == script_id) { | |
163 return GetInjectionForScript(*it, | |
164 web_frame, | |
165 tab_id, | |
166 run_location, | |
167 document_url, | |
168 extension, | |
169 true /* is_declarative */); | |
Devlin
2014/08/25 22:31:06
We should either pass this in as a param or rename
Mark Dittmer
2014/08/27 21:21:48
Done.
| |
170 } | |
171 } | |
172 return scoped_ptr<ScriptInjection>(); | |
173 } | |
174 | |
146 scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( | 175 scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( |
147 UserScript* script, | 176 UserScript* script, |
148 blink::WebFrame* web_frame, | 177 blink::WebFrame* web_frame, |
149 int tab_id, | 178 int tab_id, |
150 UserScript::RunLocation run_location, | 179 UserScript::RunLocation run_location, |
151 const GURL& document_url, | 180 const GURL& document_url, |
152 const Extension* extension) { | 181 const Extension* extension, |
182 bool is_declarative) { | |
153 scoped_ptr<ScriptInjection> injection; | 183 scoped_ptr<ScriptInjection> injection; |
154 if (web_frame->parent() && !script->match_all_frames()) | 184 if (web_frame->parent() && !script->match_all_frames()) |
155 return injection.Pass(); // Only match subframes if the script declared it. | 185 return injection.Pass(); // Only match subframes if the script declared it. |
156 | 186 |
157 GURL effective_document_url = ScriptContext::GetEffectiveDocumentURL( | 187 GURL effective_document_url = ScriptContext::GetEffectiveDocumentURL( |
158 web_frame, document_url, script->match_about_blank()); | 188 web_frame, document_url, script->match_about_blank()); |
159 | 189 |
160 if (!script->MatchesURL(effective_document_url)) | 190 if (!script->MatchesURL(effective_document_url)) |
161 return injection.Pass(); | 191 return injection.Pass(); |
162 | 192 |
163 if (extension->permissions_data()->GetContentScriptAccess( | 193 scoped_ptr<ScriptInjector> injector(new UserScriptInjector(script, |
194 this, | |
195 is_declarative)); | |
196 if (injector->CanExecuteOnFrame( | |
164 extension, | 197 extension, |
165 effective_document_url, | 198 web_frame, |
166 web_frame->top()->document().url(), | |
167 -1, // Content scripts are not tab-specific. | 199 -1, // Content scripts are not tab-specific. |
168 -1, // We don't have a process id in this context. | 200 web_frame->top()->document().url()) == |
169 NULL /* ignore error */) == PermissionsData::ACCESS_DENIED) { | 201 PermissionsData::ACCESS_DENIED) { |
170 return injection.Pass(); | 202 return injection.Pass(); |
171 } | 203 } |
172 | 204 |
173 bool inject_css = !script->css_scripts().empty() && | 205 bool inject_css = !script->css_scripts().empty() && |
174 run_location == UserScript::DOCUMENT_START; | 206 run_location == UserScript::DOCUMENT_START; |
175 bool inject_js = | 207 bool inject_js = |
176 !script->js_scripts().empty() && script->run_location() == run_location; | 208 !script->js_scripts().empty() && script->run_location() == run_location; |
177 if (inject_css || inject_js) { | 209 if (inject_css || inject_js) { |
178 injection.reset(new ScriptInjection( | 210 injection.reset(new ScriptInjection( |
179 scoped_ptr<ScriptInjector>(new UserScriptInjector(script, this)), | 211 injector.Pass(), |
180 web_frame, | 212 web_frame, |
181 extension->id(), | 213 extension->id(), |
182 run_location, | 214 run_location, |
183 tab_id)); | 215 tab_id)); |
184 } | 216 } |
185 return injection.Pass(); | 217 return injection.Pass(); |
186 } | 218 } |
187 | 219 |
188 } // namespace extensions | 220 } // namespace extensions |
OLD | NEW |