| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/supervised_user/supervised_user_url_filter.h" | 5 #include "chrome/browser/supervised_user/supervised_user_url_filter.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 15 #include "chrome/browser/supervised_user/supervised_user_site_list.h" | 15 #include "chrome/browser/supervised_user/supervised_user_site_list.h" |
| 16 #include "extensions/features/features.h" | 16 #include "extensions/features/features.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 18 #include "url/gurl.h" | 18 #include "url/gurl.h" |
| 19 | 19 |
| 20 class SupervisedUserURLFilterTest : public ::testing::Test, | 20 class SupervisedUserURLFilterTest : public ::testing::Test, |
| 21 public SupervisedUserURLFilter::Observer { | 21 public SupervisedUserURLFilter::Observer { |
| 22 public: | 22 public: |
| 23 SupervisedUserURLFilterTest() : filter_(new SupervisedUserURLFilter) { | 23 SupervisedUserURLFilterTest() { |
| 24 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); | 24 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); |
| 25 filter_->AddObserver(this); | 25 filter_.AddObserver(this); |
| 26 } | 26 } |
| 27 | 27 |
| 28 ~SupervisedUserURLFilterTest() override { filter_->RemoveObserver(this); } | 28 ~SupervisedUserURLFilterTest() override { filter_.RemoveObserver(this); } |
| 29 | 29 |
| 30 // SupervisedUserURLFilter::Observer: | 30 // SupervisedUserURLFilter::Observer: |
| 31 void OnSiteListUpdated() override { run_loop_.Quit(); } | 31 void OnSiteListUpdated() override { run_loop_.Quit(); } |
| 32 | 32 |
| 33 protected: | 33 protected: |
| 34 bool IsURLWhitelisted(const std::string& url) { | 34 bool IsURLWhitelisted(const std::string& url) { |
| 35 return filter_->GetFilteringBehaviorForURL(GURL(url)) == | 35 return filter_.GetFilteringBehaviorForURL(GURL(url)) == |
| 36 SupervisedUserURLFilter::ALLOW; | 36 SupervisedUserURLFilter::ALLOW; |
| 37 } | 37 } |
| 38 | 38 |
| 39 GURL GetEmbeddedURL(const std::string& url) { | 39 GURL GetEmbeddedURL(const std::string& url) { |
| 40 return filter_->GetEmbeddedURL(GURL(url)); | 40 return filter_.GetEmbeddedURL(GURL(url)); |
| 41 } | 41 } |
| 42 | 42 |
| 43 base::MessageLoop message_loop_; | 43 base::MessageLoop message_loop_; |
| 44 base::RunLoop run_loop_; | 44 base::RunLoop run_loop_; |
| 45 scoped_refptr<SupervisedUserURLFilter> filter_; | 45 SupervisedUserURLFilter filter_; |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 TEST_F(SupervisedUserURLFilterTest, Basic) { | 48 TEST_F(SupervisedUserURLFilterTest, Basic) { |
| 49 std::vector<std::string> list; | 49 std::vector<std::string> list; |
| 50 // Allow domain and all subdomains, for any filtered scheme. | 50 // Allow domain and all subdomains, for any filtered scheme. |
| 51 list.push_back("google.com"); | 51 list.push_back("google.com"); |
| 52 filter_->SetFromPatternsForTesting(list); | 52 filter_.SetFromPatternsForTesting(list); |
| 53 run_loop_.Run(); | 53 run_loop_.Run(); |
| 54 | 54 |
| 55 EXPECT_TRUE(IsURLWhitelisted("http://google.com")); | 55 EXPECT_TRUE(IsURLWhitelisted("http://google.com")); |
| 56 EXPECT_TRUE(IsURLWhitelisted("http://google.com/")); | 56 EXPECT_TRUE(IsURLWhitelisted("http://google.com/")); |
| 57 EXPECT_TRUE(IsURLWhitelisted("http://google.com/whatever")); | 57 EXPECT_TRUE(IsURLWhitelisted("http://google.com/whatever")); |
| 58 EXPECT_TRUE(IsURLWhitelisted("https://google.com/")); | 58 EXPECT_TRUE(IsURLWhitelisted("https://google.com/")); |
| 59 EXPECT_FALSE(IsURLWhitelisted("http://notgoogle.com/")); | 59 EXPECT_FALSE(IsURLWhitelisted("http://notgoogle.com/")); |
| 60 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com")); | 60 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com")); |
| 61 EXPECT_TRUE(IsURLWhitelisted("http://x.mail.google.com")); | 61 EXPECT_TRUE(IsURLWhitelisted("http://x.mail.google.com")); |
| 62 EXPECT_TRUE(IsURLWhitelisted("https://x.mail.google.com/")); | 62 EXPECT_TRUE(IsURLWhitelisted("https://x.mail.google.com/")); |
| 63 EXPECT_TRUE(IsURLWhitelisted("http://x.y.google.com/a/b")); | 63 EXPECT_TRUE(IsURLWhitelisted("http://x.y.google.com/a/b")); |
| 64 EXPECT_FALSE(IsURLWhitelisted("http://youtube.com/")); | 64 EXPECT_FALSE(IsURLWhitelisted("http://youtube.com/")); |
| 65 | 65 |
| 66 EXPECT_TRUE(IsURLWhitelisted("bogus://youtube.com/")); | 66 EXPECT_TRUE(IsURLWhitelisted("bogus://youtube.com/")); |
| 67 EXPECT_TRUE(IsURLWhitelisted("chrome://youtube.com/")); | 67 EXPECT_TRUE(IsURLWhitelisted("chrome://youtube.com/")); |
| 68 EXPECT_TRUE(IsURLWhitelisted("chrome://extensions/")); | 68 EXPECT_TRUE(IsURLWhitelisted("chrome://extensions/")); |
| 69 EXPECT_TRUE(IsURLWhitelisted("chrome-extension://foo/main.html")); | 69 EXPECT_TRUE(IsURLWhitelisted("chrome-extension://foo/main.html")); |
| 70 EXPECT_TRUE(IsURLWhitelisted("file:///home/chronos/user/Downloads/img.jpg")); | 70 EXPECT_TRUE(IsURLWhitelisted("file:///home/chronos/user/Downloads/img.jpg")); |
| 71 } | 71 } |
| 72 | 72 |
| 73 TEST_F(SupervisedUserURLFilterTest, EffectiveURL) { | 73 TEST_F(SupervisedUserURLFilterTest, EffectiveURL) { |
| 74 std::vector<std::string> list; | 74 std::vector<std::string> list; |
| 75 // Allow domain and all subdomains, for any filtered scheme. | 75 // Allow domain and all subdomains, for any filtered scheme. |
| 76 list.push_back("example.com"); | 76 list.push_back("example.com"); |
| 77 filter_->SetFromPatternsForTesting(list); | 77 filter_.SetFromPatternsForTesting(list); |
| 78 run_loop_.Run(); | 78 run_loop_.Run(); |
| 79 | 79 |
| 80 ASSERT_TRUE(IsURLWhitelisted("http://example.com")); | 80 ASSERT_TRUE(IsURLWhitelisted("http://example.com")); |
| 81 ASSERT_TRUE(IsURLWhitelisted("https://example.com")); | 81 ASSERT_TRUE(IsURLWhitelisted("https://example.com")); |
| 82 | 82 |
| 83 // AMP Cache URLs. | 83 // AMP Cache URLs. |
| 84 EXPECT_FALSE(IsURLWhitelisted("https://cdn.ampproject.org")); | 84 EXPECT_FALSE(IsURLWhitelisted("https://cdn.ampproject.org")); |
| 85 EXPECT_TRUE(IsURLWhitelisted("https://cdn.ampproject.org/c/example.com")); | 85 EXPECT_TRUE(IsURLWhitelisted("https://cdn.ampproject.org/c/example.com")); |
| 86 EXPECT_TRUE(IsURLWhitelisted("https://cdn.ampproject.org/c/www.example.com")); | 86 EXPECT_TRUE(IsURLWhitelisted("https://cdn.ampproject.org/c/www.example.com")); |
| 87 EXPECT_TRUE( | 87 EXPECT_TRUE( |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 "https://translate.googleusercontent.com/translate?u=example.com")); | 141 "https://translate.googleusercontent.com/translate?u=example.com")); |
| 142 EXPECT_TRUE(IsURLWhitelisted( | 142 EXPECT_TRUE(IsURLWhitelisted( |
| 143 "https://translate.google.com/translate?u=www.example.com")); | 143 "https://translate.google.com/translate?u=www.example.com")); |
| 144 EXPECT_TRUE(IsURLWhitelisted( | 144 EXPECT_TRUE(IsURLWhitelisted( |
| 145 "https://translate.google.com/translate?u=https://example.com")); | 145 "https://translate.google.com/translate?u=https://example.com")); |
| 146 EXPECT_FALSE( | 146 EXPECT_FALSE( |
| 147 IsURLWhitelisted("https://translate.google.com/translate?u=other.com")); | 147 IsURLWhitelisted("https://translate.google.com/translate?u=other.com")); |
| 148 } | 148 } |
| 149 | 149 |
| 150 TEST_F(SupervisedUserURLFilterTest, Inactive) { | 150 TEST_F(SupervisedUserURLFilterTest, Inactive) { |
| 151 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); | 151 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); |
| 152 | 152 |
| 153 std::vector<std::string> list; | 153 std::vector<std::string> list; |
| 154 list.push_back("google.com"); | 154 list.push_back("google.com"); |
| 155 filter_->SetFromPatternsForTesting(list); | 155 filter_.SetFromPatternsForTesting(list); |
| 156 run_loop_.Run(); | 156 run_loop_.Run(); |
| 157 | 157 |
| 158 // If the filter is inactive, every URL should be whitelisted. | 158 // If the filter is inactive, every URL should be whitelisted. |
| 159 EXPECT_TRUE(IsURLWhitelisted("http://google.com")); | 159 EXPECT_TRUE(IsURLWhitelisted("http://google.com")); |
| 160 EXPECT_TRUE(IsURLWhitelisted("https://www.example.com")); | 160 EXPECT_TRUE(IsURLWhitelisted("https://www.example.com")); |
| 161 } | 161 } |
| 162 | 162 |
| 163 TEST_F(SupervisedUserURLFilterTest, Scheme) { | 163 TEST_F(SupervisedUserURLFilterTest, Scheme) { |
| 164 std::vector<std::string> list; | 164 std::vector<std::string> list; |
| 165 // Filter only http, ftp and ws schemes. | 165 // Filter only http, ftp and ws schemes. |
| 166 list.push_back("http://secure.com"); | 166 list.push_back("http://secure.com"); |
| 167 list.push_back("ftp://secure.com"); | 167 list.push_back("ftp://secure.com"); |
| 168 list.push_back("ws://secure.com"); | 168 list.push_back("ws://secure.com"); |
| 169 filter_->SetFromPatternsForTesting(list); | 169 filter_.SetFromPatternsForTesting(list); |
| 170 run_loop_.Run(); | 170 run_loop_.Run(); |
| 171 | 171 |
| 172 EXPECT_TRUE(IsURLWhitelisted("http://secure.com")); | 172 EXPECT_TRUE(IsURLWhitelisted("http://secure.com")); |
| 173 EXPECT_TRUE(IsURLWhitelisted("http://secure.com/whatever")); | 173 EXPECT_TRUE(IsURLWhitelisted("http://secure.com/whatever")); |
| 174 EXPECT_TRUE(IsURLWhitelisted("ftp://secure.com/")); | 174 EXPECT_TRUE(IsURLWhitelisted("ftp://secure.com/")); |
| 175 EXPECT_TRUE(IsURLWhitelisted("ws://secure.com")); | 175 EXPECT_TRUE(IsURLWhitelisted("ws://secure.com")); |
| 176 EXPECT_FALSE(IsURLWhitelisted("https://secure.com/")); | 176 EXPECT_FALSE(IsURLWhitelisted("https://secure.com/")); |
| 177 EXPECT_FALSE(IsURLWhitelisted("wss://secure.com")); | 177 EXPECT_FALSE(IsURLWhitelisted("wss://secure.com")); |
| 178 EXPECT_TRUE(IsURLWhitelisted("http://www.secure.com")); | 178 EXPECT_TRUE(IsURLWhitelisted("http://www.secure.com")); |
| 179 EXPECT_FALSE(IsURLWhitelisted("https://www.secure.com")); | 179 EXPECT_FALSE(IsURLWhitelisted("https://www.secure.com")); |
| 180 EXPECT_FALSE(IsURLWhitelisted("wss://www.secure.com")); | 180 EXPECT_FALSE(IsURLWhitelisted("wss://www.secure.com")); |
| 181 } | 181 } |
| 182 | 182 |
| 183 TEST_F(SupervisedUserURLFilterTest, Path) { | 183 TEST_F(SupervisedUserURLFilterTest, Path) { |
| 184 std::vector<std::string> list; | 184 std::vector<std::string> list; |
| 185 // Filter only a certain path prefix. | 185 // Filter only a certain path prefix. |
| 186 list.push_back("path.to/ruin"); | 186 list.push_back("path.to/ruin"); |
| 187 filter_->SetFromPatternsForTesting(list); | 187 filter_.SetFromPatternsForTesting(list); |
| 188 run_loop_.Run(); | 188 run_loop_.Run(); |
| 189 | 189 |
| 190 EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruin")); | 190 EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruin")); |
| 191 EXPECT_TRUE(IsURLWhitelisted("https://path.to/ruin")); | 191 EXPECT_TRUE(IsURLWhitelisted("https://path.to/ruin")); |
| 192 EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruins")); | 192 EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruins")); |
| 193 EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruin/signup")); | 193 EXPECT_TRUE(IsURLWhitelisted("http://path.to/ruin/signup")); |
| 194 EXPECT_TRUE(IsURLWhitelisted("http://www.path.to/ruin")); | 194 EXPECT_TRUE(IsURLWhitelisted("http://www.path.to/ruin")); |
| 195 EXPECT_FALSE(IsURLWhitelisted("http://path.to/fortune")); | 195 EXPECT_FALSE(IsURLWhitelisted("http://path.to/fortune")); |
| 196 } | 196 } |
| 197 | 197 |
| 198 TEST_F(SupervisedUserURLFilterTest, PathAndScheme) { | 198 TEST_F(SupervisedUserURLFilterTest, PathAndScheme) { |
| 199 std::vector<std::string> list; | 199 std::vector<std::string> list; |
| 200 // Filter only a certain path prefix and scheme. | 200 // Filter only a certain path prefix and scheme. |
| 201 list.push_back("https://s.aaa.com/path"); | 201 list.push_back("https://s.aaa.com/path"); |
| 202 filter_->SetFromPatternsForTesting(list); | 202 filter_.SetFromPatternsForTesting(list); |
| 203 run_loop_.Run(); | 203 run_loop_.Run(); |
| 204 | 204 |
| 205 EXPECT_TRUE(IsURLWhitelisted("https://s.aaa.com/path")); | 205 EXPECT_TRUE(IsURLWhitelisted("https://s.aaa.com/path")); |
| 206 EXPECT_TRUE(IsURLWhitelisted("https://s.aaa.com/path/bbb")); | 206 EXPECT_TRUE(IsURLWhitelisted("https://s.aaa.com/path/bbb")); |
| 207 EXPECT_FALSE(IsURLWhitelisted("http://s.aaa.com/path")); | 207 EXPECT_FALSE(IsURLWhitelisted("http://s.aaa.com/path")); |
| 208 EXPECT_FALSE(IsURLWhitelisted("https://aaa.com/path")); | 208 EXPECT_FALSE(IsURLWhitelisted("https://aaa.com/path")); |
| 209 EXPECT_FALSE(IsURLWhitelisted("https://x.aaa.com/path")); | 209 EXPECT_FALSE(IsURLWhitelisted("https://x.aaa.com/path")); |
| 210 EXPECT_FALSE(IsURLWhitelisted("https://s.aaa.com/bbb")); | 210 EXPECT_FALSE(IsURLWhitelisted("https://s.aaa.com/bbb")); |
| 211 EXPECT_FALSE(IsURLWhitelisted("https://s.aaa.com/")); | 211 EXPECT_FALSE(IsURLWhitelisted("https://s.aaa.com/")); |
| 212 } | 212 } |
| 213 | 213 |
| 214 TEST_F(SupervisedUserURLFilterTest, Host) { | 214 TEST_F(SupervisedUserURLFilterTest, Host) { |
| 215 std::vector<std::string> list; | 215 std::vector<std::string> list; |
| 216 // Filter only a certain hostname, without subdomains. | 216 // Filter only a certain hostname, without subdomains. |
| 217 list.push_back(".www.example.com"); | 217 list.push_back(".www.example.com"); |
| 218 filter_->SetFromPatternsForTesting(list); | 218 filter_.SetFromPatternsForTesting(list); |
| 219 run_loop_.Run(); | 219 run_loop_.Run(); |
| 220 | 220 |
| 221 EXPECT_TRUE(IsURLWhitelisted("http://www.example.com")); | 221 EXPECT_TRUE(IsURLWhitelisted("http://www.example.com")); |
| 222 EXPECT_FALSE(IsURLWhitelisted("http://example.com")); | 222 EXPECT_FALSE(IsURLWhitelisted("http://example.com")); |
| 223 EXPECT_FALSE(IsURLWhitelisted("http://subdomain.example.com")); | 223 EXPECT_FALSE(IsURLWhitelisted("http://subdomain.example.com")); |
| 224 } | 224 } |
| 225 | 225 |
| 226 TEST_F(SupervisedUserURLFilterTest, IPAddress) { | 226 TEST_F(SupervisedUserURLFilterTest, IPAddress) { |
| 227 std::vector<std::string> list; | 227 std::vector<std::string> list; |
| 228 // Filter an ip address. | 228 // Filter an ip address. |
| 229 list.push_back("123.123.123.123"); | 229 list.push_back("123.123.123.123"); |
| 230 filter_->SetFromPatternsForTesting(list); | 230 filter_.SetFromPatternsForTesting(list); |
| 231 run_loop_.Run(); | 231 run_loop_.Run(); |
| 232 | 232 |
| 233 EXPECT_TRUE(IsURLWhitelisted("http://123.123.123.123/")); | 233 EXPECT_TRUE(IsURLWhitelisted("http://123.123.123.123/")); |
| 234 EXPECT_FALSE(IsURLWhitelisted("http://123.123.123.124/")); | 234 EXPECT_FALSE(IsURLWhitelisted("http://123.123.123.124/")); |
| 235 } | 235 } |
| 236 | 236 |
| 237 TEST_F(SupervisedUserURLFilterTest, Canonicalization) { | 237 TEST_F(SupervisedUserURLFilterTest, Canonicalization) { |
| 238 // We assume that the hosts and URLs are already canonicalized. | 238 // We assume that the hosts and URLs are already canonicalized. |
| 239 std::map<std::string, bool> hosts; | 239 std::map<std::string, bool> hosts; |
| 240 hosts["www.moose.org"] = true; | 240 hosts["www.moose.org"] = true; |
| 241 hosts["www.xn--n3h.net"] = true; | 241 hosts["www.xn--n3h.net"] = true; |
| 242 std::map<GURL, bool> urls; | 242 std::map<GURL, bool> urls; |
| 243 urls[GURL("http://www.example.com/foo/")] = true; | 243 urls[GURL("http://www.example.com/foo/")] = true; |
| 244 urls[GURL("http://www.example.com/%C3%85t%C3%B8mstr%C3%B6m")] = true; | 244 urls[GURL("http://www.example.com/%C3%85t%C3%B8mstr%C3%B6m")] = true; |
| 245 filter_->SetManualHosts(&hosts); | 245 filter_.SetManualHosts(std::move(hosts)); |
| 246 filter_->SetManualURLs(&urls); | 246 filter_.SetManualURLs(std::move(urls)); |
| 247 | 247 |
| 248 // Base cases. | 248 // Base cases. |
| 249 EXPECT_TRUE(IsURLWhitelisted("http://www.example.com/foo/")); | 249 EXPECT_TRUE(IsURLWhitelisted("http://www.example.com/foo/")); |
| 250 EXPECT_TRUE(IsURLWhitelisted( | 250 EXPECT_TRUE(IsURLWhitelisted( |
| 251 "http://www.example.com/%C3%85t%C3%B8mstr%C3%B6m")); | 251 "http://www.example.com/%C3%85t%C3%B8mstr%C3%B6m")); |
| 252 | 252 |
| 253 // Verify that non-URI characters are escaped. | 253 // Verify that non-URI characters are escaped. |
| 254 EXPECT_TRUE(IsURLWhitelisted( | 254 EXPECT_TRUE(IsURLWhitelisted( |
| 255 "http://www.example.com/\xc3\x85t\xc3\xb8mstr\xc3\xb6m")); | 255 "http://www.example.com/\xc3\x85t\xc3\xb8mstr\xc3\xb6m")); |
| 256 | 256 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 std::map<std::string, bool> hosts; | 407 std::map<std::string, bool> hosts; |
| 408 | 408 |
| 409 // Initally, the second rule is ignored because has the same value as the | 409 // Initally, the second rule is ignored because has the same value as the |
| 410 // default (block). When we change the default to allow, the first rule is | 410 // default (block). When we change the default to allow, the first rule is |
| 411 // ignored instead. | 411 // ignored instead. |
| 412 hosts["*.google.com"] = true; | 412 hosts["*.google.com"] = true; |
| 413 hosts["www.google.*"] = false; | 413 hosts["www.google.*"] = false; |
| 414 | 414 |
| 415 hosts["accounts.google.com"] = false; | 415 hosts["accounts.google.com"] = false; |
| 416 hosts["mail.google.com"] = true; | 416 hosts["mail.google.com"] = true; |
| 417 filter_->SetManualHosts(&hosts); | 417 filter_.SetManualHosts(std::move(hosts)); |
| 418 | 418 |
| 419 // Initially, the default filtering behavior is BLOCK. | 419 // Initially, the default filtering behavior is BLOCK. |
| 420 EXPECT_TRUE(IsURLWhitelisted("http://www.google.com/foo/")); | 420 EXPECT_TRUE(IsURLWhitelisted("http://www.google.com/foo/")); |
| 421 EXPECT_FALSE(IsURLWhitelisted("http://accounts.google.com/bar/")); | 421 EXPECT_FALSE(IsURLWhitelisted("http://accounts.google.com/bar/")); |
| 422 EXPECT_FALSE(IsURLWhitelisted("http://www.google.co.uk/blurp/")); | 422 EXPECT_FALSE(IsURLWhitelisted("http://www.google.co.uk/blurp/")); |
| 423 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com/moose/")); | 423 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com/moose/")); |
| 424 | 424 |
| 425 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); | 425 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); |
| 426 EXPECT_FALSE(IsURLWhitelisted("http://www.google.com/foo/")); | 426 EXPECT_FALSE(IsURLWhitelisted("http://www.google.com/foo/")); |
| 427 EXPECT_FALSE(IsURLWhitelisted("http://accounts.google.com/bar/")); | 427 EXPECT_FALSE(IsURLWhitelisted("http://accounts.google.com/bar/")); |
| 428 EXPECT_FALSE(IsURLWhitelisted("http://www.google.co.uk/blurp/")); | 428 EXPECT_FALSE(IsURLWhitelisted("http://www.google.co.uk/blurp/")); |
| 429 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com/moose/")); | 429 EXPECT_TRUE(IsURLWhitelisted("http://mail.google.com/moose/")); |
| 430 } | 430 } |
| 431 | 431 |
| 432 TEST_F(SupervisedUserURLFilterTest, WhitelistsPatterns) { | 432 TEST_F(SupervisedUserURLFilterTest, WhitelistsPatterns) { |
| 433 std::vector<std::string> patterns1; | 433 std::vector<std::string> patterns1; |
| 434 patterns1.push_back("google.com"); | 434 patterns1.push_back("google.com"); |
| 435 patterns1.push_back("example.com"); | 435 patterns1.push_back("example.com"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 449 new SupervisedUserSiteList(id1, title1, entry_point, base::FilePath(), | 449 new SupervisedUserSiteList(id1, title1, entry_point, base::FilePath(), |
| 450 patterns1, hostname_hashes)); | 450 patterns1, hostname_hashes)); |
| 451 scoped_refptr<SupervisedUserSiteList> site_list2 = make_scoped_refptr( | 451 scoped_refptr<SupervisedUserSiteList> site_list2 = make_scoped_refptr( |
| 452 new SupervisedUserSiteList(id2, title2, entry_point, base::FilePath(), | 452 new SupervisedUserSiteList(id2, title2, entry_point, base::FilePath(), |
| 453 patterns2, hostname_hashes)); | 453 patterns2, hostname_hashes)); |
| 454 | 454 |
| 455 std::vector<scoped_refptr<SupervisedUserSiteList>> site_lists; | 455 std::vector<scoped_refptr<SupervisedUserSiteList>> site_lists; |
| 456 site_lists.push_back(site_list1); | 456 site_lists.push_back(site_list1); |
| 457 site_lists.push_back(site_list2); | 457 site_lists.push_back(site_list2); |
| 458 | 458 |
| 459 filter_->SetFromSiteListsForTesting(site_lists); | 459 filter_.SetFromSiteListsForTesting(site_lists); |
| 460 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); | 460 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); |
| 461 run_loop_.Run(); | 461 run_loop_.Run(); |
| 462 | 462 |
| 463 std::map<std::string, base::string16> expected_whitelists; | 463 std::map<std::string, base::string16> expected_whitelists; |
| 464 expected_whitelists[id1] = title1; | 464 expected_whitelists[id1] = title1; |
| 465 expected_whitelists[id2] = title2; | 465 expected_whitelists[id2] = title2; |
| 466 | 466 |
| 467 std::map<std::string, base::string16> actual_whitelists = | 467 std::map<std::string, base::string16> actual_whitelists = |
| 468 filter_->GetMatchingWhitelistTitles(GURL("https://example.com")); | 468 filter_.GetMatchingWhitelistTitles(GURL("https://example.com")); |
| 469 ASSERT_EQ(expected_whitelists, actual_whitelists); | 469 ASSERT_EQ(expected_whitelists, actual_whitelists); |
| 470 | 470 |
| 471 expected_whitelists.erase(id2); | 471 expected_whitelists.erase(id2); |
| 472 | 472 |
| 473 actual_whitelists = | 473 actual_whitelists = |
| 474 filter_->GetMatchingWhitelistTitles(GURL("https://google.com")); | 474 filter_.GetMatchingWhitelistTitles(GURL("https://google.com")); |
| 475 ASSERT_EQ(expected_whitelists, actual_whitelists); | 475 ASSERT_EQ(expected_whitelists, actual_whitelists); |
| 476 } | 476 } |
| 477 | 477 |
| 478 TEST_F(SupervisedUserURLFilterTest, WhitelistsHostnameHashes) { | 478 TEST_F(SupervisedUserURLFilterTest, WhitelistsHostnameHashes) { |
| 479 std::vector<std::string> patterns1; | 479 std::vector<std::string> patterns1; |
| 480 patterns1.push_back("google.com"); | 480 patterns1.push_back("google.com"); |
| 481 patterns1.push_back("example.com"); | 481 patterns1.push_back("example.com"); |
| 482 | 482 |
| 483 std::vector<std::string> patterns2; | 483 std::vector<std::string> patterns2; |
| 484 patterns2.push_back("secure.com"); | 484 patterns2.push_back("secure.com"); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 510 patterns2, hostname_hashes2)); | 510 patterns2, hostname_hashes2)); |
| 511 scoped_refptr<SupervisedUserSiteList> site_list3 = make_scoped_refptr( | 511 scoped_refptr<SupervisedUserSiteList> site_list3 = make_scoped_refptr( |
| 512 new SupervisedUserSiteList(id3, title3, entry_point, base::FilePath(), | 512 new SupervisedUserSiteList(id3, title3, entry_point, base::FilePath(), |
| 513 patterns3, hostname_hashes3)); | 513 patterns3, hostname_hashes3)); |
| 514 | 514 |
| 515 std::vector<scoped_refptr<SupervisedUserSiteList>> site_lists; | 515 std::vector<scoped_refptr<SupervisedUserSiteList>> site_lists; |
| 516 site_lists.push_back(site_list1); | 516 site_lists.push_back(site_list1); |
| 517 site_lists.push_back(site_list2); | 517 site_lists.push_back(site_list2); |
| 518 site_lists.push_back(site_list3); | 518 site_lists.push_back(site_list3); |
| 519 | 519 |
| 520 filter_->SetFromSiteListsForTesting(site_lists); | 520 filter_.SetFromSiteListsForTesting(site_lists); |
| 521 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); | 521 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); |
| 522 run_loop_.Run(); | 522 run_loop_.Run(); |
| 523 | 523 |
| 524 std::map<std::string, base::string16> expected_whitelists; | 524 std::map<std::string, base::string16> expected_whitelists; |
| 525 expected_whitelists[id1] = title1; | 525 expected_whitelists[id1] = title1; |
| 526 expected_whitelists[id2] = title2; | 526 expected_whitelists[id2] = title2; |
| 527 expected_whitelists[id3] = title3; | 527 expected_whitelists[id3] = title3; |
| 528 | 528 |
| 529 std::map<std::string, base::string16> actual_whitelists = | 529 std::map<std::string, base::string16> actual_whitelists = |
| 530 filter_->GetMatchingWhitelistTitles(GURL("http://example.com")); | 530 filter_.GetMatchingWhitelistTitles(GURL("http://example.com")); |
| 531 ASSERT_EQ(expected_whitelists, actual_whitelists); | 531 ASSERT_EQ(expected_whitelists, actual_whitelists); |
| 532 | 532 |
| 533 expected_whitelists.erase(id1); | 533 expected_whitelists.erase(id1); |
| 534 | 534 |
| 535 actual_whitelists = | 535 actual_whitelists = |
| 536 filter_->GetMatchingWhitelistTitles(GURL("https://secure.com")); | 536 filter_.GetMatchingWhitelistTitles(GURL("https://secure.com")); |
| 537 ASSERT_EQ(expected_whitelists, actual_whitelists); | 537 ASSERT_EQ(expected_whitelists, actual_whitelists); |
| 538 } | 538 } |
| 539 | 539 |
| 540 #if BUILDFLAG(ENABLE_EXTENSIONS) | 540 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 541 TEST_F(SupervisedUserURLFilterTest, ChromeWebstoreDownloadsAreAlwaysAllowed) { | 541 TEST_F(SupervisedUserURLFilterTest, ChromeWebstoreDownloadsAreAlwaysAllowed) { |
| 542 // When installing an extension from Chrome Webstore, it tries to download the | 542 // When installing an extension from Chrome Webstore, it tries to download the |
| 543 // crx file from "https://clients2.google.com/service/update2/", which | 543 // crx file from "https://clients2.google.com/service/update2/", which |
| 544 // redirects to "https://clients2.googleusercontent.com/crx/blobs/" | 544 // redirects to "https://clients2.googleusercontent.com/crx/blobs/" |
| 545 // or "https://chrome.google.com/webstore/download/". | 545 // or "https://chrome.google.com/webstore/download/". |
| 546 // All URLs should be whitelisted regardless from the default filtering | 546 // All URLs should be whitelisted regardless from the default filtering |
| 547 // behavior. | 547 // behavior. |
| 548 GURL crx_download_url1( | 548 GURL crx_download_url1( |
| 549 "https://clients2.google.com/service/update2/" | 549 "https://clients2.google.com/service/update2/" |
| 550 "crx?response=redirect&os=linux&arch=x64&nacl_arch=x86-64&prod=" | 550 "crx?response=redirect&os=linux&arch=x64&nacl_arch=x86-64&prod=" |
| 551 "chromiumcrx&prodchannel=&prodversion=55.0.2882.0&lang=en-US&x=id%" | 551 "chromiumcrx&prodchannel=&prodversion=55.0.2882.0&lang=en-US&x=id%" |
| 552 "3Dciniambnphakdoflgeamacamhfllbkmo%26installsource%3Dondemand%26uc"); | 552 "3Dciniambnphakdoflgeamacamhfllbkmo%26installsource%3Dondemand%26uc"); |
| 553 GURL crx_download_url2( | 553 GURL crx_download_url2( |
| 554 "https://clients2.googleusercontent.com/crx/blobs/" | 554 "https://clients2.googleusercontent.com/crx/blobs/" |
| 555 "QgAAAC6zw0qH2DJtnXe8Z7rUJP1iCQF099oik9f2ErAYeFAX7_" | 555 "QgAAAC6zw0qH2DJtnXe8Z7rUJP1iCQF099oik9f2ErAYeFAX7_" |
| 556 "CIyrNH5qBru1lUSBNvzmjILCGwUjcIBaJqxgegSNy2melYqfodngLxKtHsGBehAMZSmuWSg6" | 556 "CIyrNH5qBru1lUSBNvzmjILCGwUjcIBaJqxgegSNy2melYqfodngLxKtHsGBehAMZSmuWSg6" |
| 557 "FupAcPS3Ih6NSVCOB9KNh6Mw/extension_2_0.crx"); | 557 "FupAcPS3Ih6NSVCOB9KNh6Mw/extension_2_0.crx"); |
| 558 GURL crx_download_url3( | 558 GURL crx_download_url3( |
| 559 "https://chrome.google.com/webstore/download/" | 559 "https://chrome.google.com/webstore/download/" |
| 560 "QgAAAC6zw0qH2DJtnXe8Z7rUJP1iCQF099oik9f2ErAYeFAX7_" | 560 "QgAAAC6zw0qH2DJtnXe8Z7rUJP1iCQF099oik9f2ErAYeFAX7_" |
| 561 "CIyrNH5qBru1lUSBNvzmjILCGwUjcIBaJqxgegSNy2melYqfodngLxKtHsGBehAMZSmuWSg6" | 561 "CIyrNH5qBru1lUSBNvzmjILCGwUjcIBaJqxgegSNy2melYqfodngLxKtHsGBehAMZSmuWSg6" |
| 562 "FupAcPS3Ih6NSVCOB9KNh6Mw/extension_2_0.crx"); | 562 "FupAcPS3Ih6NSVCOB9KNh6Mw/extension_2_0.crx"); |
| 563 | 563 |
| 564 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); | 564 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); |
| 565 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, | 565 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, |
| 566 filter_->GetFilteringBehaviorForURL(crx_download_url1)); | 566 filter_.GetFilteringBehaviorForURL(crx_download_url1)); |
| 567 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, | 567 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, |
| 568 filter_->GetFilteringBehaviorForURL(crx_download_url2)); | 568 filter_.GetFilteringBehaviorForURL(crx_download_url2)); |
| 569 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, | 569 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, |
| 570 filter_->GetFilteringBehaviorForURL(crx_download_url3)); | 570 filter_.GetFilteringBehaviorForURL(crx_download_url3)); |
| 571 | 571 |
| 572 // Set explicit host rules to block those website, and make sure the | 572 // Set explicit host rules to block those website, and make sure the |
| 573 // update URLs still work. | 573 // update URLs still work. |
| 574 std::map<std::string, bool> hosts; | 574 std::map<std::string, bool> hosts; |
| 575 hosts["clients2.google.com"] = false; | 575 hosts["clients2.google.com"] = false; |
| 576 hosts["clients2.googleusercontent.com"] = false; | 576 hosts["clients2.googleusercontent.com"] = false; |
| 577 filter_->SetManualHosts(&hosts); | 577 filter_.SetManualHosts(std::move(hosts)); |
| 578 filter_->SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); | 578 filter_.SetDefaultFilteringBehavior(SupervisedUserURLFilter::ALLOW); |
| 579 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, | 579 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, |
| 580 filter_->GetFilteringBehaviorForURL(crx_download_url1)); | 580 filter_.GetFilteringBehaviorForURL(crx_download_url1)); |
| 581 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, | 581 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, |
| 582 filter_->GetFilteringBehaviorForURL(crx_download_url2)); | 582 filter_.GetFilteringBehaviorForURL(crx_download_url2)); |
| 583 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, | 583 EXPECT_EQ(SupervisedUserURLFilter::ALLOW, |
| 584 filter_->GetFilteringBehaviorForURL(crx_download_url3)); | 584 filter_.GetFilteringBehaviorForURL(crx_download_url3)); |
| 585 } | 585 } |
| 586 #endif | 586 #endif |
| 587 | 587 |
| 588 TEST_F(SupervisedUserURLFilterTest, GetEmbeddedURLAmpCache) { | 588 TEST_F(SupervisedUserURLFilterTest, GetEmbeddedURLAmpCache) { |
| 589 // Base case. | 589 // Base case. |
| 590 EXPECT_EQ(GURL("http://example.com"), | 590 EXPECT_EQ(GURL("http://example.com"), |
| 591 GetEmbeddedURL("https://cdn.ampproject.org/c/example.com")); | 591 GetEmbeddedURL("https://cdn.ampproject.org/c/example.com")); |
| 592 // "s/" means "use https". | 592 // "s/" means "use https". |
| 593 EXPECT_EQ(GURL("https://example.com"), | 593 EXPECT_EQ(GURL("https://example.com"), |
| 594 GetEmbeddedURL("https://cdn.ampproject.org/c/s/example.com")); | 594 GetEmbeddedURL("https://cdn.ampproject.org/c/s/example.com")); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 GetEmbeddedURL( | 744 GetEmbeddedURL( |
| 745 "https://translate2.googleusercontent.com/path?u=example.com")); | 745 "https://translate2.googleusercontent.com/path?u=example.com")); |
| 746 // Different TLD is not supported for googleusercontent. | 746 // Different TLD is not supported for googleusercontent. |
| 747 EXPECT_EQ(GURL(), | 747 EXPECT_EQ(GURL(), |
| 748 GetEmbeddedURL( | 748 GetEmbeddedURL( |
| 749 "https://translate.googleusercontent.de/path?u=example.com")); | 749 "https://translate.googleusercontent.de/path?u=example.com")); |
| 750 // Query parameter ("u=...") is missing. | 750 // Query parameter ("u=...") is missing. |
| 751 EXPECT_EQ(GURL(), | 751 EXPECT_EQ(GURL(), |
| 752 GetEmbeddedURL("https://translate.google.com/path?t=example.com")); | 752 GetEmbeddedURL("https://translate.google.com/path?t=example.com")); |
| 753 } | 753 } |
| OLD | NEW |