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

Side by Side Diff: chrome/browser/password_manager/password_manager_migration_service_unittests.cc

Issue 1256803002: [Smart Lock, Prefs reconciliation] Prefs migration logic for desktop platforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix mac Created 5 years, 4 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 2015 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 "base/json/json_string_value_serializer.h"
6 #include "base/prefs/pref_registry_simple.h"
7 #include "base/prefs/pref_service.h"
8 #include "base/values.h"
9 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
10 #include "chrome/browser/password_manager/password_manager_migration_service.h"
11 #include "chrome/browser/prefs/pref_service_syncable.h"
12 #include "chrome/browser/sync/profile_sync_service_factory.h"
13 #include "chrome/browser/sync/profile_sync_service_mock.h"
14 #include "chrome/test/base/testing_pref_service_syncable.h"
15 #include "chrome/test/base/testing_profile.h"
16 #include "components/password_manager/core/common/password_manager_pref_names.h"
17 #include "content/public/test/test_browser_thread_bundle.h"
18 #include "sync/api/fake_sync_change_processor.h"
19 #include "sync/api/sync_error_factory.h"
20 #include "sync/api/sync_error_factory_mock.h"
21 #include "sync/internal_api/public/attachments/attachment_service_proxy_for_test .h"
22 #include "sync/protocol/preference_specifics.pb.h"
23 #include "sync/protocol/priority_preference_specifics.pb.h"
24 #include "sync/protocol/sync.pb.h"
25 #include "testing/gmock/include/gmock/gmock.h"
26 #include "testing/gtest/include/gtest/gtest.h"
27
28 namespace {
29
30 syncer::SyncData CreatePrefSyncData(const std::string& name, bool value) {
31 std::string serialized;
32 JSONStringValueSerializer json(&serialized);
33 base::FundamentalValue bool_value(value);
34 json.Serialize(bool_value);
35 sync_pb::EntitySpecifics specifics;
36 sync_pb::PreferenceSpecifics* pref = nullptr;
37 if (name == password_manager::prefs::kPasswordManagerSavingEnabled) {
38 pref = specifics.mutable_preference();
39 } else if (name == password_manager::prefs::kCredentialEnableService) {
40 pref = specifics.mutable_priority_preference()->mutable_preference();
41 }
42 if (pref) {
43 pref->set_name(name);
44 pref->set_value(serialized);
45 }
46 return syncer::SyncData::CreateRemoteData(
47 1, specifics, base::Time(), syncer::AttachmentIdList(),
48 syncer::AttachmentServiceProxyForTest::Create());
49 }
50
51 void StartSyncingType(PrefServiceSyncable* prefs,
52 syncer::SyncDataList sync_data_list,
53 syncer::ModelType type) {
54 syncer::SyncableService* sync = prefs->GetSyncableService(type);
55 sync->MergeDataAndStartSyncing(
56 type, sync_data_list, scoped_ptr<syncer::SyncChangeProcessor>(
57 new syncer::FakeSyncChangeProcessor),
58 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock));
59 }
60
61 void StartSyncing(PrefServiceSyncable* prefs,
62 syncer::SyncDataList preference,
63 syncer::SyncDataList priority_preference) {
64 StartSyncingType(prefs, preference, syncer::PREFERENCES);
65 StartSyncingType(prefs, priority_preference, syncer::PRIORITY_PREFERENCES);
66 }
67
68 } // namespace
69
70 namespace password_manager {
71
72 class PasswordSettingsMigrationServiceTest : public testing::Test {
73 public:
74 PasswordSettingsMigrationServiceTest() : profile_sync_service_(&profile_) {}
75 void SetUp() override {
76 service_.reset(new PasswordSettingsMigrationService(
77 profile(), profile_sync_service()));
78 EXPECT_CALL(*profile_sync_service(), CanSyncStart())
79 .WillRepeatedly(testing::Return(true));
80 }
81 Profile* profile() { return &profile_; }
82 PasswordSettingsMigrationService* service() { return service_.get(); }
83 ProfileSyncServiceMock* profile_sync_service() {
84 return &profile_sync_service_;
85 }
86
87 void TestOnLocalChange(const std::string& name, bool value) {
88 service()->InitObservers();
89 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
90 prefs->SetBoolean(name, value);
91 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), value);
92 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), value);
93 }
94
95 private:
96 content::TestBrowserThreadBundle thread_bundle_;
97 TestingProfile profile_;
98 ProfileSyncServiceMock profile_sync_service_;
99 scoped_ptr<PasswordSettingsMigrationService> service_;
100 };
101
102 TEST_F(PasswordSettingsMigrationServiceTest,
103 ReconcileOnLocalChangeOfPasswordManagerSavingEnabledOn) {
104 TestOnLocalChange(prefs::kPasswordManagerSavingEnabled, true);
105 }
106
107 TEST_F(PasswordSettingsMigrationServiceTest,
108 ReconcileOnLocalChangeOfPasswordManagerSavingEnabledOff) {
109 TestOnLocalChange(prefs::kPasswordManagerSavingEnabled, false);
110 }
111
112 TEST_F(PasswordSettingsMigrationServiceTest,
113 ReconcileOnLocalChangeOfCredentialEnableServiceOn) {
114 TestOnLocalChange(prefs::kCredentialEnableService, true);
115 }
116
117 TEST_F(PasswordSettingsMigrationServiceTest,
118 ReconcileOnLocalChangeOfCredentialEnableServiceOff) {
119 TestOnLocalChange(prefs::kCredentialEnableService, false);
120 }
121
122 TEST_F(PasswordSettingsMigrationServiceTest,
123 ReconcileOnSyncMergeEmptyDataFinished) {
124 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
125 prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, false);
126 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
127 service()->InitObservers();
128 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
129 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), false);
130 // Empty data comes from sync.
131 StartSyncing(prefs, syncer::SyncDataList(), syncer::SyncDataList());
132 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), false);
133 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), false);
134 }
135
136 TEST_F(PasswordSettingsMigrationServiceTest,
137 ReconcileOnSyncMergeEmptyDataFinishedAllOn) {
138 service()->InitObservers();
139 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
140 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
141 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
142 // Empty data comes from sync.
143 StartSyncing(prefs, syncer::SyncDataList(), syncer::SyncDataList());
144 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
145 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
146 }
147
148 TEST_F(PasswordSettingsMigrationServiceTest,
149 ReconcileWithPasswordManagerSavingEnabledOnFromSync) {
150 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
151 prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, false);
152 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
153 service()->InitObservers();
154 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), false);
155 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
156 syncer::SyncDataList sync_data_list;
157 sync_data_list.push_back(
158 CreatePrefSyncData(prefs::kPasswordManagerSavingEnabled, true));
159 StartSyncing(prefs, sync_data_list, syncer::SyncDataList());
160 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
161 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
162 }
163
164 TEST_F(PasswordSettingsMigrationServiceTest,
165 ReconcileWithPasswordManagerSavingEnabledOffFromSync) {
166 service()->InitObservers();
167 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
168 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
169 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
170 syncer::SyncDataList sync_data_list;
171 sync_data_list.push_back(
172 CreatePrefSyncData(prefs::kPasswordManagerSavingEnabled, false));
173 StartSyncing(prefs, sync_data_list, syncer::SyncDataList());
174 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), false);
175 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), false);
176 }
177
178 TEST_F(PasswordSettingsMigrationServiceTest,
179 ReconcileWithCredentialEnableServiceOffFromSync) {
180 service()->InitObservers();
181 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
182 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
183 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
184 syncer::SyncDataList sync_data_list;
185 sync_data_list.push_back(
186 CreatePrefSyncData(prefs::kCredentialEnableService, false));
187 StartSyncing(prefs, syncer::SyncDataList(), sync_data_list);
188 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), false);
189 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), false);
190 }
191
192 TEST_F(PasswordSettingsMigrationServiceTest,
193 ReconcileWithCredentialEnableServiceOnFromSync) {
194 service()->InitObservers();
195 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
196 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
197 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
198 syncer::SyncDataList sync_data_list;
199 sync_data_list.push_back(
200 CreatePrefSyncData(prefs::kCredentialEnableService, true));
201 StartSyncing(prefs, syncer::SyncDataList(), sync_data_list);
202 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
203 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
204 }
205
206 TEST_F(PasswordSettingsMigrationServiceTest,
207 ReconcileWhenSyncIsNotExpectedPasswordManagerEnabledOff) {
208 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
209 prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, false);
210 EXPECT_CALL(*profile_sync_service(), CanSyncStart())
211 .WillRepeatedly(testing::Return(false));
212 service()->InitObservers();
213 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), false);
214 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), false);
215 }
216
217 TEST_F(PasswordSettingsMigrationServiceTest,
218 ReconcileWhenSyncIsNotExpectedPasswordManagerEnabledOn) {
219 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile());
220 prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, true);
221 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
222 EXPECT_CALL(*profile_sync_service(), CanSyncStart())
223 .WillRepeatedly(testing::Return(false));
224 service()->InitObservers();
225 EXPECT_EQ(prefs->GetBoolean(prefs::kCredentialEnableService), true);
226 EXPECT_EQ(prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled), true);
227 }
228
229 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698