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

Side by Side Diff: chrome/browser/prefs/tracked/segregated_pref_store_unittest.cc

Issue 205813002: Separate storage for protected preferences into Protected Preferences file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pp4_profile_pref_store
Patch Set: Fix copyright. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/prefs/tracked/segregated_pref_store.h"
6
7 #include <set>
8 #include <string>
9
10 #include "base/bind.h"
11 #include "base/callback.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/prefs/persistent_pref_store.h"
15 #include "base/prefs/pref_store_observer_mock.h"
16 #include "base/prefs/testing_pref_store.h"
17 #include "base/values.h"
18 #include "chrome/browser/prefs/tracked/segregated_pref_store.h"
19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 namespace {
23
24 const char kSelectedPref[] = "selected_pref";
25 const char kUnselectedPref[] = "unselected_pref";
26
27 const char kValue1[] = "value1";
28 const char kValue2[] = "value2";
29
30 class MockReadErrorDelegate : public PersistentPrefStore::ReadErrorDelegate {
31 public:
32 struct Data {
33 bool invoked;
34 PersistentPrefStore::PrefReadError read_error;
35 };
36
37 explicit MockReadErrorDelegate(Data* data) : data_(data) {
38 DCHECK(data_);
39 EXPECT_FALSE(data_->invoked);
40 }
41
42 // PersistentPrefStore::ReadErrorDelegate implementation
43 virtual void OnError(PersistentPrefStore::PrefReadError read_error) OVERRIDE {
44 EXPECT_FALSE(data_->invoked);
45 data_->invoked = true;
46 data_->read_error = read_error;
47 }
48
49 private:
50 Data* data_;
51 };
52
53 } // namespace
54
55 class SegregatedPrefStoreTest : public testing::Test {
56 public:
57 SegregatedPrefStoreTest()
58 : initialization_callback_invoked_(false),
59 read_error_delegate_data_(
60 {false, PersistentPrefStore::PREF_READ_ERROR_NONE}),
61 read_error_delegate_(
62 new MockReadErrorDelegate(&read_error_delegate_data_)) {}
63
64 virtual void SetUp() OVERRIDE {
65 selected_store_ = new TestingPrefStore;
66 default_store_ = new TestingPrefStore;
67
68 std::set<std::string> selected_pref_names;
69 selected_pref_names.insert(kSelectedPref);
70
71 segregated_store_ = new SegregatedPrefStore(
72 default_store_,
73 selected_store_,
74 selected_pref_names,
75 base::Bind(&SegregatedPrefStoreTest::InitializationCallback,
76 base::Unretained(this)));
77
78 segregated_store_->AddObserver(&observer_);
79 }
80
81 virtual void TearDown() OVERRIDE {
82 segregated_store_->RemoveObserver(&observer_);
83 }
84
85 protected:
86 scoped_ptr<PersistentPrefStore::ReadErrorDelegate> GetReadErrorDelegate() {
87 EXPECT_TRUE(read_error_delegate_);
88 return read_error_delegate_
89 .PassAs<PersistentPrefStore::ReadErrorDelegate>();
90 }
91
92 PrefStoreObserverMock observer_;
93 bool initialization_callback_invoked_;
94
95 scoped_refptr<TestingPrefStore> default_store_;
96 scoped_refptr<TestingPrefStore> selected_store_;
97 scoped_refptr<SegregatedPrefStore> segregated_store_;
98
99 MockReadErrorDelegate::Data read_error_delegate_data_;
100
101 private:
102 void InitializationCallback() {
103 EXPECT_FALSE(observer_.initialized);
104 EXPECT_FALSE(initialization_callback_invoked_);
105 initialization_callback_invoked_ = true;
106 }
107
108 scoped_ptr<MockReadErrorDelegate> read_error_delegate_;
109 };
110
111 TEST_F(SegregatedPrefStoreTest, StoreValues) {
112 ASSERT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE,
113 segregated_store_->ReadPrefs());
114
115 // Properly stores new values.
116 segregated_store_->SetValue(kSelectedPref, new base::StringValue(kValue1));
117 segregated_store_->SetValue(kUnselectedPref, new base::StringValue(kValue2));
118
119 ASSERT_TRUE(selected_store_->GetValue(kSelectedPref, NULL));
120 ASSERT_FALSE(selected_store_->GetValue(kUnselectedPref, NULL));
121 ASSERT_FALSE(default_store_->GetValue(kSelectedPref, NULL));
122 ASSERT_TRUE(default_store_->GetValue(kUnselectedPref, NULL));
123
124 ASSERT_TRUE(segregated_store_->GetValue(kSelectedPref, NULL));
125 ASSERT_TRUE(segregated_store_->GetValue(kUnselectedPref, NULL));
126
127 ASSERT_FALSE(selected_store_->committed());
128 ASSERT_FALSE(default_store_->committed());
129
130 segregated_store_->CommitPendingWrite();
131
132 ASSERT_TRUE(selected_store_->committed());
133 ASSERT_TRUE(default_store_->committed());
134 }
135
136 TEST_F(SegregatedPrefStoreTest, ReadValues) {
137 selected_store_->SetValue(kSelectedPref, new base::StringValue(kValue1));
138 default_store_->SetValue(kUnselectedPref,
139 new base::StringValue(kValue2));
140
141 // Works properly with values that are already there.
142 ASSERT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE,
143 segregated_store_->ReadPrefs());
144 ASSERT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE,
145 segregated_store_->GetReadError());
146
147 ASSERT_TRUE(selected_store_->GetValue(kSelectedPref, NULL));
148 ASSERT_FALSE(selected_store_->GetValue(kUnselectedPref, NULL));
149 ASSERT_FALSE(default_store_->GetValue(kSelectedPref, NULL));
150 ASSERT_TRUE(default_store_->GetValue(kUnselectedPref, NULL));
151
152 ASSERT_TRUE(segregated_store_->GetValue(kSelectedPref, NULL));
153 ASSERT_TRUE(segregated_store_->GetValue(kUnselectedPref, NULL));
154 }
155
156 TEST_F(SegregatedPrefStoreTest, PreviouslySelected) {
157 selected_store_->SetValue(kUnselectedPref, new base::StringValue(kValue1));
158 segregated_store_->ReadPrefs();
159 // It will read from the selected store.
160 ASSERT_TRUE(segregated_store_->GetValue(kUnselectedPref, NULL));
161 ASSERT_TRUE(selected_store_->GetValue(kUnselectedPref, NULL));
162 ASSERT_FALSE(default_store_->GetValue(kUnselectedPref, NULL));
163
164 // But when we update the value...
165 segregated_store_->SetValue(kUnselectedPref, new base::StringValue(kValue2));
166 // ...it will be migrated.
167 ASSERT_TRUE(segregated_store_->GetValue(kUnselectedPref, NULL));
168 ASSERT_FALSE(selected_store_->GetValue(kUnselectedPref, NULL));
169 ASSERT_TRUE(default_store_->GetValue(kUnselectedPref, NULL));
170 }
171
172 TEST_F(SegregatedPrefStoreTest, Observer) {
173 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE,
174 segregated_store_->ReadPrefs());
175 EXPECT_TRUE(initialization_callback_invoked_);
176 EXPECT_TRUE(observer_.initialized);
177 EXPECT_TRUE(observer_.initialization_success);
178 EXPECT_TRUE(observer_.changed_keys.empty());
179 segregated_store_->SetValue(kSelectedPref, new base::StringValue(kValue1));
180 EXPECT_THAT(observer_.changed_keys, testing::ElementsAre(kSelectedPref));
181 observer_.changed_keys.clear();
182 segregated_store_->SetValue(kUnselectedPref, new base::StringValue(kValue2));
183 EXPECT_THAT(observer_.changed_keys, testing::ElementsAre(kUnselectedPref));
184 }
185
186 TEST_F(SegregatedPrefStoreTest, SelectedPrefReadError) {
187 selected_store_->set_read_error(
188 PersistentPrefStore::PREF_READ_ERROR_NO_FILE);
189 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
190 segregated_store_->ReadPrefs());
191 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
192 segregated_store_->GetReadError());
193 }
194
195 TEST_F(SegregatedPrefStoreTest, UnselectedPrefReadError) {
196 default_store_->set_read_error(
197 PersistentPrefStore::PREF_READ_ERROR_NO_FILE);
198 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
199 segregated_store_->ReadPrefs());
200 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
201 segregated_store_->GetReadError());
202 }
203
204 TEST_F(SegregatedPrefStoreTest, BothPrefReadError) {
205 default_store_->set_read_error(
206 PersistentPrefStore::PREF_READ_ERROR_NO_FILE);
207 selected_store_->set_read_error(
208 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED);
209 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
210 segregated_store_->ReadPrefs());
211 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
212 segregated_store_->GetReadError());
213 }
214
215 TEST_F(SegregatedPrefStoreTest, BothPrefReadErrorAsync) {
216 default_store_->set_read_error(
217 PersistentPrefStore::PREF_READ_ERROR_NO_FILE);
218 selected_store_->set_read_error(
219 PersistentPrefStore::PREF_READ_ERROR_ACCESS_DENIED);
220
221 selected_store_->SetBlockAsyncRead(true);
222
223 EXPECT_FALSE(read_error_delegate_data_.invoked);
224
225 segregated_store_->ReadPrefsAsync(GetReadErrorDelegate().release());
226
227 EXPECT_FALSE(read_error_delegate_data_.invoked);
228
229 selected_store_->SetBlockAsyncRead(false);
230
231 EXPECT_TRUE(read_error_delegate_data_.invoked);
232 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
233 segregated_store_->GetReadError());
234 EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NO_FILE,
235 segregated_store_->GetReadError());
236 }
237
238 TEST_F(SegregatedPrefStoreTest, IsInitializationComplete) {
239 EXPECT_FALSE(segregated_store_->IsInitializationComplete());
240 segregated_store_->ReadPrefs();
241 EXPECT_TRUE(segregated_store_->IsInitializationComplete());
242 }
243
244 TEST_F(SegregatedPrefStoreTest, IsInitializationCompleteAsync) {
245 selected_store_->SetBlockAsyncRead(true);
246 default_store_->SetBlockAsyncRead(true);
247 EXPECT_FALSE(segregated_store_->IsInitializationComplete());
248 segregated_store_->ReadPrefsAsync(NULL);
249 EXPECT_FALSE(segregated_store_->IsInitializationComplete());
250 selected_store_->SetBlockAsyncRead(false);
251 EXPECT_FALSE(segregated_store_->IsInitializationComplete());
252 default_store_->SetBlockAsyncRead(false);
253 EXPECT_TRUE(segregated_store_->IsInitializationComplete());
254 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698