blob: 44269fa03c50c834f50f24b98d4048518964c451 [file] [log] [blame]
// 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_