summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-11 20:04:01 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-11 20:04:01 +0000
commit2280dc815204af92079733bd445d5c30f4d3d680 (patch)
tree124c15f37d01ce59ddc1e55c46c2bc8d1b51b653 /chrome/browser
parent22295741c015370083104061682bb72ec495be8f (diff)
downloadchromium_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.cc50
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