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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc

Issue 10831008: Refactor and fix declarative webRequest API permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed license headers Created 8 years, 4 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/api/declarative_webrequest/webrequest_action .h" 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_action .h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" 15 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h"
16 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta nts.h" 16 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta nts.h"
17 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 17 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
18 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
18 #include "chrome/browser/extensions/extension_info_map.h" 19 #include "chrome/browser/extensions/extension_info_map.h"
19 #include "chrome/common/extensions/extension.h" 20 #include "chrome/common/extensions/extension.h"
20 #include "net/url_request/url_request.h" 21 #include "net/url_request/url_request.h"
21 22
22 namespace extensions { 23 namespace extensions {
23 24
24 namespace helpers = extension_web_request_api_helpers; 25 namespace helpers = extension_web_request_api_helpers;
25 namespace keys = declarative_webrequest_constants; 26 namespace keys = declarative_webrequest_constants;
26 27
27 namespace { 28 namespace {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 // 192 //
192 193
193 WebRequestAction::WebRequestAction() {} 194 WebRequestAction::WebRequestAction() {}
194 195
195 WebRequestAction::~WebRequestAction() {} 196 WebRequestAction::~WebRequestAction() {}
196 197
197 int WebRequestAction::GetMinimumPriority() const { 198 int WebRequestAction::GetMinimumPriority() const {
198 return std::numeric_limits<int>::min(); 199 return std::numeric_limits<int>::min();
199 } 200 }
200 201
201 bool WebRequestAction::HasPermission(const extensions::Extension* extension, 202 bool WebRequestAction::HasPermission(const ExtensionInfoMap* extension_info_map,
202 const net::URLRequest* request) const { 203 const std::string& extension_id,
203 // TODO(battre): Consider the permission to access requests from the incognito 204 const net::URLRequest* request,
204 // profile. 205 bool crosses_incognito) const {
205 // TODO(battre): There should be a single place to check permissions for both 206 if (WebRequestPermissions::HideRequest(request))
206 // the WebRequest API and the Declarative WebRequest API.
207 if (helpers::HideRequest(request))
208 return false; 207 return false;
209 if (extension && !helpers::CanExtensionAccessURL(extension, request->url())) 208
210 return false; 209 // In unit tests we don't have an extension_info_map object here and skip host
211 // System requests are passed to extensions without host permissions. 210 // permission checks.
212 // This is the same behavior as found in 211 if (!extension_info_map)
213 // ExtensionWebRequestEventRouter::GetMatchingListenersImpl. 212 return true;
213
214 return WebRequestPermissions::CanExtensionAccessURL(
215 extension_info_map, extension_id, request->url(), crosses_incognito,
216 ShouldEnforceHostPermissions());
217 }
218
219 bool WebRequestAction::ShouldEnforceHostPermissions() const {
214 return true; 220 return true;
215 } 221 }
216 222
217 // static 223 // static
218 scoped_ptr<WebRequestAction> WebRequestAction::Create( 224 scoped_ptr<WebRequestAction> WebRequestAction::Create(
219 const base::Value& json_action, 225 const base::Value& json_action,
220 std::string* error, 226 std::string* error,
221 bool* bad_message) { 227 bool* bad_message) {
222 *error = ""; 228 *error = "";
223 *bad_message = false; 229 *bad_message = false;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 WebRequestAction::Create((*i)->value(), error, bad_message); 271 WebRequestAction::Create((*i)->value(), error, bad_message);
266 if (!error->empty() || *bad_message) 272 if (!error->empty() || *bad_message)
267 return scoped_ptr<WebRequestActionSet>(NULL); 273 return scoped_ptr<WebRequestActionSet>(NULL);
268 result.push_back(make_linked_ptr(action.release())); 274 result.push_back(make_linked_ptr(action.release()));
269 } 275 }
270 276
271 return scoped_ptr<WebRequestActionSet>(new WebRequestActionSet(result)); 277 return scoped_ptr<WebRequestActionSet>(new WebRequestActionSet(result));
272 } 278 }
273 279
274 std::list<LinkedPtrEventResponseDelta> WebRequestActionSet::CreateDeltas( 280 std::list<LinkedPtrEventResponseDelta> WebRequestActionSet::CreateDeltas(
275 const extensions::Extension* extension, 281 const ExtensionInfoMap* extension_info_map,
282 const std::string& extension_id,
276 net::URLRequest* request, 283 net::URLRequest* request,
284 bool crosses_incognito,
277 RequestStages request_stage, 285 RequestStages request_stage,
278 const WebRequestRule::OptionalRequestData& optional_request_data, 286 const WebRequestRule::OptionalRequestData& optional_request_data,
279 const std::string& extension_id,
280 const base::Time& extension_install_time) const { 287 const base::Time& extension_install_time) const {
281 std::list<LinkedPtrEventResponseDelta> result; 288 std::list<LinkedPtrEventResponseDelta> result;
282 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) { 289 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) {
283 if (!(*i)->HasPermission(extension, request)) 290 if (!(*i)->HasPermission(extension_info_map, extension_id, request,
291 crosses_incognito))
284 continue; 292 continue;
285 if ((*i)->GetStages() & request_stage) { 293 if ((*i)->GetStages() & request_stage) {
286 LinkedPtrEventResponseDelta delta = (*i)->CreateDelta(request, 294 LinkedPtrEventResponseDelta delta = (*i)->CreateDelta(request,
287 request_stage, optional_request_data, extension_id, 295 request_stage, optional_request_data, extension_id,
288 extension_install_time); 296 extension_install_time);
289 if (delta.get()) 297 if (delta.get())
290 result.push_back(delta); 298 result.push_back(delta);
291 } 299 }
292 } 300 }
293 return result; 301 return result;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 383
376 int WebRequestRedirectToTransparentImageAction::GetStages() const { 384 int WebRequestRedirectToTransparentImageAction::GetStages() const {
377 return ON_BEFORE_REQUEST; 385 return ON_BEFORE_REQUEST;
378 } 386 }
379 387
380 WebRequestAction::Type 388 WebRequestAction::Type
381 WebRequestRedirectToTransparentImageAction::GetType() const { 389 WebRequestRedirectToTransparentImageAction::GetType() const {
382 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE; 390 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE;
383 } 391 }
384 392
385 bool WebRequestRedirectToTransparentImageAction::HasPermission( 393 bool WebRequestRedirectToTransparentImageAction::ShouldEnforceHostPermissions()
386 const extensions::Extension* extension, 394 const {
387 const net::URLRequest* request) const { 395 return false;
388 // TODO(battre): Consider the permission to access requests from the incognito
389 // profile.
390 return true;
391 } 396 }
392 397
393 LinkedPtrEventResponseDelta 398 LinkedPtrEventResponseDelta
394 WebRequestRedirectToTransparentImageAction::CreateDelta( 399 WebRequestRedirectToTransparentImageAction::CreateDelta(
395 net::URLRequest* request, 400 net::URLRequest* request,
396 RequestStages request_stage, 401 RequestStages request_stage,
397 const WebRequestRule::OptionalRequestData& optional_request_data, 402 const WebRequestRule::OptionalRequestData& optional_request_data,
398 const std::string& extension_id, 403 const std::string& extension_id,
399 const base::Time& extension_install_time) const { 404 const base::Time& extension_install_time) const {
400 CHECK(request_stage & GetStages()); 405 CHECK(request_stage & GetStages());
(...skipping 15 matching lines...) Expand all
416 421
417 int WebRequestRedirectToEmptyDocumentAction::GetStages() const { 422 int WebRequestRedirectToEmptyDocumentAction::GetStages() const {
418 return ON_BEFORE_REQUEST; 423 return ON_BEFORE_REQUEST;
419 } 424 }
420 425
421 WebRequestAction::Type 426 WebRequestAction::Type
422 WebRequestRedirectToEmptyDocumentAction::GetType() const { 427 WebRequestRedirectToEmptyDocumentAction::GetType() const {
423 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT; 428 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT;
424 } 429 }
425 430
426 bool WebRequestRedirectToEmptyDocumentAction::HasPermission( 431 bool
427 const extensions::Extension* extension, 432 WebRequestRedirectToEmptyDocumentAction::ShouldEnforceHostPermissions() const {
428 const net::URLRequest* request) const { 433 return false;
429 return true;
430 } 434 }
431 435
432 LinkedPtrEventResponseDelta 436 LinkedPtrEventResponseDelta
433 WebRequestRedirectToEmptyDocumentAction::CreateDelta( 437 WebRequestRedirectToEmptyDocumentAction::CreateDelta(
434 net::URLRequest* request, 438 net::URLRequest* request,
435 RequestStages request_stage, 439 RequestStages request_stage,
436 const WebRequestRule::OptionalRequestData& optional_request_data, 440 const WebRequestRule::OptionalRequestData& optional_request_data,
437 const std::string& extension_id, 441 const std::string& extension_id,
438 const base::Time& extension_install_time) const { 442 const base::Time& extension_install_time) const {
439 CHECK(request_stage & GetStages()); 443 CHECK(request_stage & GetStages());
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 } 741 }
738 742
739 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const { 743 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const {
740 return WebRequestAction::ACTION_IGNORE_RULES; 744 return WebRequestAction::ACTION_IGNORE_RULES;
741 } 745 }
742 746
743 int WebRequestIgnoreRulesAction::GetMinimumPriority() const { 747 int WebRequestIgnoreRulesAction::GetMinimumPriority() const {
744 return minimum_priority_; 748 return minimum_priority_;
745 } 749 }
746 750
747 bool WebRequestIgnoreRulesAction::HasPermission( 751 bool WebRequestIgnoreRulesAction::ShouldEnforceHostPermissions() const {
748 const extensions::Extension* extension, 752 return false;
749 const net::URLRequest* request) const {
750 return true;
751 } 753 }
752 754
753 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta( 755 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta(
754 net::URLRequest* request, 756 net::URLRequest* request,
755 RequestStages request_stage, 757 RequestStages request_stage,
756 const WebRequestRule::OptionalRequestData& optional_request_data, 758 const WebRequestRule::OptionalRequestData& optional_request_data,
757 const std::string& extension_id, 759 const std::string& extension_id,
758 const base::Time& extension_install_time) const { 760 const base::Time& extension_install_time) const {
759 CHECK(request_stage & GetStages()); 761 CHECK(request_stage & GetStages());
760 return LinkedPtrEventResponseDelta(NULL); 762 return LinkedPtrEventResponseDelta(NULL);
761 } 763 }
762 764
763 } // namespace extensions 765 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698