15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/browser/url_blacklist_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <ostream> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/callback.h" 119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/policy/policy_helpers.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_pref_names.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/url_fixer/url_fixer.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/base/load_flags.h" 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "net/base/net_errors.h" 210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/base/request_priority.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request.h" 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "net/url_request/url_request_context.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_test_util.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// TODO(joaodasilva): this file should be moved next to 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// components/policy/core/browser/url_blacklist_manager.(cc|h). 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// However, url_fixer_upper.h can't be included from the component. Rather 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// than having it mocked out, the actual url_fixer::SegmentURL call is used 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// to make sure that the parsing of URL filters is correct. 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Helper to get the disambiguated SegmentURL() function. 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)URLBlacklist::SegmentURLCallback GetSegmentURLCallback() { 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return url_fixer::SegmentURL; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingURLBlacklistManager : public URLBlacklistManager { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TestingURLBlacklistManager(PrefService* pref_service) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : URLBlacklistManager(pref_service, 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetSegmentURLCallback(), 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(OverrideBlacklistForURL)), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_called_(0), 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_blacklist_called_(false) {} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestingURLBlacklistManager() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make this method public for testing. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using URLBlacklistManager::ScheduleUpdate; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes a direct call to UpdateOnIO during tests. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateOnIOForTesting() { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> block(new base::ListValue); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block->Append(new base::StringValue("example.com")); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allow(new base::ListValue); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::UpdateOnIO(block.Pass(), allow.Pass()); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLBlacklistManager overrides: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBlacklist(scoped_ptr<URLBlacklist> blacklist) OVERRIDE { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_blacklist_called_ = true; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::SetBlacklist(blacklist.Pass()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Update() OVERRIDE { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_called_++; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::Update(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int update_called() const { return update_called_; } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool set_blacklist_called() const { return set_blacklist_called_; } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int update_called_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool set_blacklist_called_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestingURLBlacklistManager); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistManagerTest : public testing::Test { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklistManagerTest() {} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.registry()->RegisterListPref(policy_prefs::kUrlBlacklist); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.registry()->RegisterListPref(policy_prefs::kUrlWhitelist); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist_manager_.reset(new TestingURLBlacklistManager(&pref_service_)); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blacklist_manager_.get()) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete |blacklist_manager_| while |io_thread_| is mapping IO to 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |loop_|. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopForIO loop_; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple pref_service_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingURLBlacklistManager> blacklist_manager_; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Parameters for the FilterToComponents test. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FilterTestParams { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(const std::string& filter, const std::string& scheme, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, bool match_subdomains, uint16 port, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(filter), scheme_(scheme), host_(host), 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_(match_subdomains), port_(port), path_(path) {} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(const FilterTestParams& params) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(params.filter_), scheme_(params.scheme_), host_(params.host_), 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_(params.match_subdomains_), port_(params.port_), 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_(params.path_) {} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilterTestParams& operator=(const FilterTestParams& params) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_ = params.filter_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme_ = params.scheme_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_ = params.host_; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_ = params.match_subdomains_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port_ = params.port_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_ = params.path_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& filter() const { return filter_; } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme() const { return scheme_; } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host() const { return host_; } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains() const { return match_subdomains_; } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port() const { return port_; } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path() const { return path_; } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string filter_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make Valgrind happy. Without this function, a generic one will print the 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// raw bytes in FilterTestParams, which due to some likely padding will access 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// uninitialized memory. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintTo(const FilterTestParams& params, std::ostream* os) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *os << params.filter(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistFilterToComponentsTest 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public testing::TestWithParam<FilterTestParams> { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTest() {} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(URLBlacklistFilterToComponentsTest); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(URLBlacklistFilterToComponentsTest, FilterToComponents) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains = true; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port = 42; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch URLBlacklist::FilterToComponents(GetSegmentURLCallback(), 180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GetParam().filter(), 181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &scheme, 182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &host, 183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &match_subdomains, 184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &port, 185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &path, 186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NULL); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().scheme(), scheme); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().host(), host); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().match_subdomains(), match_subdomains); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().port(), port); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().path(), path); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, SingleUpdateForTwoPrefChanges) { 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* blacklist = new base::ListValue; 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist->Append(new base::StringValue("*.google.com")); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* whitelist = new base::ListValue; 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) whitelist->Append(new base::StringValue("mail.google.com")); 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.SetManagedPref(policy_prefs::kUrlBlacklist, blacklist); 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.SetManagedPref(policy_prefs::kUrlBlacklist, whitelist); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, blacklist_manager_->update_called()); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask0) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task to the UI thread. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ScheduleUpdate(); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown and deletion. 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask1) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ScheduleUpdate(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, blacklist_manager_->update_called()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask2) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This posts a task to the FILE thread. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->UpdateOnIOForTesting(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But shutdown happens before it is done. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist_manager_->set_blacklist_called()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTestInstance, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTest, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values( 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("google.com", 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(".google.com", 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "google.com", 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://google.com", 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("google.com/", 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/"), 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://google.com:8080/whatever", 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8080u, 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://user:pass@google.com:8080/whatever", 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8080u, 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("123.123.123.123", 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("https://123.123.123.123", 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "https", 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("123.123.123.123/", 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/"), 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://123.123.123.123:123/whatever", 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123u, 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("*", 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("ftp://*", 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp", 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://*/whatever", 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"))); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, Filtering) { 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Block domain and all subdomains, for any filtered scheme. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("google.com")); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com"))); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/whatever"))); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://google.com/"))); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("bogus://google.com/"))); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://notgoogle.com/"))); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com"))); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://x.mail.google.com"))); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://x.mail.google.com/"))); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://x.y.google.com/a/b"))); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube.com/"))); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only http, ftp and ws schemes. 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("http://secure.com")); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ftp://secure.com")); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ws://secure.com")); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://secure.com"))); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://secure.com/whatever"))); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ftp://secure.com/"))); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ws://secure.com"))); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://secure.com/"))); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("wss://secure.com"))); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.secure.com"))); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://www.secure.com"))); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("wss://www.secure.com"))); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only a certain path prefix. 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("path.to/ruin")); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruin"))); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://path.to/ruin"))); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruins"))); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruin/signup"))); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.path.to/ruin"))); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://path.to/fortune"))); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only a certain path prefix and scheme. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("https://s.aaa.com/path")); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/path"))); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/path/bbb"))); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.aaa.com/path"))); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://aaa.com/path"))); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://x.aaa.com/path"))); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/bbb"))); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/"))); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only ws and wss schemes. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ws://ws.aaa.com")); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("wss://ws.aaa.com")); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ws://ws.aaa.com"))); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("wss://ws.aaa.com"))); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://ws.aaa.com"))); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://ws.aaa.com"))); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("ftp://ws.aaa.com"))); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test exceptions to path prefixes, and most specific matches. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("s.xxx.com/a")); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("s.xxx.com/a/b")); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("https://s.xxx.com/a/b/c")); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://s.xxx.com/a/b/c/d")); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a"))); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/x"))); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/x"))); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b"))); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b"))); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/x"))); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c"))); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c"))); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/x"))); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/d"))); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c/d"))); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/d/x"))); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c/d/x"))); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://xxx.com/a"))); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://xxx.com/a/b"))); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Block an ip address. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("123.123.123.123")); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://123.123.123.123/"))); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://123.123.123.124/"))); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an exception. 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("plus.google.com")); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://plus.google.com/"))); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an exception only when using https for mail. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://mail.google.com")); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com/"))); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://www.google.com/"))); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://mail.google.com/"))); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Match exactly "google.com", only for http. Subdomains without exceptions 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are still blocked. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("http://.google.com")); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://google.com/"))); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A smaller path match in an exact host overrides a longer path for hosts 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that also match subdomains. 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("yyy.com/aaa")); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue(".yyy.com/a")); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com"))); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com/aaa"))); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com/aaa2"))); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://www.yyy.com"))); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.yyy.com/aaa"))); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.yyy.com/aaa2"))); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the exact entry is both allowed and blocked, allowing takes precedence. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("example.com")); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("example.com")); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://example.com"))); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 476a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(URLBlacklistManagerTest, QueryParameters) { 477a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch URLBlacklist blacklist(GetSegmentURLCallback()); 478a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<base::ListValue> blocked(new base::ListValue); 479a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<base::ListValue> allowed(new base::ListValue); 480a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Block domain and all subdomains, for any filtered scheme. 482a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube.com"); 483a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube.com/watch?v=XYZ"); 484a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 485a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 486a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 487a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com"))); 488a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=123"))); 489a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 490a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=123&v=XYZ"))); 491a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=XYZ&v=123"))); 493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=XYZ"))); 494a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 495a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=XYZ&foo=bar"))); 496a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 497a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?foo=bar&v=XYZ"))); 498a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 499a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 500a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube.com/watch?av=XYZ&ag=123"); 501a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 502a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com"))); 503a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=123"))); 504a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=XYZ"))); 505a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 506a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=123&ag=XYZ"))); 507a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 508a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?ag=XYZ&av=123"))); 509a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 510a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=XYZ&ag=123"))); 511a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 512a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?ag=123&av=XYZ"))); 513a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 514a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube.com/watch?av=XYZ&ag=123&av=123"))); 515a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 516a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube.com/watch?av=XYZ&ag=123&ag=1234"))); 517a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 518a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 519a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube.com/watch?foo=bar*&vid=2*"); 520a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 521a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com"))); 522a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2"))); 523a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?foo=bar"))); 524a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 525a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2&foo=bar"))); 526a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 527a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2&foo=bar1"))); 528a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 529a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=234&foo=bar"))); 530a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 531a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube.com/watch?vid=234&foo=bar23"))); 532a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 533a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 534a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube1.com/disallow?v=44678"); 535a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 536a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com"))); 537a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com?v=123"))); 538a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Path does not match 539a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com?v=44678"))); 540a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 541a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?v=44678"))); 542a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 543a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?v=4467"))); 544a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 545a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube1.com/disallow?v=4467&v=123"))); 546a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 547a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube1.com/disallow?v=4467&v=123&v=44678"))); 548a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 549a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 550a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube1.com/disallow?g=*"); 551a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 552a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com"))); 553a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com?ag=123"))); 554a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 555a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?g=123"))); 556a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 557a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?ag=13&g=123"))); 558a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 559a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 560a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube2.com/disallow?a*"); 561a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 562a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube2.com"))); 563a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 564a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube2.com/disallow?b=123&a21=467"))); 565a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 566a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube2.com/disallow?abba=true"))); 567a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 568a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube2.com/disallow?baba=true"))); 569a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 570a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 571a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 572a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube3.com"); 573a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube3.com/watch?fo*"); 574a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 575a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 576a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube3.com"))); 577a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 578a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube3.com/watch?b=123&a21=467"))); 579a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 580a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube3.com/watch?b=123&a21=467&foo1"))); 581a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 582a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube3.com/watch?b=123&a21=467&foo=bar"))); 583a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 584a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube3.com/watch?b=123&a21=467&fo=ba"))); 585a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 586a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube3.com/watch?foriegn=true"))); 587a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube3.com/watch?fold"))); 588a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 589a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 590a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 591a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube4.com"); 592a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube4.com?*"); 593a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 594a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 595a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube4.com"))); 596a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube4.com/?hello"))); 597a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube4.com/?foo"))); 598a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 600a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 601a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube5.com?foo=bar"); 602a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube5.com?foo1=bar1&foo2=bar2&"); 603a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 604a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube5.com"))); 606a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube5.com/?foo=bar&a=b"))); 607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // More specific filter is given precedence. 608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube5.com/?a=b&foo=bar&foo1=bar1&foo2=bar2"))); 610a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, BlockAllWithExceptions) { 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("*")); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue(".www.google.com")); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("plus.google.com")); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://mail.google.com")); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://very.safe/path")); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://random.com"))); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com"))); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.www.google.com"))); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://www.google.com"))); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://plus.google.com"))); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.plus.google.com"))); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com"))); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://mail.google.com"))); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.mail.google.com"))); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://very.safe/"))); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://very.safe/path"))); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://very.safe/path"))); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(URLBlacklistManagerTest, DontBlockResources) { 6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<URLBlacklist> blacklist(new URLBlacklist(GetSegmentURLCallback())); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocked->Append(new base::StringValue("google.com")); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist->Block(blocked.get()); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist_manager_->SetBlacklist(blacklist.Pass()); 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(blacklist_manager_->IsURLBlocked(GURL("http://google.com"))); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLRequestContext context; 64703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<net::URLRequest> request(context.CreateRequest( 64803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GURL("http://google.com"), net::DEFAULT_PRIORITY, NULL, NULL)); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int reason = net::ERR_UNEXPECTED; 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Background requests aren't filtered. 65203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(blacklist_manager_->IsRequestBlocked(*request.get(), &reason)); 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Main frames are filtered. 65503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) request->SetLoadFlags(net::LOAD_MAIN_FRAME); 65603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(blacklist_manager_->IsRequestBlocked(*request.get(), &reason)); 657c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(net::ERR_BLOCKED_BY_ADMINISTRATOR, reason); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // On most platforms, sync gets a free pass due to signin flows. 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool block_signin_urls = false; 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There are no sync specific signin flows on Chrome OS, so no special 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // treatment. 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) block_signin_urls = true; 665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 667d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GURL sync_url(GaiaUrls::GetInstance()->service_login_url().Resolve( 668d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "?service=chromiumsync")); 66903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<net::URLRequest> sync_request(context.CreateRequest( 67003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sync_url, net::DEFAULT_PRIORITY, NULL, NULL)); 67103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sync_request->SetLoadFlags(net::LOAD_MAIN_FRAME); 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(block_signin_urls, 67303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blacklist_manager_->IsRequestBlocked(*sync_request.get(), &reason)); 67403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 67503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 67603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, DefaultBlacklistExceptions) { 67703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 67803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 67903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 68003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Blacklist everything: 68103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blocked->Append(new base::StringValue("*")); 68203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blacklist.Block(blocked.get()); 68303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 68403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Internal NTP and extension URLs are not blocked by the "*": 68503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com"))); 68603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE((blacklist.IsURLBlocked(GURL("chrome-extension://xyz")))); 68703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE((blacklist.IsURLBlocked(GURL("chrome-search://local-ntp")))); 68803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE((blacklist.IsURLBlocked(GURL("chrome-native://ntp")))); 68903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 69003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Unless they are explicitly blacklisted: 69103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blocked->Append(new base::StringValue("chrome-extension://*")); 69203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 69303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) allowed->Append(new base::StringValue("chrome-extension://abc")); 69403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blacklist.Block(blocked.get()); 69503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blacklist.Allow(allowed.get()); 69603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 69703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com"))); 69803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE((blacklist.IsURLBlocked(GURL("chrome-extension://xyz")))); 69903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE((blacklist.IsURLBlocked(GURL("chrome-extension://abc")))); 70003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE((blacklist.IsURLBlocked(GURL("chrome-search://local-ntp")))); 70103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE((blacklist.IsURLBlocked(GURL("chrome-native://ntp")))); 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 705