Create a separate component for UrlPatternIndex.
Bug: 713774
Change-Id: I12a70bc0b5caa37470ecf53568d90304c05095eb
Reviewed-on: https://chromium-review.googlesource.com/527445
Commit-Queue: Pavel Kalinnikov <[email protected]>
Reviewed-by: Jochen Eisinger <[email protected]>
Reviewed-by: Charlie Harrison <[email protected]>
Cr-Commit-Position: refs/heads/master@{#481360}
diff --git a/components/url_pattern_index/url_pattern_unittest.cc b/components/url_pattern_index/url_pattern_unittest.cc
new file mode 100644
index 0000000..0943456
--- /dev/null
+++ b/components/url_pattern_index/url_pattern_unittest.cc
@@ -0,0 +1,124 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/url_pattern_index/url_pattern.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace url_pattern_index {
+
+namespace {
+
+constexpr proto::AnchorType kAnchorNone = proto::ANCHOR_TYPE_NONE;
+constexpr proto::AnchorType kBoundary = proto::ANCHOR_TYPE_BOUNDARY;
+constexpr proto::AnchorType kSubdomain = proto::ANCHOR_TYPE_SUBDOMAIN;
+
+} // namespace
+
+TEST(SubresourceFilterUrlPatternTest, MatchesUrl) {
+ const struct {
+ UrlPattern url_pattern;
+ const char* url;
+ bool expect_match;
+ } kTestCases[] = {
+ {{"", proto::URL_PATTERN_TYPE_SUBSTRING}, "http://ex.com/", true},
+ {{"", proto::URL_PATTERN_TYPE_WILDCARDED}, "http://ex.com/", true},
+ {{"", kBoundary, kAnchorNone}, "http://ex.com/", true},
+ {{"", kSubdomain, kAnchorNone}, "http://ex.com/", true},
+ {{"", kSubdomain, kAnchorNone}, "http://ex.com/", true},
+ {{"^", kSubdomain, kAnchorNone}, "http://ex.com/", false},
+ {{".", kSubdomain, kAnchorNone}, "http://ex.com/", false},
+ {{"", kAnchorNone, kBoundary}, "http://ex.com/", true},
+ {{"^", kAnchorNone, kBoundary}, "http://ex.com/", true},
+ {{".", kAnchorNone, kBoundary}, "http://ex.com/", false},
+ {{"", kBoundary, kBoundary}, "http://ex.com/", false},
+ {{"", kSubdomain, kBoundary}, "http://ex.com/", false},
+ {{"com/", kSubdomain, kBoundary}, "http://ex.com/", true},
+
+ {{"xampl", proto::URL_PATTERN_TYPE_SUBSTRING},
+ "http://example.com",
+ true},
+ {{"example", proto::URL_PATTERN_TYPE_SUBSTRING},
+ "http://example.com",
+ true},
+ {{"/a?a"}, "http://ex.com/a?a", true},
+ {{"^abc"}, "http://ex.com/abc?a", true},
+ {{"^abc"}, "http://ex.com/a?abc", true},
+ {{"^abc"}, "http://ex.com/abc?abc", true},
+ {{"^abc^abc"}, "http://ex.com/abc?abc", true},
+ {{"^com^abc^abc"}, "http://ex.com/abc?abc", false},
+
+ {{"http://ex", kBoundary, kAnchorNone}, "http://example.com", true},
+ {{"http://ex", kAnchorNone, kAnchorNone}, "http://example.com", true},
+ {{"mple.com/", kAnchorNone, kBoundary}, "http://example.com", true},
+ {{"mple.com/", kAnchorNone, kAnchorNone}, "http://example.com", true},
+ {{"mple.com/", kSubdomain, kAnchorNone}, "http://example.com", false},
+ {{"ex.com", kSubdomain, kAnchorNone}, "http://hex.com", false},
+ {{"ex.com", kSubdomain, kAnchorNone}, "http://ex.com", true},
+ {{"ex.com", kSubdomain, kAnchorNone}, "http://hex.ex.com", true},
+ {{"ex.com", kSubdomain, kAnchorNone}, "http://hex.hex.com", false},
+
+ // Note: "example.com" will be normalized into "example.com/".
+ {{"http://*mpl", kBoundary, kAnchorNone}, "http://example.com", true},
+ {{"mpl*com/", kAnchorNone, kBoundary}, "http://example.com", true},
+ {{"example^com"}, "http://example.com", false},
+ {{"example^com"}, "http://example/com", true},
+ {{"example.com^"}, "http://example.com:8080", true},
+ {{"http*.com/", kBoundary, kBoundary}, "http://example.com", true},
+ {{"http*.org/", kBoundary, kBoundary}, "http://example.com", false},
+
+ {{"/path?*&p1=*&p2="}, "http://ex.com/aaa/path/bbb?k=v&p1=0&p2=1", false},
+ {{"/path?*&p1=*&p2="}, "http://ex.com/aaa/path?k=v&p1=0&p2=1", true},
+ {{"/path?*&p1=*&p2="}, "http://ex.com/aaa/path?k=v&k=v&p1=0&p2=1", true},
+ {{"/path?*&p1=*&p2="},
+ "http://ex.com/aaa/path?k=v&p1=0&p3=10&p2=1",
+ true},
+ {{"/path?*&p1=*&p2="}, "http://ex.com/aaa/path&p1=0&p2=1", false},
+ {{"/path?*&p1=*&p2="}, "http://ex.com/aaa/path?k=v&p2=0&p1=1", false},
+
+ {{"abc*def*ghijk*xyz"},
+ "http://example.com/abcdeffffghijkmmmxyzzz",
+ true},
+ {{"abc*cdef"}, "http://example.com/abcdef", false},
+
+ {{"^^a^^"}, "http://ex.com/?a=/", true},
+ {{"^^a^^"}, "http://ex.com/?a=/&b=0", true},
+ {{"^^a^^"}, "http://ex.com/?a=", false},
+
+ {{"ex.com^path^*k=v^"}, "http://ex.com/path/?k1=v1&ak=v&kk=vv", true},
+ {{"ex.com^path^*k=v^"}, "http://ex.com/p/path/?k1=v1&ak=v&kk=vv", false},
+ {{"a^a&a^a&"}, "http://ex.com/a/a/a/a/?a&a&a&a&a", true},
+
+ {{"abc*def^"}, "http://ex.com/abc/a/ddef/", true},
+
+ {{"https://example.com/"}, "http://example.com/", false},
+ {{"example.com/", kSubdomain, kAnchorNone}, "http://example.com/", true},
+ {{"examp", kSubdomain, kAnchorNone}, "http://example.com/", true},
+ {{"xamp", kSubdomain, kAnchorNone}, "http://example.com/", false},
+ {{"examp", kSubdomain, kAnchorNone}, "http://test.example.com/", true},
+ {{"t.examp", kSubdomain, kAnchorNone}, "http://test.example.com/", false},
+ {{"com^", kSubdomain, kAnchorNone}, "http://test.example.com/", true},
+ {{"x.com", kSubdomain, kAnchorNone}, "http://ex.com/?url=x.com", false},
+ {{"ex.com/", kSubdomain, kBoundary}, "http://ex.com/", true},
+ {{"ex.com^", kSubdomain, kBoundary}, "http://ex.com/", true},
+ {{"ex.co", kSubdomain, kBoundary}, "http://ex.com/", false},
+ {{"ex.com", kSubdomain, kBoundary}, "http://rex.com.ex.com/", false},
+ {{"ex.com/", kSubdomain, kBoundary}, "http://rex.com.ex.com/", true},
+ {{"http", kSubdomain, kBoundary}, "http://http.com/", false},
+ {{"http", kSubdomain, kAnchorNone}, "http://http.com/", true},
+ {{"/example.com", kSubdomain, kBoundary}, "http://example.com/", false},
+ {{"/example.com/", kSubdomain, kBoundary}, "http://example.com/", false},
+ };
+
+ for (const auto& test_case : kTestCases) {
+ SCOPED_TRACE(testing::Message() << "Rule: " << test_case.url_pattern
+ << "; URL: " << GURL(test_case.url));
+
+ const bool is_match = test_case.url_pattern.MatchesUrl(GURL(test_case.url));
+ EXPECT_EQ(test_case.expect_match, is_match);
+ }
+}
+
+} // namespace url_pattern_index