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

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 {
vabr (Chromium) 2015/08/14 14:11:45 nit: Blank line below.
melandory 2015/08/17 16:28:55 Done.
20 void ChangeOnePrefBecauseAnotherPrefHasChanged(
21 PrefService* prefs,
22 const std::string& other_pref_name,
23 const std::string& changed_pref_name) {
24 bool changed_pref = prefs->GetBoolean(changed_pref_name.c_str());
25 bool other_pref = prefs->GetBoolean(other_pref_name.c_str());
26 if (changed_pref != other_pref)
27 prefs->SetBoolean(other_pref_name, changed_pref);
28 // TODO(melandory): add histograms in order to track when we can stop
29 // migration.
30 }
31
32 } // namespace
33
34 PasswordManagerSettingMigraterService::PasswordManagerSettingMigraterService(
35 Profile* profile)
36 : profile_(profile), sync_service_(nullptr) {
37 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED,
38 content::Source<Profile>(profile));
39 }
40
41 PasswordManagerSettingMigraterService::PasswordManagerSettingMigraterService(
42 Profile* profile,
43 sync_driver::SyncService* sync_service)
44 : profile_(profile), sync_service_(sync_service) {}
45
46 PasswordManagerSettingMigraterService::
47 ~PasswordManagerSettingMigraterService() {}
48
49 void PasswordManagerSettingMigraterService::Observe(
50 int type,
51 const content::NotificationSource& source,
52 const content::NotificationDetails& details) {
53 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_ADDED, type);
54 if (ProfileSyncServiceFactory::HasProfileSyncService(profile_))
55 sync_service_ = ProfileSyncServiceFactory::GetForProfile(profile_);
56 InitObservers();
57 }
58
59 void PasswordManagerSettingMigraterService::InitObservers() {
60 pref_change_registrar_.Init(profile_->GetPrefs());
61 pref_change_registrar_.Add(
62 password_manager::prefs::kCredentialsEnableService,
63 base::Bind(&PasswordManagerSettingMigraterService::
64 OnCredentialsEnableServicePrefChanged,
65 base::Unretained(this)));
66 pref_change_registrar_.Add(
67 password_manager::prefs::kPasswordManagerSavingEnabled,
68 base::Bind(&PasswordManagerSettingMigraterService::
69 OnPasswordManagerSavingEnabledPrefChanged,
70 base::Unretained(this)));
71 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_);
72 if (sync_service_ && sync_service_->CanSyncStart()) {
73 // This causes OnIsSyncingChanged to be called when the value of
74 // PrefService::IsSyncing() changes.
75 prefs->AddObserver(this);
76 } else {
77 PasswordManagerSettingMigraterService::MigrateLegacyOffState(prefs);
78 }
79 }
80
81 void PasswordManagerSettingMigraterService::Shutdown() {
82 PrefService* prefs = profile_->GetPrefs();
83 MigrateLegacyOffState(prefs);
vabr (Chromium) 2015/08/14 14:11:45 I suggest replacing this line with prefs->RemoveOb
melandory 2015/08/17 16:28:55 Yes, nothing will happen if we remove non added ob
84 }
85
86 void PasswordManagerSettingMigraterService::
87 OnCredentialsEnableServicePrefChanged(
88 const std::string& changed_pref_name) {
89 PrefService* prefs = profile_->GetPrefs();
90 ChangeOnePrefBecauseAnotherPrefHasChanged(
91 prefs, password_manager::prefs::kPasswordManagerSavingEnabled,
92 password_manager::prefs::kCredentialsEnableService);
93 }
94
95 void PasswordManagerSettingMigraterService::
96 OnPasswordManagerSavingEnabledPrefChanged(
97 const std::string& changed_pref_name) {
98 PrefService* prefs = profile_->GetPrefs();
99 ChangeOnePrefBecauseAnotherPrefHasChanged(
100 prefs, password_manager::prefs::kCredentialsEnableService,
101 password_manager::prefs::kPasswordManagerSavingEnabled);
102 }
103
104 void PasswordManagerSettingMigraterService::OnIsSyncingChanged() {
105 PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile_);
106 if (prefs->IsSyncing()) {
107 MigrateLegacyOffState(prefs);
108 prefs->RemoveObserver(this);
vabr (Chromium) 2015/08/14 14:11:45 nit: I would swap the order of lines 107 and 108.
melandory 2015/08/17 16:28:55 Done.
109 }
110 }
111
112 // static
113 void PasswordManagerSettingMigraterService::MigrateLegacyOffState(
114 PrefService* prefs) {
115 bool old_pref =
116 prefs->GetBoolean(password_manager::prefs::kPasswordManagerSavingEnabled);
117 if (!old_pref) {
118 prefs->SetBoolean(password_manager::prefs::kCredentialsEnableService,
119 false);
120 }
121 }
122
123 // static
124 PasswordManagerSettingMigraterService::Factory*
125 PasswordManagerSettingMigraterService::Factory::GetInstance() {
126 return Singleton<PasswordManagerSettingMigraterService::Factory>::get();
127 }
128
129 // static
130 PasswordManagerSettingMigraterService*
131 PasswordManagerSettingMigraterService::Factory::GetForProfile(
132 Profile* profile) {
133 return static_cast<PasswordManagerSettingMigraterService*>(
134 GetInstance()->GetServiceForBrowserContext(profile, true));
135 }
136
137 PasswordManagerSettingMigraterService::Factory::Factory()
138 : BrowserContextKeyedServiceFactory(
139 "PasswordManagerSettingMigraterService",
140 BrowserContextDependencyManager::GetInstance()) {
141 DependsOn(ProfileSyncServiceFactory::GetInstance());
142 }
143
144 PasswordManagerSettingMigraterService::Factory::~Factory() {}
145
146 KeyedService*
147 PasswordManagerSettingMigraterService::Factory::BuildServiceInstanceFor(
148 content::BrowserContext* context) const {
149 return new PasswordManagerSettingMigraterService(
150 static_cast<Profile*>(context));
151 }
152
153 bool PasswordManagerSettingMigraterService::Factory::
154 ServiceIsCreatedWithBrowserContext() const {
155 return true;
156 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698