OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 "components/sync/driver/sync_prefs.h" | |
6 | |
7 #include "base/command_line.h" | |
8 #include "base/message_loop/message_loop.h" | |
9 #include "components/pref_registry/testing_pref_service_syncable.h" | |
10 #include "components/prefs/pref_notifier_impl.h" | |
11 #include "components/prefs/pref_value_store.h" | |
12 #include "components/prefs/testing_pref_service.h" | |
13 #include "components/sync/driver/pref_names.h" | |
14 #include "testing/gmock/include/gmock/gmock.h" | |
15 #include "testing/gtest/include/gtest/gtest.h" | |
16 | |
17 namespace syncer { | |
18 | |
19 namespace { | |
20 | |
21 using ::testing::InSequence; | |
22 using ::testing::StrictMock; | |
23 | |
24 class SyncPrefsTest : public testing::Test { | |
25 protected: | |
26 void SetUp() override { | |
27 SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); | |
28 } | |
29 | |
30 user_prefs::TestingPrefServiceSyncable pref_service_; | |
31 | |
32 private: | |
33 base::MessageLoop loop_; | |
34 }; | |
35 | |
36 TEST_F(SyncPrefsTest, Basic) { | |
37 SyncPrefs sync_prefs(&pref_service_); | |
38 | |
39 EXPECT_FALSE(sync_prefs.IsFirstSetupComplete()); | |
40 sync_prefs.SetFirstSetupComplete(); | |
41 EXPECT_TRUE(sync_prefs.IsFirstSetupComplete()); | |
42 | |
43 EXPECT_TRUE(sync_prefs.IsSyncRequested()); | |
44 sync_prefs.SetSyncRequested(false); | |
45 EXPECT_FALSE(sync_prefs.IsSyncRequested()); | |
46 sync_prefs.SetSyncRequested(true); | |
47 EXPECT_TRUE(sync_prefs.IsSyncRequested()); | |
48 | |
49 EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime()); | |
50 const base::Time& now = base::Time::Now(); | |
51 sync_prefs.SetLastSyncedTime(now); | |
52 EXPECT_EQ(now, sync_prefs.GetLastSyncedTime()); | |
53 | |
54 EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); | |
55 sync_prefs.SetKeepEverythingSynced(false); | |
56 EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); | |
57 sync_prefs.SetKeepEverythingSynced(true); | |
58 EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); | |
59 | |
60 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); | |
61 sync_prefs.SetEncryptionBootstrapToken("token"); | |
62 EXPECT_EQ("token", sync_prefs.GetEncryptionBootstrapToken()); | |
63 } | |
64 | |
65 TEST_F(SyncPrefsTest, DefaultTypes) { | |
66 SyncPrefs sync_prefs(&pref_service_); | |
67 sync_prefs.SetKeepEverythingSynced(false); | |
68 | |
69 // Only bookmarks and device info are enabled by default. | |
70 ModelTypeSet expected(BOOKMARKS, DEVICE_INFO); | |
71 ModelTypeSet preferred_types = sync_prefs.GetPreferredDataTypes(UserTypes()); | |
72 EXPECT_EQ(expected, preferred_types); | |
73 | |
74 // Simulate an upgrade to delete directives + proxy tabs support. None of the | |
75 // new types or their pref group types should be registering, ensuring they | |
76 // don't have pref values. | |
77 ModelTypeSet registered_types = UserTypes(); | |
78 registered_types.Remove(PROXY_TABS); | |
79 registered_types.Remove(TYPED_URLS); | |
80 registered_types.Remove(SESSIONS); | |
81 registered_types.Remove(HISTORY_DELETE_DIRECTIVES); | |
82 | |
83 // Enable all other types. | |
84 sync_prefs.SetPreferredDataTypes(registered_types, registered_types); | |
85 | |
86 // Manually enable typed urls (to simulate the old world). | |
87 pref_service_.SetBoolean(prefs::kSyncTypedUrls, true); | |
88 | |
89 // Proxy tabs should not be enabled (since sessions wasn't), but history | |
90 // delete directives should (since typed urls was). | |
91 preferred_types = sync_prefs.GetPreferredDataTypes(UserTypes()); | |
92 EXPECT_FALSE(preferred_types.Has(PROXY_TABS)); | |
93 EXPECT_TRUE(preferred_types.Has(HISTORY_DELETE_DIRECTIVES)); | |
94 | |
95 // Now manually enable sessions, which should result in proxy tabs also being | |
96 // enabled. Also, manually disable typed urls, which should mean that history | |
97 // delete directives are not enabled. | |
98 pref_service_.SetBoolean(prefs::kSyncTypedUrls, false); | |
99 pref_service_.SetBoolean(prefs::kSyncSessions, true); | |
100 preferred_types = sync_prefs.GetPreferredDataTypes(UserTypes()); | |
101 EXPECT_TRUE(preferred_types.Has(PROXY_TABS)); | |
102 EXPECT_FALSE(preferred_types.Has(HISTORY_DELETE_DIRECTIVES)); | |
103 } | |
104 | |
105 TEST_F(SyncPrefsTest, PreferredTypesKeepEverythingSynced) { | |
106 SyncPrefs sync_prefs(&pref_service_); | |
107 | |
108 EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); | |
109 | |
110 const ModelTypeSet user_types = UserTypes(); | |
111 EXPECT_EQ(user_types, sync_prefs.GetPreferredDataTypes(user_types)); | |
112 const ModelTypeSet user_visible_types = UserSelectableTypes(); | |
113 for (ModelTypeSet::Iterator it = user_visible_types.First(); it.Good(); | |
114 it.Inc()) { | |
115 ModelTypeSet preferred_types; | |
116 preferred_types.Put(it.Get()); | |
117 sync_prefs.SetPreferredDataTypes(user_types, preferred_types); | |
118 EXPECT_EQ(user_types, sync_prefs.GetPreferredDataTypes(user_types)); | |
119 } | |
120 } | |
121 | |
122 TEST_F(SyncPrefsTest, PreferredTypesNotKeepEverythingSynced) { | |
123 SyncPrefs sync_prefs(&pref_service_); | |
124 | |
125 sync_prefs.SetKeepEverythingSynced(false); | |
126 | |
127 const ModelTypeSet user_types = UserTypes(); | |
128 EXPECT_NE(user_types, sync_prefs.GetPreferredDataTypes(user_types)); | |
129 const ModelTypeSet user_visible_types = UserSelectableTypes(); | |
130 for (ModelTypeSet::Iterator it = user_visible_types.First(); it.Good(); | |
131 it.Inc()) { | |
132 ModelTypeSet preferred_types; | |
133 preferred_types.Put(it.Get()); | |
134 ModelTypeSet expected_preferred_types(preferred_types); | |
135 if (it.Get() == AUTOFILL) { | |
136 expected_preferred_types.Put(AUTOFILL_PROFILE); | |
137 expected_preferred_types.Put(AUTOFILL_WALLET_DATA); | |
138 expected_preferred_types.Put(AUTOFILL_WALLET_METADATA); | |
139 } | |
140 if (it.Get() == PREFERENCES) { | |
141 expected_preferred_types.Put(DICTIONARY); | |
142 expected_preferred_types.Put(PRIORITY_PREFERENCES); | |
143 expected_preferred_types.Put(SEARCH_ENGINES); | |
144 } | |
145 if (it.Get() == APPS) { | |
146 expected_preferred_types.Put(APP_LIST); | |
147 expected_preferred_types.Put(APP_NOTIFICATIONS); | |
148 expected_preferred_types.Put(APP_SETTINGS); | |
149 expected_preferred_types.Put(ARC_PACKAGE); | |
150 expected_preferred_types.Put(READING_LIST); | |
151 } | |
152 if (it.Get() == EXTENSIONS) { | |
153 expected_preferred_types.Put(EXTENSION_SETTINGS); | |
154 } | |
155 if (it.Get() == TYPED_URLS) { | |
156 expected_preferred_types.Put(HISTORY_DELETE_DIRECTIVES); | |
157 expected_preferred_types.Put(SESSIONS); | |
158 expected_preferred_types.Put(FAVICON_IMAGES); | |
159 expected_preferred_types.Put(FAVICON_TRACKING); | |
160 } | |
161 if (it.Get() == PROXY_TABS) { | |
162 expected_preferred_types.Put(SESSIONS); | |
163 expected_preferred_types.Put(FAVICON_IMAGES); | |
164 expected_preferred_types.Put(FAVICON_TRACKING); | |
165 } | |
166 | |
167 // Device info is always preferred. | |
168 expected_preferred_types.Put(DEVICE_INFO); | |
169 | |
170 sync_prefs.SetPreferredDataTypes(user_types, preferred_types); | |
171 EXPECT_EQ(expected_preferred_types, | |
172 sync_prefs.GetPreferredDataTypes(user_types)); | |
173 } | |
174 } | |
175 | |
176 class MockSyncPrefObserver : public SyncPrefObserver { | |
177 public: | |
178 MOCK_METHOD1(OnSyncManagedPrefChange, void(bool)); | |
179 }; | |
180 | |
181 TEST_F(SyncPrefsTest, ObservedPrefs) { | |
182 SyncPrefs sync_prefs(&pref_service_); | |
183 | |
184 StrictMock<MockSyncPrefObserver> mock_sync_pref_observer; | |
185 InSequence dummy; | |
186 EXPECT_CALL(mock_sync_pref_observer, OnSyncManagedPrefChange(true)); | |
187 EXPECT_CALL(mock_sync_pref_observer, OnSyncManagedPrefChange(false)); | |
188 | |
189 EXPECT_FALSE(sync_prefs.IsManaged()); | |
190 | |
191 sync_prefs.AddSyncPrefObserver(&mock_sync_pref_observer); | |
192 | |
193 sync_prefs.SetManagedForTest(true); | |
194 EXPECT_TRUE(sync_prefs.IsManaged()); | |
195 sync_prefs.SetManagedForTest(false); | |
196 EXPECT_FALSE(sync_prefs.IsManaged()); | |
197 | |
198 sync_prefs.RemoveSyncPrefObserver(&mock_sync_pref_observer); | |
199 } | |
200 | |
201 TEST_F(SyncPrefsTest, ClearPreferences) { | |
202 SyncPrefs sync_prefs(&pref_service_); | |
203 | |
204 EXPECT_FALSE(sync_prefs.IsFirstSetupComplete()); | |
205 EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime()); | |
206 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); | |
207 | |
208 sync_prefs.SetFirstSetupComplete(); | |
209 sync_prefs.SetLastSyncedTime(base::Time::Now()); | |
210 sync_prefs.SetEncryptionBootstrapToken("token"); | |
211 | |
212 EXPECT_TRUE(sync_prefs.IsFirstSetupComplete()); | |
213 EXPECT_NE(base::Time(), sync_prefs.GetLastSyncedTime()); | |
214 EXPECT_EQ("token", sync_prefs.GetEncryptionBootstrapToken()); | |
215 | |
216 sync_prefs.ClearPreferences(); | |
217 | |
218 EXPECT_FALSE(sync_prefs.IsFirstSetupComplete()); | |
219 EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime()); | |
220 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); | |
221 } | |
222 | |
223 // Device info should always be enabled. | |
224 TEST_F(SyncPrefsTest, DeviceInfo) { | |
225 SyncPrefs sync_prefs(&pref_service_); | |
226 EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(UserTypes()).Has(DEVICE_INFO)); | |
227 sync_prefs.SetKeepEverythingSynced(true); | |
228 EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(UserTypes()).Has(DEVICE_INFO)); | |
229 sync_prefs.SetKeepEverythingSynced(false); | |
230 EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(UserTypes()).Has(DEVICE_INFO)); | |
231 } | |
232 | |
233 // Verify that invalidation versions are persisted and loaded correctly. | |
234 TEST_F(SyncPrefsTest, InvalidationVersions) { | |
235 std::map<ModelType, int64_t> versions; | |
236 versions[BOOKMARKS] = 10; | |
237 versions[SESSIONS] = 20; | |
238 versions[PREFERENCES] = 30; | |
239 | |
240 SyncPrefs sync_prefs(&pref_service_); | |
241 sync_prefs.UpdateInvalidationVersions(versions); | |
242 | |
243 std::map<ModelType, int64_t> versions2; | |
244 sync_prefs.GetInvalidationVersions(&versions2); | |
245 | |
246 EXPECT_EQ(versions.size(), versions2.size()); | |
247 for (auto map_iter : versions2) { | |
248 EXPECT_EQ(versions[map_iter.first], map_iter.second); | |
249 } | |
250 } | |
251 | |
252 } // namespace | |
253 | |
254 } // namespace syncer | |
OLD | NEW |