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 "chrome/browser/extensions/active_script_controller.h" | 5 #include "chrome/browser/extensions/active_script_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 "Extensions.ActiveScriptController.UnpreventableAdInjectors", | 82 "Extensions.ActiveScriptController.UnpreventableAdInjectors", |
83 ad_injectors.size() - num_preventable_ad_injectors); | 83 ad_injectors.size() - num_preventable_ad_injectors); |
84 } | 84 } |
85 | 85 |
86 void ActiveScriptController::AlwaysRunOnVisibleOrigin( | 86 void ActiveScriptController::AlwaysRunOnVisibleOrigin( |
87 const Extension* extension) { | 87 const Extension* extension) { |
88 const GURL& url = web_contents()->GetVisibleURL(); | 88 const GURL& url = web_contents()->GetVisibleURL(); |
89 URLPatternSet new_explicit_hosts; | 89 URLPatternSet new_explicit_hosts; |
90 URLPatternSet new_scriptable_hosts; | 90 URLPatternSet new_scriptable_hosts; |
91 | 91 |
92 scoped_refptr<const PermissionSet> withheld_permissions = | 92 const PermissionSet* withheld_permissions = |
93 extension->permissions_data()->withheld_permissions(); | 93 extension->permissions_data()->withheld_permissions(); |
94 if (withheld_permissions->explicit_hosts().MatchesURL(url)) { | 94 if (withheld_permissions->explicit_hosts().MatchesURL(url)) { |
95 new_explicit_hosts.AddOrigin(UserScript::ValidUserScriptSchemes(), | 95 new_explicit_hosts.AddOrigin(UserScript::ValidUserScriptSchemes(), |
96 url.GetOrigin()); | 96 url.GetOrigin()); |
97 } | 97 } |
98 if (withheld_permissions->scriptable_hosts().MatchesURL(url)) { | 98 if (withheld_permissions->scriptable_hosts().MatchesURL(url)) { |
99 new_scriptable_hosts.AddOrigin(UserScript::ValidUserScriptSchemes(), | 99 new_scriptable_hosts.AddOrigin(UserScript::ValidUserScriptSchemes(), |
100 url.GetOrigin()); | 100 url.GetOrigin()); |
101 } | 101 } |
102 | 102 |
103 scoped_refptr<PermissionSet> new_permissions = | 103 PermissionSet new_permissions(APIPermissionSet(), ManifestPermissionSet(), |
104 new PermissionSet(APIPermissionSet(), | 104 new_explicit_hosts, new_scriptable_hosts); |
105 ManifestPermissionSet(), | |
106 new_explicit_hosts, | |
107 new_scriptable_hosts); | |
108 | 105 |
109 // Update permissions for the session. This adds |new_permissions| to active | 106 // Update permissions for the session. This adds |new_permissions| to active |
110 // permissions and granted permissions. | 107 // permissions and granted permissions. |
111 // TODO(devlin): Make sure that the permission is removed from | 108 // TODO(devlin): Make sure that the permission is removed from |
112 // withheld_permissions if appropriate. | 109 // withheld_permissions if appropriate. |
113 PermissionsUpdater(browser_context_).AddPermissions(extension, | 110 PermissionsUpdater(browser_context_) |
114 new_permissions.get()); | 111 .AddPermissions(extension, &new_permissions); |
115 | 112 |
116 // Allow current tab to run injection. | 113 // Allow current tab to run injection. |
117 OnClicked(extension); | 114 OnClicked(extension); |
118 } | 115 } |
119 | 116 |
120 void ActiveScriptController::OnClicked(const Extension* extension) { | 117 void ActiveScriptController::OnClicked(const Extension* extension) { |
121 DCHECK(ContainsKey(pending_requests_, extension->id())); | 118 DCHECK(ContainsKey(pending_requests_, extension->id())); |
122 RunPendingForExtension(extension); | 119 RunPendingForExtension(extension); |
123 } | 120 } |
124 | 121 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 // We shouldn't allow extensions which are no longer enabled to run any | 221 // We shouldn't allow extensions which are no longer enabled to run any |
225 // scripts. Ignore the request. | 222 // scripts. Ignore the request. |
226 if (!extension) | 223 if (!extension) |
227 return; | 224 return; |
228 | 225 |
229 // If the request id is -1, that signals that the content script has already | 226 // If the request id is -1, that signals that the content script has already |
230 // ran (because this feature is not enabled). Add the extension to the list of | 227 // ran (because this feature is not enabled). Add the extension to the list of |
231 // permitted extensions (for metrics), and return immediately. | 228 // permitted extensions (for metrics), and return immediately. |
232 if (request_id == -1) { | 229 if (request_id == -1) { |
233 if (PermissionsData::ScriptsMayRequireActionForExtension( | 230 if (PermissionsData::ScriptsMayRequireActionForExtension( |
234 extension, | 231 extension, extension->permissions_data()->active_permissions())) { |
235 extension->permissions_data()->active_permissions().get())) { | |
236 permitted_extensions_.insert(extension->id()); | 232 permitted_extensions_.insert(extension->id()); |
237 } | 233 } |
238 return; | 234 return; |
239 } | 235 } |
240 | 236 |
241 ++num_page_requests_; | 237 ++num_page_requests_; |
242 | 238 |
243 switch (RequiresUserConsentForScriptInjection(extension, script_type)) { | 239 switch (RequiresUserConsentForScriptInjection(extension, script_type)) { |
244 case PermissionsData::ACCESS_ALLOWED: | 240 case PermissionsData::ACCESS_ALLOWED: |
245 PermitScriptInjection(request_id); | 241 PermitScriptInjection(request_id); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 UnloadedExtensionInfo::Reason reason) { | 328 UnloadedExtensionInfo::Reason reason) { |
333 PendingRequestMap::iterator iter = pending_requests_.find(extension->id()); | 329 PendingRequestMap::iterator iter = pending_requests_.find(extension->id()); |
334 if (iter != pending_requests_.end()) { | 330 if (iter != pending_requests_.end()) { |
335 pending_requests_.erase(iter); | 331 pending_requests_.erase(iter); |
336 ExtensionActionAPI::Get(browser_context_)-> | 332 ExtensionActionAPI::Get(browser_context_)-> |
337 NotifyPageActionsChanged(web_contents()); | 333 NotifyPageActionsChanged(web_contents()); |
338 } | 334 } |
339 } | 335 } |
340 | 336 |
341 } // namespace extensions | 337 } // namespace extensions |
OLD | NEW |