OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "base/prefs/scoped_user_pref_update.h" | 6 #include "base/prefs/scoped_user_pref_update.h" |
7 #include "base/values.h" | 7 #include "base/values.h" |
8 #include "chrome/browser/prefs/pref_model_associator.h" | 8 #include "chrome/browser/prefs/pref_model_associator.h" |
9 #include "chrome/common/pref_names.h" | 9 #include "chrome/common/pref_names.h" |
10 #include "chrome/test/base/testing_profile.h" | 10 #include "chrome/test/base/testing_profile.h" |
11 #include "content/public/test/test_browser_thread_bundle.h" | 11 #include "content/public/test/test_browser_thread_bundle.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 | 13 |
14 class AbstractPreferenceMergeTest : public testing::Test { | 14 class AbstractPreferenceMergeTest : public testing::Test { |
15 protected: | 15 protected: |
16 void SetUp() override { pref_service_ = profile_.GetPrefs(); } | 16 void SetUp() override { pref_service_ = profile_.GetPrefs(); } |
17 | 17 |
18 void SetContentPattern(base::DictionaryValue* patterns_dict, | 18 void SetContentPattern(base::DictionaryValue* patterns_dict, |
19 const std::string& expression, | 19 const std::string& expression, |
20 const std::string& content_type, | |
21 int setting) { | 20 int setting) { |
22 base::DictionaryValue* expression_dict; | 21 base::DictionaryValue* expression_dict; |
23 bool found = | 22 bool found = |
24 patterns_dict->GetDictionaryWithoutPathExpansion(expression, | 23 patterns_dict->GetDictionaryWithoutPathExpansion(expression, |
25 &expression_dict); | 24 &expression_dict); |
26 if (!found) { | 25 if (!found) { |
27 expression_dict = new base::DictionaryValue; | 26 expression_dict = new base::DictionaryValue; |
28 patterns_dict->SetWithoutPathExpansion(expression, expression_dict); | 27 patterns_dict->SetWithoutPathExpansion(expression, expression_dict); |
29 } | 28 } |
30 expression_dict->SetWithoutPathExpansion( | 29 expression_dict->SetWithoutPathExpansion( |
31 content_type, new base::FundamentalValue(setting)); | 30 "setting", new base::FundamentalValue(setting)); |
32 } | 31 } |
33 | 32 |
34 void SetPrefToEmpty(const std::string& pref_name) { | 33 void SetPrefToEmpty(const std::string& pref_name) { |
35 scoped_ptr<base::Value> empty_value; | 34 scoped_ptr<base::Value> empty_value; |
36 const PrefService::Preference* pref = | 35 const PrefService::Preference* pref = |
37 pref_service_->FindPreference(pref_name.c_str()); | 36 pref_service_->FindPreference(pref_name.c_str()); |
38 ASSERT_TRUE(pref); | 37 ASSERT_TRUE(pref); |
39 base::Value::Type type = pref->GetType(); | 38 base::Value::Type type = pref->GetType(); |
40 if (type == base::Value::TYPE_DICTIONARY) | 39 if (type == base::Value::TYPE_DICTIONARY) |
41 empty_value.reset(new base::DictionaryValue); | 40 empty_value.reset(new base::DictionaryValue); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 server_url_list_)); | 195 server_url_list_)); |
197 EXPECT_TRUE(merged_value->Equals(original.get())); | 196 EXPECT_TRUE(merged_value->Equals(original.get())); |
198 } | 197 } |
199 | 198 |
200 class DictionaryPreferenceMergeTest : public AbstractPreferenceMergeTest { | 199 class DictionaryPreferenceMergeTest : public AbstractPreferenceMergeTest { |
201 protected: | 200 protected: |
202 DictionaryPreferenceMergeTest() : | 201 DictionaryPreferenceMergeTest() : |
203 expression0_("expression0"), | 202 expression0_("expression0"), |
204 expression1_("expression1"), | 203 expression1_("expression1"), |
205 expression2_("expression2"), | 204 expression2_("expression2"), |
206 content_type0_("content_type0"), | 205 expression3_("expression3"), |
207 content_type1_("content_type1") {} | 206 expression4_("expression4") {} |
208 | 207 |
209 void SetUp() override { | 208 void SetUp() override { |
210 AbstractPreferenceMergeTest::SetUp(); | 209 AbstractPreferenceMergeTest::SetUp(); |
211 SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); | 210 SetContentPattern(&server_patterns_, expression0_, 1); |
212 SetContentPattern(&server_patterns_, expression0_, content_type1_, 2); | 211 SetContentPattern(&server_patterns_, expression1_, 2); |
213 SetContentPattern(&server_patterns_, expression1_, content_type0_, 1); | 212 SetContentPattern(&server_patterns_, expression2_, 1); |
214 } | 213 } |
215 | 214 |
216 std::string expression0_; | 215 std::string expression0_; |
217 std::string expression1_; | 216 std::string expression1_; |
218 std::string expression2_; | 217 std::string expression2_; |
219 std::string content_type0_; | 218 std::string expression3_; |
220 std::string content_type1_; | 219 std::string expression4_; |
221 base::DictionaryValue server_patterns_; | 220 base::DictionaryValue server_patterns_; |
222 }; | 221 }; |
223 | 222 |
224 TEST_F(DictionaryPreferenceMergeTest, LocalEmpty) { | 223 TEST_F(DictionaryPreferenceMergeTest, LocalEmpty) { |
225 SetPrefToEmpty(prefs::kContentSettingsPatternPairs); | 224 SetPrefToEmpty(prefs::kContentSettingsImagesPatternPairs); |
226 const PrefService::Preference* pref = | 225 const PrefService::Preference* pref = |
227 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); | 226 pref_service_->FindPreference(prefs::kContentSettingsImagesPatternPairs); |
228 scoped_ptr<base::Value> merged_value( | 227 scoped_ptr<base::Value> merged_value( |
229 PrefModelAssociator::MergePreference(pref->name(), | 228 PrefModelAssociator::MergePreference(pref->name(), |
230 *pref->GetValue(), | 229 *pref->GetValue(), |
231 server_patterns_)); | 230 server_patterns_)); |
232 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); | 231 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); |
233 } | 232 } |
234 | 233 |
235 TEST_F(DictionaryPreferenceMergeTest, ServerNull) { | 234 TEST_F(DictionaryPreferenceMergeTest, ServerNull) { |
236 scoped_ptr<base::Value> null_value = base::Value::CreateNullValue(); | 235 scoped_ptr<base::Value> null_value = base::Value::CreateNullValue(); |
237 { | 236 { |
238 DictionaryPrefUpdate update(pref_service_, | 237 DictionaryPrefUpdate update(pref_service_, |
239 prefs::kContentSettingsPatternPairs); | 238 prefs::kContentSettingsCookiesPatternPairs); |
240 base::DictionaryValue* local_dict_value = update.Get(); | 239 base::DictionaryValue* local_dict_value = update.Get(); |
241 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); | 240 SetContentPattern(local_dict_value, expression3_, 1); |
242 } | 241 } |
243 | 242 |
244 const PrefService::Preference* pref = | 243 const PrefService::Preference* pref = |
245 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); | 244 pref_service_->FindPreference(prefs::kContentSettingsCookiesPatternPairs); |
246 scoped_ptr<base::Value> merged_value( | 245 scoped_ptr<base::Value> merged_value( |
247 PrefModelAssociator::MergePreference(pref->name(), | 246 PrefModelAssociator::MergePreference(pref->name(), |
248 *pref->GetValue(), | 247 *pref->GetValue(), |
249 *null_value)); | 248 *null_value)); |
250 const base::DictionaryValue* local_dict_value = | 249 const base::DictionaryValue* local_dict_value = |
251 pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); | 250 pref_service_->GetDictionary(prefs::kContentSettingsCookiesPatternPairs); |
252 EXPECT_TRUE(merged_value->Equals(local_dict_value)); | 251 EXPECT_TRUE(merged_value->Equals(local_dict_value)); |
253 } | 252 } |
254 | 253 |
255 TEST_F(DictionaryPreferenceMergeTest, ServerEmpty) { | 254 TEST_F(DictionaryPreferenceMergeTest, ServerEmpty) { |
256 scoped_ptr<base::Value> empty_value(new base::DictionaryValue); | 255 scoped_ptr<base::Value> empty_value(new base::DictionaryValue); |
257 { | 256 { |
258 DictionaryPrefUpdate update(pref_service_, | 257 DictionaryPrefUpdate update(pref_service_, |
259 prefs::kContentSettingsPatternPairs); | 258 prefs::kContentSettingsPluginsPatternPairs); |
260 base::DictionaryValue* local_dict_value = update.Get(); | 259 base::DictionaryValue* local_dict_value = update.Get(); |
261 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); | 260 SetContentPattern(local_dict_value, expression3_, 1); |
262 } | 261 } |
263 | 262 |
264 const PrefService::Preference* pref = | 263 const PrefService::Preference* pref = |
265 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); | 264 pref_service_->FindPreference( |
| 265 prefs::kContentSettingsPluginsPatternPairs); |
266 scoped_ptr<base::Value> merged_value( | 266 scoped_ptr<base::Value> merged_value( |
267 PrefModelAssociator::MergePreference(pref->name(), | 267 PrefModelAssociator::MergePreference(pref->name(), |
268 *pref->GetValue(), | 268 *pref->GetValue(), |
269 *empty_value)); | 269 *empty_value)); |
270 const base::DictionaryValue* local_dict_value = | 270 const base::DictionaryValue* local_dict_value = |
271 pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); | 271 pref_service_->GetDictionary( |
| 272 prefs::kContentSettingsPluginsPatternPairs); |
272 EXPECT_TRUE(merged_value->Equals(local_dict_value)); | 273 EXPECT_TRUE(merged_value->Equals(local_dict_value)); |
273 } | 274 } |
274 | 275 |
275 TEST_F(DictionaryPreferenceMergeTest, MergeNoConflicts) { | 276 TEST_F(DictionaryPreferenceMergeTest, MergeNoConflicts) { |
276 { | 277 { |
277 DictionaryPrefUpdate update(pref_service_, | 278 DictionaryPrefUpdate update(pref_service_, |
278 prefs::kContentSettingsPatternPairs); | 279 prefs::kContentSettingsJavaScriptPatternPairs); |
279 base::DictionaryValue* local_dict_value = update.Get(); | 280 base::DictionaryValue* local_dict_value = update.Get(); |
280 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); | 281 SetContentPattern(local_dict_value, expression3_, 1); |
281 } | 282 } |
282 | 283 |
283 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( | 284 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
284 prefs::kContentSettingsPatternPairs, | 285 prefs::kContentSettingsJavaScriptPatternPairs, |
285 *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> | 286 *pref_service_->FindPreference( |
286 GetValue(), | 287 prefs::kContentSettingsJavaScriptPatternPairs)->GetValue(), |
287 server_patterns_)); | 288 server_patterns_)); |
288 | 289 |
289 base::DictionaryValue expected; | 290 base::DictionaryValue expected; |
290 SetContentPattern(&expected, expression0_, content_type0_, 1); | 291 SetContentPattern(&expected, expression0_, 1); |
291 SetContentPattern(&expected, expression0_, content_type1_, 2); | 292 SetContentPattern(&expected, expression1_, 2); |
292 SetContentPattern(&expected, expression1_, content_type0_, 1); | 293 SetContentPattern(&expected, expression2_, 1); |
293 SetContentPattern(&expected, expression2_, content_type0_, 1); | 294 SetContentPattern(&expected, expression3_, 1); |
294 EXPECT_TRUE(merged_value->Equals(&expected)); | 295 EXPECT_TRUE(merged_value->Equals(&expected)); |
295 } | 296 } |
296 | 297 |
297 TEST_F(DictionaryPreferenceMergeTest, MergeConflicts) { | 298 TEST_F(DictionaryPreferenceMergeTest, MergeConflicts) { |
298 { | 299 { |
299 DictionaryPrefUpdate update(pref_service_, | 300 DictionaryPrefUpdate update(pref_service_, |
300 prefs::kContentSettingsPatternPairs); | 301 prefs::kContentSettingsPopupsPatternPairs); |
301 base::DictionaryValue* local_dict_value = update.Get(); | 302 base::DictionaryValue* local_dict_value = update.Get(); |
302 SetContentPattern(local_dict_value, expression0_, content_type0_, 2); | 303 SetContentPattern(local_dict_value, expression0_, 2); |
303 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 304 SetContentPattern(local_dict_value, expression2_, 1); |
304 SetContentPattern(local_dict_value, expression1_, content_type1_, 1); | 305 SetContentPattern(local_dict_value, expression3_, 1); |
305 SetContentPattern(local_dict_value, expression2_, content_type0_, 2); | 306 SetContentPattern(local_dict_value, expression4_, 2); |
306 } | 307 } |
307 | 308 |
308 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( | 309 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
309 prefs::kContentSettingsPatternPairs, | 310 prefs::kContentSettingsPopupsPatternPairs, |
310 *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> | 311 *pref_service_->FindPreference( |
311 GetValue(), | 312 prefs::kContentSettingsPopupsPatternPairs)->GetValue(), |
312 server_patterns_)); | 313 server_patterns_)); |
313 | 314 |
314 base::DictionaryValue expected; | 315 base::DictionaryValue expected; |
315 SetContentPattern(&expected, expression0_, content_type0_, 1); | 316 SetContentPattern(&expected, expression0_, 1); |
316 SetContentPattern(&expected, expression0_, content_type1_, 2); | 317 SetContentPattern(&expected, expression1_, 2); |
317 SetContentPattern(&expected, expression1_, content_type0_, 1); | 318 SetContentPattern(&expected, expression2_, 1); |
318 SetContentPattern(&expected, expression1_, content_type1_, 1); | 319 SetContentPattern(&expected, expression3_, 1); |
319 SetContentPattern(&expected, expression2_, content_type0_, 2); | 320 SetContentPattern(&expected, expression4_, 2); |
320 EXPECT_TRUE(merged_value->Equals(&expected)); | 321 EXPECT_TRUE(merged_value->Equals(&expected)); |
321 } | 322 } |
322 | 323 |
323 TEST_F(DictionaryPreferenceMergeTest, Equal) { | 324 TEST_F(DictionaryPreferenceMergeTest, Equal) { |
324 { | 325 { |
325 DictionaryPrefUpdate update(pref_service_, | 326 DictionaryPrefUpdate update(pref_service_, |
326 prefs::kContentSettingsPatternPairs); | 327 prefs::kContentSettingsMouseLockPatternPairs); |
327 base::DictionaryValue* local_dict_value = update.Get(); | 328 base::DictionaryValue* local_dict_value = update.Get(); |
328 SetContentPattern(local_dict_value, expression0_, content_type0_, 1); | 329 SetContentPattern(local_dict_value, expression0_, 1); |
329 SetContentPattern(local_dict_value, expression0_, content_type1_, 2); | 330 SetContentPattern(local_dict_value, expression1_, 2); |
330 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 331 SetContentPattern(local_dict_value, expression2_, 1); |
331 } | 332 } |
332 | 333 |
333 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( | 334 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
334 prefs::kContentSettingsPatternPairs, | 335 prefs::kContentSettingsMouseLockPatternPairs, |
335 *pref_service_-> | 336 *pref_service_->FindPreference( |
336 FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), | 337 prefs::kContentSettingsMouseLockPatternPairs)->GetValue(), |
337 server_patterns_)); | 338 server_patterns_)); |
338 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); | 339 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); |
339 } | 340 } |
340 | 341 |
341 TEST_F(DictionaryPreferenceMergeTest, ConflictButServerWins) { | 342 TEST_F(DictionaryPreferenceMergeTest, ConflictButServerWins) { |
342 { | 343 { |
343 DictionaryPrefUpdate update(pref_service_, | 344 DictionaryPrefUpdate update(pref_service_, |
344 prefs::kContentSettingsPatternPairs); | 345 prefs::kContentSettingsFullScreenPatternPairs); |
345 base::DictionaryValue* local_dict_value = update.Get(); | 346 base::DictionaryValue* local_dict_value = update.Get(); |
346 SetContentPattern(local_dict_value, expression0_, content_type0_, 2); | 347 SetContentPattern(local_dict_value, expression0_, 2); |
347 SetContentPattern(local_dict_value, expression0_, content_type1_, 2); | 348 SetContentPattern(local_dict_value, expression1_, 2); |
348 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 349 SetContentPattern(local_dict_value, expression2_, 1); |
349 } | 350 } |
350 | 351 |
351 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( | 352 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
352 prefs::kContentSettingsPatternPairs, | 353 prefs::kContentSettingsFullScreenPatternPairs, |
353 *pref_service_-> | 354 *pref_service_->FindPreference( |
354 FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), | 355 prefs::kContentSettingsFullScreenPatternPairs)->GetValue(), |
355 server_patterns_)); | 356 server_patterns_)); |
356 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); | 357 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); |
357 } | 358 } |
358 | 359 |
359 class IndividualPreferenceMergeTest : public AbstractPreferenceMergeTest { | 360 class IndividualPreferenceMergeTest : public AbstractPreferenceMergeTest { |
360 protected: | 361 protected: |
361 IndividualPreferenceMergeTest() : | 362 IndividualPreferenceMergeTest() : |
362 url0_("http://example.com/server0"), | 363 url0_("http://example.com/server0"), |
363 url1_("http://example.com/server1"), | 364 url1_("http://example.com/server1"), |
364 expression0_("expression0"), | 365 expression0_("expression0"), |
365 expression1_("expression1"), | 366 expression1_("expression1") {} |
366 content_type0_("content_type0") {} | |
367 | 367 |
368 void SetUp() override { | 368 void SetUp() override { |
369 AbstractPreferenceMergeTest::SetUp(); | 369 AbstractPreferenceMergeTest::SetUp(); |
370 server_url_list_.Append(new base::StringValue(url0_)); | 370 server_url_list_.Append(new base::StringValue(url0_)); |
371 SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); | 371 SetContentPattern(&server_patterns_, expression0_, 1); |
372 } | 372 } |
373 | 373 |
374 bool MergeListPreference(const char* pref) { | 374 bool MergeListPreference(const char* pref) { |
375 { | 375 { |
376 ListPrefUpdate update(pref_service_, pref); | 376 ListPrefUpdate update(pref_service_, pref); |
377 base::ListValue* local_list_value = update.Get(); | 377 base::ListValue* local_list_value = update.Get(); |
378 local_list_value->Append(new base::StringValue(url1_)); | 378 local_list_value->Append(new base::StringValue(url1_)); |
379 } | 379 } |
380 | 380 |
381 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( | 381 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
382 pref, | 382 pref, |
383 *pref_service_->GetUserPrefValue(pref), | 383 *pref_service_->GetUserPrefValue(pref), |
384 server_url_list_)); | 384 server_url_list_)); |
385 | 385 |
386 base::ListValue expected; | 386 base::ListValue expected; |
387 expected.Append(new base::StringValue(url0_)); | 387 expected.Append(new base::StringValue(url0_)); |
388 expected.Append(new base::StringValue(url1_)); | 388 expected.Append(new base::StringValue(url1_)); |
389 return merged_value->Equals(&expected); | 389 return merged_value->Equals(&expected); |
390 } | 390 } |
391 | 391 |
392 bool MergeDictionaryPreference(const char* pref) { | 392 bool MergeDictionaryPreference(const char* pref) { |
393 { | 393 { |
394 DictionaryPrefUpdate update(pref_service_, pref); | 394 DictionaryPrefUpdate update(pref_service_, pref); |
395 base::DictionaryValue* local_dict_value = update.Get(); | 395 base::DictionaryValue* local_dict_value = update.Get(); |
396 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 396 SetContentPattern(local_dict_value, expression1_, 1); |
397 } | 397 } |
398 | 398 |
399 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( | 399 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
400 pref, | 400 pref, |
401 *pref_service_->GetUserPrefValue(pref), | 401 *pref_service_->GetUserPrefValue(pref), |
402 server_patterns_)); | 402 server_patterns_)); |
403 | 403 |
404 base::DictionaryValue expected; | 404 base::DictionaryValue expected; |
405 SetContentPattern(&expected, expression0_, content_type0_, 1); | 405 SetContentPattern(&expected, expression0_, 1); |
406 SetContentPattern(&expected, expression1_, content_type0_, 1); | 406 SetContentPattern(&expected, expression1_, 1); |
407 return merged_value->Equals(&expected); | 407 return merged_value->Equals(&expected); |
408 } | 408 } |
409 | 409 |
410 std::string url0_; | 410 std::string url0_; |
411 std::string url1_; | 411 std::string url1_; |
412 std::string expression0_; | 412 std::string expression0_; |
413 std::string expression1_; | 413 std::string expression1_; |
414 std::string content_type0_; | 414 std::string content_type0_; |
415 base::ListValue server_url_list_; | 415 base::ListValue server_url_list_; |
416 base::DictionaryValue server_patterns_; | 416 base::DictionaryValue server_patterns_; |
417 }; | 417 }; |
418 | 418 |
419 TEST_F(IndividualPreferenceMergeTest, URLsToRestoreOnStartup) { | 419 TEST_F(IndividualPreferenceMergeTest, URLsToRestoreOnStartup) { |
420 EXPECT_TRUE(MergeListPreference(prefs::kURLsToRestoreOnStartup)); | 420 EXPECT_TRUE(MergeListPreference(prefs::kURLsToRestoreOnStartup)); |
421 } | 421 } |
OLD | NEW |