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

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: Nits Created 8 years, 5 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 WebRequestPermissions* permissions,
202 const net::URLRequest* request) const { 203 const ExtensionInfoMap* extension_info_map,
203 // TODO(battre): Consider the permission to access requests from the incognito 204 const std::string& extension_id,
204 // profile. 205 const net::URLRequest* request,
205 // TODO(battre): There should be a single place to check permissions for both 206 bool crosses_incognito) const {
206 // the WebRequest API and the Declarative WebRequest API. 207 if (WebRequestPermissions::HideRequest(request))
207 if (helpers::HideRequest(request))
208 return false; 208 return false;
209 if (extension && !helpers::CanExtensionAccessURL(extension, request->url())) 209
210 return false; 210 // In unit tests we don't have a permissions object here and skip host
211 // System requests are passed to extensions without host permissions. 211 // permission checks.
212 // This is the same behavior as found in 212 if (!permissions)
213 // ExtensionWebRequestEventRouter::GetMatchingListenersImpl. 213 return true;
214
215 return permissions->CanExtensionAccessURL(
216 extension_info_map, extension_id, request->url(), crosses_incognito,
217 GetEnforceHostPermissions());
218 }
219
220 bool WebRequestAction::GetEnforceHostPermissions() const {
214 return true; 221 return true;
215 } 222 }
216 223
217 // static 224 // static
218 scoped_ptr<WebRequestAction> WebRequestAction::Create( 225 scoped_ptr<WebRequestAction> WebRequestAction::Create(
219 const base::Value& json_action, 226 const base::Value& json_action,
220 std::string* error, 227 std::string* error,
221 bool* bad_message) { 228 bool* bad_message) {
222 *error = ""; 229 *error = "";
223 *bad_message = false; 230 *bad_message = false;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 WebRequestAction::Create((*i)->value(), error, bad_message); 272 WebRequestAction::Create((*i)->value(), error, bad_message);
266 if (!error->empty() || *bad_message) 273 if (!error->empty() || *bad_message)
267 return scoped_ptr<WebRequestActionSet>(NULL); 274 return scoped_ptr<WebRequestActionSet>(NULL);
268 result.push_back(make_linked_ptr(action.release())); 275 result.push_back(make_linked_ptr(action.release()));
269 } 276 }
270 277
271 return scoped_ptr<WebRequestActionSet>(new WebRequestActionSet(result)); 278 return scoped_ptr<WebRequestActionSet>(new WebRequestActionSet(result));
272 } 279 }
273 280
274 std::list<LinkedPtrEventResponseDelta> WebRequestActionSet::CreateDeltas( 281 std::list<LinkedPtrEventResponseDelta> WebRequestActionSet::CreateDeltas(
275 const extensions::Extension* extension, 282 const WebRequestPermissions* permissions,
283 const ExtensionInfoMap* extension_info_map,
284 const std::string& extension_id,
276 net::URLRequest* request, 285 net::URLRequest* request,
286 bool crosses_incognito,
277 RequestStages request_stage, 287 RequestStages request_stage,
278 const WebRequestRule::OptionalRequestData& optional_request_data, 288 const WebRequestRule::OptionalRequestData& optional_request_data,
279 const std::string& extension_id,
280 const base::Time& extension_install_time) const { 289 const base::Time& extension_install_time) const {
281 std::list<LinkedPtrEventResponseDelta> result; 290 std::list<LinkedPtrEventResponseDelta> result;
282 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) { 291 for (Actions::const_iterator i = actions_.begin(); i != actions_.end(); ++i) {
283 if (!(*i)->HasPermission(extension, request)) 292 if (!(*i)->HasPermission(permissions, extension_info_map, extension_id,
293 request, crosses_incognito))
284 continue; 294 continue;
285 if ((*i)->GetStages() & request_stage) { 295 if ((*i)->GetStages() & request_stage) {
286 LinkedPtrEventResponseDelta delta = (*i)->CreateDelta(request, 296 LinkedPtrEventResponseDelta delta = (*i)->CreateDelta(request,
287 request_stage, optional_request_data, extension_id, 297 request_stage, optional_request_data, extension_id,
288 extension_install_time); 298 extension_install_time);
289 if (delta.get()) 299 if (delta.get())
290 result.push_back(delta); 300 result.push_back(delta);
291 } 301 }
292 } 302 }
293 return result; 303 return result;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 385
376 int WebRequestRedirectToTransparentImageAction::GetStages() const { 386 int WebRequestRedirectToTransparentImageAction::GetStages() const {
377 return ON_BEFORE_REQUEST; 387 return ON_BEFORE_REQUEST;
378 } 388 }
379 389
380 WebRequestAction::Type 390 WebRequestAction::Type
381 WebRequestRedirectToTransparentImageAction::GetType() const { 391 WebRequestRedirectToTransparentImageAction::GetType() const {
382 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE; 392 return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE;
383 } 393 }
384 394
385 bool WebRequestRedirectToTransparentImageAction::HasPermission( 395 bool
386 const extensions::Extension* extension, 396 WebRequestRedirectToTransparentImageAction::GetEnforceHostPermissions() const {
387 const net::URLRequest* request) const { 397 return false;
388 // TODO(battre): Consider the permission to access requests from the incognito
389 // profile.
390 return true;
391 } 398 }
392 399
393 LinkedPtrEventResponseDelta 400 LinkedPtrEventResponseDelta
394 WebRequestRedirectToTransparentImageAction::CreateDelta( 401 WebRequestRedirectToTransparentImageAction::CreateDelta(
395 net::URLRequest* request, 402 net::URLRequest* request,
396 RequestStages request_stage, 403 RequestStages request_stage,
397 const WebRequestRule::OptionalRequestData& optional_request_data, 404 const WebRequestRule::OptionalRequestData& optional_request_data,
398 const std::string& extension_id, 405 const std::string& extension_id,
399 const base::Time& extension_install_time) const { 406 const base::Time& extension_install_time) const {
400 CHECK(request_stage & GetStages()); 407 CHECK(request_stage & GetStages());
(...skipping 15 matching lines...) Expand all
416 423
417 int WebRequestRedirectToEmptyDocumentAction::GetStages() const { 424 int WebRequestRedirectToEmptyDocumentAction::GetStages() const {
418 return ON_BEFORE_REQUEST; 425 return ON_BEFORE_REQUEST;
419 } 426 }
420 427
421 WebRequestAction::Type 428 WebRequestAction::Type
422 WebRequestRedirectToEmptyDocumentAction::GetType() const { 429 WebRequestRedirectToEmptyDocumentAction::GetType() const {
423 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT; 430 return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT;
424 } 431 }
425 432
426 bool WebRequestRedirectToEmptyDocumentAction::HasPermission( 433 bool
427 const extensions::Extension* extension, 434 WebRequestRedirectToEmptyDocumentAction::GetEnforceHostPermissions() const {
428 const net::URLRequest* request) const { 435 return false;
429 return true;
430 } 436 }
431 437
432 LinkedPtrEventResponseDelta 438 LinkedPtrEventResponseDelta
433 WebRequestRedirectToEmptyDocumentAction::CreateDelta( 439 WebRequestRedirectToEmptyDocumentAction::CreateDelta(
434 net::URLRequest* request, 440 net::URLRequest* request,
435 RequestStages request_stage, 441 RequestStages request_stage,
436 const WebRequestRule::OptionalRequestData& optional_request_data, 442 const WebRequestRule::OptionalRequestData& optional_request_data,
437 const std::string& extension_id, 443 const std::string& extension_id,
438 const base::Time& extension_install_time) const { 444 const base::Time& extension_install_time) const {
439 CHECK(request_stage & GetStages()); 445 CHECK(request_stage & GetStages());
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 } 743 }
738 744
739 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const { 745 WebRequestAction::Type WebRequestIgnoreRulesAction::GetType() const {
740 return WebRequestAction::ACTION_IGNORE_RULES; 746 return WebRequestAction::ACTION_IGNORE_RULES;
741 } 747 }
742 748
743 int WebRequestIgnoreRulesAction::GetMinimumPriority() const { 749 int WebRequestIgnoreRulesAction::GetMinimumPriority() const {
744 return minimum_priority_; 750 return minimum_priority_;
745 } 751 }
746 752
747 bool WebRequestIgnoreRulesAction::HasPermission( 753 bool WebRequestIgnoreRulesAction::GetEnforceHostPermissions() const {
748 const extensions::Extension* extension, 754 return false;
749 const net::URLRequest* request) const {
750 return true;
751 } 755 }
752 756
753 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta( 757 LinkedPtrEventResponseDelta WebRequestIgnoreRulesAction::CreateDelta(
754 net::URLRequest* request, 758 net::URLRequest* request,
755 RequestStages request_stage, 759 RequestStages request_stage,
756 const WebRequestRule::OptionalRequestData& optional_request_data, 760 const WebRequestRule::OptionalRequestData& optional_request_data,
757 const std::string& extension_id, 761 const std::string& extension_id,
758 const base::Time& extension_install_time) const { 762 const base::Time& extension_install_time) const {
759 CHECK(request_stage & GetStages()); 763 CHECK(request_stage & GetStages());
760 return LinkedPtrEventResponseDelta(NULL); 764 return LinkedPtrEventResponseDelta(NULL);
761 } 765 }
762 766
763 } // namespace extensions 767 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698