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#ifndef CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_
6#define CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_
7
8#include <map>
9#include <string>
10
11#include "base/basictypes.h"
12#include "chrome/browser/extensions/blacklist.h"
13#include "chrome/browser/extensions/blacklist_state_fetcher.h"
14
15namespace extensions {
16
17class FakeSafeBrowsingDatabaseManager;
18
19// Replace BlacklistStateFetcher for testing of the Blacklist class.
20class BlacklistStateFetcherMock : public BlacklistStateFetcher {
21 public:
22  BlacklistStateFetcherMock();
23
24  virtual ~BlacklistStateFetcherMock();
25
26  virtual void Request(const std::string& id,
27                       const RequestCallback& callback) OVERRIDE;
28
29  void SetState(const std::string& id, BlacklistState state);
30
31  void Clear();
32
33  int request_count() const { return request_count_; }
34
35 private:
36  std::map<std::string, BlacklistState> states_;
37  int request_count_;
38};
39
40
41// A wrapper for an extensions::Blacklist that provides functionality for
42// testing. It sets up mocks for SafeBrowsing database and BlacklistFetcher,
43// that are used by blacklist to retrieve respectively the set of blacklisted
44// extensions and their blacklist states.
45class TestBlacklist {
46 public:
47  // Use this if the SafeBrowsing and/or StateFetcher mocks should be created
48  // before initializing the Blacklist.
49  explicit TestBlacklist();
50
51  explicit TestBlacklist(Blacklist* blacklist);
52
53  ~TestBlacklist();
54
55  void Attach(Blacklist* blacklist);
56
57  // Only call this if Blacklist is destroyed before TestBlacklist, otherwise
58  // it will be performed from the destructor.
59  void Detach();
60
61  Blacklist* blacklist() { return blacklist_; }
62
63  // Set the extension state in SafeBrowsingDatabaseManager and
64  // BlacklistFetcher.
65  void SetBlacklistState(const std::string& extension_id,
66                         BlacklistState state,
67                         bool notify);
68
69  BlacklistState GetBlacklistState(const std::string& extension_id);
70
71  void Clear(bool notify);
72
73  void DisableSafeBrowsing();
74
75  void EnableSafeBrowsing();
76
77  void NotifyUpdate();
78
79  const BlacklistStateFetcherMock* fetcher() { return &state_fetcher_mock_; }
80
81 private:
82  Blacklist* blacklist_;
83
84  // The BlacklistStateFetcher object is normally managed by Blacklist. Because
85  // of this, we need to prevent this object from being deleted with Blacklist.
86  // For this, Detach() should be called before blacklist_ is deleted.
87  BlacklistStateFetcherMock state_fetcher_mock_;
88
89  scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db_;
90
91  Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db_;
92
93  DISALLOW_COPY_AND_ASSIGN(TestBlacklist);
94};
95
96}  // namespace extensions
97
98#endif  // CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_
99