blob: 849fcaae60519898b4c9b9004d3cb3744834a1bd [file] [log] [blame]
// Copyright 2013 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.
#include "chrome/browser/extensions/fake_safe_browsing_database_manager.h"
#include <stddef.h>
#include <algorithm>
#include <iterator>
#include <vector>
#include "base/bind_helpers.h"
#include "base/memory/ref_counted.h"
#include "base/run_loop.h"
#include "base/threading/thread_task_runner_handle.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#include "components/safe_browsing_db/util.h"
namespace extensions {
FakeSafeBrowsingDatabaseManager::FakeSafeBrowsingDatabaseManager(bool enabled)
: LocalSafeBrowsingDatabaseManager(make_scoped_refptr(
safe_browsing::SafeBrowsingService::CreateSafeBrowsingService())),
enabled_(enabled) {}
FakeSafeBrowsingDatabaseManager::~FakeSafeBrowsingDatabaseManager() {
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::Enable() {
enabled_ = true;
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::Disable() {
enabled_ = false;
return *this;
}
FakeSafeBrowsingDatabaseManager&
FakeSafeBrowsingDatabaseManager::ClearUnsafe() {
unsafe_ids_.clear();
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::SetUnsafe(
const std::string& a) {
ClearUnsafe();
unsafe_ids_.insert(a);
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::SetUnsafe(
const std::string& a, const std::string& b) {
SetUnsafe(a);
unsafe_ids_.insert(b);
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::SetUnsafe(
const std::string& a, const std::string& b, const std::string& c) {
SetUnsafe(a, b);
unsafe_ids_.insert(c);
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::SetUnsafe(
const std::string& a, const std::string& b, const std::string& c,
const std::string& d) {
SetUnsafe(a, b, c);
unsafe_ids_.insert(d);
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::AddUnsafe(
const std::string& a) {
unsafe_ids_.insert(a);
return *this;
}
FakeSafeBrowsingDatabaseManager& FakeSafeBrowsingDatabaseManager::RemoveUnsafe(
const std::string& a) {
unsafe_ids_.erase(a);
return *this;
}
void FakeSafeBrowsingDatabaseManager::NotifyUpdate() {
LocalSafeBrowsingDatabaseManager::NotifyDatabaseUpdateFinished(true);
}
bool FakeSafeBrowsingDatabaseManager::CheckExtensionIDs(
const std::set<std::string>& extension_ids,
Client* client) {
if (!enabled_)
return true;
// Need to construct the full SafeBrowsingCheck rather than calling
// OnCheckExtensionsResult directly because it's protected. Grr!
std::vector<std::string> extension_ids_vector(extension_ids.begin(),
extension_ids.end());
std::vector<safe_browsing::SBFullHash> extension_id_hashes;
std::transform(extension_ids_vector.begin(), extension_ids_vector.end(),
std::back_inserter(extension_id_hashes),
safe_browsing::StringToSBFullHash);
std::unique_ptr<SafeBrowsingCheck> safe_browsing_check(
new SafeBrowsingCheck(std::vector<GURL>(), extension_id_hashes, client,
safe_browsing::EXTENSIONBLACKLIST,
std::vector<safe_browsing::SBThreatType>(
1, safe_browsing::SB_THREAT_TYPE_EXTENSION)));
for (size_t i = 0; i < extension_ids_vector.size(); ++i) {
const std::string& extension_id = extension_ids_vector[i];
if (unsafe_ids_.count(extension_id))
safe_browsing_check->full_hash_results[i] =
safe_browsing::SB_THREAT_TYPE_EXTENSION;
}
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&FakeSafeBrowsingDatabaseManager::OnSafeBrowsingResult,
this, base::Passed(&safe_browsing_check)));
return false;
}
void FakeSafeBrowsingDatabaseManager::OnSafeBrowsingResult(
std::unique_ptr<SafeBrowsingCheck> result) {
result->OnSafeBrowsingResult();
}
} // namespace extensions