blob: b56717cb598102b8f2433c82b9f62c842d13c9ba [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/platform_experience/features.h"
#include "base/feature_list.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/metrics/field_trial.h"
#include "base/path_service.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/common/chrome_paths.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace platform_experience::features {
class TestFieldTrialObserver : public base::FieldTrialList::Observer {
public:
TestFieldTrialObserver() { base::FieldTrialList::AddObserver(this); }
~TestFieldTrialObserver() override {
base::FieldTrialList::RemoveObserver(this);
}
void OnFieldTrialGroupFinalized(const base::FieldTrial& trial,
const std::string& group_name) override {
finalized_trials_[trial.trial_name()] = group_name;
}
const std::map<std::string, std::string>& finalized_trials() const {
return finalized_trials_;
}
private:
std::map<std::string, std::string> finalized_trials_;
};
class PlatformExperienceFeaturesTest : public testing::Test {
public:
PlatformExperienceFeaturesTest() = default;
~PlatformExperienceFeaturesTest() override = default;
void SetUp() override {
scoped_feature_list_.InitWithFeaturesAndParameters(
{{kShouldUseSpecificPEHNotificationText, {}},
{kDisablePEHNotifications, {}}},
{});
ASSERT_TRUE(user_data_dir_.CreateUniqueTempDir());
base::PathService::Override(chrome::DIR_USER_DATA,
user_data_dir_.GetPath());
}
const base::FilePath& user_data_dir() const {
return user_data_dir_.GetPath();
}
void CreateSentinelFile() {
base::FilePath sentinel_path =
user_data_dir()
.Append(FILE_PATH_LITERAL("PlatformExperienceHelper"))
.Append(FILE_PATH_LITERAL("LoadFeatures"));
ASSERT_TRUE(base::CreateDirectory(sentinel_path.DirName()));
ASSERT_TRUE(base::WriteFile(sentinel_path, ""));
}
private:
base::ScopedTempDir user_data_dir_;
base::test::ScopedFeatureList scoped_feature_list_;
};
TEST_F(PlatformExperienceFeaturesTest, ActivateExperiments_FileMissing) {
TestFieldTrialObserver observer;
ActivateFieldTrials();
EXPECT_TRUE(observer.finalized_trials().empty());
}
TEST_F(PlatformExperienceFeaturesTest, ActivateExperiments_FileExists) {
CreateSentinelFile();
TestFieldTrialObserver observer;
ActivateFieldTrials();
const auto& finalized_trials = observer.finalized_trials();
EXPECT_EQ(2u, finalized_trials.size());
}
} // namespace platform_experience::features