Index: url/origin_filter_unittest.cc |
diff --git a/url/origin_filter_unittest.cc b/url/origin_filter_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8cadd0c48622fb9f2b89c75791347711a4e41176 |
--- /dev/null |
+++ b/url/origin_filter_unittest.cc |
@@ -0,0 +1,140 @@ |
+// Copyright 2015 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 "url/origin_filter.h" |
+ |
+#include <algorithm> |
+#include <vector> |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "url/gurl.h" |
+#include "url/origin.h" |
+ |
+namespace url { |
+ |
+TEST(OriginFilterTest, Empty) { |
+ // An empty filter matches everything. |
+ scoped_ptr<OriginFilter> filter = OriginFilter::Empty(); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.google.com"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.chrome.com"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("invalid url spec"))); |
+} |
+ |
+TEST(OriginFilterTest, Whitelist) { |
+ std::vector<Origin> whitelist; |
+ whitelist.push_back(Origin(GURL("https://www.google.com"))); |
+ whitelist.push_back(Origin(GURL("http://www.example.com"))); |
+ scoped_ptr<OriginFilter> filter = OriginFilter::AsWhitelist(whitelist); |
+ |
+ // Whitelist matches any URL on the specified origins. |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.google.com"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.google.com/?q=test"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("http://www.example.com"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("http://www.example.com/index.html"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("http://www.example.com/foo/bar"))); |
+ |
+ // Subdomains are different origins. |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://test.www.google.com"))); |
+ |
+ // Different scheme or port is a different origin. |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.google.com:8000"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.example.com/index.html"))); |
+ |
+ // Different host is a different origin. |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.youtube.com"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.chromium.org"))); |
+} |
+ |
+TEST(OriginFilterTest, Blacklist) { |
+ std::vector<Origin> blacklist; |
+ blacklist.push_back(Origin(GURL("https://www.google.com"))); |
+ blacklist.push_back(Origin(GURL("http://www.example.com"))); |
+ scoped_ptr<OriginFilter> filter = OriginFilter::AsBlacklist(blacklist); |
+ |
+ // URLS on explicitly specified origins are not matched. |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.google.com"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.google.com/?q=test"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("http://www.example.com"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("http://www.example.com/index.html"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("http://www.example.com/foo/bar"))); |
+ |
+ // Subdomains are different origins. |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://test.www.google.com"))); |
+ |
+ // The same hosts but with different schemes and hosts are not blacklisted. |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.google.com:8000"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.example.com/index.html"))); |
+ |
+ // Different hosts are not blacklisted. |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.chrome.com"))); |
+ EXPECT_TRUE(filter->MatchesURL(GURL("https://www.youtube.com"))); |
+} |
+ |
+TEST(OriginFilterTest, MatchesURLWithSubdomain) { |
+ std::vector<Origin> whitelist; |
+ whitelist.push_back(Origin(GURL("https://www.google.com"))); |
+ scoped_ptr<OriginFilter> filter = OriginFilter::AsWhitelist(whitelist); |
+ |
+ // Any URL on the specified origin is matched. |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains(GURL("https://www.google.com"))); |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains( |
+ GURL("https://www.google.com/test.html"))); |
+ |
+ // Subdomains are also matched... |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains( |
+ GURL("https://foo.www.google.com"))); |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains( |
+ GURL("https://foo.www.google.com/?q=test"))); |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains( |
+ GURL("https://foo.bar.www.google.com"))); |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains( |
+ GURL("https://foo.bar.www.google.com/test.html"))); |
+ EXPECT_TRUE(filter->MatchesURLWithSubdomains( |
+ GURL("https://foo.bar.baz.www.google.com"))); |
+ |
+ // Superdomains are not matched. |
+ EXPECT_FALSE(filter->MatchesURLWithSubdomains(GURL("https://google.com"))); |
+ |
+ // Different hosts are not blacklisted. |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.chrome.com"))); |
+ EXPECT_FALSE(filter->MatchesURL(GURL("https://www.youtube.com"))); |
+} |
+ |
+TEST(OriginFilterTest, Equivalence) { |
+ std::vector<Origin> origins; |
+ origins.push_back(Origin(GURL("https://www.google.com"))); |
+ scoped_ptr<OriginFilter> filter1 = OriginFilter::AsWhitelist(origins); |
+ |
+ origins.push_back(Origin(GURL("https://www.chrome.com"))); |
+ scoped_ptr<OriginFilter> filter2 = OriginFilter::AsWhitelist(origins); |
+ scoped_ptr<OriginFilter> filter3 = OriginFilter::AsBlacklist(origins); |
+ |
+ // Two whitelists with different sets of origins are not equivalent. |
+ EXPECT_NE(*filter1, *filter2); |
+ |
+ // Whitelist and blacklist are not equivalent. |
+ EXPECT_NE(*filter1, *filter3); |
+ EXPECT_NE(*filter2, *filter3); |
+ |
+ // Unique origins are ignored, so adding them to the list does not change |
+ // the filter. |
+ origins.push_back(Origin(GURL("unique origin"))); |
+ scoped_ptr<OriginFilter> filter4 = OriginFilter::AsBlacklist(origins); |
+ EXPECT_EQ(*filter3, *filter4); |
+ |
+ // Operator== is symmetric... |
+ EXPECT_EQ(*filter4, *filter3); |
+ |
+ // ...and reflexive. |
+ EXPECT_EQ(filter1, filter1); |
+ |
+ // The order of the list does not matter. |
+ origins.push_back(Origin(GURL("https://www.youtube.com"))); |
+ scoped_ptr<OriginFilter> filter5 = OriginFilter::AsBlacklist(origins); |
+ std::reverse(origins.begin(), origins.end()); |
+ scoped_ptr<OriginFilter> filter6 = OriginFilter::AsBlacklist(origins); |
+ EXPECT_EQ(*filter5, *filter6); |
+} |
+ |
+} // namespace url |