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

Side by Side Diff: chrome/browser/password_manager/password_manager_setting_migrater_service.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: 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 "chrome/browser/password_manager/password_manager_setting_migrater_serv ice.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/prefs/pref_service_syncable.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/sync/profile_sync_service.h"
13 #include "chrome/browser/sync/profile_sync_service_factory.h"
14 #include "components/keyed_service/content/browser_context_dependency_manager.h"
15 #include "components/password_manager/core/common/password_manager_pref_names.h"
16 #include "components/sync_driver/sync_service.h"
17 #include "content/public/browser/notification_source.h"
18
19 namespace {
20 void ChangeOnePrefBecauseAnotherPrefHasChanged(
21 Profile* profile,
22 const std::string& other_pref_name,
23 const std::string& changed_pref_name) {
24 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile);
vabr (Chromium) 2015/08/12 08:25:50 While PrefServiceSyncable cannot be removed from t
melandory 2015/08/13 15:49:15 Done.
25 bool changed_pref = prefs->GetBoolean(changed_pref_name.c_str());
26 bool other_pref = prefs->GetBoolean(other_pref_name.c_str());
27 if (changed_pref != other_pref)
28 prefs->SetBoolean(other_pref_name, changed_pref);
29 // TODO(melandory): add histograms in order to track when we can stop
30 // migration.
31 }
32
33 } // namespace
34
35 namespace password_manager {
36
37 PasswordManagerSettingMigraterService::PasswordManagerSettingMigraterService(
38 Profile* profile)
39 : profile_(profile), sync_service_(nullptr) {
40 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED,
41 content::Source<Profile>(profile));
42 }
43
44 PasswordManagerSettingMigraterService::PasswordManagerSettingMigraterService(
45 Profile* profile,
46 sync_driver::SyncService* sync_service)
47 : profile_(profile), sync_service_(sync_service) {}
48
49 PasswordManagerSettingMigraterService::
50 ~PasswordManagerSettingMigraterService() {}
51
52 void PasswordManagerSettingMigraterService::Observe(
vabr (Chromium) 2015/08/12 08:25:50 Would it make sense if instead of the service obse
melandory 2015/08/13 15:49:15 Resolved by offline discussion
53 int type,
54 const content::NotificationSource& source,
55 const content::NotificationDetails& details) {
56 DCHECK(type == chrome::NOTIFICATION_PROFILE_ADDED);
vabr (Chromium) 2015/08/12 08:25:50 nit: DCHECK_EQ(chrome::NOTIFICATION_PROFILE_ADDED,
melandory 2015/08/13 15:49:15 Done.
57 if (ProfileSyncServiceFactory::HasProfileSyncService(profile_))
58 sync_service_ = ProfileSyncServiceFactory::GetForProfile(profile_);
59 InitObservers();
60 }
61
62 void PasswordManagerSettingMigraterService::InitObservers() {
63 pref_change_registrar_.Init(profile_->GetPrefs());
64 pref_change_registrar_.Add(
65 prefs::kCredentialsEnableService,
66 base::Bind(&PasswordManagerSettingMigraterService::
67 OnCredentialsEnableServicePrefChanged,
68 base::Unretained(this)));
69 pref_change_registrar_.Add(
70 prefs::kPasswordManagerSavingEnabled,
71 base::Bind(&PasswordManagerSettingMigraterService::
72 OnPasswordManagerSavingEnabledPrefChanged,
73 base::Unretained(this)));
74 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_);
75 if (sync_service_ && sync_service_->CanSyncStart()) {
76 // This causes OnIsSyncingChanged to be called when the value of
77 // PrefService::IsSyncing() changes.
78 prefs->AddObserver(this);
79 } else {
80 PasswordManagerSettingMigraterService::MigrateLegacyOffState(prefs);
vabr (Chromium) 2015/08/12 08:25:50 nit: Can you drop PasswordManagerSettingMigraterSe
vabr (Chromium) 2015/08/12 08:25:50 Why do we try to set the YOLO preference, when the
melandory 2015/08/13 15:49:15 It's point where we migrate non-sync users to the
vabr (Chromium) 2015/08/14 14:11:44 Good point, thanks for explanation! Acknowledged.
81 }
82 }
83
84 void PasswordManagerSettingMigraterService::
85 OnCredentialsEnableServicePrefChanged(
86 const std::string& changed_pref_name) {
87 ChangeOnePrefBecauseAnotherPrefHasChanged(
88 profile_, prefs::kPasswordManagerSavingEnabled,
89 prefs::kCredentialsEnableService);
90 }
91
92 void PasswordManagerSettingMigraterService::
93 OnPasswordManagerSavingEnabledPrefChanged(
94 const std::string& changed_pref_name) {
95 ChangeOnePrefBecauseAnotherPrefHasChanged(
96 profile_, prefs::kCredentialsEnableService,
97 prefs::kPasswordManagerSavingEnabled);
98 }
99
100 void PasswordManagerSettingMigraterService::OnIsSyncingChanged() {
101 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_);
102 if (prefs->IsSyncing()) {
103 MigrateLegacyOffState(prefs);
104 prefs->RemoveObserver(this);
vabr (Chromium) 2015/08/12 12:32:09 We should make sure that this is called also durin
melandory 2015/08/13 15:49:15 Done.
105 }
106 }
107
108 // static
109 void PasswordManagerSettingMigraterService::MigrateLegacyOffState(
vabr (Chromium) 2015/08/12 08:25:50 Should we ensure that this is only called at most
melandory 2015/08/13 15:49:15 Done.
110 PrefService* prefs) {
111 bool old_pref = prefs->GetBoolean(prefs::kPasswordManagerSavingEnabled);
112 if (!old_pref) {
113 prefs->SetBoolean(prefs::kCredentialsEnableService, false);
114 }
115 }
116
117 // static
118 PasswordManagerSettingMigraterService::Factory*
119 PasswordManagerSettingMigraterService::Factory::GetInstance() {
120 return Singleton<PasswordManagerSettingMigraterService::Factory>::get();
121 }
122
123 // static
124 PasswordManagerSettingMigraterService*
125 PasswordManagerSettingMigraterService::Factory::GetForProfile(
126 Profile* profile) {
127 return static_cast<PasswordManagerSettingMigraterService*>(
128 GetInstance()->GetServiceForBrowserContext(profile, true));
129 }
130
131 PasswordManagerSettingMigraterService::Factory::Factory()
132 : BrowserContextKeyedServiceFactory(
133 "PasswordManagerSettingMigraterService",
134 BrowserContextDependencyManager::GetInstance()) {
135 DependsOn(ProfileSyncServiceFactory::GetInstance());
136 }
137
138 PasswordManagerSettingMigraterService::Factory::~Factory() {}
139
140 KeyedService*
141 PasswordManagerSettingMigraterService::Factory::BuildServiceInstanceFor(
142 content::BrowserContext* context) const {
143 return new PasswordManagerSettingMigraterService(
144 static_cast<Profile*>(context));
145 }
146
147 bool PasswordManagerSettingMigraterService::Factory::
148 ServiceIsCreatedWithBrowserContext() const {
149 return true;
150 }
151
152 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698