12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/stl_util.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/blacklist.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/blacklist_state_fetcher.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/test_blacklist.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/test_blacklist_state_fetcher.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_prefs.h" 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::set<std::string> Set(const std::string& a) { 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::set<std::string> set; 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) set.insert(a); 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return set; 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::set<std::string> Set(const std::string& a, const std::string& b) { 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::set<std::string> set = Set(a); 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) set.insert(b); 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return set; 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::set<std::string> Set(const std::string& a, 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& b, 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& c) { 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::set<std::string> set = Set(a, b); 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) set.insert(c); 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return set; 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::set<std::string> Set(const std::string& a, 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& b, 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& c, 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& d) { 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::set<std::string> set = Set(a, b, c); 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) set.insert(d); 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return set; 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BlacklistTest : public testing::Test { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BlacklistTest() 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : test_prefs_(base::MessageLoopProxy::current()) {} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ExtensionPrefs* prefs() { 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return test_prefs_.prefs(); 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string AddExtension(const std::string& id) { 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return test_prefs_.AddExtension(id)->id(); 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) content::TestBrowserThreadBundle browser_thread_bundle_; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TestExtensionPrefs test_prefs_; 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)template<typename T> 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void Assign(T *to, const T& from) { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *to = from; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BlacklistTest, OnlyIncludesRequestedIDs) { 7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string a = AddExtension("a"); 7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string b = AddExtension("b"); 7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string c = AddExtension("c"); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Blacklist blacklist(prefs()); 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TestBlacklist tester(&blacklist); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(a, BLACKLISTED_MALWARE, false); 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(b, BLACKLISTED_MALWARE, false); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_MALWARE, tester.GetBlacklistState(a)); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_MALWARE, tester.GetBlacklistState(b)); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(c)); 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::set<std::string> blacklisted_ids; 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.GetMalwareIDs( 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Set(a, c), base::Bind(&Assign<std::set<std::string> >, &blacklisted_ids)); 9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(Set(a), blacklisted_ids); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(BlacklistTest, SafeBrowsing) { 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string a = AddExtension("a"); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Blacklist blacklist(prefs()); 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TestBlacklist tester(&blacklist); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.DisableSafeBrowsing(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(a)); 10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(a, BLACKLISTED_MALWARE, false); 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The manager is still disabled at this point, so it won't be blacklisted. 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(a)); 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.EnableSafeBrowsing(); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.NotifyUpdate(); 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now it should be. 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_MALWARE, tester.GetBlacklistState(a)); 11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.Clear(true); 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Safe browsing blacklist empty, now enabled. 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(a)); 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Tests that Blacklist clears the old prefs blacklist on startup. 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(BlacklistTest, ClearsPreferencesBlacklist) { 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string a = AddExtension("a"); 12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string b = AddExtension("b"); 12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Blacklist an installed extension. 12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) prefs()->SetExtensionBlacklisted(a, true); 12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Blacklist some non-installed extensions. This is what the old preferences 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // blacklist looked like. 13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string c = "cccccccccccccccccccccccccccccccc"; 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string d = "dddddddddddddddddddddddddddddddd"; 13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) prefs()->SetExtensionBlacklisted(c, true); 13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) prefs()->SetExtensionBlacklisted(d, true); 13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(Set(a, c, d), prefs()->GetBlacklistedExtensions()); 13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Blacklist blacklist(prefs()); 13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TestBlacklist tester(&blacklist); 14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Blacklist has been cleared. Only the installed extension "a" left. 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(Set(a), prefs()->GetBlacklistedExtensions()); 14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(prefs()->GetInstalledExtensionInfo(a).get()); 14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(prefs()->GetInstalledExtensionInfo(b).get()); 14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // "a" won't actually be *blacklisted* since it doesn't appear in 14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // safebrowsing. Blacklist no longer reads from prefs. This is purely a 14868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // concern of somebody else (currently, ExtensionService). 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::set<std::string> blacklisted_ids; 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) blacklist.GetMalwareIDs(Set(a, b, c, d), 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&Assign<std::set<std::string> >, 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &blacklisted_ids)); 15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(std::set<std::string>(), blacklisted_ids); 15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Prefs are still unaffected for installed extensions, though. 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(prefs()->IsExtensionBlacklisted(a)); 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(prefs()->IsExtensionBlacklisted(b)); 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(prefs()->IsExtensionBlacklisted(c)); 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(prefs()->IsExtensionBlacklisted(d)); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test getting different blacklist states from Blacklist. 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(BlacklistTest, GetBlacklistStates) { 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist blacklist(prefs()); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestBlacklist tester(&blacklist); 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string a = AddExtension("a"); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string b = AddExtension("b"); 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string c = AddExtension("c"); 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string d = AddExtension("d"); 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string e = AddExtension("e"); 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(a, BLACKLISTED_MALWARE, false); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(b, BLACKLISTED_SECURITY_VULNERABILITY, false); 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(c, BLACKLISTED_CWS_POLICY_VIOLATION, false); 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tester.SetBlacklistState(d, BLACKLISTED_POTENTIALLY_UNWANTED, false); 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist::BlacklistStateMap states_abc; 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist::BlacklistStateMap states_bcd; 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.GetBlacklistedIDs(Set(a, b, c, e), 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&Assign<Blacklist::BlacklistStateMap>, 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &states_abc)); 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.GetBlacklistedIDs(Set(b, c, d, e), 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&Assign<Blacklist::BlacklistStateMap>, 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &states_bcd)); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_MALWARE, states_abc[a]); 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_SECURITY_VULNERABILITY, states_abc[b]); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, states_abc[c]); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_SECURITY_VULNERABILITY, states_bcd[b]); 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, states_bcd[c]); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, states_bcd[d]); 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(0U, states_abc.count(e)); 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(0U, states_bcd.count(e)); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int old_request_count = tester.fetcher()->request_count(); 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist::BlacklistStateMap states_ad; 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.GetBlacklistedIDs(Set(a, d, e), 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&Assign<Blacklist::BlacklistStateMap>, 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &states_ad)); 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_MALWARE, states_ad[a]); 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, states_ad[d]); 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(0U, states_ad.count(e)); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(old_request_count, tester.fetcher()->request_count()); 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test both Blacklist and BlacklistStateFetcher by requesting the blacklist 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// states, sending fake requests and parsing the responses. 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(BlacklistTest, FetchBlacklistStates) { 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist blacklist(prefs()); 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new FakeSafeBrowsingDatabaseManager(true)); 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string a = AddExtension("a"); 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string b = AddExtension("b"); 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string c = AddExtension("c"); 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist_db->Enable(); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist_db->SetUnsafe(a, b); 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Prepare real fetcher. 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BlacklistStateFetcher* fetcher = new BlacklistStateFetcher(); 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestBlacklistStateFetcher fetcher_tester(fetcher); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.SetBlacklistStateFetcherForTest(fetcher); 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher_tester.SetBlacklistVerdict( 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a, ClientCRXListInfoResponse_Verdict_CWS_POLICY_VIOLATION); 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher_tester.SetBlacklistVerdict( 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) b, ClientCRXListInfoResponse_Verdict_POTENTIALLY_UNWANTED); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist::BlacklistStateMap states; 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.GetBlacklistedIDs( 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Set(a, b, c), base::Bind(&Assign<Blacklist::BlacklistStateMap>, &states)); 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Two fetchers should be created. 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(fetcher_tester.HandleFetcher(0)); 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(fetcher_tester.HandleFetcher(1)); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, states[a]); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, states[b]); 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(0U, states.count(c)); 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Blacklist::BlacklistStateMap cached_states; 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blacklist.GetBlacklistedIDs( 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Set(a, b, c), base::Bind(&Assign<Blacklist::BlacklistStateMap>, 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &cached_states)); 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // No new fetchers. 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(fetcher_tester.HandleFetcher(2)); 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, cached_states[a]); 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, cached_states[b]); 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(0U, cached_states.count(c)); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 26268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace extensions 263