Commit 327ca954 authored by yoz@chromium.org's avatar yoz@chromium.org

Refactor request parameters into RequestData struct. Also make RequestStage singular.

This simplifies (eventually) passing the optional parameters into WebRequestCondition.

BUG=112155
TBR=ben@chromium.org


Review URL: https://chromiumcodereview.appspot.com/10831150

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149854 0039d316-1c4b-4281-b951-d872f2087c98
parent 5bba33c8
...@@ -2,17 +2,15 @@ ...@@ -2,17 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_REQUEST_STAGES_H_ #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_REQUEST_STAGE_H_
#define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_REQUEST_STAGES_H_ #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_REQUEST_STAGE_H_
namespace extensions { namespace extensions {
// The stages of the web request during which a condition can be tested and // The stages of the web request during which a condition can be tested and
// an action can be applied. This is required because for example the response // an action can be applied. This is required because for example the response
// headers cannot be tested before a request has been sent. // headers cannot be tested before a request has been sent.
// enum RequestStage {
// TODO(battre) rename to singular.
enum RequestStages {
ON_BEFORE_REQUEST = 1 << 0, ON_BEFORE_REQUEST = 1 << 0,
ON_BEFORE_SEND_HEADERS = 1 << 1, ON_BEFORE_SEND_HEADERS = 1 << 1,
ON_SEND_HEADERS = 1 << 2, ON_SEND_HEADERS = 1 << 2,
...@@ -26,4 +24,4 @@ enum RequestStages { ...@@ -26,4 +24,4 @@ enum RequestStages {
} // namespace extensions } // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_REQUEST_STAGES_H_ #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_REQUEST_STAGE_H_
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/linked_ptr.h" #include "base/memory/linked_ptr.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
#include "chrome/common/extensions/api/events.h" #include "chrome/common/extensions/api/events.h"
...@@ -65,7 +65,7 @@ class WebRequestAction { ...@@ -65,7 +65,7 @@ class WebRequestAction {
WebRequestAction(); WebRequestAction();
virtual ~WebRequestAction(); virtual ~WebRequestAction();
// Returns a bit vector representing extensions::RequestStages. The bit vector // Returns a bit vector representing extensions::RequestStage. The bit vector
// contains a 1 for each request stage during which the condition can be // contains a 1 for each request stage during which the condition can be
// tested. // tested.
virtual int GetStages() const = 0; virtual int GetStages() const = 0;
...@@ -102,12 +102,10 @@ class WebRequestAction { ...@@ -102,12 +102,10 @@ class WebRequestAction {
std::string* error, std::string* error,
bool* bad_message); bool* bad_message);
// Returns a description of the modification to |request| caused by this // Returns a description of the modification to the request caused by
// action. // this action.
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const = 0; const base::Time& extension_install_time) const = 0;
}; };
...@@ -132,16 +130,14 @@ class WebRequestActionSet { ...@@ -132,16 +130,14 @@ class WebRequestActionSet {
std::string* error, std::string* error,
bool* bad_message); bool* bad_message);
// Returns a description of the modifications to |request| caused by the // Returns a description of the modifications to |request_data.request| caused
// |actions_| that can be executed at |request_stage|. If |extension| // by the |actions_| that can be executed at |request.stage|. If |extension|
// is not NULL, permissions of extensions are checked. // is not NULL, permissions of extensions are checked.
std::list<LinkedPtrEventResponseDelta> CreateDeltas( std::list<LinkedPtrEventResponseDelta> CreateDeltas(
const ExtensionInfoMap* extension_info_map, const ExtensionInfoMap* extension_info_map,
const std::string& extension_id, const std::string& extension_id,
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
bool crosses_incognito, bool crosses_incognito,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const base::Time& extension_install_time) const; const base::Time& extension_install_time) const;
// Returns the minimum priority of rules that may be evaluated after // Returns the minimum priority of rules that may be evaluated after
...@@ -170,9 +166,7 @@ class WebRequestCancelAction : public WebRequestAction { ...@@ -170,9 +166,7 @@ class WebRequestCancelAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -190,9 +184,7 @@ class WebRequestRedirectAction : public WebRequestAction { ...@@ -190,9 +184,7 @@ class WebRequestRedirectAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -213,9 +205,7 @@ class WebRequestRedirectToTransparentImageAction : public WebRequestAction { ...@@ -213,9 +205,7 @@ class WebRequestRedirectToTransparentImageAction : public WebRequestAction {
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual bool ShouldEnforceHostPermissions() const OVERRIDE; virtual bool ShouldEnforceHostPermissions() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -235,9 +225,7 @@ class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction { ...@@ -235,9 +225,7 @@ class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction {
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual bool ShouldEnforceHostPermissions() const OVERRIDE; virtual bool ShouldEnforceHostPermissions() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -263,9 +251,7 @@ class WebRequestRedirectByRegExAction : public WebRequestAction { ...@@ -263,9 +251,7 @@ class WebRequestRedirectByRegExAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -287,9 +273,7 @@ class WebRequestSetRequestHeaderAction : public WebRequestAction { ...@@ -287,9 +273,7 @@ class WebRequestSetRequestHeaderAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -309,9 +293,7 @@ class WebRequestRemoveRequestHeaderAction : public WebRequestAction { ...@@ -309,9 +293,7 @@ class WebRequestRemoveRequestHeaderAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -331,9 +313,7 @@ class WebRequestAddResponseHeaderAction : public WebRequestAction { ...@@ -331,9 +313,7 @@ class WebRequestAddResponseHeaderAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -355,9 +335,7 @@ class WebRequestRemoveResponseHeaderAction : public WebRequestAction { ...@@ -355,9 +335,7 @@ class WebRequestRemoveResponseHeaderAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -380,9 +358,7 @@ class WebRequestIgnoreRulesAction : public WebRequestAction { ...@@ -380,9 +358,7 @@ class WebRequestIgnoreRulesAction : public WebRequestAction {
virtual int GetMinimumPriority() const OVERRIDE; virtual int GetMinimumPriority() const OVERRIDE;
virtual bool ShouldEnforceHostPermissions() const OVERRIDE; virtual bool ShouldEnforceHostPermissions() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -405,9 +381,7 @@ class WebRequestRequestCookieAction : public WebRequestAction { ...@@ -405,9 +381,7 @@ class WebRequestRequestCookieAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
...@@ -430,9 +404,7 @@ class WebRequestResponseCookieAction : public WebRequestAction { ...@@ -430,9 +404,7 @@ class WebRequestResponseCookieAction : public WebRequestAction {
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta( virtual LinkedPtrEventResponseDelta CreateDelta(
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data,
const std::string& extension_id, const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE; const base::Time& extension_install_time) const OVERRIDE;
......
...@@ -148,16 +148,18 @@ TEST(WebRequestActionTest, TestPermissions) { ...@@ -148,16 +148,18 @@ TEST(WebRequestActionTest, TestPermissions) {
// Check that redirect works on regular URLs but not on protected URLs. // Check that redirect works on regular URLs but not on protected URLs.
TestURLRequest regular_request(GURL("http://test.com"), NULL, &context); TestURLRequest regular_request(GURL("http://test.com"), NULL, &context);
std::list<LinkedPtrEventResponseDelta> deltas = std::list<LinkedPtrEventResponseDelta> deltas =
action_set->CreateDeltas(NULL, "ext1", &regular_request, false, action_set->CreateDeltas(
ON_BEFORE_REQUEST, WebRequestRule::OptionalRequestData(), NULL, "ext1",
base::Time()); WebRequestRule::RequestData(&regular_request, ON_BEFORE_REQUEST),
false, base::Time());
EXPECT_EQ(1u, deltas.size()); EXPECT_EQ(1u, deltas.size());
TestURLRequest protected_request(GURL(extension_urls::kGalleryBrowsePrefix), TestURLRequest protected_request(GURL(extension_urls::kGalleryBrowsePrefix),
NULL, &context); NULL, &context);
deltas = action_set->CreateDeltas(NULL, "ext1", &protected_request, false, deltas = action_set->CreateDeltas(
ON_BEFORE_REQUEST, WebRequestRule::OptionalRequestData(), NULL, "ext1",
base::Time()); WebRequestRule::RequestData(&protected_request, ON_BEFORE_REQUEST),
false, base::Time());
EXPECT_EQ(0u, deltas.size()); EXPECT_EQ(0u, deltas.size());
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/stringprintf.h" #include "base/stringprintf.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
...@@ -55,17 +55,17 @@ WebRequestCondition::WebRequestCondition( ...@@ -55,17 +55,17 @@ WebRequestCondition::WebRequestCondition(
WebRequestCondition::~WebRequestCondition() {} WebRequestCondition::~WebRequestCondition() {}
bool WebRequestCondition::IsFulfilled(net::URLRequest* request, bool WebRequestCondition::IsFulfilled(
RequestStages request_stage) const { const WebRequestRule::RequestData& request_data) const {
// All condition attributes must be fulfilled for a fulfilled condition. // All condition attributes must be fulfilled for a fulfilled condition.
if (!(request_stage & applicable_request_stages_)) { if (!(request_data.stage & applicable_request_stages_)) {
// A condition that cannot be evaluated is considered as violated. // A condition that cannot be evaluated is considered as violated.
return false; return false;
} }
for (WebRequestConditionAttributes::const_iterator i = for (WebRequestConditionAttributes::const_iterator i =
condition_attributes_.begin(); i != condition_attributes_.end(); ++i) { condition_attributes_.begin(); i != condition_attributes_.end(); ++i) {
if (!(*i)->IsFulfilled(request, request_stage)) if (!(*i)->IsFulfilled(request_data))
return false; return false;
} }
return true; return true;
...@@ -160,12 +160,11 @@ WebRequestConditionSet::~WebRequestConditionSet() {} ...@@ -160,12 +160,11 @@ WebRequestConditionSet::~WebRequestConditionSet() {}
bool WebRequestConditionSet::IsFulfilled( bool WebRequestConditionSet::IsFulfilled(
URLMatcherConditionSet::ID url_match, URLMatcherConditionSet::ID url_match,
net::URLRequest* request, const WebRequestRule::RequestData& request_data) const {
RequestStages request_stage) const {
MatchTriggers::const_iterator trigger = match_triggers_.find(url_match); MatchTriggers::const_iterator trigger = match_triggers_.find(url_match);
DCHECK(trigger != match_triggers_.end()); DCHECK(trigger != match_triggers_.end());
DCHECK_EQ(url_match, trigger->second->url_matcher_condition_set_id()); DCHECK_EQ(url_match, trigger->second->url_matcher_condition_set_id());
return trigger->second->IsFulfilled(request, request_stage); return trigger->second->IsFulfilled(request_data);
} }
void WebRequestConditionSet::GetURLMatcherConditionSets( void WebRequestConditionSet::GetURLMatcherConditionSets(
......
...@@ -46,9 +46,9 @@ class WebRequestCondition { ...@@ -46,9 +46,9 @@ class WebRequestCondition {
const base::Value& condition, const base::Value& condition,
std::string* error); std::string* error);
// Returns whether |request| is a match, given that the URLMatcher found // Returns whether the request is a match, given that the URLMatcher found
// a match for |url_matcher_conditions_|. // a match for |url_matcher_conditions_|.
bool IsFulfilled(net::URLRequest* request, RequestStages request_stage) const; bool IsFulfilled(const WebRequestRule::RequestData& request_data) const;
// Returns a URLMatcherConditionSet::ID which is the canonical representation // Returns a URLMatcherConditionSet::ID which is the canonical representation
// for all URL patterns that need to be matched by this WebRequestCondition. // for all URL patterns that need to be matched by this WebRequestCondition.
...@@ -70,7 +70,7 @@ class WebRequestCondition { ...@@ -70,7 +70,7 @@ class WebRequestCondition {
scoped_refptr<URLMatcherConditionSet> url_matcher_conditions_; scoped_refptr<URLMatcherConditionSet> url_matcher_conditions_;
WebRequestConditionAttributes condition_attributes_; WebRequestConditionAttributes condition_attributes_;
// Bit vector indicating all RequestStages during which all // Bit vector indicating all RequestStage during which all
// |condition_attributes_| can be evaluated. // |condition_attributes_| can be evaluated.
int applicable_request_stages_; int applicable_request_stages_;
...@@ -101,13 +101,13 @@ class WebRequestConditionSet { ...@@ -101,13 +101,13 @@ class WebRequestConditionSet {
} }
// Returns whether any condition in the condition set is fulfilled // Returns whether any condition in the condition set is fulfilled
// based on a match |url_match| and the value of |request|. This function // based on a match |url_match| and the value of |request_data.request|.
// should be called for each URLMatcherConditionSet::ID that was found // This function should be called for each URLMatcherConditionSet::ID
// by the URLMatcher to ensure that the each trigger in |match_triggers_| is // that was found by the URLMatcher to ensure that the each trigger in
// found. // |match_triggers_| is found.
bool IsFulfilled(URLMatcherConditionSet::ID url_match, bool IsFulfilled(
net::URLRequest* request, URLMatcherConditionSet::ID url_match,
RequestStages request_stage) const; const WebRequestRule::RequestData& request_data) const;
// Appends the URLMatcherConditionSet from all conditions to |condition_sets|. // Appends the URLMatcherConditionSet from all conditions to |condition_sets|.
void GetURLMatcherConditionSets( void GetURLMatcherConditionSets(
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/stringprintf.h" #include "base/stringprintf.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
#include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
#include "content/public/browser/resource_request_info.h" #include "content/public/browser/resource_request_info.h"
...@@ -114,12 +114,11 @@ int WebRequestConditionAttributeResourceType::GetStages() const { ...@@ -114,12 +114,11 @@ int WebRequestConditionAttributeResourceType::GetStages() const {
} }
bool WebRequestConditionAttributeResourceType::IsFulfilled( bool WebRequestConditionAttributeResourceType::IsFulfilled(
net::URLRequest* request, const WebRequestRule::RequestData& request_data) {
RequestStages request_stage) { if (!(request_data.stage & GetStages()))
if (!(request_stage & GetStages()))
return false; return false;
const content::ResourceRequestInfo* info = const content::ResourceRequestInfo* info =
content::ResourceRequestInfo::ForRequest(request); content::ResourceRequestInfo::ForRequest(request_data.request);
if (!info) if (!info)
return false; return false;
return std::find(types_.begin(), types_.end(), info->GetResourceType()) != return std::find(types_.begin(), types_.end(), info->GetResourceType()) !=
......
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/memory/linked_ptr.h" #include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "chrome/common/extensions/api/events.h" #include "chrome/common/extensions/api/events.h"
#include "webkit/glue/resource_type.h" #include "webkit/glue/resource_type.h"
...@@ -45,14 +46,13 @@ class WebRequestConditionAttribute { ...@@ -45,14 +46,13 @@ class WebRequestConditionAttribute {
const base::Value* value, const base::Value* value,
std::string* error); std::string* error);
// Returns a bit vector representing extensions::RequestStages. The bit vector // Returns a bit vector representing extensions::RequestStage. The bit vector
// contains a 1 for each request stage during which the condition attribute // contains a 1 for each request stage during which the condition attribute
// can be tested. // can be tested.
virtual int GetStages() const = 0; virtual int GetStages() const = 0;
// Returns whether the condition is fulfilled for this request. // Returns whether the condition is fulfilled for this request.
virtual bool IsFulfilled(net::URLRequest* request, virtual bool IsFulfilled(const WebRequestRule::RequestData& request_data) = 0;
RequestStages request_stage) = 0;
virtual Type GetType() const = 0; virtual Type GetType() const = 0;
...@@ -87,8 +87,8 @@ class WebRequestConditionAttributeResourceType ...@@ -87,8 +87,8 @@ class WebRequestConditionAttributeResourceType
// Implementation of WebRequestConditionAttribute: // Implementation of WebRequestConditionAttribute:
virtual int GetStages() const OVERRIDE; virtual int GetStages() const OVERRIDE;
virtual bool IsFulfilled(net::URLRequest* request, virtual bool IsFulfilled(const WebRequestRule::RequestData& request_data)
RequestStages request_stage) OVERRIDE; OVERRIDE;
virtual Type GetType() const OVERRIDE; virtual Type GetType() const OVERRIDE;
private: private:
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/message_loop.h" #include "base/message_loop.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "content/public/browser/resource_request_info.h" #include "content/public/browser/resource_request_info.h"
#include "net/url_request/url_request_test_util.h" #include "net/url_request/url_request_test_util.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -71,13 +72,15 @@ TEST(WebRequestConditionAttributeTest, TestResourceType) { ...@@ -71,13 +72,15 @@ TEST(WebRequestConditionAttributeTest, TestResourceType) {
TestURLRequest url_request_ok(GURL("http://www.example.com"), NULL, &context); TestURLRequest url_request_ok(GURL("http://www.example.com"), NULL, &context);
content::ResourceRequestInfo::AllocateForTesting(&url_request_ok, content::ResourceRequestInfo::AllocateForTesting(&url_request_ok,
ResourceType::MAIN_FRAME, NULL, -1, -1); ResourceType::MAIN_FRAME, NULL, -1, -1);
EXPECT_TRUE(attribute->IsFulfilled(&url_request_ok, ON_BEFORE_REQUEST)); EXPECT_TRUE(attribute->IsFulfilled(
WebRequestRule::RequestData(&url_request_ok, ON_BEFORE_REQUEST)));
TestURLRequest url_request_fail( TestURLRequest url_request_fail(
GURL("http://www.example.com"), NULL, &context); GURL("http://www.example.com"), NULL, &context);
content::ResourceRequestInfo::AllocateForTesting(&url_request_ok, content::ResourceRequestInfo::AllocateForTesting(&url_request_ok,
ResourceType::SUB_FRAME, NULL, -1, -1); ResourceType::SUB_FRAME, NULL, -1, -1);
EXPECT_FALSE(attribute->IsFulfilled(&url_request_fail, ON_BEFORE_REQUEST)); EXPECT_FALSE(attribute->IsFulfilled(
WebRequestRule::RequestData(&url_request_fail, ON_BEFORE_REQUEST)));
} }
} // namespace extensions } // namespace extensions
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/message_loop.h" #include "base/message_loop.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "chrome/common/extensions/matcher/url_matcher_constants.h" #include "chrome/common/extensions/matcher/url_matcher_constants.h"
#include "content/public/browser/resource_request_info.h" #include "content/public/browser/resource_request_info.h"
#include "net/url_request/url_request_test_util.h" #include "net/url_request/url_request_test_util.h"
...@@ -72,13 +73,15 @@ TEST(WebRequestConditionTest, CreateCondition) { ...@@ -72,13 +73,15 @@ TEST(WebRequestConditionTest, CreateCondition) {
TestURLRequest match_request(GURL("http://www.example.com"), NULL, &context); TestURLRequest match_request(GURL("http://www.example.com"), NULL, &context);
content::ResourceRequestInfo::AllocateForTesting(&match_request, content::ResourceRequestInfo::AllocateForTesting(&match_request,
ResourceType::MAIN_FRAME, NULL, -1, -1); ResourceType::MAIN_FRAME, NULL, -1, -1);
EXPECT_TRUE(result->IsFulfilled(&match_request, ON_BEFORE_REQUEST)); EXPECT_TRUE(result->IsFulfilled(
WebRequestRule::RequestData(&match_request, ON_BEFORE_REQUEST)));
TestURLRequest wrong_resource_type( TestURLRequest wrong_resource_type(
GURL("https://www.example.com"), NULL, &context); GURL("https://www.example.com"), NULL, &context);
content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type, content::ResourceRequestInfo::AllocateForTesting(&wrong_resource_type,
ResourceType::SUB_FRAME, NULL, -1, -1); ResourceType::SUB_FRAME, NULL, -1, -1);
EXPECT_FALSE(result->IsFulfilled(&wrong_resource_type, ON_BEFORE_REQUEST)); EXPECT_FALSE(result->IsFulfilled(
WebRequestRule::RequestData(&wrong_resource_type, ON_BEFORE_REQUEST)));
} }
TEST(WebRequestConditionTest, CreateConditionSet) { TEST(WebRequestConditionTest, CreateConditionSet) {
...@@ -142,7 +145,8 @@ TEST(WebRequestConditionTest, CreateConditionSet) { ...@@ -142,7 +145,8 @@ TEST(WebRequestConditionTest, CreateConditionSet) {
url_match_ids = matcher.MatchURL(http_url); url_match_ids = matcher.MatchURL(http_url);
for (std::set<URLMatcherConditionSet::ID>::iterator i = url_match_ids.begin(); for (std::set<URLMatcherConditionSet::ID>::iterator i = url_match_ids.begin();
i != url_match_ids.end(); ++i) { i != url_match_ids.end(); ++i) {
if (result->IsFulfilled(*i, &http_request, ON_BEFORE_REQUEST)) if (result->IsFulfilled(
*i, WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST)))
++number_matches; ++number_matches;
} }
EXPECT_EQ(1, number_matches); EXPECT_EQ(1, number_matches);
...@@ -153,7 +157,8 @@ TEST(WebRequestConditionTest, CreateConditionSet) { ...@@ -153,7 +157,8 @@ TEST(WebRequestConditionTest, CreateConditionSet) {
number_matches = 0; number_matches = 0;
for (std::set<URLMatcherConditionSet::ID>::iterator i = url_match_ids.begin(); for (std::set<URLMatcherConditionSet::ID>::iterator i = url_match_ids.begin();
i != url_match_ids.end(); ++i) { i != url_match_ids.end(); ++i) {
if (result->IsFulfilled(*i, &https_request, ON_BEFORE_REQUEST)) if (result->IsFulfilled(
*i, WebRequestRule::RequestData(&https_request, ON_BEFORE_REQUEST)))
++number_matches; ++number_matches;
} }
EXPECT_EQ(1, number_matches); EXPECT_EQ(1, number_matches);
...@@ -165,7 +170,9 @@ TEST(WebRequestConditionTest, CreateConditionSet) { ...@@ -165,7 +170,9 @@ TEST(WebRequestConditionTest, CreateConditionSet) {
number_matches = 0; number_matches = 0;
for (std::set<URLMatcherConditionSet::ID>::iterator i = url_match_ids.begin(); for (std::set<URLMatcherConditionSet::ID>::iterator i = url_match_ids.begin();
i != url_match_ids.end(); ++i) { i != url_match_ids.end(); ++i) {
if (result->IsFulfilled(*i, &https_foo_request, ON_BEFORE_REQUEST)) if (result->IsFulfilled(
*i, WebRequestRule::RequestData(
&https_foo_request, ON_BEFORE_REQUEST)))
++number_matches; ++number_matches;
} }
EXPECT_EQ(0, number_matches); EXPECT_EQ(0, number_matches);
......
...@@ -90,13 +90,11 @@ scoped_ptr<WebRequestRule> WebRequestRule::Create( ...@@ -90,13 +90,11 @@ scoped_ptr<WebRequestRule> WebRequestRule::Create(
std::list<LinkedPtrEventResponseDelta> WebRequestRule::CreateDeltas( std::list<LinkedPtrEventResponseDelta> WebRequestRule::CreateDeltas(
const ExtensionInfoMap* extension_info_map, const ExtensionInfoMap* extension_info_map,
net::URLRequest* request, const RequestData& request_data,
bool crosses_incognito, bool crosses_incognito) const {
RequestStages request_stage, return actions_->CreateDeltas(extension_info_map, extension_id(),
const OptionalRequestData& optional_request_data) const { request_data, crosses_incognito,
return actions_->CreateDeltas(extension_info_map, extension_id(), request, extension_installation_time_);
crosses_incognito, request_stage, optional_request_data,
extension_installation_time_);
} }
int WebRequestRule::GetMinimumPriority() const { int WebRequestRule::GetMinimumPriority() const {
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/time.h" #include "base/time.h"
#include "chrome/browser/extensions/api/declarative/rules_registry.h" #include "chrome/browser/extensions/api/declarative/rules_registry.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
class ExtensionInfoMap; class ExtensionInfoMap;
class WebRequestPermissions; class WebRequestPermissions;
...@@ -45,10 +45,18 @@ class WebRequestRule { ...@@ -45,10 +45,18 @@ class WebRequestRule {
typedef std::pair<ExtensionId, RuleId> GlobalRuleId; typedef std::pair<ExtensionId, RuleId> GlobalRuleId;
typedef int Priority; typedef int Priority;
// Container to pass additional information about requests that are not struct RequestData {
// available in all request stages. RequestData(net::URLRequest* request, RequestStage stage)
struct OptionalRequestData { : request(request), stage(stage),
OptionalRequestData() : original_response_headers(NULL) {} original_response_headers(NULL) {}
RequestData(net::URLRequest* request, RequestStage stage,
net::HttpResponseHeaders* original_response_headers)
: request(request), stage(stage),
original_response_headers(original_response_headers) {}
net::URLRequest* request;
RequestStage stage;
// Additional information about requests that is not
// available in all request stages.
net::HttpResponseHeaders* original_response_headers; net::HttpResponseHeaders* original_response_headers;
}; };
...@@ -79,14 +87,12 @@ class WebRequestRule { ...@@ -79,14 +87,12 @@ class WebRequestRule {
// of view; no harm is done if this function is called at other times for // of view; no harm is done if this function is called at other times for
// testing purposes). // testing purposes).
// If |extension| is set, deltas are suppressed if the |extension| does not // If |extension| is set, deltas are suppressed if the |extension| does not
// have have sufficient permissions to modify the |request|. The returned list // have have sufficient permissions to modify the request. The returned list
// may be empty in this case. // may be empty in this case.
std::list<LinkedPtrEventResponseDelta> CreateDeltas( std::list<LinkedPtrEventResponseDelta> CreateDeltas(
const ExtensionInfoMap* extension_info_map, const ExtensionInfoMap* extension_info_map,
net::URLRequest* request, const RequestData& request_data,
bool crosses_incognito, bool crosses_incognito) const;
RequestStages request_stage,
const OptionalRequestData& optional_request_data) const;
// Returns the minimum priority of rules that may be evaluated after // Returns the minimum priority of rules that may be evaluated after
// this rule. Defaults to MAX_INT. Only valid if the conditions of this rule // this rule. Defaults to MAX_INT. Only valid if the conditions of this rule
......
...@@ -22,13 +22,13 @@ WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile, ...@@ -22,13 +22,13 @@ WebRequestRulesRegistry::WebRequestRulesRegistry(Profile* profile,
} }
std::set<WebRequestRule::GlobalRuleId> std::set<WebRequestRule::GlobalRuleId>
WebRequestRulesRegistry::GetMatches(net::URLRequest* request, WebRequestRulesRegistry::GetMatches(
RequestStages request_stage) { const WebRequestRule::RequestData& request_data) {
std::set<WebRequestRule::GlobalRuleId> result; std::set<WebRequestRule::GlobalRuleId> result;
// Figure out for which rules the URL match conditions were fulfilled. // Figure out for which rules the URL match conditions were fulfilled.
typedef std::set<URLMatcherConditionSet::ID> URLMatches; typedef std::set<URLMatcherConditionSet::ID> URLMatches;
URLMatches url_matches = url_matcher_.MatchURL(request->url()); URLMatches url_matches = url_matcher_.MatchURL(request_data.request->url());
// Then we need to check for each of these, whether the other // Then we need to check for each of these, whether the other
// WebRequestConditionAttributes are also fulfilled. // WebRequestConditionAttributes are also fulfilled.
...@@ -38,7 +38,7 @@ WebRequestRulesRegistry::GetMatches(net::URLRequest* request, ...@@ -38,7 +38,7 @@ WebRequestRulesRegistry::GetMatches(net::URLRequest* request,
CHECK(rule_trigger != rule_triggers_.end()); CHECK(rule_trigger != rule_triggers_.end());
WebRequestRule* rule = rule_trigger->second; WebRequestRule* rule = rule_trigger->second;
if (rule->conditions().IsFulfilled(*url_match, request, request_stage)) if (rule->conditions().IsFulfilled(*url_match, request_data))
result.insert(rule->id()); result.insert(rule->id());
} }
return result; return result;
...@@ -46,15 +46,13 @@ WebRequestRulesRegistry::GetMatches(net::URLRequest* request, ...@@ -46,15 +46,13 @@ WebRequestRulesRegistry::GetMatches(net::URLRequest* request,
std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas( std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
const ExtensionInfoMap* extension_info_map, const ExtensionInfoMap* extension_info_map,
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
bool crosses_incognito, bool crosses_incognito) {
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data) {
if (webrequest_rules_.empty()) if (webrequest_rules_.empty())
return std::list<LinkedPtrEventResponseDelta>(); return std::list<LinkedPtrEventResponseDelta>();
std::set<WebRequestRule::GlobalRuleId> matches = std::set<WebRequestRule::GlobalRuleId> matches =
GetMatches(request, request_stage); GetMatches(request_data);
// Sort all matching rules by their priority so that they can be processed // Sort all matching rules by their priority so that they can be processed
// in decreasing order. // in decreasing order.
...@@ -102,8 +100,7 @@ std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas( ...@@ -102,8 +100,7 @@ std::list<LinkedPtrEventResponseDelta> WebRequestRulesRegistry::CreateDeltas(
continue; continue;
std::list<LinkedPtrEventResponseDelta> rule_result = std::list<LinkedPtrEventResponseDelta> rule_result =
rule->CreateDeltas(extension_info_map, request, crosses_incognito, rule->CreateDeltas(extension_info_map, request_data, crosses_incognito);
request_stage, optional_request_data);
result.splice(result.begin(), rule_result); result.splice(result.begin(), rule_result);
min_priorities[extension_id] = std::max(current_min_priority, min_priorities[extension_id] = std::max(current_min_priority,
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include "base/memory/linked_ptr.h" #include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "chrome/browser/extensions/api/declarative/rules_registry_with_cache.h" #include "chrome/browser/extensions/api/declarative/rules_registry_with_cache.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "chrome/browser/extensions/extension_info_map.h" #include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/common/extensions/matcher/url_matcher.h" #include "chrome/common/extensions/matcher/url_matcher.h"
...@@ -69,17 +69,14 @@ class WebRequestRulesRegistry : public RulesRegistryWithCache { ...@@ -69,17 +69,14 @@ class WebRequestRulesRegistry : public RulesRegistryWithCache {
// TODO(battre): This will become an implementation detail, because we need // TODO(battre): This will become an implementation detail, because we need
// a way to also execute the actions of the rules. // a way to also execute the actions of the rules.
std::set<WebRequestRule::GlobalRuleId> GetMatches( std::set<WebRequestRule::GlobalRuleId> GetMatches(
net::URLRequest* request, const WebRequestRule::RequestData& request_data);
RequestStages request_stage);
// Returns which modifications should be executed on the network request // Returns which modifications should be executed on the network request
// according to the rules registered in this registry. // according to the rules registered in this registry.
std::list<LinkedPtrEventResponseDelta> CreateDeltas( std::list<LinkedPtrEventResponseDelta> CreateDeltas(
const ExtensionInfoMap* extension_info_map, const ExtensionInfoMap* extension_info_map,
net::URLRequest* request, const WebRequestRule::RequestData& request_data,
bool crosses_incognito, bool crosses_incognito);
RequestStages request_stage,
const WebRequestRule::OptionalRequestData& optional_request_data);
// Implementation of RulesRegistryWithCache: // Implementation of RulesRegistryWithCache:
virtual std::string AddRulesImpl( virtual std::string AddRulesImpl(
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/values.h" #include "base/values.h"
#include "chrome/common/extensions/matcher/url_matcher_constants.h" #include "chrome/common/extensions/matcher/url_matcher_constants.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h" #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
#include "content/public/test/test_browser_thread.h" #include "content/public/test/test_browser_thread.h"
#include "net/url_request/url_request_test_util.h" #include "net/url_request/url_request_test_util.h"
...@@ -215,7 +216,8 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) { ...@@ -215,7 +216,8 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
GURL http_url("http://www.example.com"); GURL http_url("http://www.example.com");
TestURLRequestContext context; TestURLRequestContext context;
TestURLRequest http_request(http_url, NULL, &context); TestURLRequest http_request(http_url, NULL, &context);
matches = registry->GetMatches(&http_request, ON_BEFORE_REQUEST); matches = registry->GetMatches(
WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST));
EXPECT_EQ(2u, matches.size()); EXPECT_EQ(2u, matches.size());
EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId1)) != EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId1)) !=
matches.end()); matches.end());
...@@ -224,7 +226,8 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) { ...@@ -224,7 +226,8 @@ TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
GURL foobar_url("http://www.foobar.com"); GURL foobar_url("http://www.foobar.com");
TestURLRequest foobar_request(foobar_url, NULL, &context); TestURLRequest foobar_request(foobar_url, NULL, &context);
matches = registry->GetMatches(&foobar_request, ON_BEFORE_REQUEST); matches = registry->GetMatches(
WebRequestRule::RequestData(&foobar_request, ON_BEFORE_REQUEST));
EXPECT_EQ(1u, matches.size()); EXPECT_EQ(1u, matches.size());
EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) != EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) !=
matches.end()); matches.end());
...@@ -338,8 +341,10 @@ TEST_F(WebRequestRulesRegistryTest, Precedences) { ...@@ -338,8 +341,10 @@ TEST_F(WebRequestRulesRegistryTest, Precedences) {
TestURLRequestContext context; TestURLRequestContext context;
TestURLRequest request(url, NULL, &context); TestURLRequest request(url, NULL, &context);
std::list<LinkedPtrEventResponseDelta> deltas = std::list<LinkedPtrEventResponseDelta> deltas =
registry->CreateDeltas(NULL, &request, false, ON_BEFORE_REQUEST, registry->CreateDeltas(
WebRequestRule::OptionalRequestData()); NULL,
WebRequestRule::RequestData(&request, ON_BEFORE_REQUEST),
false);
// The second extension is installed later and will win for this reason // The second extension is installed later and will win for this reason
// in conflict resolution. // in conflict resolution.
...@@ -386,8 +391,10 @@ TEST_F(WebRequestRulesRegistryTest, Priorities) { ...@@ -386,8 +391,10 @@ TEST_F(WebRequestRulesRegistryTest, Priorities) {
TestURLRequestContext context; TestURLRequestContext context;
TestURLRequest request(url, NULL, &context); TestURLRequest request(url, NULL, &context);
std::list<LinkedPtrEventResponseDelta> deltas = std::list<LinkedPtrEventResponseDelta> deltas =
registry->CreateDeltas(NULL, &request, false, ON_BEFORE_REQUEST, registry->CreateDeltas(
WebRequestRule::OptionalRequestData()); NULL,
WebRequestRule::RequestData(&request, ON_BEFORE_REQUEST),
false);
// The redirect by the first extension is ignored due to the ignore rule. // The redirect by the first extension is ignored due to the ignore rule.
ASSERT_EQ(1u, deltas.size()); ASSERT_EQ(1u, deltas.size());
......
...@@ -1400,7 +1400,7 @@ bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules( ...@@ -1400,7 +1400,7 @@ bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules(
ExtensionInfoMap* extension_info_map, ExtensionInfoMap* extension_info_map,
const std::string& event_name, const std::string& event_name,
net::URLRequest* request, net::URLRequest* request,
extensions::RequestStages request_stage, extensions::RequestStage request_stage,
net::HttpResponseHeaders* original_response_headers) { net::HttpResponseHeaders* original_response_headers) {
// Rules of the current |profile| may apply but we need to check also whether // Rules of the current |profile| may apply but we need to check also whether
// there are applicable rules from extensions whose background page // there are applicable rules from extensions whose background page
...@@ -1459,12 +1459,12 @@ bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules( ...@@ -1459,12 +1459,12 @@ bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules(
i != relevant_registries.end(); ++i) { i != relevant_registries.end(); ++i) {
extensions::WebRequestRulesRegistry* rules_registry = extensions::WebRequestRulesRegistry* rules_registry =
i->first; i->first;
extensions::WebRequestRule::OptionalRequestData optional_request_data;
optional_request_data.original_response_headers =
original_response_headers;
helpers::EventResponseDeltas result = helpers::EventResponseDeltas result =
rules_registry->CreateDeltas(extension_info_map, request, rules_registry->CreateDeltas(
i->second, request_stage, optional_request_data); extension_info_map,
extensions::WebRequestRule::RequestData(
request, request_stage, original_response_headers),
i->second);
if (!result.empty()) { if (!result.empty()) {
helpers::EventResponseDeltas& deltas = helpers::EventResponseDeltas& deltas =
...@@ -1485,7 +1485,7 @@ void ExtensionWebRequestEventRouter::OnRulesRegistryReady( ...@@ -1485,7 +1485,7 @@ void ExtensionWebRequestEventRouter::OnRulesRegistryReady(
void* profile, void* profile,
const std::string& event_name, const std::string& event_name,
uint64 request_id, uint64 request_id,
extensions::RequestStages request_stage) { extensions::RequestStage request_stage) {
// It's possible that this request was deleted, or cancelled by a previous // It's possible that this request was deleted, or cancelled by a previous
// event handler. If so, ignore this response. // event handler. If so, ignore this response.
if (blocked_requests_.find(request_id) == blocked_requests_.end()) if (blocked_requests_.find(request_id) == blocked_requests_.end())
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/time.h" #include "base/time.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
#include "chrome/browser/extensions/api/web_request/web_request_permissions.h" #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
#include "chrome/browser/extensions/extension_function.h" #include "chrome/browser/extensions/extension_function.h"
...@@ -343,7 +343,7 @@ class ExtensionWebRequestEventRouter ...@@ -343,7 +343,7 @@ class ExtensionWebRequestEventRouter
ExtensionInfoMap* extension_info_map, ExtensionInfoMap* extension_info_map,
const std::string& event_name, const std::string& event_name,
net::URLRequest* request, net::URLRequest* request,
extensions::RequestStages request_stage, extensions::RequestStage request_stage,
net::HttpResponseHeaders* original_response_headers); net::HttpResponseHeaders* original_response_headers);
// Called when the RulesRegistry is ready to unblock a request that was // Called when the RulesRegistry is ready to unblock a request that was
...@@ -352,7 +352,7 @@ class ExtensionWebRequestEventRouter ...@@ -352,7 +352,7 @@ class ExtensionWebRequestEventRouter
void* profile, void* profile,
const std::string& event_name, const std::string& event_name,
uint64 request_id, uint64 request_id,
extensions::RequestStages request_stage); extensions::RequestStage request_stage);
// Sets the flag that |event_type| has been signaled for |request_id|. // Sets the flag that |event_type| has been signaled for |request_id|.
// Returns the value of the flag before setting it. // Returns the value of the flag before setting it.
......
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
'browser/extensions/api/declarative/rules_registry_with_cache.h', 'browser/extensions/api/declarative/rules_registry_with_cache.h',
'browser/extensions/api/declarative/test_rules_registry.cc', 'browser/extensions/api/declarative/test_rules_registry.cc',
'browser/extensions/api/declarative/test_rules_registry.h', 'browser/extensions/api/declarative/test_rules_registry.h',
'browser/extensions/api/declarative_webrequest/request_stages.h', 'browser/extensions/api/declarative_webrequest/request_stage.h',
'browser/extensions/api/declarative_webrequest/webrequest_action.cc', 'browser/extensions/api/declarative_webrequest/webrequest_action.cc',
'browser/extensions/api/declarative_webrequest/webrequest_action.h', 'browser/extensions/api/declarative_webrequest/webrequest_action.h',
'browser/extensions/api/declarative_webrequest/webrequest_condition.cc', 'browser/extensions/api/declarative_webrequest/webrequest_condition.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment