[go: nahoru, domu]

blob: 4a2b49a99d78a469a4c165002b6e7912e8cf2fea [file] [log] [blame]
// Copyright 2015 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 "components/safe_browsing_db/remote_database_manager.h"
#include <memory>
#include "base/logging.h"
#include "base/metrics/field_trial.h"
#include "base/run_loop.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "components/safe_browsing_db/safe_browsing_api_handler.h"
#include "components/variations/variations_associated_data.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace safe_browsing {
namespace {
class TestSafeBrowsingApiHandler : public SafeBrowsingApiHandler {
public:
void StartURLCheck(const URLCheckCallbackMeta& callback,
const GURL& url,
const SBThreatTypeSet& threat_types) override {}
};
} // namespace
class RemoteDatabaseManagerTest : public testing::Test {
protected:
RemoteDatabaseManagerTest()
: field_trials_(new base::FieldTrialList(nullptr)) {}
void SetUp() override {
SafeBrowsingApiHandler::SetInstance(&api_handler_);
db_ = new RemoteSafeBrowsingDatabaseManager();
}
void TearDown() override {
db_ = nullptr;
base::RunLoop().RunUntilIdle();
}
// Setup the two field trial params. These are read in db_'s ctor.
void SetFieldTrialParams(const std::string types_to_check_val) {
// Destroy the existing FieldTrialList before creating a new one to avoid
// a DCHECK.
field_trials_.reset();
field_trials_.reset(new base::FieldTrialList(nullptr));
variations::testing::ClearAllVariationIDs();
variations::testing::ClearAllVariationParams();
const std::string group_name = "GroupFoo"; // Value not used
const std::string experiment_name = "SafeBrowsingAndroid";
ASSERT_TRUE(
base::FieldTrialList::CreateFieldTrial(experiment_name, group_name));
std::map<std::string, std::string> params;
if (!types_to_check_val.empty())
params["types_to_check"] = types_to_check_val;
ASSERT_TRUE(variations::AssociateVariationParams(experiment_name,
group_name, params));
}
content::TestBrowserThreadBundle thread_bundle_;
std::unique_ptr<base::FieldTrialList> field_trials_;
TestSafeBrowsingApiHandler api_handler_;
scoped_refptr<RemoteSafeBrowsingDatabaseManager> db_;
};
TEST_F(RemoteDatabaseManagerTest, DisabledViaNull) {
EXPECT_TRUE(db_->IsSupported());
SafeBrowsingApiHandler::SetInstance(nullptr);
EXPECT_FALSE(db_->IsSupported());
}
TEST_F(RemoteDatabaseManagerTest, TypesToCheckDefault) {
// Most are true, a few are false.
for (int t_int = 0; t_int < content::RESOURCE_TYPE_LAST_TYPE; t_int++) {
content::ResourceType t = static_cast<content::ResourceType>(t_int);
switch (t) {
case content::RESOURCE_TYPE_STYLESHEET:
case content::RESOURCE_TYPE_IMAGE:
case content::RESOURCE_TYPE_FONT_RESOURCE:
case content::RESOURCE_TYPE_FAVICON:
EXPECT_FALSE(db_->CanCheckResourceType(t));
break;
default:
EXPECT_TRUE(db_->CanCheckResourceType(t));
break;
}
}
}
TEST_F(RemoteDatabaseManagerTest, TypesToCheckFromTrial) {
SetFieldTrialParams("1,2,blah, 9");
db_ = new RemoteSafeBrowsingDatabaseManager();
EXPECT_TRUE(db_->CanCheckResourceType(
content::RESOURCE_TYPE_MAIN_FRAME)); // defaulted
EXPECT_TRUE(db_->CanCheckResourceType(content::RESOURCE_TYPE_SUB_FRAME));
EXPECT_TRUE(db_->CanCheckResourceType(content::RESOURCE_TYPE_STYLESHEET));
EXPECT_FALSE(db_->CanCheckResourceType(content::RESOURCE_TYPE_SCRIPT));
EXPECT_FALSE(db_->CanCheckResourceType(content::RESOURCE_TYPE_IMAGE));
// ...
EXPECT_FALSE(db_->CanCheckResourceType(content::RESOURCE_TYPE_MEDIA));
EXPECT_TRUE(db_->CanCheckResourceType(content::RESOURCE_TYPE_WORKER));
}
} // namespace safe_browsing