1ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com// Copyright 2014 The Chromium Authors. All rights reserved. 2ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com// Use of this source code is governed by a BSD-style license that can be 3ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com// found in the LICENSE file. 4ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 5ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "base/bind.h" 6ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "base/bind_helpers.h" 7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "base/message_loop/message_loop.h" 8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "base/run_loop.h" 9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "chrome/browser/supervised_user/supervised_user_url_filter.h" 10ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "testing/gtest/include/gtest/gtest.h" 11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "url/gurl.h" 12ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 13ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comclass SupervisedUserURLFilterTest : public ::testing::Test, 14ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com public SupervisedUserURLFilter::Observer { 15ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com public: 16ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilterTest() : filter_(new SupervisedUserURLFilter) { 17ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); 18ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->AddObserver(this); 19ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 20ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 21ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com virtual ~SupervisedUserURLFilterTest() { 22ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->RemoveObserver(this); 23ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 24ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 25ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // SupervisedUserURLFilter::Observer: 26ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com virtual void OnSiteListUpdated() OVERRIDE { 27ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com run_loop_.Quit(); 28ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 29ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 30ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com protected: 31ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com bool IsURLWhitelisted(const std::string& url) { 32ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com return filter_->GetFilteringBehaviorForURL(GURL(url)) == 33ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::ALLOW; 34ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com } 35ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 361c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com base::MessageLoop message_loop_; 371c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com base::RunLoop run_loop_; 38ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com scoped_refptr<SupervisedUserURLFilter> filter_; 391c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com}; 401c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com 41ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, Basic) { 42ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 43ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Allow domain and all subdomains, for any filtered scheme. 44ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("google.com"); 45ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 461c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com run_loop_.Run(); 471c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com 48ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://google.com")); 49ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://google.com/")); 50ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://google.com/whatever")); 51ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("https://google.com/")); 52ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("http://notgoogle.com/")); 53ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com")); 54ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://x.mail.google.com")); 55ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("https://x.mail.google.com/")); 56ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://x.y.google.com/a/b")); 57ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("http://youtube.com/")); 58ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 59ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("bogus://youtube.com/")); 60ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("chrome://youtube.com/")); 611c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE(IsURLWhitelisted("chrome://extensions/")); 62ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("chrome-extension://foo/main.html")); 63ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("file:///home/chronos/user/Downloads/img.jpg")); 64ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 65ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 66ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, Inactive) { 67ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); 68ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 69ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 701c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com list.push_back("google.com"); 71ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 72ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com run_loop_.Run(); 73ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 74ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // If the filter is inactive, every URL should be whitelisted. 75ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://google.com")); 761c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE(IsURLWhitelisted("https://www.example.com")); 771c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com} 78ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 79ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, Scheme) { 80ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 81ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Filter only http, ftp and ws schemes. 82ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("http://secure.com"); 83ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("ftp://secure.com"); 84ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("ws://secure.com"); 85ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 861c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com run_loop_.Run(); 87ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 88ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://secure.com")); 89ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://secure.com/whatever")); 90ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("ftp://secure.com/")); 91ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("ws://secure.com")); 92ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("https://secure.com/")); 931c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE(IsURLWhitelisted("wss://secure.com")); 941c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.secure.com")); 951c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE(IsURLWhitelisted("https://www.secure.com")); 96ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("wss://www.secure.com")); 97ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 98ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 99ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, Path) { 100ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 101ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Filter only a certain path prefix. 102ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("path.to/ruin"); 103ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 104ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com run_loop_.Run(); 105ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 106ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruin")); 107ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("https://path.to/ruin")); 108ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruins")); 109ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruin/signup")); 110ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.path.to/ruin")); 111ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("http://path.to/fortune")); 112ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 113ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 114ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, PathAndScheme) { 115ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 1161c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com // Filter only a certain path prefix and scheme. 117ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("https://s.aaa.com/path"); 118ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 119ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com run_loop_.Run(); 120ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 121ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("https://s.aaa.com/path")); 1221c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE(IsURLWhitelisted("https://s.aaa.com/path/bbb")); 1231c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE(IsURLWhitelisted("http://s.aaa.com/path")); 1241c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE(IsURLWhitelisted("https://aaa.com/path")); 1251c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE(IsURLWhitelisted("https://x.aaa.com/path")); 1261c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE(IsURLWhitelisted("https://s.aaa.com/bbb")); 127ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("https://s.aaa.com/")); 128ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 129ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 130ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, Host) { 131ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 132ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Filter only a certain hostname, without subdomains. 133ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back(".www.example.com"); 134ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 135ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com run_loop_.Run(); 136ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 137ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.example.com")); 138ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("http://example.com")); 139ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("http://subdomain.example.com")); 140ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 141ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 142ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, IPAddress) { 143ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::vector<std::string> list; 144ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Filter an ip address. 145ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com list.push_back("123.123.123.123"); 146ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetFromPatterns(list); 1471c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com run_loop_.Run(); 148ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 149ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://123.123.123.123/")); 150ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE(IsURLWhitelisted("http://123.123.123.124/")); 151ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 152ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 153ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, Canonicalization) { 1541c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com // We assume that the hosts and URLs are already canonicalized. 155ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::map<std::string, bool> hosts; 156ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com hosts["www.moose.org"] = true; 157ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com hosts["www.xn--n3h.net"] = true; 158ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com std::map<GURL, bool> urls; 159ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com urls[GURL("http://www.example.com/foo/")] = true; 160ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com urls[GURL("http://www.example.com/%C3%85t%C3%B8mstr%C3%B6m")] = true; 161ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetManualHosts(&hosts); 162ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com filter_->SetManualURLs(&urls); 1631c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com 164ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Base cases. 165ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.example.com/foo/")); 166ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted( 167ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "http://www.example.com/%C3%85t%C3%B8mstr%C3%B6m")); 168ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 169ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Verify that non-URI characters are escaped. 170ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted( 1711c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "http://www.example.com/\xc3\x85t\xc3\xb8mstr\xc3\xb6m")); 172ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 173ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Verify that unnecessary URI escapes are unescaped. 174ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.example.com/%66%6F%6F/")); 175ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 176ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Verify that the default port are removed. 177ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.example.com:80/foo/")); 178ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 1791c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com // Verify that scheme and hostname are lowercased. 180ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("htTp://wWw.eXamPle.com/foo/")); 181ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("HttP://WwW.mOOsE.orG/blurp/")); 182ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 183ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Verify that UTF-8 in hostnames are converted to punycode. 184ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.\xe2\x98\x83\x0a.net/bla/")); 185ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 186ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Verify that query and ref are stripped. 187ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE(IsURLWhitelisted("http://www.example.com/foo/?bar=baz#ref")); 188ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 189ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 1901c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.comTEST_F(SupervisedUserURLFilterTest, HasFilteredScheme) { 1911c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 192ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("http://example.com"))); 1931c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 194ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("https://example.com"))); 195ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 196ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("ftp://example.com"))); 197ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 198ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("gopher://example.com"))); 199ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 2001c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("ws://example.com"))); 201ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 202ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("wss://example.com"))); 203ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 204ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 205ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("file://example.com"))); 2061c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE( 2071c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HasFilteredScheme( 208ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com GURL("filesystem://80cols.com"))); 209ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 2101c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("chrome://example.com"))); 211ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 212ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HasFilteredScheme(GURL("wtf://example.com"))); 213ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com} 214ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 215ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comTEST_F(SupervisedUserURLFilterTest, HostMatchesPattern) { 216ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 2171c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", 2181c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "*.google.com")); 2191c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 220ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("google.com", 221ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.com")); 222ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 223ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("accounts.google.com", 224ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.com")); 225ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 226ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.de", 2271c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "*.google.com")); 228ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 2291c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("notgoogle.com", 230ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.com")); 231ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 232ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 2331c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 234ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", 2351c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "www.google.*")); 236ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 237ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.de", 238ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "www.google.*")); 2391c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 240ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.co.uk", 2411c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "www.google.*")); 242ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 243ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.blogspot.com", 244ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "www.google.*")); 2451c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE( 246ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google", 2471c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "www.google.*")); 2481c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE( 249ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("google.com", 250ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "www.google.*")); 251ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 252ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("mail.google.com", 2531c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "www.google.*")); 2541c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE( 255ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.googleplex.com", 256ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "www.google.*")); 257ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 258ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.googleco.uk", 259ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "www.google.*")); 260ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 2611c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com 2621c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 2631c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", 2641c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "*.google.*")); 2651c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_TRUE( 2661c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("google.com", 2671c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "*.google.*")); 268ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 2691c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("accounts.google.com", 2701c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com "*.google.*")); 271ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 272ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("mail.google.com", 273ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.*")); 274ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 275ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.de", 276ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.*")); 277ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_TRUE( 278ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("google.de", 279ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.*")); 280ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 281ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("google.blogspot.com", 282ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.*")); 283ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 284ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("google", "*.google.*")); 285ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 286ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("notgoogle.com", 287ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.*")); 288ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 289ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.googleplex.com", 290ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.google.*")); 291ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 292ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com // Now test a few invalid patterns. They should never match. 2931c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE( 294ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", "")); 295ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 296ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", ".")); 297ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 298ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", "*")); 299ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 300ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", ".*")); 301ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 302ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", "*.")); 303ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 304ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", "*.*")); 305ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 3061c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google..com", "*..*")); 3071c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com EXPECT_FALSE( 3081c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", "*.*.com")); 309ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 310ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", "www.*.*")); 311ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 312ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", 313ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*.goo.*le.*")); 314ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 315ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com SupervisedUserURLFilter::HostMatchesPattern("www.google.com", 316ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com "*google*")); 317ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com EXPECT_FALSE( 318 SupervisedUserURLFilter::HostMatchesPattern("www.google.com", 319 "www.*.google.com")); 320} 321 322TEST_F(SupervisedUserURLFilterTest, Patterns) { 323 std::map<std::string, bool> hosts; 324 325 // Initally, the second rule is ignored because has the same value as the 326 // default (block). When we change the default to allow, the first rule is 327 // ignored instead. 328 hosts["*.google.com"] = true; 329 hosts["www.google.*"] = false; 330 331 hosts["accounts.google.com"] = false; 332 hosts["mail.google.com"] = true; 333 filter_->SetManualHosts(&hosts); 334 335 // Initially, the default filtering behavior is BLOCK. 336 EXPECT_TRUE(IsURLWhitelisted("http://www.google.com/foo/")); 337 EXPECT_FALSE(IsURLWhitelisted("http://accounts.google.com/bar/")); 338 EXPECT_FALSE(IsURLWhitelisted("http://www.google.co.uk/blurp/")); 339 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com/moose/")); 340 341 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); 342 EXPECT_FALSE(IsURLWhitelisted("http://www.google.com/foo/")); 343 EXPECT_FALSE(IsURLWhitelisted("http://accounts.google.com/bar/")); 344 EXPECT_FALSE(IsURLWhitelisted("http://www.google.co.uk/blurp/")); 345 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com/moose/")); 346} 347