| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/sync/sync_prefs.h" | 5 #include "components/sync_driver/sync_prefs.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/prefs/pref_notifier_impl.h" |
| 10 #include "base/prefs/pref_value_store.h" |
| 11 #include "base/prefs/testing_pref_service.h" |
| 9 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 10 #include "chrome/common/chrome_switches.h" | 13 #include "components/sync_driver/pref_names.h" |
| 11 #include "chrome/common/pref_names.h" | 14 #include "components/user_prefs/pref_registry_syncable.h" |
| 12 #include "chrome/test/base/testing_pref_service_syncable.h" | |
| 13 #include "sync/internal_api/public/base/model_type.h" | 15 #include "sync/internal_api/public/base/model_type.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 18 |
| 17 namespace browser_sync { | 19 template <> |
| 20 TestingPrefServiceBase<PrefService, user_prefs::PrefRegistrySyncable>:: |
| 21 TestingPrefServiceBase(TestingPrefStore* managed_prefs, |
| 22 TestingPrefStore* user_prefs, |
| 23 TestingPrefStore* recommended_prefs, |
| 24 user_prefs::PrefRegistrySyncable* pref_registry, |
| 25 PrefNotifierImpl* pref_notifier) |
| 26 : PrefService( |
| 27 pref_notifier, |
| 28 new PrefValueStore(managed_prefs, |
| 29 NULL, // supervised_user_prefs |
| 30 NULL, // extension_prefs |
| 31 NULL, // command_line_prefs |
| 32 user_prefs, |
| 33 recommended_prefs, |
| 34 pref_registry->defaults().get(), |
| 35 pref_notifier), |
| 36 user_prefs, |
| 37 pref_registry, |
| 38 base::Bind(&TestingPrefServiceBase< |
| 39 PrefService, |
| 40 user_prefs::PrefRegistrySyncable>::HandleReadError), |
| 41 false), |
| 42 managed_prefs_(managed_prefs), |
| 43 user_prefs_(user_prefs), |
| 44 recommended_prefs_(recommended_prefs) {} |
| 45 |
| 46 namespace sync_driver { |
| 18 | 47 |
| 19 namespace { | 48 namespace { |
| 20 | 49 |
| 21 using ::testing::InSequence; | 50 using ::testing::InSequence; |
| 22 using ::testing::StrictMock; | 51 using ::testing::StrictMock; |
| 23 | 52 |
| 53 // Test version of PrefServiceSyncable. |
| 54 class TestingPrefServiceSyncable |
| 55 : public TestingPrefServiceBase<PrefService, |
| 56 user_prefs::PrefRegistrySyncable> { |
| 57 public: |
| 58 TestingPrefServiceSyncable(); |
| 59 virtual ~TestingPrefServiceSyncable(); |
| 60 |
| 61 user_prefs::PrefRegistrySyncable* registry(); |
| 62 |
| 63 private: |
| 64 DISALLOW_COPY_AND_ASSIGN(TestingPrefServiceSyncable); |
| 65 }; |
| 66 |
| 67 TestingPrefServiceSyncable::TestingPrefServiceSyncable() |
| 68 : TestingPrefServiceBase<PrefService, user_prefs::PrefRegistrySyncable>( |
| 69 new TestingPrefStore(), |
| 70 new TestingPrefStore(), |
| 71 new TestingPrefStore(), |
| 72 new user_prefs::PrefRegistrySyncable(), |
| 73 new PrefNotifierImpl()) {} |
| 74 |
| 75 TestingPrefServiceSyncable::~TestingPrefServiceSyncable() {} |
| 76 |
| 77 user_prefs::PrefRegistrySyncable* TestingPrefServiceSyncable::registry() { |
| 78 return static_cast<user_prefs::PrefRegistrySyncable*>( |
| 79 DeprecatedGetPrefRegistry()); |
| 80 } |
| 81 |
| 24 class SyncPrefsTest : public testing::Test { | 82 class SyncPrefsTest : public testing::Test { |
| 25 protected: | 83 protected: |
| 26 virtual void SetUp() OVERRIDE { | 84 virtual void SetUp() OVERRIDE { |
| 27 SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); | 85 SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); |
| 28 } | 86 } |
| 29 | 87 |
| 30 TestingPrefServiceSyncable pref_service_; | 88 TestingPrefServiceSyncable pref_service_; |
| 31 | 89 |
| 32 private: | 90 private: |
| 33 base::MessageLoop loop_; | 91 base::MessageLoop loop_; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 60 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); | 118 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); |
| 61 sync_prefs.SetEncryptionBootstrapToken("token"); | 119 sync_prefs.SetEncryptionBootstrapToken("token"); |
| 62 EXPECT_EQ("token", sync_prefs.GetEncryptionBootstrapToken()); | 120 EXPECT_EQ("token", sync_prefs.GetEncryptionBootstrapToken()); |
| 63 } | 121 } |
| 64 | 122 |
| 65 TEST_F(SyncPrefsTest, DefaultTypes) { | 123 TEST_F(SyncPrefsTest, DefaultTypes) { |
| 66 SyncPrefs sync_prefs(&pref_service_); | 124 SyncPrefs sync_prefs(&pref_service_); |
| 67 sync_prefs.SetKeepEverythingSynced(false); | 125 sync_prefs.SetKeepEverythingSynced(false); |
| 68 | 126 |
| 69 // Only bookmarks are enabled by default. | 127 // Only bookmarks are enabled by default. |
| 70 syncer::ModelTypeSet preferred_types = sync_prefs.GetPreferredDataTypes( | 128 syncer::ModelTypeSet preferred_types = |
| 71 syncer::UserTypes()); | 129 sync_prefs.GetPreferredDataTypes(syncer::UserTypes()); |
| 72 EXPECT_TRUE(preferred_types.Equals(syncer::ModelTypeSet(syncer::BOOKMARKS))); | 130 EXPECT_TRUE(preferred_types.Equals(syncer::ModelTypeSet(syncer::BOOKMARKS))); |
| 73 | 131 |
| 74 // Simulate an upgrade to delete directives + proxy tabs support. None of the | 132 // 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 | 133 // new types or their pref group types should be registering, ensuring they |
| 76 // don't have pref values. | 134 // don't have pref values. |
| 77 syncer::ModelTypeSet registered_types = syncer::UserTypes(); | 135 syncer::ModelTypeSet registered_types = syncer::UserTypes(); |
| 78 registered_types.Remove(syncer::PROXY_TABS); | 136 registered_types.Remove(syncer::PROXY_TABS); |
| 79 registered_types.Remove(syncer::TYPED_URLS); | 137 registered_types.Remove(syncer::TYPED_URLS); |
| 80 registered_types.Remove(syncer::SESSIONS); | 138 registered_types.Remove(syncer::SESSIONS); |
| 81 registered_types.Remove(syncer::HISTORY_DELETE_DIRECTIVES); | 139 registered_types.Remove(syncer::HISTORY_DELETE_DIRECTIVES); |
| 82 | 140 |
| 83 // Enable all other types. | 141 // Enable all other types. |
| 84 sync_prefs.SetPreferredDataTypes(registered_types, | 142 sync_prefs.SetPreferredDataTypes(registered_types, registered_types); |
| 85 registered_types); | |
| 86 | 143 |
| 87 // Manually enable typed urls (to simulate the old world). | 144 // Manually enable typed urls (to simulate the old world). |
| 88 pref_service_.SetBoolean(prefs::kSyncTypedUrls, true); | 145 pref_service_.SetBoolean(prefs::kSyncTypedUrls, true); |
| 89 | 146 |
| 90 // Proxy tabs should not be enabled (since sessions wasn't), but history | 147 // Proxy tabs should not be enabled (since sessions wasn't), but history |
| 91 // delete directives should (since typed urls was). | 148 // delete directives should (since typed urls was). |
| 92 preferred_types = | 149 preferred_types = sync_prefs.GetPreferredDataTypes(syncer::UserTypes()); |
| 93 sync_prefs.GetPreferredDataTypes(syncer::UserTypes()); | |
| 94 EXPECT_FALSE(preferred_types.Has(syncer::PROXY_TABS)); | 150 EXPECT_FALSE(preferred_types.Has(syncer::PROXY_TABS)); |
| 95 EXPECT_TRUE(preferred_types.Has(syncer::HISTORY_DELETE_DIRECTIVES)); | 151 EXPECT_TRUE(preferred_types.Has(syncer::HISTORY_DELETE_DIRECTIVES)); |
| 96 | 152 |
| 97 // Now manually enable sessions, which should result in proxy tabs also being | 153 // Now manually enable sessions, which should result in proxy tabs also being |
| 98 // enabled. Also, manually disable typed urls, which should mean that history | 154 // enabled. Also, manually disable typed urls, which should mean that history |
| 99 // delete directives are not enabled. | 155 // delete directives are not enabled. |
| 100 pref_service_.SetBoolean(prefs::kSyncTypedUrls, false); | 156 pref_service_.SetBoolean(prefs::kSyncTypedUrls, false); |
| 101 pref_service_.SetBoolean(prefs::kSyncSessions, true); | 157 pref_service_.SetBoolean(prefs::kSyncSessions, true); |
| 102 preferred_types = | 158 preferred_types = sync_prefs.GetPreferredDataTypes(syncer::UserTypes()); |
| 103 sync_prefs.GetPreferredDataTypes(syncer::UserTypes()); | |
| 104 EXPECT_TRUE(preferred_types.Has(syncer::PROXY_TABS)); | 159 EXPECT_TRUE(preferred_types.Has(syncer::PROXY_TABS)); |
| 105 EXPECT_FALSE(preferred_types.Has(syncer::HISTORY_DELETE_DIRECTIVES)); | 160 EXPECT_FALSE(preferred_types.Has(syncer::HISTORY_DELETE_DIRECTIVES)); |
| 106 } | 161 } |
| 107 | 162 |
| 108 TEST_F(SyncPrefsTest, PreferredTypesKeepEverythingSynced) { | 163 TEST_F(SyncPrefsTest, PreferredTypesKeepEverythingSynced) { |
| 109 SyncPrefs sync_prefs(&pref_service_); | 164 SyncPrefs sync_prefs(&pref_service_); |
| 110 | 165 |
| 111 EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); | 166 EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); |
| 112 | 167 |
| 113 const syncer::ModelTypeSet user_types = syncer::UserTypes(); | 168 const syncer::ModelTypeSet user_types = syncer::UserTypes(); |
| 114 EXPECT_TRUE(user_types.Equals( | 169 EXPECT_TRUE(user_types.Equals(sync_prefs.GetPreferredDataTypes(user_types))); |
| 115 sync_prefs.GetPreferredDataTypes(user_types))); | |
| 116 const syncer::ModelTypeSet user_visible_types = syncer::UserSelectableTypes(); | 170 const syncer::ModelTypeSet user_visible_types = syncer::UserSelectableTypes(); |
| 117 for (syncer::ModelTypeSet::Iterator it = user_visible_types.First(); | 171 for (syncer::ModelTypeSet::Iterator it = user_visible_types.First(); |
| 118 it.Good(); it.Inc()) { | 172 it.Good(); |
| 173 it.Inc()) { |
| 119 syncer::ModelTypeSet preferred_types; | 174 syncer::ModelTypeSet preferred_types; |
| 120 preferred_types.Put(it.Get()); | 175 preferred_types.Put(it.Get()); |
| 121 sync_prefs.SetPreferredDataTypes(user_types, preferred_types); | 176 sync_prefs.SetPreferredDataTypes(user_types, preferred_types); |
| 122 EXPECT_TRUE(user_types.Equals( | 177 EXPECT_TRUE( |
| 123 sync_prefs.GetPreferredDataTypes(user_types))); | 178 user_types.Equals(sync_prefs.GetPreferredDataTypes(user_types))); |
| 124 } | 179 } |
| 125 } | 180 } |
| 126 | 181 |
| 127 TEST_F(SyncPrefsTest, PreferredTypesNotKeepEverythingSynced) { | 182 TEST_F(SyncPrefsTest, PreferredTypesNotKeepEverythingSynced) { |
| 128 SyncPrefs sync_prefs(&pref_service_); | 183 SyncPrefs sync_prefs(&pref_service_); |
| 129 | 184 |
| 130 sync_prefs.SetKeepEverythingSynced(false); | 185 sync_prefs.SetKeepEverythingSynced(false); |
| 131 | 186 |
| 132 const syncer::ModelTypeSet user_types = syncer::UserTypes(); | 187 const syncer::ModelTypeSet user_types = syncer::UserTypes(); |
| 133 EXPECT_FALSE(user_types.Equals( | 188 EXPECT_FALSE(user_types.Equals(sync_prefs.GetPreferredDataTypes(user_types))); |
| 134 sync_prefs.GetPreferredDataTypes(user_types))); | |
| 135 const syncer::ModelTypeSet user_visible_types = syncer::UserSelectableTypes(); | 189 const syncer::ModelTypeSet user_visible_types = syncer::UserSelectableTypes(); |
| 136 for (syncer::ModelTypeSet::Iterator it = user_visible_types.First(); | 190 for (syncer::ModelTypeSet::Iterator it = user_visible_types.First(); |
| 137 it.Good(); it.Inc()) { | 191 it.Good(); |
| 192 it.Inc()) { |
| 138 syncer::ModelTypeSet preferred_types; | 193 syncer::ModelTypeSet preferred_types; |
| 139 preferred_types.Put(it.Get()); | 194 preferred_types.Put(it.Get()); |
| 140 syncer::ModelTypeSet expected_preferred_types(preferred_types); | 195 syncer::ModelTypeSet expected_preferred_types(preferred_types); |
| 141 if (it.Get() == syncer::AUTOFILL) { | 196 if (it.Get() == syncer::AUTOFILL) { |
| 142 expected_preferred_types.Put(syncer::AUTOFILL_PROFILE); | 197 expected_preferred_types.Put(syncer::AUTOFILL_PROFILE); |
| 143 } | 198 } |
| 144 if (it.Get() == syncer::PREFERENCES) { | 199 if (it.Get() == syncer::PREFERENCES) { |
| 145 expected_preferred_types.Put(syncer::DICTIONARY); | 200 expected_preferred_types.Put(syncer::DICTIONARY); |
| 146 expected_preferred_types.Put(syncer::PRIORITY_PREFERENCES); | 201 expected_preferred_types.Put(syncer::PRIORITY_PREFERENCES); |
| 147 expected_preferred_types.Put(syncer::SEARCH_ENGINES); | 202 expected_preferred_types.Put(syncer::SEARCH_ENGINES); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 sync_prefs.ClearPreferences(); | 284 sync_prefs.ClearPreferences(); |
| 230 | 285 |
| 231 EXPECT_FALSE(sync_prefs.HasSyncSetupCompleted()); | 286 EXPECT_FALSE(sync_prefs.HasSyncSetupCompleted()); |
| 232 EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime()); | 287 EXPECT_EQ(base::Time(), sync_prefs.GetLastSyncedTime()); |
| 233 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); | 288 EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty()); |
| 234 } | 289 } |
| 235 | 290 |
| 236 } // namespace | 291 } // namespace |
| 237 | 292 |
| 238 } // namespace browser_sync | 293 } // namespace browser_sync |
| OLD | NEW |