15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/pref_model_associator.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AbstractPreferenceMergeTest : public testing::Test { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_ = profile_.GetPrefs(); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetContentPattern(base::DictionaryValue* patterns_dict, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expression, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& content_type, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int setting) { 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* expression_dict; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool found = 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patterns_dict->GetDictionaryWithoutPathExpansion(expression, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &expression_dict); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!found) { 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expression_dict = new base::DictionaryValue; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patterns_dict->SetWithoutPathExpansion(expression, expression_dict); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expression_dict->SetWithoutPathExpansion( 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content_type, new base::FundamentalValue(setting)); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPrefToEmpty(const std::string& pref_name) { 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> empty_value; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(pref_name.c_str()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(pref); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value::Type type = pref->GetType(); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (type == base::Value::TYPE_DICTIONARY) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) empty_value.reset(new base::DictionaryValue); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) else if (type == base::Value::TYPE_LIST) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) empty_value.reset(new base::ListValue); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FAIL(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->Set(pref_name.c_str(), *empty_value); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListPreferenceMergeTest : public AbstractPreferenceMergeTest { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPreferenceMergeTest() : 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_url0_("http://example.com/server0"), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_url1_("http://example.com/server1"), 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local_url0_("http://example.com/local0"), 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local_url1_("http://example.com/local1") {} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AbstractPreferenceMergeTest::SetUp(); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) server_url_list_.Append(new base::StringValue(server_url0_)); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) server_url_list_.Append(new base::StringValue(server_url1_)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string server_url0_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string server_url1_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string local_url0_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string local_url1_; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue server_url_list_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, NotListOrDictionary) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetString(prefs::kHomePage, local_url0_); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kHomePage); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<base::Value> server_value(new base::StringValue(server_url0_)); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *server_value)); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(server_value.get())); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, LocalEmpty) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPrefToEmpty(prefs::kURLsToRestoreOnStartup); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) server_url_list_)); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&server_url_list_)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, ServerNull) { 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* local_list_value = update.Get(); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(local_url0_)); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *null_value)); 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* local_list_value = 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->GetList(prefs::kURLsToRestoreOnStartup); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(local_list_value)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, ServerEmpty) { 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> empty_value(new base::ListValue); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* local_list_value = update.Get(); 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(local_url0_)); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *empty_value)); 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* local_list_value = 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->GetList(prefs::kURLsToRestoreOnStartup); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(local_list_value)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, Merge) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* local_list_value = update.Get(); 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(local_url0_)); 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(local_url1_)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) server_url_list_)); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue expected; 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(server_url0_)); 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(server_url1_)); 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(local_url0_)); 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(local_url1_)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&expected)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, Duplicates) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* local_list_value = update.Get(); 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(local_url0_)); 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(server_url0_)); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(server_url1_)); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) server_url_list_)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue expected; 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(server_url0_)); 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(server_url1_)); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(local_url0_)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&expected)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ListPreferenceMergeTest, Equals) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* local_list_value = update.Get(); 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(server_url0_)); 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(server_url1_)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> original(server_url_list_.DeepCopy()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) server_url_list_)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(original.get())); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryPreferenceMergeTest : public AbstractPreferenceMergeTest { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPreferenceMergeTest() : 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expression0_("expression0"), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expression1_("expression1"), 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expression2_("expression2"), 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type0_("content_type0"), 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type1_("content_type1") {} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AbstractPreferenceMergeTest::SetUp(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&server_patterns_, expression0_, content_type1_, 2); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&server_patterns_, expression1_, content_type0_, 1); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expression0_; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expression1_; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expression2_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_type0_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_type1_; 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue server_patterns_; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, LocalEmpty) { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetPrefToEmpty(prefs::kContentSettingsPatternPairs); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) server_patterns_)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&server_patterns_)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, ServerNull) { 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate update(pref_service_, 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs); 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression2_, content_type0_, 1); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *null_value)); 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* local_dict_value = 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(local_dict_value)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, ServerEmpty) { 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> empty_value(new base::DictionaryValue); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate update(pref_service_, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression2_, content_type0_, 1); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrefService::Preference* pref = 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value( 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefModelAssociator::MergePreference(pref->name(), 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref->GetValue(), 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *empty_value)); 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* local_dict_value = 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(local_dict_value)); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, MergeNoConflicts) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate update(pref_service_, 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs); 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression2_, content_type0_, 1); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs, 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetValue(), 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_patterns_)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue expected; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression0_, content_type0_, 1); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression0_, content_type1_, 2); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression1_, content_type0_, 1); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression2_, content_type0_, 1); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&expected)); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, MergeConflicts) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate update(pref_service_, 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs); 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression0_, content_type0_, 2); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression1_, content_type0_, 1); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression1_, content_type1_, 1); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression2_, content_type0_, 2); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs, 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetValue(), 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_patterns_)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue expected; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression0_, content_type0_, 1); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression0_, content_type1_, 2); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression1_, content_type0_, 1); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression1_, content_type1_, 1); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression2_, content_type0_, 2); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&expected)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, Equal) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate update(pref_service_, 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs); 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression0_, content_type0_, 1); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression0_, content_type1_, 2); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression1_, content_type0_, 1); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref_service_-> 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_patterns_)); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&server_patterns_)); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DictionaryPreferenceMergeTest, ConflictButServerWins) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryPrefUpdate update(pref_service_, 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs); 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression0_, content_type0_, 2); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression0_, content_type1_, 2); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression1_, content_type0_, 1); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kContentSettingsPatternPairs, 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref_service_-> 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_patterns_)); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(merged_value->Equals(&server_patterns_)); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IndividualPreferenceMergeTest : public AbstractPreferenceMergeTest { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IndividualPreferenceMergeTest() : 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url0_("http://example.com/server0"), 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url1_("http://example.com/server1"), 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expression0_("expression0"), 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expression1_("expression1"), 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type0_("content_type0") {} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AbstractPreferenceMergeTest::SetUp(); 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) server_url_list_.Append(new base::StringValue(url0_)); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MergeListPreference(const char* pref) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListPrefUpdate update(pref_service_, pref); 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* local_list_value = update.Get(); 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_list_value->Append(new base::StringValue(url1_)); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref, 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref_service_->GetUserPrefValue(pref), 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_url_list_)); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue expected; 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(url0_)); 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected.Append(new base::StringValue(url1_)); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return merged_value->Equals(&expected); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MergeDictionaryPreference(const char* pref) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryPrefUpdate update(pref_service_, pref); 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* local_dict_value = update.Get(); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(local_dict_value, expression1_, content_type0_, 1); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref, 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *pref_service_->GetUserPrefValue(pref), 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_patterns_)); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue expected; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression0_, content_type0_, 1); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentPattern(&expected, expression1_, content_type0_, 1); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return merged_value->Equals(&expected); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url0_; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url1_; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expression0_; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expression1_; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_type0_; 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue server_url_list_; 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue server_patterns_; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(IndividualPreferenceMergeTest, URLsToRestoreOnStartup) { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(MergeListPreference(prefs::kURLsToRestoreOnStartup)); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 422