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

Side by Side Diff: chrome/browser/autofill/autofill_manager.cc

Issue 10222017: Make password generation switched by a preference in chrome settings rather than a command line fla… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make password generation checkbox hidden by the command flag. Created 8 years, 7 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 | Annotate | Revision Log
OLDNEW
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/autofill/autofill_manager.h" 5 #include "chrome/browser/autofill/autofill_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <map> 10 #include <map>
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 did_show_suggestions_(false), 188 did_show_suggestions_(false),
189 user_did_type_(false), 189 user_did_type_(false),
190 user_did_autofill_(false), 190 user_did_autofill_(false),
191 user_did_edit_autofilled_field_(false), 191 user_did_edit_autofilled_field_(false),
192 password_generation_enabled_(false), 192 password_generation_enabled_(false),
193 external_delegate_(NULL) { 193 external_delegate_(NULL) {
194 // |personal_data_| is NULL when using test-enabled WebContents. 194 // |personal_data_| is NULL when using test-enabled WebContents.
195 personal_data_ = PersonalDataManagerFactory::GetForProfile( 195 personal_data_ = PersonalDataManagerFactory::GetForProfile(
196 tab_contents->profile()->GetOriginalProfile()); 196 tab_contents->profile()->GetOriginalProfile());
197 RegisterWithSyncService(); 197 RegisterWithSyncService();
198 registrar_.Init(tab_contents->profile()->GetPrefs());
199 registrar_.Add(prefs::kPasswordGenerationEnabled, this);
198 } 200 }
199 201
200 AutofillManager::~AutofillManager() { 202 AutofillManager::~AutofillManager() {
201 if (sync_service_ && sync_service_->HasObserver(this)) 203 if (sync_service_ && sync_service_->HasObserver(this))
202 sync_service_->RemoveObserver(this); 204 sync_service_->RemoveObserver(this);
203 } 205 }
204 206
205 // static 207 // static
206 void AutofillManager::RegisterUserPrefs(PrefService* prefs) { 208 void AutofillManager::RegisterUserPrefs(PrefService* prefs) {
207 prefs->RegisterBooleanPref(prefs::kAutofillEnabled, 209 prefs->RegisterBooleanPref(prefs::kAutofillEnabled,
208 true, 210 true,
209 PrefService::SYNCABLE_PREF); 211 PrefService::SYNCABLE_PREF);
212 prefs->RegisterBooleanPref(prefs::kPasswordGenerationEnabled,
213 false,
214 PrefService::SYNCABLE_PREF);
210 #if defined(OS_MACOSX) 215 #if defined(OS_MACOSX)
211 prefs->RegisterBooleanPref(prefs::kAutofillAuxiliaryProfilesEnabled, 216 prefs->RegisterBooleanPref(prefs::kAutofillAuxiliaryProfilesEnabled,
212 true, 217 true,
213 PrefService::SYNCABLE_PREF); 218 PrefService::SYNCABLE_PREF);
214 #else 219 #else
215 prefs->RegisterBooleanPref(prefs::kAutofillAuxiliaryProfilesEnabled, 220 prefs->RegisterBooleanPref(prefs::kAutofillAuxiliaryProfilesEnabled,
216 false, 221 false,
217 PrefService::UNSYNCABLE_PREF); 222 PrefService::UNSYNCABLE_PREF);
218 #endif 223 #endif
219 prefs->RegisterDoublePref(prefs::kAutofillPositiveUploadRate, 224 prefs->RegisterDoublePref(prefs::kAutofillPositiveUploadRate,
220 kAutofillPositiveUploadRateDefaultValue, 225 kAutofillPositiveUploadRateDefaultValue,
221 PrefService::UNSYNCABLE_PREF); 226 PrefService::UNSYNCABLE_PREF);
222 prefs->RegisterDoublePref(prefs::kAutofillNegativeUploadRate, 227 prefs->RegisterDoublePref(prefs::kAutofillNegativeUploadRate,
223 kAutofillNegativeUploadRateDefaultValue, 228 kAutofillNegativeUploadRateDefaultValue,
224 PrefService::UNSYNCABLE_PREF); 229 PrefService::UNSYNCABLE_PREF);
225 } 230 }
226 231
227 void AutofillManager::RegisterWithSyncService() { 232 void AutofillManager::RegisterWithSyncService() {
228 ProfileSyncService* temp_sync_service = 233 ProfileSyncService* temp_sync_service =
229 ProfileSyncServiceFactory::GetForProfile( 234 ProfileSyncServiceFactory::GetForProfile(
230 tab_contents_wrapper_->profile()); 235 tab_contents_wrapper_->profile());
231 if (temp_sync_service) { 236 if (temp_sync_service) {
232 sync_service_ = temp_sync_service->AsWeakPtr(); 237 sync_service_ = temp_sync_service->AsWeakPtr();
233 sync_service_->AddObserver(this); 238 sync_service_->AddObserver(this);
234 } 239 }
235 } 240 }
236 241
237 void AutofillManager::SendPasswordGenerationStateToRenderer(
238 content::RenderViewHost* host, bool enabled) {
239 host->Send(new AutofillMsg_PasswordGenerationEnabled(host->GetRoutingID(),
240 enabled));
241 }
242
243 void AutofillManager::UpdatePasswordGenerationState( 242 void AutofillManager::UpdatePasswordGenerationState(
244 content::RenderViewHost* host, 243 content::RenderViewHost* host,
245 bool new_renderer) { 244 bool new_renderer) {
245 // In order for password generation to be enabled, we need to make sure:
246 // (1) Password sync is enabled, and
Ilya Sherman 2012/05/01 22:27:48 nit: No need for "and" on this line -- just on the
zysxqn 2012/05/03 00:57:24 Done.
247 // (2) Password manager is enabled, and
248 // (3) Password generation preference check box is checked.
Ilya Sherman 2012/05/01 22:27:48 nit: Please move this comment a bit further up sti
zysxqn 2012/05/03 00:57:24 Done.
246 if (!sync_service_) 249 if (!sync_service_)
247 return; 250 return;
Ilya Sherman 2012/05/01 22:27:48 nit: Please add a blank line after this if-stmt.
zysxqn 2012/05/03 00:57:24 Done.
251 syncable::ModelTypeSet sync_set = sync_service_->GetPreferredDataTypes();
252 bool new_password_sync_enabled =
Ilya Sherman 2012/05/01 22:27:48 nit: There is no "old_password_sync_enabled" to co
zysxqn 2012/05/03 00:57:24 Done.
253 sync_service_->HasSyncSetupCompleted() &&
254 sync_set.Has(syncable::PASSWORDS);
248 255
249 // Password generation requires sync for passwords and the password manager 256 bool new_password_manager_enabled =
250 // to both be enabled. 257 tab_contents_wrapper_->password_manager()->IsEnabled();
251 syncable::ModelTypeSet sync_set = sync_service_->GetPreferredDataTypes(); 258
252 bool password_sync_enabled = (sync_service_->HasSyncSetupCompleted() && 259 Profile* profile = Profile::FromBrowserContext(
253 sync_set.Has(syncable::PASSWORDS)); 260 web_contents()->GetBrowserContext());
261 bool new_preference_checked =
262 profile->GetPrefs()->GetBoolean(prefs::kPasswordGenerationEnabled);
263
254 bool new_password_generation_enabled = 264 bool new_password_generation_enabled =
255 password_sync_enabled && 265 new_password_sync_enabled &&
256 tab_contents_wrapper_->password_manager()->IsEnabled(); 266 new_password_manager_enabled &&
267 new_preference_checked;
268
257 if (new_password_generation_enabled != password_generation_enabled_ || 269 if (new_password_generation_enabled != password_generation_enabled_ ||
258 new_renderer) { 270 new_renderer) {
259 password_generation_enabled_ = new_password_generation_enabled; 271 password_generation_enabled_ = new_password_generation_enabled;
260 SendPasswordGenerationStateToRenderer(host, password_generation_enabled_); 272 SendPasswordGenerationStateToRenderer(host, password_generation_enabled_);
261 } 273 }
262 } 274 }
263 275
276 void AutofillManager::SendPasswordGenerationStateToRenderer(
277 content::RenderViewHost* host, bool enabled) {
278 host->Send(new AutofillMsg_PasswordGenerationEnabled(host->GetRoutingID(),
279 enabled));
280 }
281
264 void AutofillManager::RenderViewCreated(content::RenderViewHost* host) { 282 void AutofillManager::RenderViewCreated(content::RenderViewHost* host) {
265 UpdatePasswordGenerationState(host, true); 283 UpdatePasswordGenerationState(host, true);
284 }
285
286 void AutofillManager::Observe(
287 int type,
288 const content::NotificationSource& source,
289 const content::NotificationDetails& details) {
290 switch (type) {
Ilya Sherman 2012/05/01 22:27:48 nit: Since this code currently only listens for ex
zysxqn 2012/05/03 00:57:24 Done.
291 case chrome::NOTIFICATION_PREF_CHANGED: {
292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
293 std::string* pref = content::Details<std::string>(details).ptr();
294 DCHECK(*pref == prefs::kPasswordGenerationEnabled);
Ilya Sherman 2012/05/01 22:27:48 nit: DCHECK_EQ(prefs::kPasswordGenerationEnabled,
zysxqn 2012/05/03 00:57:24 Done.
295 UpdatePasswordGenerationState(web_contents()->GetRenderViewHost(), false);
Ilya Sherman 2012/05/01 22:27:48 Why do you always pass |false| for the second para
zysxqn 2012/05/03 00:57:24 In AutofillManager::RenderViewCreated() we call th
Ilya Sherman 2012/05/04 06:04:50 Sorry, I misread this as calling SendPasswordGener
296 break;
297 }
298 default:
299 NOTREACHED();
300 }
266 } 301 }
267 302
268 void AutofillManager::OnStateChanged() { 303 void AutofillManager::OnStateChanged() {
269 // It is possible for sync state to change during tab contents destruction. 304 // It is possible for sync state to change during tab contents destruction.
270 // In this case, we don't need to update the renderer since it's going away. 305 // In this case, we don't need to update the renderer since it's going away.
271 if (web_contents() && web_contents()->GetRenderViewHost()) { 306 if (web_contents() && web_contents()->GetRenderViewHost()) {
272 UpdatePasswordGenerationState(web_contents()->GetRenderViewHost(), 307 UpdatePasswordGenerationState(web_contents()->GetRenderViewHost(),
273 false); 308 false);
274 } 309 }
275 } 310 }
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 has_logged_autofill_enabled_(false), 871 has_logged_autofill_enabled_(false),
837 has_logged_address_suggestions_count_(false), 872 has_logged_address_suggestions_count_(false),
838 did_show_suggestions_(false), 873 did_show_suggestions_(false),
839 user_did_type_(false), 874 user_did_type_(false),
840 user_did_autofill_(false), 875 user_did_autofill_(false),
841 user_did_edit_autofilled_field_(false), 876 user_did_edit_autofilled_field_(false),
842 password_generation_enabled_(false), 877 password_generation_enabled_(false),
843 external_delegate_(NULL) { 878 external_delegate_(NULL) {
844 DCHECK(tab_contents); 879 DCHECK(tab_contents);
845 RegisterWithSyncService(); 880 RegisterWithSyncService();
881 // Test code doens't need registrar_.
Ilya Sherman 2012/05/01 22:27:48 nit: "doens't" -> "doesn't"
zysxqn 2012/05/03 00:57:24 Done.
846 } 882 }
847 883
848 void AutofillManager::set_metric_logger(const AutofillMetrics* metric_logger) { 884 void AutofillManager::set_metric_logger(const AutofillMetrics* metric_logger) {
849 metric_logger_.reset(metric_logger); 885 metric_logger_.reset(metric_logger);
850 } 886 }
851 887
852 bool AutofillManager::GetHost(const std::vector<AutofillProfile*>& profiles, 888 bool AutofillManager::GetHost(const std::vector<AutofillProfile*>& profiles,
853 const std::vector<CreditCard*>& credit_cards, 889 const std::vector<CreditCard*>& credit_cards,
854 RenderViewHost** host) const { 890 RenderViewHost** host) const {
855 if (!IsAutofillEnabled()) 891 if (!IsAutofillEnabled())
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 *profile_guid = IDToGUID(profile_id); 1363 *profile_guid = IDToGUID(profile_id);
1328 } 1364 }
1329 1365
1330 void AutofillManager::UpdateInitialInteractionTimestamp( 1366 void AutofillManager::UpdateInitialInteractionTimestamp(
1331 const TimeTicks& interaction_timestamp) { 1367 const TimeTicks& interaction_timestamp) {
1332 if (initial_interaction_timestamp_.is_null() || 1368 if (initial_interaction_timestamp_.is_null() ||
1333 interaction_timestamp < initial_interaction_timestamp_) { 1369 interaction_timestamp < initial_interaction_timestamp_) {
1334 initial_interaction_timestamp_ = interaction_timestamp; 1370 initial_interaction_timestamp_ = interaction_timestamp;
1335 } 1371 }
1336 } 1372 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698