blob: cec3ac9b78591d3c2bba3f9496296cb845a29e86 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/local_state/local_state_utils.h"
#include "base/json/json_reader.h"
#include "base/values.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/testing_pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(LocalStateUtilsTest, UnfilterPrefs) {
std::map<std::string, std::string> prefs{
{"valid_pref", "notallowed"},
{"variations.anything", "allowed"},
{"user_experience_metrics.anything", "allowed"},
{"variation", "notallowed"},
{"user_experience_metric", "notallowed"},
{"anything", "notallowed"},
};
TestingPrefServiceSimple pref_service;
for (const auto& [key, value] : prefs) {
pref_service.registry()->RegisterStringPref(key, std::string());
pref_service.SetString(key, value);
}
ASSERT_EQ(pref_service.GetPreferencesValueAndStore().size(), prefs.size());
auto unfiltered_json_prefs =
local_state_utils::GetPrefsAsJson(&pref_service, {});
ASSERT_TRUE(unfiltered_json_prefs.has_value());
auto unfiltered_prefs = base::JSONReader::ReadAndReturnValueWithError(
unfiltered_json_prefs.value(),
base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS);
ASSERT_EQ(unfiltered_prefs.value().GetDict().size(), prefs.size());
}
TEST(LocalStateUtilsTest, FilterPrefs) {
std::map<std::string, std::string> prefs{
{"valid_pref", "notallowed"},
{"variations.anything", "allowed"},
{"user_experience_metrics.anything", "allowed"},
{"variation", "notallowed"},
{"user_experience_metric", "notallowed"},
{"anything", "notallowed"},
};
TestingPrefServiceSimple pref_service;
for (const auto& [key, value] : prefs) {
pref_service.registry()->RegisterStringPref(key, std::string());
pref_service.SetString(key, value);
}
ASSERT_EQ(pref_service.GetPreferencesValueAndStore().size(), prefs.size());
auto filtered_json_prefs = local_state_utils::GetPrefsAsJson(
&pref_service, {"variations", "user_experience_metrics"});
ASSERT_TRUE(filtered_json_prefs.has_value());
auto filtered_prefs = base::JSONReader::ReadAndReturnValueWithError(
filtered_json_prefs.value(),
base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS);
ASSERT_EQ(filtered_prefs.value().GetDict().size(), 2u);
for (const auto [_, dict_value] : filtered_prefs.value().GetDict()) {
for (const auto [key, value] : dict_value.GetDict()) {
if (key == "value") {
EXPECT_EQ(value.GetString(), "allowed");
} else if (key == "metadata") {
EXPECT_TRUE(value.is_list());
}
}
}
}