| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/prefs/tracked/segregated_pref_store.h" | 5 #include "components/user_prefs/tracked/segregated_pref_store.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/prefs/persistent_pref_store.h" | 14 #include "base/prefs/persistent_pref_store.h" |
| 15 #include "base/prefs/pref_store_observer_mock.h" | 15 #include "base/prefs/pref_store_observer_mock.h" |
| 16 #include "base/prefs/testing_pref_store.h" | 16 #include "base/prefs/testing_pref_store.h" |
| 17 #include "base/values.h" | 17 #include "base/values.h" |
| 18 #include "chrome/browser/prefs/tracked/segregated_pref_store.h" | 18 #include "components/user_prefs/tracked/segregated_pref_store.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 | 20 |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 const char kSelectedPref[] = "selected_pref"; | 23 const char kSelectedPref[] = "selected_pref"; |
| 24 const char kUnselectedPref[] = "unselected_pref"; | 24 const char kUnselectedPref[] = "unselected_pref"; |
| 25 | 25 |
| 26 const char kValue1[] = "value1"; | 26 const char kValue1[] = "value1"; |
| 27 const char kValue2[] = "value2"; | 27 const char kValue2[] = "value2"; |
| 28 | 28 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 read_error_delegate_( | 62 read_error_delegate_( |
| 63 new MockReadErrorDelegate(&read_error_delegate_data_)) {} | 63 new MockReadErrorDelegate(&read_error_delegate_data_)) {} |
| 64 | 64 |
| 65 void SetUp() override { | 65 void SetUp() override { |
| 66 selected_store_ = new TestingPrefStore; | 66 selected_store_ = new TestingPrefStore; |
| 67 default_store_ = new TestingPrefStore; | 67 default_store_ = new TestingPrefStore; |
| 68 | 68 |
| 69 std::set<std::string> selected_pref_names; | 69 std::set<std::string> selected_pref_names; |
| 70 selected_pref_names.insert(kSelectedPref); | 70 selected_pref_names.insert(kSelectedPref); |
| 71 | 71 |
| 72 segregated_store_ = new SegregatedPrefStore( | 72 segregated_store_ = new SegregatedPrefStore(default_store_, selected_store_, |
| 73 default_store_, | 73 selected_pref_names); |
| 74 selected_store_, | |
| 75 selected_pref_names); | |
| 76 | 74 |
| 77 segregated_store_->AddObserver(&observer_); | 75 segregated_store_->AddObserver(&observer_); |
| 78 } | 76 } |
| 79 | 77 |
| 80 void TearDown() override { segregated_store_->RemoveObserver(&observer_); } | 78 void TearDown() override { segregated_store_->RemoveObserver(&observer_); } |
| 81 | 79 |
| 82 protected: | 80 protected: |
| 83 scoped_ptr<PersistentPrefStore::ReadErrorDelegate> GetReadErrorDelegate() { | 81 scoped_ptr<PersistentPrefStore::ReadErrorDelegate> GetReadErrorDelegate() { |
| 84 EXPECT_TRUE(read_error_delegate_); | 82 EXPECT_TRUE(read_error_delegate_); |
| 85 return read_error_delegate_.Pass(); | 83 return read_error_delegate_.Pass(); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 observer_.VerifyAndResetChangedKey(kSelectedPref); | 159 observer_.VerifyAndResetChangedKey(kSelectedPref); |
| 162 segregated_store_->SetValue(kUnselectedPref, | 160 segregated_store_->SetValue(kUnselectedPref, |
| 163 make_scoped_ptr(new base::StringValue(kValue2)), | 161 make_scoped_ptr(new base::StringValue(kValue2)), |
| 164 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); | 162 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); |
| 165 observer_.VerifyAndResetChangedKey(kUnselectedPref); | 163 observer_.VerifyAndResetChangedKey(kUnselectedPref); |
| 166 } | 164 } |
| 167 | 165 |
| 168 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadNoFileError) { | 166 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadNoFileError) { |
| 169 // PREF_READ_ERROR_NO_FILE for the selected prefs file is silently converted | 167 // PREF_READ_ERROR_NO_FILE for the selected prefs file is silently converted |
| 170 // to PREF_READ_ERROR_NONE. | 168 // to PREF_READ_ERROR_NONE. |
| 171 selected_store_->set_read_error( | 169 selected_store_->set_read_error(PersistentPrefStore::PREF_READ_ERROR_NO_FILE); |
| 172 PersistentPrefStore::PREF_READ_ERROR_NO_FILE); | |
| 173 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, | 170 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, |
| 174 segregated_store_->ReadPrefs()); | 171 segregated_store_->ReadPrefs()); |
| 175 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, | 172 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, |
| 176 segregated_store_->GetReadError()); | 173 segregated_store_->GetReadError()); |
| 177 } | 174 } |
| 178 | 175 |
| 179 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadError) { | 176 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadError) { |
| 180 selected_store_->set_read_error( | 177 selected_store_->set_read_error( |
| 181 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); | 178 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); |
| 182 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, | 179 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, |
| 183 segregated_store_->ReadPrefs()); | 180 segregated_store_->ReadPrefs()); |
| 184 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, | 181 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, |
| 185 segregated_store_->GetReadError()); | 182 segregated_store_->GetReadError()); |
| 186 } | 183 } |
| 187 | 184 |
| 188 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadNoFileErrorAsync) { | 185 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadNoFileErrorAsync) { |
| 189 // PREF_READ_ERROR_NO_FILE for the selected prefs file is silently converted | 186 // PREF_READ_ERROR_NO_FILE for the selected prefs file is silently converted |
| 190 // to PREF_READ_ERROR_NONE. | 187 // to PREF_READ_ERROR_NONE. |
| 191 selected_store_->set_read_error( | 188 selected_store_->set_read_error(PersistentPrefStore::PREF_READ_ERROR_NO_FILE); |
| 192 PersistentPrefStore::PREF_READ_ERROR_NO_FILE); | |
| 193 | 189 |
| 194 default_store_->SetBlockAsyncRead(true); | 190 default_store_->SetBlockAsyncRead(true); |
| 195 | 191 |
| 196 EXPECT_FALSE(read_error_delegate_data_.invoked); | 192 EXPECT_FALSE(read_error_delegate_data_.invoked); |
| 197 | 193 |
| 198 segregated_store_->ReadPrefsAsync(GetReadErrorDelegate().release()); | 194 segregated_store_->ReadPrefsAsync(GetReadErrorDelegate().release()); |
| 199 | 195 |
| 200 EXPECT_FALSE(read_error_delegate_data_.invoked); | 196 EXPECT_FALSE(read_error_delegate_data_.invoked); |
| 201 | 197 |
| 202 default_store_->SetBlockAsyncRead(false); | 198 default_store_->SetBlockAsyncRead(false); |
| 203 | 199 |
| 204 // ReadErrorDelegate is not invoked for ERROR_NONE. | 200 // ReadErrorDelegate is not invoked for ERROR_NONE. |
| 205 EXPECT_FALSE(read_error_delegate_data_.invoked); | 201 EXPECT_FALSE(read_error_delegate_data_.invoked); |
| 206 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, | 202 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, |
| 207 segregated_store_->GetReadError()); | 203 segregated_store_->GetReadError()); |
| 208 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, | 204 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, |
| 209 segregated_store_->GetReadError()); | 205 segregated_store_->GetReadError()); |
| 210 } | 206 } |
| 211 | 207 |
| 212 TEST_F(SegregatedPrefStoreTest, UnselectedPrefReadNoFileError) { | 208 TEST_F(SegregatedPrefStoreTest, UnselectedPrefReadNoFileError) { |
| 213 default_store_->set_read_error( | 209 default_store_->set_read_error(PersistentPrefStore::PREF_READ_ERROR_NO_FILE); |
| 214 PersistentPrefStore::PREF_READ_ERROR_NO_FILE); | |
| 215 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, | 210 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, |
| 216 segregated_store_->ReadPrefs()); | 211 segregated_store_->ReadPrefs()); |
| 217 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, | 212 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, |
| 218 segregated_store_->GetReadError()); | 213 segregated_store_->GetReadError()); |
| 219 } | 214 } |
| 220 | 215 |
| 221 TEST_F(SegregatedPrefStoreTest, UnselectedPrefReadError) { | 216 TEST_F(SegregatedPrefStoreTest, UnselectedPrefReadError) { |
| 222 default_store_->set_read_error( | 217 default_store_->set_read_error( |
| 223 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); | 218 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); |
| 224 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, | 219 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, |
| 225 segregated_store_->ReadPrefs()); | 220 segregated_store_->ReadPrefs()); |
| 226 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, | 221 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED, |
| 227 segregated_store_->GetReadError()); | 222 segregated_store_->GetReadError()); |
| 228 } | 223 } |
| 229 | 224 |
| 230 TEST_F(SegregatedPrefStoreTest, BothPrefReadError) { | 225 TEST_F(SegregatedPrefStoreTest, BothPrefReadError) { |
| 231 default_store_->set_read_error( | 226 default_store_->set_read_error(PersistentPrefStore::PREF_READ_ERROR_NO_FILE); |
| 232 PersistentPrefStore::PREF_READ_ERROR_NO_FILE); | |
| 233 selected_store_->set_read_error( | 227 selected_store_->set_read_error( |
| 234 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); | 228 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); |
| 235 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, | 229 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, |
| 236 segregated_store_->ReadPrefs()); | 230 segregated_store_->ReadPrefs()); |
| 237 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, | 231 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE, |
| 238 segregated_store_->GetReadError()); | 232 segregated_store_->GetReadError()); |
| 239 } | 233 } |
| 240 | 234 |
| 241 TEST_F(SegregatedPrefStoreTest, BothPrefReadErrorAsync) { | 235 TEST_F(SegregatedPrefStoreTest, BothPrefReadErrorAsync) { |
| 242 default_store_->set_read_error( | 236 default_store_->set_read_error(PersistentPrefStore::PREF_READ_ERROR_NO_FILE); |
| 243 PersistentPrefStore::PREF_READ_ERROR_NO_FILE); | |
| 244 selected_store_->set_read_error( | 237 selected_store_->set_read_error( |
| 245 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); | 238 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED); |
| 246 | 239 |
| 247 selected_store_->SetBlockAsyncRead(true); | 240 selected_store_->SetBlockAsyncRead(true); |
| 248 | 241 |
| 249 EXPECT_FALSE(read_error_delegate_data_.invoked); | 242 EXPECT_FALSE(read_error_delegate_data_.invoked); |
| 250 | 243 |
| 251 segregated_store_->ReadPrefsAsync(GetReadErrorDelegate().release()); | 244 segregated_store_->ReadPrefsAsync(GetReadErrorDelegate().release()); |
| 252 | 245 |
| 253 EXPECT_FALSE(read_error_delegate_data_.invoked); | 246 EXPECT_FALSE(read_error_delegate_data_.invoked); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 271 selected_store_->SetBlockAsyncRead(true); | 264 selected_store_->SetBlockAsyncRead(true); |
| 272 default_store_->SetBlockAsyncRead(true); | 265 default_store_->SetBlockAsyncRead(true); |
| 273 EXPECT_FALSE(segregated_store_->IsInitializationComplete()); | 266 EXPECT_FALSE(segregated_store_->IsInitializationComplete()); |
| 274 segregated_store_->ReadPrefsAsync(NULL); | 267 segregated_store_->ReadPrefsAsync(NULL); |
| 275 EXPECT_FALSE(segregated_store_->IsInitializationComplete()); | 268 EXPECT_FALSE(segregated_store_->IsInitializationComplete()); |
| 276 selected_store_->SetBlockAsyncRead(false); | 269 selected_store_->SetBlockAsyncRead(false); |
| 277 EXPECT_FALSE(segregated_store_->IsInitializationComplete()); | 270 EXPECT_FALSE(segregated_store_->IsInitializationComplete()); |
| 278 default_store_->SetBlockAsyncRead(false); | 271 default_store_->SetBlockAsyncRead(false); |
| 279 EXPECT_TRUE(segregated_store_->IsInitializationComplete()); | 272 EXPECT_TRUE(segregated_store_->IsInitializationComplete()); |
| 280 } | 273 } |
| OLD | NEW |