- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / sync_prefs_unittest.cc
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 "chrome/browser/sync/sync_prefs.h"
6
7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/time/time.h"
10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/pref_names.h"
12 #include "chrome/test/base/testing_pref_service_syncable.h"
13 #include "sync/internal_api/public/base/model_type.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace browser_sync {
18
19 namespace {
20
21 using ::testing::InSequence;
22 using ::testing::StrictMock;
23
24 class SyncPrefsTest : public testing::Test {
25  protected:
26   virtual void SetUp() OVERRIDE {
27     SyncPrefs::RegisterProfilePrefs(pref_service_.registry());
28   }
29
30   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.HasSyncSetupCompleted());
40   sync_prefs.SetSyncSetupCompleted();
41   EXPECT_TRUE(sync_prefs.HasSyncSetupCompleted());
42
43   EXPECT_FALSE(sync_prefs.IsStartSuppressed());
44   sync_prefs.SetStartSuppressed(true);
45   EXPECT_TRUE(sync_prefs.IsStartSuppressed());
46   sync_prefs.SetStartSuppressed(false);
47   EXPECT_FALSE(sync_prefs.IsStartSuppressed());
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 are enabled by default.
70   syncer::ModelTypeSet preferred_types = sync_prefs.GetPreferredDataTypes(
71       syncer::UserTypes());
72   EXPECT_TRUE(preferred_types.Equals(syncer::ModelTypeSet(syncer::BOOKMARKS)));
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   syncer::ModelTypeSet registered_types = syncer::UserTypes();
78   registered_types.Remove(syncer::PROXY_TABS);
79   registered_types.Remove(syncer::TYPED_URLS);
80   registered_types.Remove(syncer::SESSIONS);
81   registered_types.Remove(syncer::HISTORY_DELETE_DIRECTIVES);
82
83   // Enable all other types.
84   sync_prefs.SetPreferredDataTypes(registered_types,
85                                    registered_types);
86
87   // Manually enable typed urls (to simulate the old world).
88   pref_service_.SetBoolean(prefs::kSyncTypedUrls, true);
89
90   // Proxy tabs should not be enabled (since sessions wasn't), but history
91   // delete directives should (since typed urls was).
92   preferred_types =
93       sync_prefs.GetPreferredDataTypes(syncer::UserTypes());
94   EXPECT_FALSE(preferred_types.Has(syncer::PROXY_TABS));
95   EXPECT_TRUE(preferred_types.Has(syncer::HISTORY_DELETE_DIRECTIVES));
96
97   // Now manually enable sessions, which should result in proxy tabs also being
98   // enabled. Also, manually disable typed urls, which should mean that history
99   // delete directives are not enabled.
100   pref_service_.SetBoolean(prefs::kSyncTypedUrls, false);
101   pref_service_.SetBoolean(prefs::kSyncSessions, true);
102   preferred_types =
103       sync_prefs.GetPreferredDataTypes(syncer::UserTypes());
104   EXPECT_TRUE(preferred_types.Has(syncer::PROXY_TABS));
105   EXPECT_FALSE(preferred_types.Has(syncer::HISTORY_DELETE_DIRECTIVES));
106 }
107
108 TEST_F(SyncPrefsTest, PreferredTypesKeepEverythingSynced) {
109   SyncPrefs sync_prefs(&pref_service_);
110
111   EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced());
112
113   const syncer::ModelTypeSet user_types = syncer::UserTypes();
114   EXPECT_TRUE(user_types.Equals(
115       sync_prefs.GetPreferredDataTypes(user_types)));
116   const syncer::ModelTypeSet user_visible_types = syncer::UserSelectableTypes();
117   for (syncer::ModelTypeSet::Iterator it = user_visible_types.First();
118        it.Good(); it.Inc()) {
119     syncer::ModelTypeSet preferred_types;
120     preferred_types.Put(it.Get());
121     sync_prefs.SetPreferredDataTypes(user_types, preferred_types);
122     EXPECT_TRUE(user_types.Equals(
123         sync_prefs.GetPreferredDataTypes(user_types)));
124   }
125 }
126
127 TEST_F(SyncPrefsTest, PreferredTypesNotKeepEverythingSynced) {
128   SyncPrefs sync_prefs(&pref_service_);
129
130   sync_prefs.SetKeepEverythingSynced(false);
131
132   const syncer::ModelTypeSet user_types = syncer::UserTypes();
133   EXPECT_FALSE(user_types.Equals(
134       sync_prefs.GetPreferredDataTypes(user_types)));
135   const syncer::ModelTypeSet user_visible_types = syncer::UserSelectableTypes();
136   for (syncer::ModelTypeSet::Iterator it = user_visible_types.First();
137        it.Good(); it.Inc()) {
138     syncer::ModelTypeSet preferred_types;
139     preferred_types.Put(it.Get());
140     syncer::ModelTypeSet expected_preferred_types(preferred_types);
141     if (it.Get() == syncer::AUTOFILL) {
142       expected_preferred_types.Put(syncer::AUTOFILL_PROFILE);
143     }
144     if (it.Get() == syncer::PREFERENCES) {
145       expected_preferred_types.Put(syncer::DICTIONARY);
146       expected_preferred_types.Put(syncer::PRIORITY_PREFERENCES);
147       expected_preferred_types.Put(syncer::SEARCH_ENGINES);
148     }
149     if (it.Get() == syncer::APPS) {
150       expected_preferred_types.Put(syncer::APP_NOTIFICATIONS);
151       expected_preferred_types.Put(syncer::APP_SETTINGS);
152     }
153     if (it.Get() == syncer::EXTENSIONS) {
154       expected_preferred_types.Put(syncer::EXTENSION_SETTINGS);
155     }
156     if (it.Get() == syncer::TYPED_URLS) {
157       expected_preferred_types.Put(syncer::HISTORY_DELETE_DIRECTIVES);
158       expected_preferred_types.Put(syncer::SESSIONS);
159       expected_preferred_types.Put(syncer::FAVICON_IMAGES);
160       expected_preferred_types.Put(syncer::FAVICON_TRACKING);
161     }
162     if (it.Get() == syncer::PROXY_TABS) {
163       expected_preferred_types.Put(syncer::SESSIONS);
164       expected_preferred_types.Put(syncer::FAVICON_IMAGES);
165       expected_preferred_types.Put(syncer::FAVICON_TRACKING);
166     }
167     sync_prefs.SetPreferredDataTypes(user_types, preferred_types);
168     EXPECT_TRUE(expected_preferred_types.Equals(
169         sync_prefs.GetPreferredDataTypes(user_types)));
170   }
171 }
172
173 class MockSyncPrefObserver : public SyncPrefObserver {
174  public:
175   MOCK_METHOD1(OnSyncManagedPrefChange, void(bool));
176 };
177
178 TEST_F(SyncPrefsTest, ObservedPrefs) {
179   SyncPrefs sync_prefs(&pref_service_);
180
181   StrictMock<MockSyncPrefObserver> mock_sync_pref_observer;
182   InSequence dummy;
183   EXPECT_CALL(mock_sync_pref_observer, OnSyncManagedPrefChange(true));
184   EXPECT_CALL(mock_sync_pref_observer, OnSyncManagedPrefChange(false));
185
186   EXPECT_FALSE(sync_prefs.IsManaged());
187
188   sync_prefs.AddSyncPrefObserver(&mock_sync_pref_observer);
189
190   sync_prefs.SetManagedForTest(true);
191   EXPECT_TRUE(sync_prefs.IsManaged());
192   sync_prefs.SetManagedForTest(false);
193   EXPECT_FALSE(sync_prefs.IsManaged());
194
195   sync_prefs.RemoveSyncPrefObserver(&mock_sync_pref_observer);
196 }
197
198 TEST_F(SyncPrefsTest, AcknowledgeSyncedTypes) {
199   SyncPrefs sync_prefs(&pref_service_);
200
201   syncer::ModelTypeSet expected_acknowledge_synced_types =
202       sync_prefs.GetAcknowledgeSyncedTypesForTest();
203   for (int i = syncer::EXTENSION_SETTINGS; i < syncer::MODEL_TYPE_COUNT; ++i) {
204     const syncer::ModelType type = syncer::ModelTypeFromInt(i);
205     syncer::ModelTypeSet acknowledge_synced_types(type);
206     expected_acknowledge_synced_types.Put(type);
207     sync_prefs.AcknowledgeSyncedTypes(acknowledge_synced_types);
208     EXPECT_TRUE(expected_acknowledge_synced_types.Equals(
209         sync_prefs.GetAcknowledgeSyncedTypesForTest()));
210   }
211 }
212
213 TEST_F(SyncPrefsTest, ClearPreferences) {
214   SyncPrefs sync_prefs(&pref_service_);
215
216   EXPECT_FALSE(sync_prefs.HasSyncSetupCompleted());
217   EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime());
218   EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty());
219
220   sync_prefs.SetSyncSetupCompleted();
221   sync_prefs.SetLastSyncedTime(base::Time::Now());
222   sync_prefs.SetEncryptionBootstrapToken("token");
223
224   EXPECT_TRUE(sync_prefs.HasSyncSetupCompleted());
225   EXPECT_NE(base::Time(), sync_prefs.GetLastSyncedTime());
226   EXPECT_EQ("token", sync_prefs.GetEncryptionBootstrapToken());
227
228   sync_prefs.ClearPreferences();
229
230   EXPECT_FALSE(sync_prefs.HasSyncSetupCompleted());
231   EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime());
232   EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty());
233 }
234
235 TEST_F(SyncPrefsTest, NullPrefService) {
236   SyncPrefs sync_prefs(NULL);
237
238   EXPECT_FALSE(sync_prefs.HasSyncSetupCompleted());
239   EXPECT_FALSE(sync_prefs.IsStartSuppressed());
240   EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime());
241   EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced());
242   const syncer::ModelTypeSet user_types = syncer::UserTypes();
243   EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(user_types).Empty());
244   EXPECT_FALSE(sync_prefs.IsManaged());
245   EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty());
246 }
247
248 }  // namespace
249
250 }  // namespace browser_sync