url_blacklist_manager_unittest.cc revision a02191e04bc25c4935f804f2c080ae28663d096d
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 "chrome/common/net/url_fixer_upper.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_pref_names.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "net/base/net_errors.h" 200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/base/request_priority.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_test_util.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// TODO(joaodasilva): this file should be moved next to 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// components/policy/core/browser/url_blacklist_manager.(cc|h). 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// However, url_fixer_upper.h can't be included from the component. Rather 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// than having it mocked out, the actual URLFixerUpper::SegmentURL call is used 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// to make sure that the parsing of URL filters is correct. 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Helper to get the disambiguated SegmentURL() function. 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)URLBlacklist::SegmentURLCallback GetSegmentURLCallback() { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return URLFixerUpper::SegmentURL; 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingURLBlacklistManager : public URLBlacklistManager { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TestingURLBlacklistManager(PrefService* pref_service) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : URLBlacklistManager(pref_service, 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetSegmentURLCallback(), 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(OverrideBlacklistForURL)), 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_called_(0), 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_blacklist_called_(false) {} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestingURLBlacklistManager() { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make this method public for testing. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using URLBlacklistManager::ScheduleUpdate; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes a direct call to UpdateOnIO during tests. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateOnIOForTesting() { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> block(new base::ListValue); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block->Append(new base::StringValue("example.com")); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allow(new base::ListValue); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::UpdateOnIO(block.Pass(), allow.Pass()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLBlacklistManager overrides: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBlacklist(scoped_ptr<URLBlacklist> blacklist) OVERRIDE { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_blacklist_called_ = true; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::SetBlacklist(blacklist.Pass()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Update() OVERRIDE { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_called_++; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistManager::Update(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int update_called() const { return update_called_; } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool set_blacklist_called() const { return set_blacklist_called_; } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int update_called_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool set_blacklist_called_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestingURLBlacklistManager); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistManagerTest : public testing::Test { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklistManagerTest() {} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.registry()->RegisterListPref(policy_prefs::kUrlBlacklist); 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.registry()->RegisterListPref(policy_prefs::kUrlWhitelist); 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist_manager_.reset(new TestingURLBlacklistManager(&pref_service_)); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (blacklist_manager_.get()) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete |blacklist_manager_| while |io_thread_| is mapping IO to 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |loop_|. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopForIO loop_; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple pref_service_; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingURLBlacklistManager> blacklist_manager_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Parameters for the FilterToComponents test. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FilterTestParams { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(const std::string& filter, const std::string& scheme, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, bool match_subdomains, uint16 port, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(filter), scheme_(scheme), host_(host), 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_(match_subdomains), port_(port), path_(path) {} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(const FilterTestParams& params) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filter_(params.filter_), scheme_(params.scheme_), host_(params.host_), 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_(params.match_subdomains_), port_(params.port_), 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_(params.path_) {} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilterTestParams& operator=(const FilterTestParams& params) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter_ = params.filter_; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme_ = params.scheme_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_ = params.host_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_subdomains_ = params.match_subdomains_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port_ = params.port_; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_ = params.path_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& filter() const { return filter_; } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme() const { return scheme_; } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host() const { return host_; } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains() const { return match_subdomains_; } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port() const { return port_; } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path() const { return path_; } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string filter_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make Valgrind happy. Without this function, a generic one will print the 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// raw bytes in FilterTestParams, which due to some likely padding will access 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// uninitialized memory. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintTo(const FilterTestParams& params, std::ostream* os) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *os << params.filter(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistFilterToComponentsTest 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public testing::TestWithParam<FilterTestParams> { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTest() {} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(URLBlacklistFilterToComponentsTest); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(URLBlacklistFilterToComponentsTest, FilterToComponents) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match_subdomains = true; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 port = 42; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch URLBlacklist::FilterToComponents(GetSegmentURLCallback(), 178a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GetParam().filter(), 179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &scheme, 180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &host, 181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &match_subdomains, 182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &port, 183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &path, 184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch NULL); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().scheme(), scheme); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().host(), host); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().match_subdomains(), match_subdomains); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().port(), port); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetParam().path(), path); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, SingleUpdateForTwoPrefChanges) { 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* blacklist = new base::ListValue; 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist->Append(new base::StringValue("*.google.com")); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* whitelist = new base::ListValue; 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) whitelist->Append(new base::StringValue("mail.google.com")); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.SetManagedPref(policy_prefs::kUrlBlacklist, blacklist); 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_service_.SetManagedPref(policy_prefs::kUrlBlacklist, whitelist); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, blacklist_manager_->update_called()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask0) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task to the UI thread. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ScheduleUpdate(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown and deletion. 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask1) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ScheduleUpdate(); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, blacklist_manager_->update_called()); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask2) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This posts a task to the FILE thread. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->UpdateOnIOForTesting(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But shutdown happens before it is done. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_->ShutdownOnUIThread(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist_manager_->set_blacklist_called()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist_manager_.reset(); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTestInstance, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLBlacklistFilterToComponentsTest, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values( 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("google.com", 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams(".google.com", 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "google.com", 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://google.com", 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("google.com/", 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/"), 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://google.com:8080/whatever", 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8080u, 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://user:pass@google.com:8080/whatever", 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ".google.com", 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8080u, 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("123.123.123.123", 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("https://123.123.123.123", 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "https", 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("123.123.123.123/", 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/"), 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://123.123.123.123:123/whatever", 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123.123.123.123", 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123u, 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"), 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("*", 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("ftp://*", 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ftp", 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()), 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterTestParams("http://*/whatever", 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http", 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0u, 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/whatever"))); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, Filtering) { 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Block domain and all subdomains, for any filtered scheme. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("google.com")); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com"))); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/whatever"))); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://google.com/"))); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("bogus://google.com/"))); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://notgoogle.com/"))); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com"))); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://x.mail.google.com"))); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://x.mail.google.com/"))); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://x.y.google.com/a/b"))); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube.com/"))); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only http, ftp and ws schemes. 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("http://secure.com")); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ftp://secure.com")); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ws://secure.com")); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://secure.com"))); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://secure.com/whatever"))); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ftp://secure.com/"))); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ws://secure.com"))); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://secure.com/"))); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("wss://secure.com"))); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.secure.com"))); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://www.secure.com"))); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("wss://www.secure.com"))); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only a certain path prefix. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("path.to/ruin")); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruin"))); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://path.to/ruin"))); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruins"))); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://path.to/ruin/signup"))); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.path.to/ruin"))); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://path.to/fortune"))); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only a certain path prefix and scheme. 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("https://s.aaa.com/path")); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/path"))); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/path/bbb"))); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.aaa.com/path"))); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://aaa.com/path"))); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://x.aaa.com/path"))); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/bbb"))); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.aaa.com/"))); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter only ws and wss schemes. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("ws://ws.aaa.com")); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("wss://ws.aaa.com")); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("ws://ws.aaa.com"))); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("wss://ws.aaa.com"))); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://ws.aaa.com"))); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://ws.aaa.com"))); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("ftp://ws.aaa.com"))); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test exceptions to path prefixes, and most specific matches. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("s.xxx.com/a")); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("s.xxx.com/a/b")); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("https://s.xxx.com/a/b/c")); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://s.xxx.com/a/b/c/d")); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a"))); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/x"))); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/x"))); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b"))); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b"))); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/x"))); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c"))); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c"))); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/x"))); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/d"))); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c/d"))); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.xxx.com/a/b/c/d/x"))); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.xxx.com/a/b/c/d/x"))); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://xxx.com/a"))); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://xxx.com/a/b"))); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Block an ip address. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("123.123.123.123")); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://123.123.123.123/"))); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://123.123.123.124/"))); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an exception. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("plus.google.com")); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://plus.google.com/"))); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open an exception only when using https for mail. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://mail.google.com")); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com/"))); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://www.google.com/"))); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://mail.google.com/"))); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Match exactly "google.com", only for http. Subdomains without exceptions 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are still blocked. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("http://.google.com")); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://google.com/"))); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://google.com/"))); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.google.com/"))); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A smaller path match in an exact host overrides a longer path for hosts 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that also match subdomains. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("yyy.com/aaa")); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue(".yyy.com/a")); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com"))); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com/aaa"))); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://yyy.com/aaa2"))); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://www.yyy.com"))); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.yyy.com/aaa"))); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://www.yyy.com/aaa2"))); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the exact entry is both allowed and blocked, allowing takes precedence. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked.reset(new base::ListValue); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("example.com")); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed.reset(new base::ListValue); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("example.com")); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://example.com"))); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 474a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(URLBlacklistManagerTest, QueryParameters) { 475a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch URLBlacklist blacklist(GetSegmentURLCallback()); 476a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<base::ListValue> blocked(new base::ListValue); 477a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<base::ListValue> allowed(new base::ListValue); 478a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 479a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Block domain and all subdomains, for any filtered scheme. 480a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube.com"); 481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube.com/watch?v=XYZ"); 482a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 483a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 484a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 485a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com"))); 486a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=123"))); 487a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 488a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=123&v=XYZ"))); 489a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 490a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=XYZ&v=123"))); 491a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=XYZ"))); 492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?v=XYZ&foo=bar"))); 494a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 495a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?foo=bar&v=XYZ"))); 496a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 497a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 498a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube.com/watch?av=XYZ&ag=123"); 499a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 500a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com"))); 501a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=123"))); 502a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=XYZ"))); 503a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 504a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=123&ag=XYZ"))); 505a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 506a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?ag=XYZ&av=123"))); 507a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 508a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?av=XYZ&ag=123"))); 509a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 510a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?ag=123&av=XYZ"))); 511a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 512a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube.com/watch?av=XYZ&ag=123&av=123"))); 513a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 514a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube.com/watch?av=XYZ&ag=123&ag=1234"))); 515a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 516a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 517a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube.com/watch?foo=bar*&vid=2*"); 518a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 519a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com"))); 520a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2"))); 521a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube.com/watch?foo=bar"))); 522a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 523a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2&foo=bar"))); 524a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 525a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2&foo=bar1"))); 526a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 527a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=234&foo=bar"))); 528a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 529a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube.com/watch?vid=234&foo=bar23"))); 530a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 531a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 532a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube1.com/disallow?v=44678"); 533a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 534a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com"))); 535a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com?v=123"))); 536a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Path does not match 537a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com?v=44678"))); 538a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 539a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?v=44678"))); 540a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 541a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?v=4467"))); 542a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 543a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube1.com/disallow?v=4467&v=123"))); 544a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 545a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube1.com/disallow?v=4467&v=123&v=44678"))); 546a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 547a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 548a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube1.com/disallow?g=*"); 549a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 550a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com"))); 551a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube1.com?ag=123"))); 552a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 553a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?g=123"))); 554a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 555a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube1.com/disallow?ag=13&g=123"))); 556a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 557a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 558a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube2.com/disallow?a*"); 559a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 560a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube2.com"))); 561a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked( 562a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube2.com/disallow?b=123&a21=467"))); 563a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 564a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube2.com/disallow?abba=true"))); 565a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 566a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube2.com/disallow?baba=true"))); 567a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 568a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 569a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 570a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube3.com"); 571a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube3.com/watch?fo*"); 572a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 573a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 574a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube3.com"))); 575a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE( 576a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube3.com/watch?b=123&a21=467"))); 577a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 578a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube3.com/watch?b=123&a21=467&foo1"))); 579a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 580a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube3.com/watch?b=123&a21=467&foo=bar"))); 581a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 582a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube3.com/watch?b=123&a21=467&fo=ba"))); 583a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE( 584a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.IsURLBlocked(GURL("http://youtube3.com/watch?foriegn=true"))); 585a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube3.com/watch?fold"))); 586a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 587a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 588a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 589a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube4.com"); 590a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube4.com?*"); 591a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 592a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 593a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube4.com"))); 594a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube4.com/?hello"))); 595a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube4.com/?foo"))); 596a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 597a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed.reset(new base::ListValue); 598a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked.reset(new base::ListValue); 599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blocked->AppendString("youtube5.com?foo=bar"); 600a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch allowed->AppendString("youtube5.com?foo1=bar1&foo2=bar2&"); 601a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Block(blocked.get()); 602a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blacklist.Allow(allowed.get()); 603a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://youtube5.com"))); 604a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://youtube5.com/?foo=bar&a=b"))); 605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // More specific filter is given precedence. 606a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_FALSE(blacklist.IsURLBlocked( 607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GURL("http://youtube5.com/?a=b&foo=bar&foo1=bar1&foo2=bar2"))); 608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(URLBlacklistManagerTest, BlockAllWithExceptions) { 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) URLBlacklist blacklist(GetSegmentURLCallback()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> allowed(new base::ListValue); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blocked->Append(new base::StringValue("*")); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue(".www.google.com")); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("plus.google.com")); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://mail.google.com")); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed->Append(new base::StringValue("https://very.safe/path")); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Block(blocked.get()); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklist.Allow(allowed.get()); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://random.com"))); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://google.com"))); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://s.www.google.com"))); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://www.google.com"))); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://plus.google.com"))); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://s.plus.google.com"))); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://mail.google.com"))); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://mail.google.com"))); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://s.mail.google.com"))); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://very.safe/"))); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(blacklist.IsURLBlocked(GURL("http://very.safe/path"))); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(blacklist.IsURLBlocked(GURL("https://very.safe/path"))); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(URLBlacklistManagerTest, DontBlockResources) { 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<URLBlacklist> blacklist(new URLBlacklist(GetSegmentURLCallback())); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::ListValue> blocked(new base::ListValue); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blocked->Append(new base::StringValue("google.com")); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist->Block(blocked.get()); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blacklist_manager_->SetBlacklist(blacklist.Pass()); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(blacklist_manager_->IsURLBlocked(GURL("http://google.com"))); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLRequestContext context; 6450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) net::URLRequest request( 6460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GURL("http://google.com"), net::DEFAULT_PRIORITY, NULL, &context); 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 648c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int reason = net::ERR_UNEXPECTED; 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Background requests aren't filtered. 650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(blacklist_manager_->IsRequestBlocked(request, &reason)); 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Main frames are filtered. 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) request.SetLoadFlags(net::LOAD_MAIN_FRAME); 654c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(blacklist_manager_->IsRequestBlocked(request, &reason)); 655c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(net::ERR_BLOCKED_BY_ADMINISTRATOR, reason); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // On most platforms, sync gets a free pass due to signin flows. 658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool block_signin_urls = false; 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There are no sync specific signin flows on Chrome OS, so no special 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // treatment. 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) block_signin_urls = true; 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 665d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GURL sync_url(GaiaUrls::GetInstance()->service_login_url().Resolve( 666d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "?service=chromiumsync")); 6670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) net::URLRequest sync_request(sync_url, net::DEFAULT_PRIORITY, NULL, &context); 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) sync_request.SetLoadFlags(net::LOAD_MAIN_FRAME); 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(block_signin_urls, 670c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch blacklist_manager_->IsRequestBlocked(sync_request, &reason)); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 674