Index: chrome/browser/component_updater/origin_trials_component_installer_unittest.cc |
diff --git a/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc b/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc |
index 6fe5938b3f02cbcaf220032b040257e337df5ba8..b9c17c197b5d589dd8b9ad2eebff6d79ee12f495 100644 |
--- a/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc |
+++ b/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc |
@@ -30,6 +30,10 @@ static const char kManifestOriginTrialsKey[] = "origin-trials"; |
static const char kManifestPublicKeyPath[] = "origin-trials.public-key"; |
static const char kManifestDisabledFeaturesPath[] = |
"origin-trials.disabled-features"; |
+static const char kManifestDisabledTokensPath[] = |
+ "origin-trials.disabled-tokens"; |
+static const char kManifestDisabledTokenSignaturesPath[] = |
+ "origin-trials.disabled-tokens.signatures"; |
static const char kTestUpdateVersion[] = "1.0"; |
static const char kExistingPublicKey[] = "existing public key"; |
@@ -41,6 +45,13 @@ static const char kNewDisabledFeature1[] = "newly disabled 1"; |
static const char kNewDisabledFeature2[] = "newly disabled 2"; |
static const std::vector<std::string> kNewDisabledFeatures = { |
kNewDisabledFeature1, kNewDisabledFeature2}; |
+static const char kExistingDisabledToken[] = "already disabled token"; |
+static const std::vector<std::string> kExistingDisabledTokens = { |
+ kExistingDisabledToken}; |
+static const char kNewDisabledToken1[] = "newly disabled token 1"; |
+static const char kNewDisabledToken2[] = "newly disabled token 2"; |
+static const std::vector<std::string> kNewDisabledTokens = {kNewDisabledToken1, |
+ kNewDisabledToken2}; |
} // namespace |
@@ -62,7 +73,7 @@ class OriginTrialsComponentInstallerTest : public PlatformTest { |
void LoadUpdates(std::unique_ptr<base::DictionaryValue> manifest) { |
if (!manifest) { |
manifest = base::MakeUnique<base::DictionaryValue>(); |
- manifest->SetString(kManifestOriginTrialsKey, ""); |
+ manifest->Set(kManifestOriginTrialsKey, base::MakeUnique<base::Value>()); |
} |
ASSERT_TRUE(traits_->VerifyInstallation(*manifest, temp_dir_.GetPath())); |
const base::Version expected_version(kTestUpdateVersion); |
@@ -101,6 +112,36 @@ class OriginTrialsComponentInstallerTest : public PlatformTest { |
} |
} |
+ void AddDisabledTokensToPrefs(const std::vector<std::string>& tokens) { |
+ base::ListValue disabled_token_list; |
+ disabled_token_list.AppendStrings(tokens); |
+ ListPrefUpdate update(local_state(), prefs::kOriginTrialDisabledTokens); |
+ update->Swap(&disabled_token_list); |
+ } |
+ |
+ void CheckDisabledTokensPrefs(const std::vector<std::string>& tokens) { |
+ ASSERT_FALSE(tokens.empty()); |
+ |
+ ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+ |
+ const base::ListValue* disabled_token_list = |
+ local_state()->GetList(prefs::kOriginTrialDisabledTokens); |
+ ASSERT_TRUE(disabled_token_list); |
+ |
+ ASSERT_EQ(tokens.size(), disabled_token_list->GetSize()); |
+ |
+ std::string disabled_token; |
+ for (size_t i = 0; i < tokens.size(); ++i) { |
+ const bool found = disabled_token_list->GetString(i, &disabled_token); |
+ EXPECT_TRUE(found) << "Entry not found or not a string at index " << i; |
+ if (!found) { |
+ continue; |
+ } |
+ EXPECT_EQ(tokens[i], disabled_token) |
+ << "Token lists differ at index " << i; |
+ } |
+ } |
+ |
PrefService* local_state() { return g_browser_process->local_state(); } |
protected: |
@@ -114,8 +155,7 @@ class OriginTrialsComponentInstallerTest : public PlatformTest { |
TEST_F(OriginTrialsComponentInstallerTest, |
PublicKeyResetToDefaultWhenOverrideMissing) { |
- local_state()->Set(prefs::kOriginTrialPublicKey, |
- base::Value(kExistingPublicKey)); |
+ local_state()->SetString(prefs::kOriginTrialPublicKey, kExistingPublicKey); |
ASSERT_EQ(kExistingPublicKey, |
local_state()->GetString(prefs::kOriginTrialPublicKey)); |
@@ -193,4 +233,75 @@ TEST_F(OriginTrialsComponentInstallerTest, |
CheckDisabledFeaturesPrefs(kNewDisabledFeatures); |
} |
+TEST_F(OriginTrialsComponentInstallerTest, |
+ DisabledTokensResetToDefaultWhenListMissing) { |
+ AddDisabledTokensToPrefs(kExistingDisabledTokens); |
+ ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+ |
+ // Load with empty section in manifest |
+ LoadUpdates(nullptr); |
+ |
+ EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+} |
+ |
+TEST_F(OriginTrialsComponentInstallerTest, |
+ DisabledTokensResetToDefaultWhenKeyExistsAndListMissing) { |
+ AddDisabledTokensToPrefs(kExistingDisabledTokens); |
+ ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+ |
+ // Load with disabled tokens key in manifest, but no list values |
+ auto manifest = base::MakeUnique<base::DictionaryValue>(); |
+ manifest->Set(kManifestDisabledTokensPath, base::MakeUnique<base::Value>()); |
+ |
+ LoadUpdates(std::move(manifest)); |
+ |
+ EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+} |
+ |
+TEST_F(OriginTrialsComponentInstallerTest, |
+ DisabledTokensResetToDefaultWhenListEmpty) { |
+ AddDisabledTokensToPrefs(kExistingDisabledTokens); |
+ ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+ |
+ auto manifest = base::MakeUnique<base::DictionaryValue>(); |
+ auto disabled_token_list = base::MakeUnique<base::ListValue>(); |
+ manifest->Set(kManifestDisabledTokenSignaturesPath, |
+ std::move(disabled_token_list)); |
+ |
+ LoadUpdates(std::move(manifest)); |
+ |
+ EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+} |
+ |
+TEST_F(OriginTrialsComponentInstallerTest, DisabledTokensSetWhenListExists) { |
+ ASSERT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+ |
+ auto manifest = base::MakeUnique<base::DictionaryValue>(); |
+ auto disabled_token_list = base::MakeUnique<base::ListValue>(); |
+ disabled_token_list->AppendString(kNewDisabledToken1); |
+ manifest->Set(kManifestDisabledTokenSignaturesPath, |
+ std::move(disabled_token_list)); |
+ |
+ LoadUpdates(std::move(manifest)); |
+ |
+ std::vector<std::string> tokens = {kNewDisabledToken1}; |
+ CheckDisabledTokensPrefs(tokens); |
+} |
+ |
+TEST_F(OriginTrialsComponentInstallerTest, |
+ DisabledTokensReplacedWhenListExists) { |
+ AddDisabledTokensToPrefs(kExistingDisabledTokens); |
+ ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens)); |
+ |
+ auto manifest = base::MakeUnique<base::DictionaryValue>(); |
+ auto disabled_token_list = base::MakeUnique<base::ListValue>(); |
+ disabled_token_list->AppendStrings(kNewDisabledTokens); |
+ manifest->Set(kManifestDisabledTokenSignaturesPath, |
+ std::move(disabled_token_list)); |
+ |
+ LoadUpdates(std::move(manifest)); |
+ |
+ CheckDisabledTokensPrefs(kNewDisabledTokens); |
+} |
+ |
} // namespace component_updater |