| 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 "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 class AbstractPreferenceMergeTest : public testing::Test { | 13 class AbstractPreferenceMergeTest : public testing::Test { |
| 14 protected: | 14 protected: |
| 15 virtual void SetUp() { | 15 virtual void SetUp() { |
| 16 pref_service_ = profile_.GetPrefs(); | 16 pref_service_ = profile_.GetPrefs(); |
| 17 } | 17 } |
| 18 | 18 |
| 19 void SetContentPattern(DictionaryValue* patterns_dict, | 19 void SetContentPattern(base::DictionaryValue* patterns_dict, |
| 20 const std::string& expression, | 20 const std::string& expression, |
| 21 const std::string& content_type, | 21 const std::string& content_type, |
| 22 int setting) { | 22 int setting) { |
| 23 DictionaryValue* expression_dict; | 23 base::DictionaryValue* expression_dict; |
| 24 bool found = | 24 bool found = |
| 25 patterns_dict->GetDictionaryWithoutPathExpansion(expression, | 25 patterns_dict->GetDictionaryWithoutPathExpansion(expression, |
| 26 &expression_dict); | 26 &expression_dict); |
| 27 if (!found) { | 27 if (!found) { |
| 28 expression_dict = new DictionaryValue; | 28 expression_dict = new base::DictionaryValue; |
| 29 patterns_dict->SetWithoutPathExpansion(expression, expression_dict); | 29 patterns_dict->SetWithoutPathExpansion(expression, expression_dict); |
| 30 } | 30 } |
| 31 expression_dict->SetWithoutPathExpansion( | 31 expression_dict->SetWithoutPathExpansion( |
| 32 content_type, | 32 content_type, |
| 33 Value::CreateIntegerValue(setting)); | 33 base::Value::CreateIntegerValue(setting)); |
| 34 } | 34 } |
| 35 | 35 |
| 36 void SetPrefToEmpty(const std::string& pref_name) { | 36 void SetPrefToEmpty(const std::string& pref_name) { |
| 37 scoped_ptr<Value> empty_value; | 37 scoped_ptr<base::Value> empty_value; |
| 38 const PrefService::Preference* pref = | 38 const PrefService::Preference* pref = |
| 39 pref_service_->FindPreference(pref_name.c_str()); | 39 pref_service_->FindPreference(pref_name.c_str()); |
| 40 ASSERT_TRUE(pref); | 40 ASSERT_TRUE(pref); |
| 41 base::Value::Type type = pref->GetType(); | 41 base::Value::Type type = pref->GetType(); |
| 42 if (type == Value::TYPE_DICTIONARY) | 42 if (type == base::Value::TYPE_DICTIONARY) |
| 43 empty_value.reset(new DictionaryValue); | 43 empty_value.reset(new base::DictionaryValue); |
| 44 else if (type == Value::TYPE_LIST) | 44 else if (type == base::Value::TYPE_LIST) |
| 45 empty_value.reset(new ListValue); | 45 empty_value.reset(new base::ListValue); |
| 46 else | 46 else |
| 47 FAIL(); | 47 FAIL(); |
| 48 pref_service_->Set(pref_name.c_str(), *empty_value); | 48 pref_service_->Set(pref_name.c_str(), *empty_value); |
| 49 } | 49 } |
| 50 | 50 |
| 51 TestingProfile profile_; | 51 TestingProfile profile_; |
| 52 PrefService* pref_service_; | 52 PrefService* pref_service_; |
| 53 }; | 53 }; |
| 54 | 54 |
| 55 class ListPreferenceMergeTest : public AbstractPreferenceMergeTest { | 55 class ListPreferenceMergeTest : public AbstractPreferenceMergeTest { |
| 56 protected: | 56 protected: |
| 57 ListPreferenceMergeTest() : | 57 ListPreferenceMergeTest() : |
| 58 server_url0_("http://example.com/server0"), | 58 server_url0_("http://example.com/server0"), |
| 59 server_url1_("http://example.com/server1"), | 59 server_url1_("http://example.com/server1"), |
| 60 local_url0_("http://example.com/local0"), | 60 local_url0_("http://example.com/local0"), |
| 61 local_url1_("http://example.com/local1") {} | 61 local_url1_("http://example.com/local1") {} |
| 62 | 62 |
| 63 virtual void SetUp() { | 63 virtual void SetUp() { |
| 64 AbstractPreferenceMergeTest::SetUp(); | 64 AbstractPreferenceMergeTest::SetUp(); |
| 65 server_url_list_.Append(Value::CreateStringValue(server_url0_)); | 65 server_url_list_.Append(base::Value::CreateStringValue(server_url0_)); |
| 66 server_url_list_.Append(Value::CreateStringValue(server_url1_)); | 66 server_url_list_.Append(base::Value::CreateStringValue(server_url1_)); |
| 67 } | 67 } |
| 68 | 68 |
| 69 std::string server_url0_; | 69 std::string server_url0_; |
| 70 std::string server_url1_; | 70 std::string server_url1_; |
| 71 std::string local_url0_; | 71 std::string local_url0_; |
| 72 std::string local_url1_; | 72 std::string local_url1_; |
| 73 ListValue server_url_list_; | 73 base::ListValue server_url_list_; |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 TEST_F(ListPreferenceMergeTest, NotListOrDictionary) { | 76 TEST_F(ListPreferenceMergeTest, NotListOrDictionary) { |
| 77 pref_service_->SetString(prefs::kHomePage, local_url0_); | 77 pref_service_->SetString(prefs::kHomePage, local_url0_); |
| 78 const PrefService::Preference* pref = | 78 const PrefService::Preference* pref = |
| 79 pref_service_->FindPreference(prefs::kHomePage); | 79 pref_service_->FindPreference(prefs::kHomePage); |
| 80 scoped_ptr<Value> server_value(Value::CreateStringValue(server_url0_)); | 80 scoped_ptr<base::Value> server_value( |
| 81 scoped_ptr<Value> merged_value( | 81 base::Value::CreateStringValue(server_url0_)); |
| 82 scoped_ptr<base::Value> merged_value( |
| 82 PrefModelAssociator::MergePreference(pref->name(), | 83 PrefModelAssociator::MergePreference(pref->name(), |
| 83 *pref->GetValue(), | 84 *pref->GetValue(), |
| 84 *server_value)); | 85 *server_value)); |
| 85 EXPECT_TRUE(merged_value->Equals(server_value.get())); | 86 EXPECT_TRUE(merged_value->Equals(server_value.get())); |
| 86 } | 87 } |
| 87 | 88 |
| 88 TEST_F(ListPreferenceMergeTest, LocalEmpty) { | 89 TEST_F(ListPreferenceMergeTest, LocalEmpty) { |
| 89 SetPrefToEmpty(prefs::kURLsToRestoreOnStartup); | 90 SetPrefToEmpty(prefs::kURLsToRestoreOnStartup); |
| 90 const PrefService::Preference* pref = | 91 const PrefService::Preference* pref = |
| 91 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); | 92 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); |
| 92 scoped_ptr<Value> merged_value( | 93 scoped_ptr<base::Value> merged_value( |
| 93 PrefModelAssociator::MergePreference(pref->name(), | 94 PrefModelAssociator::MergePreference(pref->name(), |
| 94 *pref->GetValue(), | 95 *pref->GetValue(), |
| 95 server_url_list_)); | 96 server_url_list_)); |
| 96 EXPECT_TRUE(merged_value->Equals(&server_url_list_)); | 97 EXPECT_TRUE(merged_value->Equals(&server_url_list_)); |
| 97 } | 98 } |
| 98 | 99 |
| 99 TEST_F(ListPreferenceMergeTest, ServerNull) { | 100 TEST_F(ListPreferenceMergeTest, ServerNull) { |
| 100 scoped_ptr<Value> null_value(Value::CreateNullValue()); | 101 scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); |
| 101 { | 102 { |
| 102 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); | 103 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); |
| 103 ListValue* local_list_value = update.Get(); | 104 base::ListValue* local_list_value = update.Get(); |
| 104 local_list_value->Append(Value::CreateStringValue(local_url0_)); | 105 local_list_value->Append(base::Value::CreateStringValue(local_url0_)); |
| 105 } | 106 } |
| 106 | 107 |
| 107 const PrefService::Preference* pref = | 108 const PrefService::Preference* pref = |
| 108 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); | 109 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); |
| 109 scoped_ptr<Value> merged_value( | 110 scoped_ptr<base::Value> merged_value( |
| 110 PrefModelAssociator::MergePreference(pref->name(), | 111 PrefModelAssociator::MergePreference(pref->name(), |
| 111 *pref->GetValue(), | 112 *pref->GetValue(), |
| 112 *null_value)); | 113 *null_value)); |
| 113 const ListValue* local_list_value = | 114 const base::ListValue* local_list_value = |
| 114 pref_service_->GetList(prefs::kURLsToRestoreOnStartup); | 115 pref_service_->GetList(prefs::kURLsToRestoreOnStartup); |
| 115 EXPECT_TRUE(merged_value->Equals(local_list_value)); | 116 EXPECT_TRUE(merged_value->Equals(local_list_value)); |
| 116 } | 117 } |
| 117 | 118 |
| 118 TEST_F(ListPreferenceMergeTest, ServerEmpty) { | 119 TEST_F(ListPreferenceMergeTest, ServerEmpty) { |
| 119 scoped_ptr<Value> empty_value(new ListValue); | 120 scoped_ptr<base::Value> empty_value(new base::ListValue); |
| 120 { | 121 { |
| 121 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); | 122 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); |
| 122 ListValue* local_list_value = update.Get(); | 123 base::ListValue* local_list_value = update.Get(); |
| 123 local_list_value->Append(Value::CreateStringValue(local_url0_)); | 124 local_list_value->Append(base::Value::CreateStringValue(local_url0_)); |
| 124 } | 125 } |
| 125 | 126 |
| 126 const PrefService::Preference* pref = | 127 const PrefService::Preference* pref = |
| 127 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); | 128 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); |
| 128 scoped_ptr<Value> merged_value( | 129 scoped_ptr<base::Value> merged_value( |
| 129 PrefModelAssociator::MergePreference(pref->name(), | 130 PrefModelAssociator::MergePreference(pref->name(), |
| 130 *pref->GetValue(), | 131 *pref->GetValue(), |
| 131 *empty_value)); | 132 *empty_value)); |
| 132 const ListValue* local_list_value = | 133 const base::ListValue* local_list_value = |
| 133 pref_service_->GetList(prefs::kURLsToRestoreOnStartup); | 134 pref_service_->GetList(prefs::kURLsToRestoreOnStartup); |
| 134 EXPECT_TRUE(merged_value->Equals(local_list_value)); | 135 EXPECT_TRUE(merged_value->Equals(local_list_value)); |
| 135 } | 136 } |
| 136 | 137 |
| 137 TEST_F(ListPreferenceMergeTest, Merge) { | 138 TEST_F(ListPreferenceMergeTest, Merge) { |
| 138 { | 139 { |
| 139 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); | 140 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); |
| 140 ListValue* local_list_value = update.Get(); | 141 base::ListValue* local_list_value = update.Get(); |
| 141 local_list_value->Append(Value::CreateStringValue(local_url0_)); | 142 local_list_value->Append(base::Value::CreateStringValue(local_url0_)); |
| 142 local_list_value->Append(Value::CreateStringValue(local_url1_)); | 143 local_list_value->Append(base::Value::CreateStringValue(local_url1_)); |
| 143 } | 144 } |
| 144 | 145 |
| 145 const PrefService::Preference* pref = | 146 const PrefService::Preference* pref = |
| 146 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); | 147 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); |
| 147 scoped_ptr<Value> merged_value( | 148 scoped_ptr<base::Value> merged_value( |
| 148 PrefModelAssociator::MergePreference(pref->name(), | 149 PrefModelAssociator::MergePreference(pref->name(), |
| 149 *pref->GetValue(), | 150 *pref->GetValue(), |
| 150 server_url_list_)); | 151 server_url_list_)); |
| 151 | 152 |
| 152 ListValue expected; | 153 base::ListValue expected; |
| 153 expected.Append(Value::CreateStringValue(server_url0_)); | 154 expected.Append(base::Value::CreateStringValue(server_url0_)); |
| 154 expected.Append(Value::CreateStringValue(server_url1_)); | 155 expected.Append(base::Value::CreateStringValue(server_url1_)); |
| 155 expected.Append(Value::CreateStringValue(local_url0_)); | 156 expected.Append(base::Value::CreateStringValue(local_url0_)); |
| 156 expected.Append(Value::CreateStringValue(local_url1_)); | 157 expected.Append(base::Value::CreateStringValue(local_url1_)); |
| 157 EXPECT_TRUE(merged_value->Equals(&expected)); | 158 EXPECT_TRUE(merged_value->Equals(&expected)); |
| 158 } | 159 } |
| 159 | 160 |
| 160 TEST_F(ListPreferenceMergeTest, Duplicates) { | 161 TEST_F(ListPreferenceMergeTest, Duplicates) { |
| 161 { | 162 { |
| 162 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); | 163 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); |
| 163 ListValue* local_list_value = update.Get(); | 164 base::ListValue* local_list_value = update.Get(); |
| 164 local_list_value->Append(Value::CreateStringValue(local_url0_)); | 165 local_list_value->Append(base::Value::CreateStringValue(local_url0_)); |
| 165 local_list_value->Append(Value::CreateStringValue(server_url0_)); | 166 local_list_value->Append(base::Value::CreateStringValue(server_url0_)); |
| 166 local_list_value->Append(Value::CreateStringValue(server_url1_)); | 167 local_list_value->Append(base::Value::CreateStringValue(server_url1_)); |
| 167 } | 168 } |
| 168 | 169 |
| 169 const PrefService::Preference* pref = | 170 const PrefService::Preference* pref = |
| 170 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); | 171 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); |
| 171 scoped_ptr<Value> merged_value( | 172 scoped_ptr<base::Value> merged_value( |
| 172 PrefModelAssociator::MergePreference(pref->name(), | 173 PrefModelAssociator::MergePreference(pref->name(), |
| 173 *pref->GetValue(), | 174 *pref->GetValue(), |
| 174 server_url_list_)); | 175 server_url_list_)); |
| 175 | 176 |
| 176 ListValue expected; | 177 base::ListValue expected; |
| 177 expected.Append(Value::CreateStringValue(server_url0_)); | 178 expected.Append(base::Value::CreateStringValue(server_url0_)); |
| 178 expected.Append(Value::CreateStringValue(server_url1_)); | 179 expected.Append(base::Value::CreateStringValue(server_url1_)); |
| 179 expected.Append(Value::CreateStringValue(local_url0_)); | 180 expected.Append(base::Value::CreateStringValue(local_url0_)); |
| 180 EXPECT_TRUE(merged_value->Equals(&expected)); | 181 EXPECT_TRUE(merged_value->Equals(&expected)); |
| 181 } | 182 } |
| 182 | 183 |
| 183 TEST_F(ListPreferenceMergeTest, Equals) { | 184 TEST_F(ListPreferenceMergeTest, Equals) { |
| 184 { | 185 { |
| 185 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); | 186 ListPrefUpdate update(pref_service_, prefs::kURLsToRestoreOnStartup); |
| 186 ListValue* local_list_value = update.Get(); | 187 base::ListValue* local_list_value = update.Get(); |
| 187 local_list_value->Append(Value::CreateStringValue(server_url0_)); | 188 local_list_value->Append(base::Value::CreateStringValue(server_url0_)); |
| 188 local_list_value->Append(Value::CreateStringValue(server_url1_)); | 189 local_list_value->Append(base::Value::CreateStringValue(server_url1_)); |
| 189 } | 190 } |
| 190 | 191 |
| 191 scoped_ptr<Value> original(server_url_list_.DeepCopy()); | 192 scoped_ptr<base::Value> original(server_url_list_.DeepCopy()); |
| 192 const PrefService::Preference* pref = | 193 const PrefService::Preference* pref = |
| 193 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); | 194 pref_service_->FindPreference(prefs::kURLsToRestoreOnStartup); |
| 194 scoped_ptr<Value> merged_value( | 195 scoped_ptr<base::Value> merged_value( |
| 195 PrefModelAssociator::MergePreference(pref->name(), | 196 PrefModelAssociator::MergePreference(pref->name(), |
| 196 *pref->GetValue(), | 197 *pref->GetValue(), |
| 197 server_url_list_)); | 198 server_url_list_)); |
| 198 EXPECT_TRUE(merged_value->Equals(original.get())); | 199 EXPECT_TRUE(merged_value->Equals(original.get())); |
| 199 } | 200 } |
| 200 | 201 |
| 201 class DictionaryPreferenceMergeTest : public AbstractPreferenceMergeTest { | 202 class DictionaryPreferenceMergeTest : public AbstractPreferenceMergeTest { |
| 202 protected: | 203 protected: |
| 203 DictionaryPreferenceMergeTest() : | 204 DictionaryPreferenceMergeTest() : |
| 204 expression0_("expression0"), | 205 expression0_("expression0"), |
| 205 expression1_("expression1"), | 206 expression1_("expression1"), |
| 206 expression2_("expression2"), | 207 expression2_("expression2"), |
| 207 content_type0_("content_type0"), | 208 content_type0_("content_type0"), |
| 208 content_type1_("content_type1") {} | 209 content_type1_("content_type1") {} |
| 209 | 210 |
| 210 virtual void SetUp() { | 211 virtual void SetUp() { |
| 211 AbstractPreferenceMergeTest::SetUp(); | 212 AbstractPreferenceMergeTest::SetUp(); |
| 212 SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); | 213 SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); |
| 213 SetContentPattern(&server_patterns_, expression0_, content_type1_, 2); | 214 SetContentPattern(&server_patterns_, expression0_, content_type1_, 2); |
| 214 SetContentPattern(&server_patterns_, expression1_, content_type0_, 1); | 215 SetContentPattern(&server_patterns_, expression1_, content_type0_, 1); |
| 215 } | 216 } |
| 216 | 217 |
| 217 std::string expression0_; | 218 std::string expression0_; |
| 218 std::string expression1_; | 219 std::string expression1_; |
| 219 std::string expression2_; | 220 std::string expression2_; |
| 220 std::string content_type0_; | 221 std::string content_type0_; |
| 221 std::string content_type1_; | 222 std::string content_type1_; |
| 222 DictionaryValue server_patterns_; | 223 base::DictionaryValue server_patterns_; |
| 223 }; | 224 }; |
| 224 | 225 |
| 225 TEST_F(DictionaryPreferenceMergeTest, LocalEmpty) { | 226 TEST_F(DictionaryPreferenceMergeTest, LocalEmpty) { |
| 226 SetPrefToEmpty(prefs::kContentSettingsPatternPairs); | 227 SetPrefToEmpty(prefs::kContentSettingsPatternPairs); |
| 227 const PrefService::Preference* pref = | 228 const PrefService::Preference* pref = |
| 228 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); | 229 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); |
| 229 scoped_ptr<Value> merged_value( | 230 scoped_ptr<base::Value> merged_value( |
| 230 PrefModelAssociator::MergePreference(pref->name(), | 231 PrefModelAssociator::MergePreference(pref->name(), |
| 231 *pref->GetValue(), | 232 *pref->GetValue(), |
| 232 server_patterns_)); | 233 server_patterns_)); |
| 233 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); | 234 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); |
| 234 } | 235 } |
| 235 | 236 |
| 236 TEST_F(DictionaryPreferenceMergeTest, ServerNull) { | 237 TEST_F(DictionaryPreferenceMergeTest, ServerNull) { |
| 237 scoped_ptr<Value> null_value(Value::CreateNullValue()); | 238 scoped_ptr<base::Value> null_value(base::Value::CreateNullValue()); |
| 238 { | 239 { |
| 239 DictionaryPrefUpdate update(pref_service_, | 240 DictionaryPrefUpdate update(pref_service_, |
| 240 prefs::kContentSettingsPatternPairs); | 241 prefs::kContentSettingsPatternPairs); |
| 241 DictionaryValue* local_dict_value = update.Get(); | 242 base::DictionaryValue* local_dict_value = update.Get(); |
| 242 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); | 243 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); |
| 243 } | 244 } |
| 244 | 245 |
| 245 const PrefService::Preference* pref = | 246 const PrefService::Preference* pref = |
| 246 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); | 247 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); |
| 247 scoped_ptr<Value> merged_value( | 248 scoped_ptr<base::Value> merged_value( |
| 248 PrefModelAssociator::MergePreference(pref->name(), | 249 PrefModelAssociator::MergePreference(pref->name(), |
| 249 *pref->GetValue(), | 250 *pref->GetValue(), |
| 250 *null_value)); | 251 *null_value)); |
| 251 const DictionaryValue* local_dict_value = | 252 const base::DictionaryValue* local_dict_value = |
| 252 pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); | 253 pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); |
| 253 EXPECT_TRUE(merged_value->Equals(local_dict_value)); | 254 EXPECT_TRUE(merged_value->Equals(local_dict_value)); |
| 254 } | 255 } |
| 255 | 256 |
| 256 TEST_F(DictionaryPreferenceMergeTest, ServerEmpty) { | 257 TEST_F(DictionaryPreferenceMergeTest, ServerEmpty) { |
| 257 scoped_ptr<Value> empty_value(new DictionaryValue); | 258 scoped_ptr<base::Value> empty_value(new base::DictionaryValue); |
| 258 { | 259 { |
| 259 DictionaryPrefUpdate update(pref_service_, | 260 DictionaryPrefUpdate update(pref_service_, |
| 260 prefs::kContentSettingsPatternPairs); | 261 prefs::kContentSettingsPatternPairs); |
| 261 DictionaryValue* local_dict_value = update.Get(); | 262 base::DictionaryValue* local_dict_value = update.Get(); |
| 262 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); | 263 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); |
| 263 } | 264 } |
| 264 | 265 |
| 265 const PrefService::Preference* pref = | 266 const PrefService::Preference* pref = |
| 266 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); | 267 pref_service_->FindPreference(prefs::kContentSettingsPatternPairs); |
| 267 scoped_ptr<Value> merged_value( | 268 scoped_ptr<base::Value> merged_value( |
| 268 PrefModelAssociator::MergePreference(pref->name(), | 269 PrefModelAssociator::MergePreference(pref->name(), |
| 269 *pref->GetValue(), | 270 *pref->GetValue(), |
| 270 *empty_value)); | 271 *empty_value)); |
| 271 const DictionaryValue* local_dict_value = | 272 const base::DictionaryValue* local_dict_value = |
| 272 pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); | 273 pref_service_->GetDictionary(prefs::kContentSettingsPatternPairs); |
| 273 EXPECT_TRUE(merged_value->Equals(local_dict_value)); | 274 EXPECT_TRUE(merged_value->Equals(local_dict_value)); |
| 274 } | 275 } |
| 275 | 276 |
| 276 TEST_F(DictionaryPreferenceMergeTest, MergeNoConflicts) { | 277 TEST_F(DictionaryPreferenceMergeTest, MergeNoConflicts) { |
| 277 { | 278 { |
| 278 DictionaryPrefUpdate update(pref_service_, | 279 DictionaryPrefUpdate update(pref_service_, |
| 279 prefs::kContentSettingsPatternPairs); | 280 prefs::kContentSettingsPatternPairs); |
| 280 DictionaryValue* local_dict_value = update.Get(); | 281 base::DictionaryValue* local_dict_value = update.Get(); |
| 281 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); | 282 SetContentPattern(local_dict_value, expression2_, content_type0_, 1); |
| 282 } | 283 } |
| 283 | 284 |
| 284 scoped_ptr<Value> merged_value(PrefModelAssociator::MergePreference( | 285 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
| 285 prefs::kContentSettingsPatternPairs, | 286 prefs::kContentSettingsPatternPairs, |
| 286 *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> | 287 *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> |
| 287 GetValue(), | 288 GetValue(), |
| 288 server_patterns_)); | 289 server_patterns_)); |
| 289 | 290 |
| 290 DictionaryValue expected; | 291 base::DictionaryValue expected; |
| 291 SetContentPattern(&expected, expression0_, content_type0_, 1); | 292 SetContentPattern(&expected, expression0_, content_type0_, 1); |
| 292 SetContentPattern(&expected, expression0_, content_type1_, 2); | 293 SetContentPattern(&expected, expression0_, content_type1_, 2); |
| 293 SetContentPattern(&expected, expression1_, content_type0_, 1); | 294 SetContentPattern(&expected, expression1_, content_type0_, 1); |
| 294 SetContentPattern(&expected, expression2_, content_type0_, 1); | 295 SetContentPattern(&expected, expression2_, content_type0_, 1); |
| 295 EXPECT_TRUE(merged_value->Equals(&expected)); | 296 EXPECT_TRUE(merged_value->Equals(&expected)); |
| 296 } | 297 } |
| 297 | 298 |
| 298 TEST_F(DictionaryPreferenceMergeTest, MergeConflicts) { | 299 TEST_F(DictionaryPreferenceMergeTest, MergeConflicts) { |
| 299 { | 300 { |
| 300 DictionaryPrefUpdate update(pref_service_, | 301 DictionaryPrefUpdate update(pref_service_, |
| 301 prefs::kContentSettingsPatternPairs); | 302 prefs::kContentSettingsPatternPairs); |
| 302 DictionaryValue* local_dict_value = update.Get(); | 303 base::DictionaryValue* local_dict_value = update.Get(); |
| 303 SetContentPattern(local_dict_value, expression0_, content_type0_, 2); | 304 SetContentPattern(local_dict_value, expression0_, content_type0_, 2); |
| 304 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 305 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); |
| 305 SetContentPattern(local_dict_value, expression1_, content_type1_, 1); | 306 SetContentPattern(local_dict_value, expression1_, content_type1_, 1); |
| 306 SetContentPattern(local_dict_value, expression2_, content_type0_, 2); | 307 SetContentPattern(local_dict_value, expression2_, content_type0_, 2); |
| 307 } | 308 } |
| 308 | 309 |
| 309 scoped_ptr<Value> merged_value(PrefModelAssociator::MergePreference( | 310 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
| 310 prefs::kContentSettingsPatternPairs, | 311 prefs::kContentSettingsPatternPairs, |
| 311 *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> | 312 *pref_service_->FindPreference(prefs::kContentSettingsPatternPairs)-> |
| 312 GetValue(), | 313 GetValue(), |
| 313 server_patterns_)); | 314 server_patterns_)); |
| 314 | 315 |
| 315 DictionaryValue expected; | 316 base::DictionaryValue expected; |
| 316 SetContentPattern(&expected, expression0_, content_type0_, 1); | 317 SetContentPattern(&expected, expression0_, content_type0_, 1); |
| 317 SetContentPattern(&expected, expression0_, content_type1_, 2); | 318 SetContentPattern(&expected, expression0_, content_type1_, 2); |
| 318 SetContentPattern(&expected, expression1_, content_type0_, 1); | 319 SetContentPattern(&expected, expression1_, content_type0_, 1); |
| 319 SetContentPattern(&expected, expression1_, content_type1_, 1); | 320 SetContentPattern(&expected, expression1_, content_type1_, 1); |
| 320 SetContentPattern(&expected, expression2_, content_type0_, 2); | 321 SetContentPattern(&expected, expression2_, content_type0_, 2); |
| 321 EXPECT_TRUE(merged_value->Equals(&expected)); | 322 EXPECT_TRUE(merged_value->Equals(&expected)); |
| 322 } | 323 } |
| 323 | 324 |
| 324 TEST_F(DictionaryPreferenceMergeTest, Equal) { | 325 TEST_F(DictionaryPreferenceMergeTest, Equal) { |
| 325 { | 326 { |
| 326 DictionaryPrefUpdate update(pref_service_, | 327 DictionaryPrefUpdate update(pref_service_, |
| 327 prefs::kContentSettingsPatternPairs); | 328 prefs::kContentSettingsPatternPairs); |
| 328 DictionaryValue* local_dict_value = update.Get(); | 329 base::DictionaryValue* local_dict_value = update.Get(); |
| 329 SetContentPattern(local_dict_value, expression0_, content_type0_, 1); | 330 SetContentPattern(local_dict_value, expression0_, content_type0_, 1); |
| 330 SetContentPattern(local_dict_value, expression0_, content_type1_, 2); | 331 SetContentPattern(local_dict_value, expression0_, content_type1_, 2); |
| 331 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 332 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); |
| 332 } | 333 } |
| 333 | 334 |
| 334 scoped_ptr<Value> merged_value(PrefModelAssociator::MergePreference( | 335 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
| 335 prefs::kContentSettingsPatternPairs, | 336 prefs::kContentSettingsPatternPairs, |
| 336 *pref_service_-> | 337 *pref_service_-> |
| 337 FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), | 338 FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), |
| 338 server_patterns_)); | 339 server_patterns_)); |
| 339 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); | 340 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); |
| 340 } | 341 } |
| 341 | 342 |
| 342 TEST_F(DictionaryPreferenceMergeTest, ConflictButServerWins) { | 343 TEST_F(DictionaryPreferenceMergeTest, ConflictButServerWins) { |
| 343 { | 344 { |
| 344 DictionaryPrefUpdate update(pref_service_, | 345 DictionaryPrefUpdate update(pref_service_, |
| 345 prefs::kContentSettingsPatternPairs); | 346 prefs::kContentSettingsPatternPairs); |
| 346 DictionaryValue* local_dict_value = update.Get(); | 347 base::DictionaryValue* local_dict_value = update.Get(); |
| 347 SetContentPattern(local_dict_value, expression0_, content_type0_, 2); | 348 SetContentPattern(local_dict_value, expression0_, content_type0_, 2); |
| 348 SetContentPattern(local_dict_value, expression0_, content_type1_, 2); | 349 SetContentPattern(local_dict_value, expression0_, content_type1_, 2); |
| 349 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 350 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); |
| 350 } | 351 } |
| 351 | 352 |
| 352 scoped_ptr<Value> merged_value(PrefModelAssociator::MergePreference( | 353 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
| 353 prefs::kContentSettingsPatternPairs, | 354 prefs::kContentSettingsPatternPairs, |
| 354 *pref_service_-> | 355 *pref_service_-> |
| 355 FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), | 356 FindPreference(prefs::kContentSettingsPatternPairs)->GetValue(), |
| 356 server_patterns_)); | 357 server_patterns_)); |
| 357 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); | 358 EXPECT_TRUE(merged_value->Equals(&server_patterns_)); |
| 358 } | 359 } |
| 359 | 360 |
| 360 class IndividualPreferenceMergeTest : public AbstractPreferenceMergeTest { | 361 class IndividualPreferenceMergeTest : public AbstractPreferenceMergeTest { |
| 361 protected: | 362 protected: |
| 362 IndividualPreferenceMergeTest() : | 363 IndividualPreferenceMergeTest() : |
| 363 url0_("http://example.com/server0"), | 364 url0_("http://example.com/server0"), |
| 364 url1_("http://example.com/server1"), | 365 url1_("http://example.com/server1"), |
| 365 expression0_("expression0"), | 366 expression0_("expression0"), |
| 366 expression1_("expression1"), | 367 expression1_("expression1"), |
| 367 content_type0_("content_type0") {} | 368 content_type0_("content_type0") {} |
| 368 | 369 |
| 369 virtual void SetUp() { | 370 virtual void SetUp() { |
| 370 AbstractPreferenceMergeTest::SetUp(); | 371 AbstractPreferenceMergeTest::SetUp(); |
| 371 server_url_list_.Append(Value::CreateStringValue(url0_)); | 372 server_url_list_.Append(base::Value::CreateStringValue(url0_)); |
| 372 SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); | 373 SetContentPattern(&server_patterns_, expression0_, content_type0_, 1); |
| 373 } | 374 } |
| 374 | 375 |
| 375 bool MergeListPreference(const char* pref) { | 376 bool MergeListPreference(const char* pref) { |
| 376 { | 377 { |
| 377 ListPrefUpdate update(pref_service_, pref); | 378 ListPrefUpdate update(pref_service_, pref); |
| 378 ListValue* local_list_value = update.Get(); | 379 base::ListValue* local_list_value = update.Get(); |
| 379 local_list_value->Append(Value::CreateStringValue(url1_)); | 380 local_list_value->Append(base::Value::CreateStringValue(url1_)); |
| 380 } | 381 } |
| 381 | 382 |
| 382 scoped_ptr<Value> merged_value(PrefModelAssociator::MergePreference( | 383 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
| 383 pref, | 384 pref, |
| 384 *pref_service_->GetUserPrefValue(pref), | 385 *pref_service_->GetUserPrefValue(pref), |
| 385 server_url_list_)); | 386 server_url_list_)); |
| 386 | 387 |
| 387 ListValue expected; | 388 base::ListValue expected; |
| 388 expected.Append(Value::CreateStringValue(url0_)); | 389 expected.Append(base::Value::CreateStringValue(url0_)); |
| 389 expected.Append(Value::CreateStringValue(url1_)); | 390 expected.Append(base::Value::CreateStringValue(url1_)); |
| 390 return merged_value->Equals(&expected); | 391 return merged_value->Equals(&expected); |
| 391 } | 392 } |
| 392 | 393 |
| 393 bool MergeDictionaryPreference(const char* pref) { | 394 bool MergeDictionaryPreference(const char* pref) { |
| 394 { | 395 { |
| 395 DictionaryPrefUpdate update(pref_service_, pref); | 396 DictionaryPrefUpdate update(pref_service_, pref); |
| 396 DictionaryValue* local_dict_value = update.Get(); | 397 base::DictionaryValue* local_dict_value = update.Get(); |
| 397 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); | 398 SetContentPattern(local_dict_value, expression1_, content_type0_, 1); |
| 398 } | 399 } |
| 399 | 400 |
| 400 scoped_ptr<Value> merged_value(PrefModelAssociator::MergePreference( | 401 scoped_ptr<base::Value> merged_value(PrefModelAssociator::MergePreference( |
| 401 pref, | 402 pref, |
| 402 *pref_service_->GetUserPrefValue(pref), | 403 *pref_service_->GetUserPrefValue(pref), |
| 403 server_patterns_)); | 404 server_patterns_)); |
| 404 | 405 |
| 405 DictionaryValue expected; | 406 base::DictionaryValue expected; |
| 406 SetContentPattern(&expected, expression0_, content_type0_, 1); | 407 SetContentPattern(&expected, expression0_, content_type0_, 1); |
| 407 SetContentPattern(&expected, expression1_, content_type0_, 1); | 408 SetContentPattern(&expected, expression1_, content_type0_, 1); |
| 408 return merged_value->Equals(&expected); | 409 return merged_value->Equals(&expected); |
| 409 } | 410 } |
| 410 | 411 |
| 411 std::string url0_; | 412 std::string url0_; |
| 412 std::string url1_; | 413 std::string url1_; |
| 413 std::string expression0_; | 414 std::string expression0_; |
| 414 std::string expression1_; | 415 std::string expression1_; |
| 415 std::string content_type0_; | 416 std::string content_type0_; |
| 416 ListValue server_url_list_; | 417 base::ListValue server_url_list_; |
| 417 DictionaryValue server_patterns_; | 418 base::DictionaryValue server_patterns_; |
| 418 }; | 419 }; |
| 419 | 420 |
| 420 TEST_F(IndividualPreferenceMergeTest, URLsToRestoreOnStartup) { | 421 TEST_F(IndividualPreferenceMergeTest, URLsToRestoreOnStartup) { |
| 421 EXPECT_TRUE(MergeListPreference(prefs::kURLsToRestoreOnStartup)); | 422 EXPECT_TRUE(MergeListPreference(prefs::kURLsToRestoreOnStartup)); |
| 422 } | 423 } |
| OLD | NEW |