| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/ui/passwords/manage_passwords_bubble_model.h" | 5 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 namespace metrics_util = password_manager::metrics_util; | 34 namespace metrics_util = password_manager::metrics_util; |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 | 37 |
| 38 Profile* GetProfileFromWebContents(content::WebContents* web_contents) { | 38 Profile* GetProfileFromWebContents(content::WebContents* web_contents) { |
| 39 if (!web_contents) | 39 if (!web_contents) |
| 40 return nullptr; | 40 return nullptr; |
| 41 return Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 41 return Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| 42 } | 42 } |
| 43 | 43 |
| 44 void CleanStatisticsForSite(content::WebContents* web_contents, | 44 void CleanStatisticsForSite(Profile* profile, const GURL& origin) { |
| 45 const GURL& origin) { | 45 DCHECK(profile); |
| 46 DCHECK(web_contents); | |
| 47 Profile* profile = | |
| 48 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | |
| 49 password_manager::PasswordStore* password_store = | 46 password_manager::PasswordStore* password_store = |
| 50 PasswordStoreFactory::GetForProfile(profile, | 47 PasswordStoreFactory::GetForProfile(profile, |
| 51 ServiceAccessType::IMPLICIT_ACCESS) | 48 ServiceAccessType::IMPLICIT_ACCESS) |
| 52 .get(); | 49 .get(); |
| 53 password_store->RemoveSiteStats(origin.GetOrigin()); | 50 password_store->RemoveSiteStats(origin.GetOrigin()); |
| 54 } | 51 } |
| 55 | 52 |
| 56 ScopedVector<const autofill::PasswordForm> DeepCopyForms( | 53 ScopedVector<const autofill::PasswordForm> DeepCopyForms( |
| 57 const std::vector<const autofill::PasswordForm*>& forms) { | 54 const std::vector<const autofill::PasswordForm*>& forms) { |
| 58 ScopedVector<const autofill::PasswordForm> result; | 55 ScopedVector<const autofill::PasswordForm> result; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 } | 163 } |
| 167 } | 164 } |
| 168 } | 165 } |
| 169 | 166 |
| 170 if (model->state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE) { | 167 if (model->state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE) { |
| 171 metrics_util::LogAutoSigninPromoUserAction(sign_in_promo_dismissal_reason_); | 168 metrics_util::LogAutoSigninPromoUserAction(sign_in_promo_dismissal_reason_); |
| 172 if (sign_in_promo_dismissal_reason_ == | 169 if (sign_in_promo_dismissal_reason_ == |
| 173 password_manager::metrics_util::CHROME_SIGNIN_OK || | 170 password_manager::metrics_util::CHROME_SIGNIN_OK || |
| 174 sign_in_promo_dismissal_reason_ == | 171 sign_in_promo_dismissal_reason_ == |
| 175 password_manager::metrics_util::CHROME_SIGNIN_CANCEL) { | 172 password_manager::metrics_util::CHROME_SIGNIN_CANCEL) { |
| 176 DCHECK(model->web_contents()); | 173 DCHECK(model->delegate_); |
| 177 int show_count = model->GetProfile()->GetPrefs()->GetInteger( | 174 int show_count = model->GetProfile()->GetPrefs()->GetInteger( |
| 178 password_manager::prefs::kNumberSignInPasswordPromoShown); | 175 password_manager::prefs::kNumberSignInPasswordPromoShown); |
| 179 UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoCountTilClick", | 176 UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoCountTilClick", |
| 180 show_count); | 177 show_count); |
| 181 } | 178 } |
| 182 } else if (model->state() != | 179 } else if (model->state() != |
| 183 password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 180 password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 184 // We have separate metrics for the Update bubble so do not record dismissal | 181 // We have separate metrics for the Update bubble so do not record dismissal |
| 185 // reason for it. | 182 // reason for it. |
| 186 metrics_util::LogUIDismissalReason(dismissal_reason_); | 183 metrics_util::LogUIDismissalReason(dismissal_reason_); |
| 187 } | 184 } |
| 188 | 185 |
| 189 if (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | 186 if (model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || |
| 190 model->state() == password_manager::ui::PENDING_PASSWORD_STATE) { | 187 model->state() == password_manager::ui::PENDING_PASSWORD_STATE) { |
| 191 if (update_password_submission_event_ == | 188 if (update_password_submission_event_ == |
| 192 metrics_util::NO_UPDATE_SUBMISSION) { | 189 metrics_util::NO_UPDATE_SUBMISSION) { |
| 193 update_password_submission_event_ = | 190 update_password_submission_event_ = |
| 194 model->GetUpdateDismissalReason(NO_INTERACTION); | 191 model->GetUpdateDismissalReason(NO_INTERACTION); |
| 195 PasswordsModelDelegate* delegate = | 192 if (model->delegate_ && |
| 196 model->web_contents() | |
| 197 ? PasswordsModelDelegateFromWebContents(model->web_contents()) | |
| 198 : nullptr; | |
| 199 if (delegate && | |
| 200 model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 193 model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 201 delegate->OnNoInteractionOnUpdate(); | 194 model->delegate_->OnNoInteractionOnUpdate(); |
| 202 } | 195 } |
| 203 | 196 |
| 204 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) | 197 if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION) |
| 205 LogUpdatePasswordSubmissionEvent(update_password_submission_event_); | 198 LogUpdatePasswordSubmissionEvent(update_password_submission_event_); |
| 206 } | 199 } |
| 207 } | 200 } |
| 208 | 201 |
| 209 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( | 202 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
| 210 content::WebContents* web_contents, | 203 base::WeakPtr<PasswordsModelDelegate> delegate, |
| 211 DisplayReason display_reason) | 204 DisplayReason display_reason) |
| 212 : content::WebContentsObserver(web_contents), | 205 : password_overridden_(false), |
| 213 password_overridden_(false) { | 206 delegate_(std::move(delegate)) { |
| 214 PasswordsModelDelegate* delegate = | 207 origin_ = delegate_->GetOrigin(); |
| 215 PasswordsModelDelegateFromWebContents(web_contents); | 208 state_ = delegate_->GetState(); |
| 216 | |
| 217 origin_ = delegate->GetOrigin(); | |
| 218 state_ = delegate->GetState(); | |
| 219 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 209 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 220 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 210 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 221 pending_password_ = delegate->GetPendingPassword(); | 211 pending_password_ = delegate_->GetPendingPassword(); |
| 222 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); | 212 local_credentials_ = DeepCopyForms(delegate_->GetCurrentForms()); |
| 223 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 213 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 224 // We don't need anything. | 214 // We don't need anything. |
| 225 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { | 215 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { |
| 226 pending_password_ = delegate->GetPendingPassword(); | 216 pending_password_ = delegate_->GetPendingPassword(); |
| 227 } else { | 217 } else { |
| 228 local_credentials_ = DeepCopyForms(delegate->GetCurrentForms()); | 218 local_credentials_ = DeepCopyForms(delegate_->GetCurrentForms()); |
| 229 } | 219 } |
| 230 | 220 |
| 231 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 221 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 232 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 222 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 233 UpdatePendingStateTitle(); | 223 UpdatePendingStateTitle(); |
| 234 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 224 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 235 title_ = | 225 title_ = |
| 236 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); | 226 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); |
| 237 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { | 227 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { |
| 238 // There is no title. | 228 // There is no title. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 257 size_t offset; | 247 size_t offset; |
| 258 save_confirmation_text_ = | 248 save_confirmation_text_ = |
| 259 l10n_util::GetStringFUTF16( | 249 l10n_util::GetStringFUTF16( |
| 260 confirmation_text_id, save_confirmation_link, &offset); | 250 confirmation_text_id, save_confirmation_link, &offset); |
| 261 save_confirmation_link_range_ = | 251 save_confirmation_link_range_ = |
| 262 gfx::Range(offset, offset + save_confirmation_link.length()); | 252 gfx::Range(offset, offset + save_confirmation_link.length()); |
| 263 } else if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { | 253 } else if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
| 264 interaction_stats.origin_domain = origin_.GetOrigin(); | 254 interaction_stats.origin_domain = origin_.GetOrigin(); |
| 265 interaction_stats.username_value = pending_password_.username_value; | 255 interaction_stats.username_value = pending_password_.username_value; |
| 266 password_manager::InteractionsStats* stats = | 256 password_manager::InteractionsStats* stats = |
| 267 delegate->GetCurrentInteractionStats(); | 257 delegate_->GetCurrentInteractionStats(); |
| 268 if (stats) { | 258 if (stats) { |
| 269 DCHECK_EQ(interaction_stats.username_value, stats->username_value); | 259 DCHECK_EQ(interaction_stats.username_value, stats->username_value); |
| 270 DCHECK_EQ(interaction_stats.origin_domain, stats->origin_domain); | 260 DCHECK_EQ(interaction_stats.origin_domain, stats->origin_domain); |
| 271 interaction_stats.dismissal_count = stats->dismissal_count; | 261 interaction_stats.dismissal_count = stats->dismissal_count; |
| 272 } | 262 } |
| 273 } else if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { | 263 } else if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) { |
| 274 password_overridden_ = delegate->IsPasswordOverridden(); | 264 password_overridden_ = delegate_->IsPasswordOverridden(); |
| 275 } | 265 } |
| 276 | 266 |
| 277 manage_link_ = | 267 manage_link_ = |
| 278 l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK); | 268 l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK); |
| 279 | 269 |
| 280 password_manager::metrics_util::UIDisplayDisposition display_disposition = | 270 password_manager::metrics_util::UIDisplayDisposition display_disposition = |
| 281 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; | 271 metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING; |
| 282 if (display_reason == USER_ACTION) { | 272 if (display_reason == USER_ACTION) { |
| 283 switch (state_) { | 273 switch (state_) { |
| 284 case password_manager::ui::PENDING_PASSWORD_STATE: | 274 case password_manager::ui::PENDING_PASSWORD_STATE: |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 case password_manager::ui::CHROME_SIGN_IN_PROMO_STATE: | 310 case password_manager::ui::CHROME_SIGN_IN_PROMO_STATE: |
| 321 case password_manager::ui::INACTIVE_STATE: | 311 case password_manager::ui::INACTIVE_STATE: |
| 322 NOTREACHED(); | 312 NOTREACHED(); |
| 323 break; | 313 break; |
| 324 } | 314 } |
| 325 } | 315 } |
| 326 metrics_util::LogUIDisplayDisposition(display_disposition); | 316 metrics_util::LogUIDisplayDisposition(display_disposition); |
| 327 interaction_keeper_.reset(new InteractionKeeper(std::move(interaction_stats), | 317 interaction_keeper_.reset(new InteractionKeeper(std::move(interaction_stats), |
| 328 display_disposition)); | 318 display_disposition)); |
| 329 | 319 |
| 330 delegate->OnBubbleShown(); | 320 delegate_->OnBubbleShown(); |
| 331 } | 321 } |
| 332 | 322 |
| 333 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() { | 323 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() { |
| 334 interaction_keeper_->ReportInteractions(this); | 324 interaction_keeper_->ReportInteractions(this); |
| 335 // web_contents() is nullptr if the tab is closing. | 325 if (delegate_) |
| 336 PasswordsModelDelegate* delegate = | 326 delegate_->OnBubbleHidden(); |
| 337 web_contents() ? PasswordsModelDelegateFromWebContents(web_contents()) | |
| 338 : nullptr; | |
| 339 if (delegate) | |
| 340 delegate->OnBubbleHidden(); | |
| 341 } | 327 } |
| 342 | 328 |
| 343 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { | 329 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() { |
| 344 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); | 330 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); |
| 345 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_NEVER); | 331 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_NEVER); |
| 346 interaction_keeper_->set_update_password_submission_event( | 332 interaction_keeper_->set_update_password_submission_event( |
| 347 GetUpdateDismissalReason(NOPE_CLICKED)); | 333 GetUpdateDismissalReason(NOPE_CLICKED)); |
| 348 CleanStatisticsForSite(web_contents(), origin_); | 334 CleanStatisticsForSite(GetProfile(), origin_); |
| 349 PasswordsModelDelegateFromWebContents(web_contents())->NeverSavePassword(); | 335 delegate_->NeverSavePassword(); |
| 350 } | 336 } |
| 351 | 337 |
| 352 void ManagePasswordsBubbleModel::OnSaveClicked() { | 338 void ManagePasswordsBubbleModel::OnSaveClicked() { |
| 353 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); | 339 DCHECK_EQ(password_manager::ui::PENDING_PASSWORD_STATE, state_); |
| 354 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_SAVE); | 340 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_SAVE); |
| 355 interaction_keeper_->set_update_password_submission_event( | 341 interaction_keeper_->set_update_password_submission_event( |
| 356 GetUpdateDismissalReason(UPDATE_CLICKED)); | 342 GetUpdateDismissalReason(UPDATE_CLICKED)); |
| 357 CleanStatisticsForSite(web_contents(), origin_); | 343 CleanStatisticsForSite(GetProfile(), origin_); |
| 358 PasswordsModelDelegateFromWebContents(web_contents())->SavePassword(); | 344 delegate_->SavePassword(); |
| 359 } | 345 } |
| 360 | 346 |
| 361 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() { | 347 void ManagePasswordsBubbleModel::OnNopeUpdateClicked() { |
| 362 interaction_keeper_->set_update_password_submission_event( | 348 interaction_keeper_->set_update_password_submission_event( |
| 363 GetUpdateDismissalReason(NOPE_CLICKED)); | 349 GetUpdateDismissalReason(NOPE_CLICKED)); |
| 364 PasswordsModelDelegateFromWebContents(web_contents())->OnNopeUpdateClicked(); | 350 delegate_->OnNopeUpdateClicked(); |
| 365 } | 351 } |
| 366 | 352 |
| 367 void ManagePasswordsBubbleModel::OnUpdateClicked( | 353 void ManagePasswordsBubbleModel::OnUpdateClicked( |
| 368 const autofill::PasswordForm& password_form) { | 354 const autofill::PasswordForm& password_form) { |
| 369 interaction_keeper_->set_update_password_submission_event( | 355 interaction_keeper_->set_update_password_submission_event( |
| 370 GetUpdateDismissalReason(UPDATE_CLICKED)); | 356 GetUpdateDismissalReason(UPDATE_CLICKED)); |
| 371 PasswordsModelDelegateFromWebContents(web_contents())->UpdatePassword( | 357 delegate_->UpdatePassword(password_form); |
| 372 password_form); | |
| 373 } | 358 } |
| 374 | 359 |
| 375 void ManagePasswordsBubbleModel::OnDoneClicked() { | 360 void ManagePasswordsBubbleModel::OnDoneClicked() { |
| 376 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_DONE); | 361 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_DONE); |
| 377 } | 362 } |
| 378 | 363 |
| 379 // TODO(gcasto): Is it worth having this be separate from OnDoneClicked()? | 364 // TODO(gcasto): Is it worth having this be separate from OnDoneClicked()? |
| 380 // User intent is pretty similar in both cases. | 365 // User intent is pretty similar in both cases. |
| 381 void ManagePasswordsBubbleModel::OnOKClicked() { | 366 void ManagePasswordsBubbleModel::OnOKClicked() { |
| 382 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_OK); | 367 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_OK); |
| 383 } | 368 } |
| 384 | 369 |
| 385 void ManagePasswordsBubbleModel::OnManageLinkClicked() { | 370 void ManagePasswordsBubbleModel::OnManageLinkClicked() { |
| 386 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_MANAGE); | 371 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_MANAGE); |
| 387 if (GetSmartLockBrandingState(GetProfile()) == | 372 if (GetSmartLockBrandingState(GetProfile()) == |
| 388 password_bubble_experiment::SmartLockBranding::FULL) { | 373 password_bubble_experiment::SmartLockBranding::FULL) { |
| 389 PasswordsModelDelegateFromWebContents(web_contents()) | 374 delegate_->NavigateToExternalPasswordManager(); |
| 390 ->NavigateToExternalPasswordManager(); | |
| 391 } else { | 375 } else { |
| 392 PasswordsModelDelegateFromWebContents(web_contents()) | 376 delegate_->NavigateToPasswordManagerSettingsPage(); |
| 393 ->NavigateToPasswordManagerSettingsPage(); | |
| 394 } | 377 } |
| 395 } | 378 } |
| 396 | 379 |
| 397 void ManagePasswordsBubbleModel::OnBrandLinkClicked() { | 380 void ManagePasswordsBubbleModel::OnBrandLinkClicked() { |
| 398 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_BRAND_NAME); | 381 interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_BRAND_NAME); |
| 399 PasswordsModelDelegateFromWebContents(web_contents()) | 382 delegate_->NavigateToSmartLockHelpPage(); |
| 400 ->NavigateToSmartLockHelpPage(); | |
| 401 } | 383 } |
| 402 | 384 |
| 403 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() { | 385 void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() { |
| 404 interaction_keeper_->set_dismissal_reason( | 386 interaction_keeper_->set_dismissal_reason( |
| 405 metrics_util::AUTO_SIGNIN_TOAST_TIMEOUT); | 387 metrics_util::AUTO_SIGNIN_TOAST_TIMEOUT); |
| 406 } | 388 } |
| 407 | 389 |
| 408 void ManagePasswordsBubbleModel::OnPasswordAction( | 390 void ManagePasswordsBubbleModel::OnPasswordAction( |
| 409 const autofill::PasswordForm& password_form, | 391 const autofill::PasswordForm& password_form, |
| 410 PasswordAction action) { | 392 PasswordAction action) { |
| 411 Profile* profile = GetProfile(); | 393 Profile* profile = GetProfile(); |
| 412 if (!profile) | 394 if (!profile) |
| 413 return; | 395 return; |
| 414 password_manager::PasswordStore* password_store = | 396 password_manager::PasswordStore* password_store = |
| 415 PasswordStoreFactory::GetForProfile( | 397 PasswordStoreFactory::GetForProfile( |
| 416 profile, ServiceAccessType::EXPLICIT_ACCESS).get(); | 398 profile, ServiceAccessType::EXPLICIT_ACCESS).get(); |
| 417 DCHECK(password_store); | 399 DCHECK(password_store); |
| 418 if (action == REMOVE_PASSWORD) | 400 if (action == REMOVE_PASSWORD) |
| 419 password_store->RemoveLogin(password_form); | 401 password_store->RemoveLogin(password_form); |
| 420 else | 402 else |
| 421 password_store->AddLogin(password_form); | 403 password_store->AddLogin(password_form); |
| 422 } | 404 } |
| 423 | 405 |
| 424 void ManagePasswordsBubbleModel::OnSignInToChromeClicked() { | 406 void ManagePasswordsBubbleModel::OnSignInToChromeClicked() { |
| 425 interaction_keeper_->set_sign_in_promo_dismissal_reason( | 407 interaction_keeper_->set_sign_in_promo_dismissal_reason( |
| 426 metrics_util::CHROME_SIGNIN_OK); | 408 metrics_util::CHROME_SIGNIN_OK); |
| 427 GetProfile()->GetPrefs()->SetBoolean( | 409 GetProfile()->GetPrefs()->SetBoolean( |
| 428 password_manager::prefs::kWasSignInPasswordPromoClicked, true); | 410 password_manager::prefs::kWasSignInPasswordPromoClicked, true); |
| 429 PasswordsModelDelegateFromWebContents(web_contents()) | 411 delegate_->NavigateToChromeSignIn(); |
| 430 ->NavigateToChromeSignIn(); | |
| 431 } | 412 } |
| 432 | 413 |
| 433 void ManagePasswordsBubbleModel::OnSkipSignInClicked() { | 414 void ManagePasswordsBubbleModel::OnSkipSignInClicked() { |
| 434 interaction_keeper_->set_sign_in_promo_dismissal_reason( | 415 interaction_keeper_->set_sign_in_promo_dismissal_reason( |
| 435 metrics_util::CHROME_SIGNIN_CANCEL); | 416 metrics_util::CHROME_SIGNIN_CANCEL); |
| 436 GetProfile()->GetPrefs()->SetBoolean( | 417 GetProfile()->GetPrefs()->SetBoolean( |
| 437 password_manager::prefs::kWasSignInPasswordPromoClicked, true); | 418 password_manager::prefs::kWasSignInPasswordPromoClicked, true); |
| 438 } | 419 } |
| 439 | 420 |
| 440 Profile* ManagePasswordsBubbleModel::GetProfile() const { | 421 Profile* ManagePasswordsBubbleModel::GetProfile() const { |
| 441 return GetProfileFromWebContents(web_contents()); | 422 return GetProfileFromWebContents(GetWebContents()); |
| 423 } |
| 424 |
| 425 content::WebContents* ManagePasswordsBubbleModel::GetWebContents() const { |
| 426 return delegate_ ? delegate_->GetWebContents() : nullptr; |
| 442 } | 427 } |
| 443 | 428 |
| 444 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { | 429 bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const { |
| 445 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && | 430 return state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE && |
| 446 local_credentials_.size() > 1 && !password_overridden_; | 431 local_credentials_.size() > 1 && !password_overridden_; |
| 447 } | 432 } |
| 448 | 433 |
| 449 bool ManagePasswordsBubbleModel::ShouldShowGoogleSmartLockWelcome() const { | 434 bool ManagePasswordsBubbleModel::ShouldShowGoogleSmartLockWelcome() const { |
| 450 Profile* profile = GetProfile(); | 435 Profile* profile = GetProfile(); |
| 451 if (GetSmartLockBrandingState(profile) == | 436 if (GetSmartLockBrandingState(profile) == |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 | 469 |
| 485 void ManagePasswordsBubbleModel::UpdatePendingStateTitle() { | 470 void ManagePasswordsBubbleModel::UpdatePendingStateTitle() { |
| 486 title_brand_link_range_ = gfx::Range(); | 471 title_brand_link_range_ = gfx::Range(); |
| 487 PasswordTittleType type = | 472 PasswordTittleType type = |
| 488 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE | 473 state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE |
| 489 ? PasswordTittleType::UPDATE_PASSWORD | 474 ? PasswordTittleType::UPDATE_PASSWORD |
| 490 : (pending_password_.federation_origin.unique() | 475 : (pending_password_.federation_origin.unique() |
| 491 ? PasswordTittleType::SAVE_PASSWORD | 476 ? PasswordTittleType::SAVE_PASSWORD |
| 492 : PasswordTittleType::SAVE_ACCOUNT); | 477 : PasswordTittleType::SAVE_ACCOUNT); |
| 493 GetSavePasswordDialogTitleTextAndLinkRange( | 478 GetSavePasswordDialogTitleTextAndLinkRange( |
| 494 web_contents()->GetVisibleURL(), origin_, | 479 GetWebContents()->GetVisibleURL(), origin_, |
| 495 GetSmartLockBrandingState(GetProfile()) != | 480 GetSmartLockBrandingState(GetProfile()) != |
| 496 password_bubble_experiment::SmartLockBranding::NONE, | 481 password_bubble_experiment::SmartLockBranding::NONE, |
| 497 type, &title_, &title_brand_link_range_); | 482 type, &title_, &title_brand_link_range_); |
| 498 } | 483 } |
| 499 | 484 |
| 500 void ManagePasswordsBubbleModel::UpdateManageStateTitle() { | 485 void ManagePasswordsBubbleModel::UpdateManageStateTitle() { |
| 501 GetManagePasswordsDialogTitleText(web_contents()->GetVisibleURL(), origin_, | 486 GetManagePasswordsDialogTitleText(GetWebContents()->GetVisibleURL(), origin_, |
| 502 &title_); | 487 &title_); |
| 503 } | 488 } |
| 504 | 489 |
| 505 metrics_util::UpdatePasswordSubmissionEvent | 490 metrics_util::UpdatePasswordSubmissionEvent |
| 506 ManagePasswordsBubbleModel::GetUpdateDismissalReason( | 491 ManagePasswordsBubbleModel::GetUpdateDismissalReason( |
| 507 UserBehaviorOnUpdateBubble behavior) const { | 492 UserBehaviorOnUpdateBubble behavior) const { |
| 508 static const metrics_util::UpdatePasswordSubmissionEvent update_events[4][3] = | 493 static const metrics_util::UpdatePasswordSubmissionEvent update_events[4][3] = |
| 509 {{metrics_util::NO_ACCOUNTS_CLICKED_UPDATE, | 494 {{metrics_util::NO_ACCOUNTS_CLICKED_UPDATE, |
| 510 metrics_util::NO_ACCOUNTS_CLICKED_NOPE, | 495 metrics_util::NO_ACCOUNTS_CLICKED_NOPE, |
| 511 metrics_util::NO_ACCOUNTS_NO_INTERACTION}, | 496 metrics_util::NO_ACCOUNTS_NO_INTERACTION}, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 525 return metrics_util::NO_UPDATE_SUBMISSION; | 510 return metrics_util::NO_UPDATE_SUBMISSION; |
| 526 } | 511 } |
| 527 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 512 if (state_ != password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 528 return metrics_util::NO_UPDATE_SUBMISSION; | 513 return metrics_util::NO_UPDATE_SUBMISSION; |
| 529 if (password_overridden_) | 514 if (password_overridden_) |
| 530 return update_events[3][behavior]; | 515 return update_events[3][behavior]; |
| 531 if (ShouldShowMultipleAccountUpdateUI()) | 516 if (ShouldShowMultipleAccountUpdateUI()) |
| 532 return update_events[2][behavior]; | 517 return update_events[2][behavior]; |
| 533 return update_events[1][behavior]; | 518 return update_events[1][behavior]; |
| 534 } | 519 } |
| OLD | NEW |