Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Unified Diff: chrome/browser/extensions/blacklist_unittest.cc

Issue 49253005: Fetch extension blacklist states from SafeBrowsing server (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/blacklist_unittest.cc
diff --git a/chrome/browser/extensions/blacklist_unittest.cc b/chrome/browser/extensions/blacklist_unittest.cc
index 18d4bb83680ebfd66bc4d48e9d676f557caef2aa..caf18f0f8dc0314da14013ab663686db98e1519b 100644
--- a/chrome/browser/extensions/blacklist_unittest.cc
+++ b/chrome/browser/extensions/blacklist_unittest.cc
@@ -5,10 +5,13 @@
#include "base/bind.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
+#include "base/stl_util.h"
#include "chrome/browser/extensions/blacklist.h"
+#include "chrome/browser/extensions/blacklist_state_fetcher.h"
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/extensions/fake_safe_browsing_database_manager.h"
#include "chrome/browser/extensions/test_blacklist.h"
+#include "chrome/browser/extensions/test_blacklist_state_fetcher.h"
#include "chrome/browser/extensions/test_extension_prefs.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -35,8 +38,8 @@ std::set<std::string> Set(const std::string& a,
}
std::set<std::string> Set(const std::string& a,
const std::string& b,
- const std::string& d,
- const std::string& c) {
+ const std::string& c,
+ const std::string& d) {
std::set<std::string> set = Set(a, b, c);
set.insert(d);
return set;
@@ -72,10 +75,40 @@ class BlacklistTest : public testing::Test {
Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db_;
};
-void Assign(std::set<std::string> *to, const std::set<std::string>& from) {
+class BlacklistStateFetcherMock : public BlacklistStateFetcher {
+ public:
+ virtual void Request(const std::string& id,
+ const RequestCallback& callback) OVERRIDE {
+ request_count_++;
+
+ BlacklistState result = NOT_BLACKLISTED;
+ if (ContainsKey(states_, id))
+ result = states_[id];
+
+ base::MessageLoopProxy::current()->PostTask(FROM_HERE,
+ base::Bind(callback, result));
+ }
+
+ void SetState(const std::string& id, BlacklistState state) {
+ states_[id] = state;
+ }
+
+ int request_count() const {
+ return request_count_;
+ }
+
+ private:
+ std::map<std::string, BlacklistState> states_;
+ int request_count_;
+};
+
+template<typename T>
+void Assign(T *to, const T& from) {
*to = from;
}
+} // namespace
+
TEST_F(BlacklistTest, OnlyIncludesRequestedIDs) {
std::string a = AddExtension("a");
std::string b = AddExtension("b");
@@ -83,16 +116,21 @@ TEST_F(BlacklistTest, OnlyIncludesRequestedIDs) {
Blacklist blacklist(prefs());
TestBlacklist tester(&blacklist);
+ BlacklistStateFetcherMock* fetcher = new BlacklistStateFetcherMock();
+ fetcher->SetState(a, BLACKLISTED_MALWARE);
+ fetcher->SetState(b, BLACKLISTED_MALWARE);
+ blacklist.SetBlacklistStateFetcherForTest(fetcher);
blacklist_db()->Enable();
blacklist_db()->SetUnsafe(a, b);
- EXPECT_EQ(Blacklist::BLACKLISTED_MALWARE, tester.GetBlacklistState(a));
- EXPECT_EQ(Blacklist::BLACKLISTED_MALWARE, tester.GetBlacklistState(b));
- EXPECT_EQ(Blacklist::NOT_BLACKLISTED, tester.GetBlacklistState(c));
+ EXPECT_EQ(BLACKLISTED_MALWARE, tester.GetBlacklistState(a));
+ EXPECT_EQ(BLACKLISTED_MALWARE, tester.GetBlacklistState(b));
+ EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(c));
std::set<std::string> blacklisted_ids;
- blacklist.GetMalwareIDs(Set(a, c), base::Bind(&Assign, &blacklisted_ids));
+ blacklist.GetMalwareIDs(
+ Set(a, c), base::Bind(&Assign<std::set<std::string> >, &blacklisted_ids));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(Set(a), blacklisted_ids);
@@ -103,21 +141,24 @@ TEST_F(BlacklistTest, SafeBrowsing) {
Blacklist blacklist(prefs());
TestBlacklist tester(&blacklist);
+ BlacklistStateFetcherMock* fetcher = new BlacklistStateFetcherMock();
+ fetcher->SetState(a, BLACKLISTED_MALWARE);
+ blacklist.SetBlacklistStateFetcherForTest(fetcher);
- EXPECT_EQ(Blacklist::NOT_BLACKLISTED, tester.GetBlacklistState(a));
+ EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(a));
blacklist_db()->SetUnsafe(a);
// The manager is still disabled at this point, so it won't be blacklisted.
- EXPECT_EQ(Blacklist::NOT_BLACKLISTED, tester.GetBlacklistState(a));
+ EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(a));
blacklist_db()->Enable().NotifyUpdate();
base::RunLoop().RunUntilIdle();
// Now it should be.
- EXPECT_EQ(Blacklist::BLACKLISTED_MALWARE, tester.GetBlacklistState(a));
+ EXPECT_EQ(BLACKLISTED_MALWARE, tester.GetBlacklistState(a));
blacklist_db()->ClearUnsafe().NotifyUpdate();
// Safe browsing blacklist empty, now enabled.
- EXPECT_EQ(Blacklist::NOT_BLACKLISTED, tester.GetBlacklistState(a));
+ EXPECT_EQ(NOT_BLACKLISTED, tester.GetBlacklistState(a));
}
// Tests that Blacklist clears the old prefs blacklist on startup.
@@ -138,7 +179,7 @@ TEST_F(BlacklistTest, ClearsPreferencesBlacklist) {
EXPECT_EQ(Set(a, c, d), prefs()->GetBlacklistedExtensions());
Blacklist blacklist(prefs());
- TestBlacklist tester(&blacklist);
+ blacklist.SetBlacklistStateFetcherForTest(new BlacklistStateFetcherMock());
// Blacklist has been cleared. Only the installed extension "a" left.
EXPECT_EQ(Set(a), prefs()->GetBlacklistedExtensions());
@@ -150,7 +191,8 @@ TEST_F(BlacklistTest, ClearsPreferencesBlacklist) {
// concern of somebody else (currently, ExtensionService).
std::set<std::string> blacklisted_ids;
blacklist.GetMalwareIDs(Set(a, b, c, d),
- base::Bind(&Assign, &blacklisted_ids));
+ base::Bind(&Assign<std::set<std::string> >,
+ &blacklisted_ids));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(std::set<std::string>(), blacklisted_ids);
@@ -161,5 +203,105 @@ TEST_F(BlacklistTest, ClearsPreferencesBlacklist) {
EXPECT_FALSE(prefs()->IsExtensionBlacklisted(d));
}
-} // namespace
+// Test getting different blacklist states from Blacklist.
+TEST_F(BlacklistTest, GetBlacklistStates) {
+ Blacklist blacklist(prefs());
+
+ std::string a = AddExtension("a");
+ std::string b = AddExtension("b");
+ std::string c = AddExtension("c");
+ std::string d = AddExtension("d");
+ std::string e = AddExtension("e");
+
+ blacklist_db()->Enable();
+ blacklist_db()->SetUnsafe(a, b, c, d);
+
+ // Will be deleted by blacklist destructor.
+ BlacklistStateFetcherMock* fetcher = new BlacklistStateFetcherMock();
+ fetcher->SetState(a, BLACKLISTED_MALWARE);
+ fetcher->SetState(b, BLACKLISTED_SECURITY_VULNERABILITY);
+ fetcher->SetState(c, BLACKLISTED_CWS_POLICY_VIOLATION);
+ fetcher->SetState(d, BLACKLISTED_POTENTIALLY_UNWANTED);
+ blacklist.SetBlacklistStateFetcherForTest(fetcher);
+
+ Blacklist::BlacklistStateMap states_abc;
+ Blacklist::BlacklistStateMap states_bcd;
+ blacklist.GetBlacklistedIDs(Set(a, b, c, e),
+ base::Bind(&Assign<Blacklist::BlacklistStateMap>,
+ &states_abc));
+ blacklist.GetBlacklistedIDs(Set(b, c, d, e),
+ base::Bind(&Assign<Blacklist::BlacklistStateMap>,
+ &states_bcd));
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(BLACKLISTED_MALWARE, states_abc[a]);
+ EXPECT_EQ(BLACKLISTED_SECURITY_VULNERABILITY, states_abc[b]);
+ EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, states_abc[c]);
+ EXPECT_EQ(BLACKLISTED_SECURITY_VULNERABILITY, states_bcd[b]);
+ EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, states_bcd[c]);
+ EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, states_bcd[d]);
+ EXPECT_EQ(states_abc.end(), states_abc.find(e));
+ EXPECT_EQ(states_bcd.end(), states_bcd.find(e));
+
+ int old_request_count = fetcher->request_count();
+ Blacklist::BlacklistStateMap states_ad;
+ blacklist.GetBlacklistedIDs(Set(a, d, e),
+ base::Bind(&Assign<Blacklist::BlacklistStateMap>,
+ &states_ad));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(BLACKLISTED_MALWARE, states_ad[a]);
+ EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, states_ad[d]);
+ EXPECT_EQ(states_ad.end(), states_ad.find(e));
+ EXPECT_EQ(old_request_count, fetcher->request_count());
+}
+
+// Test both Blacklist and BlacklistStateFetcher by requesting the blacklist
+// states, sending fake requests and parsing the responses.
+TEST_F(BlacklistTest, FetchBlacklistStates) {
+ Blacklist blacklist(prefs());
+
+ std::string a = AddExtension("a");
+ std::string b = AddExtension("b");
+ std::string c = AddExtension("c");
+
+ blacklist_db()->Enable();
+ blacklist_db()->SetUnsafe(a, b);
+
+ // Prepare real fetcher.
+ BlacklistStateFetcher* fetcher = new BlacklistStateFetcher();
+ TestBlacklistStateFetcher fetcher_tester(fetcher);
+ blacklist.SetBlacklistStateFetcherForTest(fetcher);
+
+ fetcher_tester.SetBlacklistVerdict(
+ a, ClientCRXListInfoResponse_Verdict_CWS_POLICY_VIOLATION);
+ fetcher_tester.SetBlacklistVerdict(
+ b, ClientCRXListInfoResponse_Verdict_POTENTIALLY_UNWANTED);
+
+ Blacklist::BlacklistStateMap states;
+ blacklist.GetBlacklistedIDs(
+ Set(a, b, c), base::Bind(&Assign<Blacklist::BlacklistStateMap>, &states));
+ base::RunLoop().RunUntilIdle();
+
+ // Two fetchers should be created.
+ EXPECT_TRUE(fetcher_tester.HandleFetcher(0));
+ EXPECT_TRUE(fetcher_tester.HandleFetcher(1));
+
+ EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, states[a]);
+ EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, states[b]);
+ EXPECT_EQ(states.end(), states.find(c));
+
+ Blacklist::BlacklistStateMap cached_states;
+
+ blacklist.GetBlacklistedIDs(
+ Set(a, b, c), base::Bind(&Assign<Blacklist::BlacklistStateMap>,
+ &cached_states));
+ base::RunLoop().RunUntilIdle();
+
+ // No new fetchers.
+ EXPECT_FALSE(fetcher_tester.HandleFetcher(2));
+ EXPECT_EQ(BLACKLISTED_CWS_POLICY_VIOLATION, cached_states[a]);
+ EXPECT_EQ(BLACKLISTED_POTENTIALLY_UNWANTED, cached_states[b]);
+ EXPECT_EQ(cached_states.end(), cached_states.find(c));
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/blacklist_state_fetcher_unittest.cc ('k') | chrome/browser/extensions/crx_installer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698