blob: 1f3e32496c7beb85ec42e98dcfff48393f05b05e [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/android/remote_database_manager.h"
#include <map>
#include <memory>
#include "base/metrics/field_trial.h"
#include "base/run_loop.h"
#include "base/time/time.h"
#include "components/safe_browsing/android/safe_browsing_api_handler_bridge.h"
#include "components/variations/variations_associated_data.h"
#include "content/public/test/browser_task_environment.h"
#include "services/network/public/mojom/fetch_api.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace safe_browsing {
namespace {
class BlackHoleInterceptor : public safe_browsing::UrlCheckInterceptor {
public:
void Check(
std::unique_ptr<SafeBrowsingApiHandlerBridge::ResponseCallback> callback,
const GURL& url) const override{};
~BlackHoleInterceptor() override{};
};
} // namespace
class RemoteDatabaseManagerTest : public testing::Test {
protected:
RemoteDatabaseManagerTest() {}
void SetUp() override {
SafeBrowsingApiHandlerBridge::GetInstance().SetInterceptorForTesting(
&url_interceptor_);
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) {
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::BrowserTaskEnvironment task_environment_;
BlackHoleInterceptor url_interceptor_;
scoped_refptr<RemoteSafeBrowsingDatabaseManager> db_;
};
TEST_F(RemoteDatabaseManagerTest, DestinationsToCheckDefault) {
// Most are true, a few are false.
for (int t_int = 0;
t_int <= static_cast<int>(network::mojom::RequestDestination::kMaxValue);
t_int++) {
network::mojom::RequestDestination t =
static_cast<network::mojom::RequestDestination>(t_int);
switch (t) {
case network::mojom::RequestDestination::kStyle:
case network::mojom::RequestDestination::kImage:
case network::mojom::RequestDestination::kFont:
EXPECT_FALSE(db_->CanCheckRequestDestination(t));
break;
default:
EXPECT_TRUE(db_->CanCheckRequestDestination(t));
break;
}
}
}
TEST_F(RemoteDatabaseManagerTest, DestinationsToCheckFromTrial) {
SetFieldTrialParams("7,16,blah, 20");
db_ = new RemoteSafeBrowsingDatabaseManager();
EXPECT_TRUE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kDocument)); // defaulted
EXPECT_TRUE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kIframe));
EXPECT_TRUE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kFrame));
EXPECT_TRUE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kFencedframe));
EXPECT_TRUE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kStyle));
EXPECT_FALSE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kScript));
EXPECT_FALSE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kImage));
// ...
EXPECT_FALSE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kVideo));
EXPECT_TRUE(db_->CanCheckRequestDestination(
network::mojom::RequestDestination::kWorker));
}
} // namespace safe_browsing