// 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 #include #include "base/basictypes.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 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 blacklist_db_; Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db_; DISALLOW_COPY_AND_ASSIGN(TestBlacklist); }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_TEST_BLACKLIST_H_