summaryrefslogtreecommitdiffstats
path: root/components/url_matcher/url_matcher_unittest.cc
diff options
context:
space:
mode:
authorkaliamoorthi@chromium.org <kaliamoorthi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 13:45:02 +0000
committerkaliamoorthi@chromium.org <kaliamoorthi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 13:45:02 +0000
commitc967c001a8dd63a6c43d82ffc8463be31a86ca32 (patch)
tree5d0edcda1bb36d66d31028c80e0a8ae82389cbed /components/url_matcher/url_matcher_unittest.cc
parent8b8634f3c1867205622fae02b69a1a8a80c71573 (diff)
downloadchromium_src-c967c001a8dd63a6c43d82ffc8463be31a86ca32.zip
chromium_src-c967c001a8dd63a6c43d82ffc8463be31a86ca32.tar.gz
chromium_src-c967c001a8dd63a6c43d82ffc8463be31a86ca32.tar.bz2
Add support for matching query parameters in URLMatcher
This CL modifies the url_matcher to support matching query key=value pattern. BUG=349997 Review URL: https://codereview.chromium.org/219613002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263230 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/url_matcher/url_matcher_unittest.cc')
-rw-r--r--components/url_matcher/url_matcher_unittest.cc277
1 files changed, 277 insertions, 0 deletions
diff --git a/components/url_matcher/url_matcher_unittest.cc b/components/url_matcher/url_matcher_unittest.cc
index 748d310..1278f62 100644
--- a/components/url_matcher/url_matcher_unittest.cc
+++ b/components/url_matcher/url_matcher_unittest.cc
@@ -503,6 +503,283 @@ TEST(URLMatcherConditionSetTest, Matching) {
EXPECT_TRUE(condition_set7->IsMatch(matching_patterns, url1));
}
+namespace {
+
+bool IsQueryMatch(
+ const std::string& url_query,
+ const std::string& key,
+ URLQueryElementMatcherCondition::QueryElementType query_element_type,
+ const std::string& value,
+ URLQueryElementMatcherCondition::QueryValueMatchType query_value_match_type,
+ URLQueryElementMatcherCondition::Type match_type) {
+ URLMatcherConditionFactory factory;
+
+ URLMatcherCondition m1 = factory.CreateHostSuffixCondition("example.com");
+ URLMatcherCondition m2 = factory.CreatePathContainsCondition("foo");
+ URLMatcherConditionSet::Conditions conditions;
+ conditions.insert(m1);
+ conditions.insert(m2);
+
+ URLQueryElementMatcherCondition q1(key,
+ value,
+ query_value_match_type,
+ query_element_type,
+ match_type,
+ &factory);
+ URLMatcherConditionSet::QueryConditions query_conditions;
+ query_conditions.insert(q1);
+
+ scoped_ptr<URLMatcherSchemeFilter> scheme_filter;
+ scoped_ptr<URLMatcherPortFilter> port_filter;
+
+ scoped_refptr<URLMatcherConditionSet> condition_set(
+ new URLMatcherConditionSet(1,
+ conditions,
+ query_conditions,
+ scheme_filter.Pass(),
+ port_filter.Pass()));
+
+ GURL url("http://www.example.com/foo?" + url_query);
+
+ URLMatcher matcher;
+ URLMatcherConditionSet::Vector vector;
+ vector.push_back(condition_set);
+ matcher.AddConditionSets(vector);
+
+ return matcher.MatchURL(url).size() == 1;
+}
+
+} // namespace
+
+TEST(URLMatcherConditionSetTest, QueryMatching) {
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo&b=foo&a=barr",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ANY));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo&b=foo&a=barr",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ANY));
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo&b=foo&a=barr",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ANY));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo&b=foo&a=barr",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ANY));
+ EXPECT_TRUE(
+ IsQueryMatch("a&b=foo&a=barr",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ANY));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo&b=foo&a=barr",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ANY));
+
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("a=bar&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("a=bar&b=foo&a=bar",
+ "b",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_FALSE(
+ IsQueryMatch("a=bar&b=foo&a=bar",
+ "b",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "goo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_FALSE(
+ IsQueryMatch("a=bar&b=foo&a=bar",
+ "c",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "goo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo1&b=foo&a=foo2",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo1&b=foo&a=fo02",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("a&b=foo&a",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("alt&b=foo",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("b=foo&a",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_FALSE(
+ IsQueryMatch("b=foo",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+ EXPECT_TRUE(
+ IsQueryMatch("b=foo&a",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_ALL));
+
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo1&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo1&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+ EXPECT_TRUE(
+ IsQueryMatch("a&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+ EXPECT_TRUE(
+ IsQueryMatch("alt&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+ EXPECT_FALSE(
+ IsQueryMatch("alt&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_FIRST));
+
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+ EXPECT_FALSE(
+ IsQueryMatch("a=foo1&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+ EXPECT_TRUE(
+ IsQueryMatch("a=foo1&b=foo&a=bar1",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE,
+ "bar",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+ EXPECT_FALSE(
+ IsQueryMatch("a&b=foo&a=bar",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+ EXPECT_TRUE(
+ IsQueryMatch("b=foo&alt",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+ EXPECT_FALSE(
+ IsQueryMatch("b=foo&alt",
+ "a",
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY,
+ "foo",
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT,
+ URLQueryElementMatcherCondition::MATCH_LAST));
+}
//
// URLMatcher