• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/extensions/test_blacklist.h"
6 
7 #include <set>
8 
9 #include "base/bind.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h"
12 #include "base/stl_util.h"
13 #include "chrome/browser/extensions/blacklist.h"
14 #include "chrome/browser/extensions/blacklist_state_fetcher.h"
15 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h"
16 
17 namespace extensions {
18 
19 namespace {
20 
Assign(BlacklistState * out,BlacklistState in)21 void Assign(BlacklistState *out, BlacklistState in) {
22   *out = in;
23 }
24 
25 }  // namespace
26 
BlacklistStateFetcherMock()27 BlacklistStateFetcherMock::BlacklistStateFetcherMock() : request_count_(0) {}
28 
~BlacklistStateFetcherMock()29 BlacklistStateFetcherMock::~BlacklistStateFetcherMock() {}
30 
Request(const std::string & id,const RequestCallback & callback)31 void BlacklistStateFetcherMock::Request(const std::string& id,
32                                         const RequestCallback& callback) {
33   ++request_count_;
34 
35   BlacklistState result = NOT_BLACKLISTED;
36   if (ContainsKey(states_, id))
37     result = states_[id];
38 
39   base::MessageLoopProxy::current()->PostTask(FROM_HERE,
40                                               base::Bind(callback, result));
41 }
42 
SetState(const std::string & id,BlacklistState state)43 void BlacklistStateFetcherMock::SetState(const std::string& id,
44                                          BlacklistState state)  {
45   states_[id] = state;
46 }
47 
Clear()48 void BlacklistStateFetcherMock::Clear() {
49   states_.clear();
50 }
51 
52 
TestBlacklist()53 TestBlacklist::TestBlacklist()
54     : blacklist_(NULL),
55       blacklist_db_(new FakeSafeBrowsingDatabaseManager(true)),
56       scoped_blacklist_db_(blacklist_db_) {
57 }
58 
TestBlacklist(Blacklist * blacklist)59 TestBlacklist::TestBlacklist(Blacklist* blacklist)
60     : blacklist_(NULL),
61       blacklist_db_(new FakeSafeBrowsingDatabaseManager(true)),
62       scoped_blacklist_db_(blacklist_db_) {
63   Attach(blacklist);
64 }
65 
~TestBlacklist()66 TestBlacklist::~TestBlacklist() {
67   Detach();
68 }
69 
Attach(Blacklist * blacklist)70 void TestBlacklist::Attach(Blacklist* blacklist) {
71   if (blacklist_)
72     Detach();
73 
74   blacklist_ = blacklist;
75   blacklist_->SetBlacklistStateFetcherForTest(&state_fetcher_mock_);
76 }
77 
Detach()78 void TestBlacklist::Detach() {
79   blacklist_->ResetBlacklistStateFetcherForTest();
80 }
81 
SetBlacklistState(const std::string & extension_id,BlacklistState state,bool notify)82 void TestBlacklist::SetBlacklistState(const std::string& extension_id,
83                                       BlacklistState state,
84                                       bool notify) {
85   state_fetcher_mock_.SetState(extension_id, state);
86 
87   switch (state) {
88     case NOT_BLACKLISTED:
89       blacklist_db_->RemoveUnsafe(extension_id);
90       break;
91 
92     case BLACKLISTED_MALWARE:
93     case BLACKLISTED_SECURITY_VULNERABILITY:
94     case BLACKLISTED_CWS_POLICY_VIOLATION:
95     case BLACKLISTED_POTENTIALLY_UNWANTED:
96       blacklist_db_->AddUnsafe(extension_id);
97       break;
98 
99     default:
100       break;
101   }
102 
103   if (notify)
104     blacklist_db_->NotifyUpdate();
105 }
106 
Clear(bool notify)107 void TestBlacklist::Clear(bool notify) {
108   state_fetcher_mock_.Clear();
109   blacklist_db_->ClearUnsafe();
110   if (notify)
111     blacklist_db_->NotifyUpdate();
112 }
113 
GetBlacklistState(const std::string & extension_id)114 BlacklistState TestBlacklist::GetBlacklistState(
115     const std::string& extension_id) {
116   BlacklistState blacklist_state;
117   blacklist_->IsBlacklisted(extension_id,
118                             base::Bind(&Assign, &blacklist_state));
119   base::RunLoop().RunUntilIdle();
120   return blacklist_state;
121 }
122 
DisableSafeBrowsing()123 void TestBlacklist::DisableSafeBrowsing() {
124   blacklist_db_->Disable();
125 }
126 
EnableSafeBrowsing()127 void TestBlacklist::EnableSafeBrowsing() {
128   blacklist_db_->Enable();
129 }
130 
NotifyUpdate()131 void TestBlacklist::NotifyUpdate() {
132   blacklist_db_->NotifyUpdate();
133 }
134 
135 }  // namespace extensions
136