| // Copyright 2012 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_ | 
 | #define CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_ | 
 |  | 
 | #include <map> | 
 | #include <string> | 
 |  | 
 | #include "base/macros.h" | 
 | #include "chrome/browser/extensions/blacklist.h" | 
 | #include "chrome/browser/extensions/blacklist_state_fetcher.h" | 
 |  | 
 | namespace extensions { | 
 |  | 
 | class FakeSafeBrowsingDatabaseManager; | 
 |  | 
 | // Replace BlacklistStateFetcher for testing of the Blacklist class. | 
 | class BlacklistStateFetcherMock : public BlacklistStateFetcher { | 
 |  public: | 
 |   BlacklistStateFetcherMock(); | 
 |  | 
 |   ~BlacklistStateFetcherMock() override; | 
 |  | 
 |   void Request(const std::string& id, const RequestCallback& callback) override; | 
 |  | 
 |   void SetState(const std::string& id, BlacklistState state); | 
 |  | 
 |   void Clear(); | 
 |  | 
 |   int request_count() const { return request_count_; } | 
 |  | 
 |  private: | 
 |   std::map<std::string, BlacklistState> states_; | 
 |   int request_count_; | 
 | }; | 
 |  | 
 |  | 
 | // A wrapper for an extensions::Blacklist that provides functionality for | 
 | // testing. It sets up mocks for SafeBrowsing database and BlacklistFetcher, | 
 | // that are used by blacklist to retrieve respectively the set of blacklisted | 
 | // extensions and their blacklist states. | 
 | class TestBlacklist { | 
 |  public: | 
 |   // Use this if the SafeBrowsing and/or StateFetcher mocks should be created | 
 |   // before initializing the Blacklist. | 
 |   explicit TestBlacklist(); | 
 |  | 
 |   explicit TestBlacklist(Blacklist* blacklist); | 
 |  | 
 |   ~TestBlacklist(); | 
 |  | 
 |   void Attach(Blacklist* blacklist); | 
 |  | 
 |   // Only call this if Blacklist is destroyed before TestBlacklist, otherwise | 
 |   // it will be performed from the destructor. | 
 |   void Detach(); | 
 |  | 
 |   Blacklist* blacklist() { return blacklist_; } | 
 |  | 
 |   // Set the extension state in SafeBrowsingDatabaseManager and | 
 |   // BlacklistFetcher. | 
 |   void SetBlacklistState(const std::string& extension_id, | 
 |                          BlacklistState state, | 
 |                          bool notify); | 
 |  | 
 |   BlacklistState GetBlacklistState(const std::string& extension_id); | 
 |  | 
 |   void Clear(bool notify); | 
 |  | 
 |   void DisableSafeBrowsing(); | 
 |  | 
 |   void EnableSafeBrowsing(); | 
 |  | 
 |   void NotifyUpdate(); | 
 |  | 
 |   const BlacklistStateFetcherMock* fetcher() { return &state_fetcher_mock_; } | 
 |  | 
 |  private: | 
 |   Blacklist* blacklist_; | 
 |  | 
 |   // The BlacklistStateFetcher object is normally managed by Blacklist. Because | 
 |   // of this, we need to prevent this object from being deleted with Blacklist. | 
 |   // For this, Detach() should be called before blacklist_ is deleted. | 
 |   BlacklistStateFetcherMock state_fetcher_mock_; | 
 |  | 
 |   scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db_; | 
 |  | 
 |   Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(TestBlacklist); | 
 | }; | 
 |  | 
 | }  // namespace extensions | 
 |  | 
 | #endif  // CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_ |