Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Side by Side Diff: chrome/browser/component_updater/origin_trials_component_installer_unittest.cc

Issue 2733023002: [Origin Trials] Support updates of disabled token list (Closed)
Patch Set: Address comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/component_updater/origin_trials_component_installer.h" 5 #include "chrome/browser/component_updater/origin_trials_component_installer.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 12 matching lines...) Expand all
23 namespace { 23 namespace {
24 24
25 // Mirror the constants used in the component installer. Do not share the 25 // Mirror the constants used in the component installer. Do not share the
26 // constants, as want to catch inadvertent changes in the tests. The keys will 26 // constants, as want to catch inadvertent changes in the tests. The keys will
27 // will be generated server-side, so any changes need to be intentional and 27 // will be generated server-side, so any changes need to be intentional and
28 // coordinated. 28 // coordinated.
29 static const char kManifestOriginTrialsKey[] = "origin-trials"; 29 static const char kManifestOriginTrialsKey[] = "origin-trials";
30 static const char kManifestPublicKeyPath[] = "origin-trials.public-key"; 30 static const char kManifestPublicKeyPath[] = "origin-trials.public-key";
31 static const char kManifestDisabledFeaturesPath[] = 31 static const char kManifestDisabledFeaturesPath[] =
32 "origin-trials.disabled-features"; 32 "origin-trials.disabled-features";
33 static const char kManifestDisabledTokensPath[] =
34 "origin-trials.disabled-tokens";
35 static const char kManifestDisabledTokenSignaturesPath[] =
36 "origin-trials.disabled-tokens.signatures";
33 37
34 static const char kTestUpdateVersion[] = "1.0"; 38 static const char kTestUpdateVersion[] = "1.0";
35 static const char kExistingPublicKey[] = "existing public key"; 39 static const char kExistingPublicKey[] = "existing public key";
36 static const char kNewPublicKey[] = "new public key"; 40 static const char kNewPublicKey[] = "new public key";
37 static const char kExistingDisabledFeature[] = "already disabled"; 41 static const char kExistingDisabledFeature[] = "already disabled";
38 static const std::vector<std::string> kExistingDisabledFeatures = { 42 static const std::vector<std::string> kExistingDisabledFeatures = {
39 kExistingDisabledFeature}; 43 kExistingDisabledFeature};
40 static const char kNewDisabledFeature1[] = "newly disabled 1"; 44 static const char kNewDisabledFeature1[] = "newly disabled 1";
41 static const char kNewDisabledFeature2[] = "newly disabled 2"; 45 static const char kNewDisabledFeature2[] = "newly disabled 2";
42 static const std::vector<std::string> kNewDisabledFeatures = { 46 static const std::vector<std::string> kNewDisabledFeatures = {
43 kNewDisabledFeature1, kNewDisabledFeature2}; 47 kNewDisabledFeature1, kNewDisabledFeature2};
48 static const char kExistingDisabledToken[] = "already disabled token";
49 static const std::vector<std::string> kExistingDisabledTokens = {
50 kExistingDisabledToken};
51 static const char kNewDisabledToken1[] = "newly disabled token 1";
52 static const char kNewDisabledToken2[] = "newly disabled token 2";
53 static const std::vector<std::string> kNewDisabledTokens = {kNewDisabledToken1,
54 kNewDisabledToken2};
44 55
45 } // namespace 56 } // namespace
46 57
47 namespace component_updater { 58 namespace component_updater {
48 59
49 class OriginTrialsComponentInstallerTest : public PlatformTest { 60 class OriginTrialsComponentInstallerTest : public PlatformTest {
50 public: 61 public:
51 OriginTrialsComponentInstallerTest() 62 OriginTrialsComponentInstallerTest()
52 : testing_local_state_(TestingBrowserProcess::GetGlobal()) {} 63 : testing_local_state_(TestingBrowserProcess::GetGlobal()) {}
53 64
54 void SetUp() override { 65 void SetUp() override {
55 PlatformTest::SetUp(); 66 PlatformTest::SetUp();
56 67
57 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 68 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
58 69
59 traits_.reset(new OriginTrialsComponentInstallerTraits()); 70 traits_.reset(new OriginTrialsComponentInstallerTraits());
60 } 71 }
61 72
62 void LoadUpdates(std::unique_ptr<base::DictionaryValue> manifest) { 73 void LoadUpdates(std::unique_ptr<base::DictionaryValue> manifest) {
63 if (!manifest) { 74 if (!manifest) {
64 manifest = base::MakeUnique<base::DictionaryValue>(); 75 manifest = base::MakeUnique<base::DictionaryValue>();
65 manifest->SetString(kManifestOriginTrialsKey, ""); 76 manifest->Set(kManifestOriginTrialsKey, base::MakeUnique<base::Value>());
66 } 77 }
67 ASSERT_TRUE(traits_->VerifyInstallation(*manifest, temp_dir_.GetPath())); 78 ASSERT_TRUE(traits_->VerifyInstallation(*manifest, temp_dir_.GetPath()));
68 const base::Version expected_version(kTestUpdateVersion); 79 const base::Version expected_version(kTestUpdateVersion);
69 traits_->ComponentReady(expected_version, temp_dir_.GetPath(), 80 traits_->ComponentReady(expected_version, temp_dir_.GetPath(),
70 std::move(manifest)); 81 std::move(manifest));
71 } 82 }
72 83
73 void AddDisabledFeaturesToPrefs(const std::vector<std::string>& features) { 84 void AddDisabledFeaturesToPrefs(const std::vector<std::string>& features) {
74 base::ListValue disabled_feature_list; 85 base::ListValue disabled_feature_list;
75 disabled_feature_list.AppendStrings(features); 86 disabled_feature_list.AppendStrings(features);
(...skipping 18 matching lines...) Expand all
94 const bool found = disabled_feature_list->GetString(i, &disabled_feature); 105 const bool found = disabled_feature_list->GetString(i, &disabled_feature);
95 EXPECT_TRUE(found) << "Entry not found or not a string at index " << i; 106 EXPECT_TRUE(found) << "Entry not found or not a string at index " << i;
96 if (!found) { 107 if (!found) {
97 continue; 108 continue;
98 } 109 }
99 EXPECT_EQ(features[i], disabled_feature) 110 EXPECT_EQ(features[i], disabled_feature)
100 << "Feature lists differ at index " << i; 111 << "Feature lists differ at index " << i;
101 } 112 }
102 } 113 }
103 114
115 void AddDisabledTokensToPrefs(const std::vector<std::string>& tokens) {
116 base::ListValue disabled_token_list;
117 disabled_token_list.AppendStrings(tokens);
118 ListPrefUpdate update(local_state(), prefs::kOriginTrialDisabledTokens);
119 update->Swap(&disabled_token_list);
120 }
121
122 void CheckDisabledTokensPrefs(const std::vector<std::string>& tokens) {
123 ASSERT_FALSE(tokens.empty());
124
125 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
126
127 const base::ListValue* disabled_token_list =
128 local_state()->GetList(prefs::kOriginTrialDisabledTokens);
129 ASSERT_TRUE(disabled_token_list);
130
131 ASSERT_EQ(tokens.size(), disabled_token_list->GetSize());
132
133 std::string disabled_token;
134 for (size_t i = 0; i < tokens.size(); ++i) {
135 const bool found = disabled_token_list->GetString(i, &disabled_token);
136 EXPECT_TRUE(found) << "Entry not found or not a string at index " << i;
137 if (!found) {
138 continue;
139 }
140 EXPECT_EQ(tokens[i], disabled_token)
141 << "Token lists differ at index " << i;
142 }
143 }
144
104 PrefService* local_state() { return g_browser_process->local_state(); } 145 PrefService* local_state() { return g_browser_process->local_state(); }
105 146
106 protected: 147 protected:
107 base::ScopedTempDir temp_dir_; 148 base::ScopedTempDir temp_dir_;
108 ScopedTestingLocalState testing_local_state_; 149 ScopedTestingLocalState testing_local_state_;
109 std::unique_ptr<ComponentInstallerTraits> traits_; 150 std::unique_ptr<ComponentInstallerTraits> traits_;
110 151
111 private: 152 private:
112 DISALLOW_COPY_AND_ASSIGN(OriginTrialsComponentInstallerTest); 153 DISALLOW_COPY_AND_ASSIGN(OriginTrialsComponentInstallerTest);
113 }; 154 };
114 155
115 TEST_F(OriginTrialsComponentInstallerTest, 156 TEST_F(OriginTrialsComponentInstallerTest,
116 PublicKeyResetToDefaultWhenOverrideMissing) { 157 PublicKeyResetToDefaultWhenOverrideMissing) {
117 local_state()->Set(prefs::kOriginTrialPublicKey, 158 local_state()->SetString(prefs::kOriginTrialPublicKey, kExistingPublicKey);
118 base::Value(kExistingPublicKey));
119 ASSERT_EQ(kExistingPublicKey, 159 ASSERT_EQ(kExistingPublicKey,
120 local_state()->GetString(prefs::kOriginTrialPublicKey)); 160 local_state()->GetString(prefs::kOriginTrialPublicKey));
121 161
122 // Load with empty section in manifest 162 // Load with empty section in manifest
123 LoadUpdates(nullptr); 163 LoadUpdates(nullptr);
124 164
125 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialPublicKey)); 165 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialPublicKey));
126 } 166 }
127 167
128 TEST_F(OriginTrialsComponentInstallerTest, PublicKeySetWhenOverrideExists) { 168 TEST_F(OriginTrialsComponentInstallerTest, PublicKeySetWhenOverrideExists) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 auto disabled_feature_list = base::MakeUnique<base::ListValue>(); 226 auto disabled_feature_list = base::MakeUnique<base::ListValue>();
187 disabled_feature_list->AppendStrings(kNewDisabledFeatures); 227 disabled_feature_list->AppendStrings(kNewDisabledFeatures);
188 manifest->Set(kManifestDisabledFeaturesPath, 228 manifest->Set(kManifestDisabledFeaturesPath,
189 std::move(disabled_feature_list)); 229 std::move(disabled_feature_list));
190 230
191 LoadUpdates(std::move(manifest)); 231 LoadUpdates(std::move(manifest));
192 232
193 CheckDisabledFeaturesPrefs(kNewDisabledFeatures); 233 CheckDisabledFeaturesPrefs(kNewDisabledFeatures);
194 } 234 }
195 235
236 TEST_F(OriginTrialsComponentInstallerTest,
237 DisabledTokensResetToDefaultWhenListMissing) {
238 AddDisabledTokensToPrefs(kExistingDisabledTokens);
239 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
240
241 // Load with empty section in manifest
242 LoadUpdates(nullptr);
243
244 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
245 }
246
247 TEST_F(OriginTrialsComponentInstallerTest,
248 DisabledTokensResetToDefaultWhenKeyExistsAndListMissing) {
249 AddDisabledTokensToPrefs(kExistingDisabledTokens);
250 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
251
252 // Load with disabled tokens key in manifest, but no list values
253 auto manifest = base::MakeUnique<base::DictionaryValue>();
254 manifest->Set(kManifestDisabledTokensPath, base::MakeUnique<base::Value>());
255
256 LoadUpdates(std::move(manifest));
257
258 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
259 }
260
261 TEST_F(OriginTrialsComponentInstallerTest,
262 DisabledTokensResetToDefaultWhenListEmpty) {
263 AddDisabledTokensToPrefs(kExistingDisabledTokens);
264 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
265
266 auto manifest = base::MakeUnique<base::DictionaryValue>();
267 auto disabled_token_list = base::MakeUnique<base::ListValue>();
268 manifest->Set(kManifestDisabledTokenSignaturesPath,
269 std::move(disabled_token_list));
270
271 LoadUpdates(std::move(manifest));
272
273 EXPECT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
274 }
275
276 TEST_F(OriginTrialsComponentInstallerTest, DisabledTokensSetWhenListExists) {
277 ASSERT_FALSE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
278
279 auto manifest = base::MakeUnique<base::DictionaryValue>();
280 auto disabled_token_list = base::MakeUnique<base::ListValue>();
281 disabled_token_list->AppendString(kNewDisabledToken1);
282 manifest->Set(kManifestDisabledTokenSignaturesPath,
283 std::move(disabled_token_list));
284
285 LoadUpdates(std::move(manifest));
286
287 std::vector<std::string> tokens = {kNewDisabledToken1};
288 CheckDisabledTokensPrefs(tokens);
289 }
290
291 TEST_F(OriginTrialsComponentInstallerTest,
292 DisabledTokensReplacedWhenListExists) {
293 AddDisabledTokensToPrefs(kExistingDisabledTokens);
294 ASSERT_TRUE(local_state()->HasPrefPath(prefs::kOriginTrialDisabledTokens));
295
296 auto manifest = base::MakeUnique<base::DictionaryValue>();
297 auto disabled_token_list = base::MakeUnique<base::ListValue>();
298 disabled_token_list->AppendStrings(kNewDisabledTokens);
299 manifest->Set(kManifestDisabledTokenSignaturesPath,
300 std::move(disabled_token_list));
301
302 LoadUpdates(std::move(manifest));
303
304 CheckDisabledTokensPrefs(kNewDisabledTokens);
305 }
306
196 } // namespace component_updater 307 } // namespace component_updater
OLDNEW
« no previous file with comments | « chrome/browser/component_updater/origin_trials_component_installer.cc ('k') | chrome/browser/prefs/origin_trial_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698