url_blacklist_manager_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/policy/policy_helpers.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/net/url_fixer_upper.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_pref_names.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/base/request_priority.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_test_util.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// TODO(joaodasilva): this file should be moved next to 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// components/policy/core/browser/url_blacklist_manager.(cc|h). 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// However, url_fixer_upper.h can't be included from the component. Rather 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// than having it mocked out, the actual URLFixerUpper::SegmentURL call is used 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// to make sure that the parsing of URL filters is correct. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Helper to get the disambiguated SegmentURL() function. 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)URLBlacklist::SegmentURLCallback GetSegmentURLCallback() { 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return URLFixerUpper::SegmentURL; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingURLBlacklistManager : public URLBlacklistManager { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TestingURLBlacklistManager(PrefService* pref_service) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : URLBlacklistManager(pref_service, 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetSegmentURLCallback(), 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SkipBlacklistForURL), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_called_(0), 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_blacklist_called_(false) {} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestingURLBlacklistManager() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make this method public for testing. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using URLBlacklistManager::ScheduleUpdate; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes a direct call to UpdateOnIO during tests. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateOnIOForTesting() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> block(new base::ListValue); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block->Append(new base::StringValue("example.com")); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allow(new base::ListValue); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::UpdateOnIO(block.Pass(), allow.Pass()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLBlacklistManager overrides: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBlacklist(scoped_ptr<URLBlacklist> blacklist) OVERRIDE { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_blacklist_called_ = true; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::SetBlacklist(blacklist.Pass()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Update() OVERRIDE { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_called_++; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::Update(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int update_called() const { return update_called_; } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool set_blacklist_called() const { return set_blacklist_called_; } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int update_called_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool set_blacklist_called_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestingURLBlacklistManager); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistManagerTest : public testing::Test { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklistManagerTest() {} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.registry()->RegisterListPref(policy_prefs::kUrlBlacklist); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.registry()->RegisterListPref(policy_prefs::kUrlWhitelist); 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist_manager_.reset(new TestingURLBlacklistManager(&pref_service_)); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blacklist_manager_.get()) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete |blacklist_manager_| while |io_thread_| is mapping IO to 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |loop_|. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopForIO loop_; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple pref_service_; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingURLBlacklistManager> blacklist_manager_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Parameters for the FilterToComponents test. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FilterTestParams { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(const std::string& filter, const std::string& scheme, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, bool match_subdomains, uint16 port, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(filter), scheme_(scheme), host_(host), 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_(match_subdomains), port_(port), path_(path) {} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(const FilterTestParams& params) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(params.filter_), scheme_(params.scheme_), host_(params.host_), 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_(params.match_subdomains_), port_(params.port_), 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_(params.path_) {} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilterTestParams& operator=(const FilterTestParams& params) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_ = params.filter_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme_ = params.scheme_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_ = params.host_; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_ = params.match_subdomains_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port_ = params.port_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_ = params.path_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& filter() const { return filter_; } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme() const { return scheme_; } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host() const { return host_; } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains() const { return match_subdomains_; } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port() const { return port_; } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path() const { return path_; } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string filter_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make Valgrind happy. Without this function, a generic one will print the 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// raw bytes in FilterTestParams, which due to some likely padding will access 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// uninitialized memory. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintTo(const FilterTestParams& params, std::ostream* os) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *os << params.filter(); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistFilterToComponentsTest 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public testing::TestWithParam<FilterTestParams> { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTest() {} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(URLBlacklistFilterToComponentsTest); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(URLBlacklistFilterToComponentsTest, FilterToComponents) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains = true; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port = 42; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist::FilterToComponents(GetSegmentURLCallback(), GetParam().filter(), 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &scheme, &host, &match_subdomains, &port, 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &path); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().scheme(), scheme); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().host(), host); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().match_subdomains(), match_subdomains); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().port(), port); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().path(), path); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, SingleUpdateForTwoPrefChanges) { 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* blacklist = new base::ListValue; 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist->Append(new base::StringValue("*.google.com")); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* whitelist = new base::ListValue; 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) whitelist->Append(new base::StringValue("mail.google.com")); 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.SetManagedPref(policy_prefs::kUrlBlacklist, blacklist); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.SetManagedPref(policy_prefs::kUrlBlacklist, whitelist); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, blacklist_manager_->update_called()); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask0) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task to the UI thread. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ScheduleUpdate(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown and deletion. 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask1) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ScheduleUpdate(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, blacklist_manager_->update_called()); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask2) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This posts a task to the FILE thread. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->UpdateOnIOForTesting(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But shutdown happens before it is done. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist_manager_->set_blacklist_called()); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTestInstance, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTest, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("google.com", 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(".google.com", 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "google.com", 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://google.com", 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("google.com/", 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/"), 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://google.com:8080/whatever", 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8080u, 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://user:pass@google.com:8080/whatever", 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8080u, 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("123.123.123.123", 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("https://123.123.123.123", 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "https", 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("123.123.123.123/", 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/"), 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://123.123.123.123:123/whatever", 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123u, 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("*", 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("ftp://*", 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp", 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://*/whatever", 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"))); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, Filtering) { 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Block domain and all subdomains, for any filtered scheme. 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("google.com")); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com"))); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/whatever"))); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://google.com/"))); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("bogus://google.com/"))); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://notgoogle.com/"))); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com"))); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://x.mail.google.com"))); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://x.mail.google.com/"))); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://x.y.google.com/a/b"))); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube.com/"))); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only http, ftp and ws schemes. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("http://secure.com")); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ftp://secure.com")); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ws://secure.com")); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://secure.com"))); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://secure.com/whatever"))); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ftp://secure.com/"))); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ws://secure.com"))); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://secure.com/"))); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("wss://secure.com"))); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.secure.com"))); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://www.secure.com"))); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("wss://www.secure.com"))); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only a certain path prefix. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("path.to/ruin")); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruin"))); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://path.to/ruin"))); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruins"))); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruin/signup"))); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.path.to/ruin"))); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://path.to/fortune"))); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only a certain path prefix and scheme. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("https://s.aaa.com/path")); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/path"))); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/path/bbb"))); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.aaa.com/path"))); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://aaa.com/path"))); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://x.aaa.com/path"))); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/bbb"))); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/"))); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only ws and wss schemes. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ws://ws.aaa.com")); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("wss://ws.aaa.com")); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ws://ws.aaa.com"))); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("wss://ws.aaa.com"))); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://ws.aaa.com"))); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://ws.aaa.com"))); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("ftp://ws.aaa.com"))); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test exceptions to path prefixes, and most specific matches. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("s.xxx.com/a")); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("s.xxx.com/a/b")); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("https://s.xxx.com/a/b/c")); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://s.xxx.com/a/b/c/d")); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a"))); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/x"))); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/x"))); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b"))); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b"))); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/x"))); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c"))); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c"))); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/x"))); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/d"))); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c/d"))); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/d/x"))); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c/d/x"))); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://xxx.com/a"))); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://xxx.com/a/b"))); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Block an ip address. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("123.123.123.123")); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://123.123.123.123/"))); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://123.123.123.124/"))); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an exception. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("plus.google.com")); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://plus.google.com/"))); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an exception only when using https for mail. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://mail.google.com")); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com/"))); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://www.google.com/"))); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://mail.google.com/"))); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Match exactly "google.com", only for http. Subdomains without exceptions 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are still blocked. 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("http://.google.com")); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://google.com/"))); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A smaller path match in an exact host overrides a longer path for hosts 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that also match subdomains. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("yyy.com/aaa")); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue(".yyy.com/a")); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com"))); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com/aaa"))); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com/aaa2"))); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://www.yyy.com"))); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.yyy.com/aaa"))); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.yyy.com/aaa2"))); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the exact entry is both allowed and blocked, allowing takes precedence. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("example.com")); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("example.com")); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://example.com"))); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, BlockAllWithExceptions) { 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("*")); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue(".www.google.com")); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("plus.google.com")); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://mail.google.com")); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://very.safe/path")); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://random.com"))); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com"))); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.www.google.com"))); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://www.google.com"))); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://plus.google.com"))); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.plus.google.com"))); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com"))); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://mail.google.com"))); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.mail.google.com"))); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://very.safe/"))); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://very.safe/path"))); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://very.safe/path"))); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(URLBlacklistManagerTest, DontBlockResources) { 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<URLBlacklist> blacklist(new URLBlacklist(GetSegmentURLCallback())); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocked->Append(new base::StringValue("google.com")); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist->Block(blocked.get()); 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist_manager_->SetBlacklist(blacklist.Pass()); 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(blacklist_manager_->IsURLBlocked(GURL("http://google.com"))); 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLRequestContext context; 5020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) net::URLRequest request( 5030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GURL("http://google.com"), net::DEFAULT_PRIORITY, NULL, &context); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Background requests aren't filtered. 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(blacklist_manager_->IsRequestBlocked(request)); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Main frames are filtered. 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) request.SetLoadFlags(net::LOAD_MAIN_FRAME); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(blacklist_manager_->IsRequestBlocked(request)); 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // On most platforms, sync gets a free pass due to signin flows. 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool block_signin_urls = false; 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There are no sync specific signin flows on Chrome OS, so no special 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // treatment. 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) block_signin_urls = true; 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 520d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GURL sync_url(GaiaUrls::GetInstance()->service_login_url().Resolve( 521d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "?service=chromiumsync")); 5220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) net::URLRequest sync_request(sync_url, net::DEFAULT_PRIORITY, NULL, &context); 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) sync_request.SetLoadFlags(net::LOAD_MAIN_FRAME); 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(block_signin_urls, 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) blacklist_manager_->IsRequestBlocked(sync_request)); 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 529