diff options
author | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-11 20:04:01 +0000 |
---|---|---|
committer | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-11 20:04:01 +0000 |
commit | 2280dc815204af92079733bd445d5c30f4d3d680 (patch) | |
tree | 124c15f37d01ce59ddc1e55c46c2bc8d1b51b653 /chrome/browser | |
parent | 22295741c015370083104061682bb72ec495be8f (diff) | |
download | chromium_src-2280dc815204af92079733bd445d5c30f4d3d680.zip chromium_src-2280dc815204af92079733bd445d5c30f4d3d680.tar.gz chromium_src-2280dc815204af92079733bd445d5c30f4d3d680.tar.bz2 |
Provide a mechanism to the decl. WebRequest API to match URLs without the query against a RegEx
If you look for URLs that contain example[1-9].com you do not want to trigger
actions for http://foobar.com?url=example1.com. For this reason the CL
introduces a new mechanism to evaluate RegEx only on the URL without the query
string.
BUG=228852
Review URL: https://chromiumcodereview.appspot.com/13699007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193714 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc index 7e8fc7d..250d2c8 100644 --- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc +++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc @@ -661,5 +661,55 @@ TEST_F(WebRequestRulesRegistryTest, CheckConsistency) { EXPECT_TRUE(registry->IsEmpty()); } +TEST_F(WebRequestRulesRegistryTest, CheckOriginAndPathRegEx) { + const char kRule[] = + "{ \n" + " \"id\": \"rule1\", \n" + " \"conditions\": [ \n" + " { \n" + " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n" + " \"url\": {\"originAndPathMatches\": \"fo+.com\"} \n" + " } \n" + " ], \n" + " \"actions\": [ \n" + " { \n" + " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n" + " \"redirectUrl\": \"http://bar.com\" \n" + " } \n" + " ], \n" + " \"priority\": 200 \n" + "} "; + + scoped_ptr<Value> value(base::JSONReader::Read(kRule)); + ASSERT_TRUE(value.get()); + + std::vector<linked_ptr<RulesRegistry::Rule> > rules; + rules.push_back(make_linked_ptr(new RulesRegistry::Rule)); + ASSERT_TRUE(RulesRegistry::Rule::Populate(*value, rules.back().get())); + + scoped_refptr<WebRequestRulesRegistry> registry( + new TestWebRequestRulesRegistry()); + + URLMatcher matcher; + std::string error = registry->AddRulesImpl(kExtensionId, rules); + EXPECT_EQ("", error); + + net::TestURLRequestContext context; + std::list<LinkedPtrEventResponseDelta> deltas; + + // No match because match is in the query parameter. + GURL url1("http://bar.com/index.html?foo.com"); + net::TestURLRequest request1(url1, NULL, &context, NULL); + WebRequestData request_data1(&request1, ON_BEFORE_REQUEST); + deltas = registry->CreateDeltas(NULL, request_data1, false); + EXPECT_EQ(0u, deltas.size()); + + // This is a correct match. + GURL url2("http://foo.com/index.html"); + net::TestURLRequest request2(url2, NULL, &context, NULL); + WebRequestData request_data2(&request2, ON_BEFORE_REQUEST); + deltas = registry->CreateDeltas(NULL, request_data2, false); + EXPECT_EQ(1u, deltas.size()); +} } // namespace extensions |