Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/password_manager/save_password_infobar_delegate.h" | 5 #include "chrome/browser/password_manager/save_password_infobar_delegate.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/browser/infobars/infobar_service.h" | 9 #include "chrome/browser/infobars/infobar_service.h" |
| 10 #include "chrome/browser/ui/sync/one_click_signin_helper.h" | 10 #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 37 switches::IsEnableWebBasedSignin() && | 37 switches::IsEnableWebBasedSignin() && |
| 38 OneClickSigninHelper::CanOffer( | 38 OneClickSigninHelper::CanOffer( |
| 39 web_contents, | 39 web_contents, |
| 40 OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY, | 40 OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY, |
| 41 base::UTF16ToUTF8(form_to_save->associated_username()), | 41 base::UTF16ToUTF8(form_to_save->associated_username()), |
| 42 NULL)) | 42 NULL)) |
| 43 return; | 43 return; |
| 44 #endif | 44 #endif |
| 45 | 45 |
| 46 InfoBarService::FromWebContents(web_contents)->AddInfoBar( | 46 InfoBarService::FromWebContents(web_contents)->AddInfoBar( |
| 47 SavePasswordInfoBarDelegate::CreateInfoBar( | 47 ConfirmInfoBarDelegate::CreateInfoBar(scoped_ptr<ConfirmInfoBarDelegate>( |
| 48 scoped_ptr<SavePasswordInfoBarDelegate>( | 48 new SavePasswordInfoBarDelegate(form_to_save.Pass(), |
| 49 new SavePasswordInfoBarDelegate(form_to_save.Pass(), | 49 uma_histogram_suffix)))); |
| 50 uma_histogram_suffix)))); | |
| 51 } | 50 } |
| 52 | 51 |
| 53 SavePasswordInfoBarDelegate::~SavePasswordInfoBarDelegate() { | 52 SavePasswordInfoBarDelegate::~SavePasswordInfoBarDelegate() { |
| 54 UMA_HISTOGRAM_ENUMERATION("PasswordManager.InfoBarResponse", | 53 UMA_HISTOGRAM_ENUMERATION("PasswordManager.InfoBarResponse", |
| 55 infobar_response_, | 54 infobar_response_, |
| 56 password_manager::metrics_util::NUM_RESPONSE_TYPES); | 55 password_manager::metrics_util::NUM_RESPONSE_TYPES); |
| 57 | 56 |
| 58 password_manager::metrics_util::LogUIDismissalReason(infobar_response_); | 57 password_manager::metrics_util::LogUIDismissalReason(infobar_response_); |
| 59 | 58 |
| 60 // The shortest period for which the prompt needs to live, so that we don't | 59 // The shortest period for which the prompt needs to live, so that we don't |
| 61 // consider it killed prematurely, as might happen, e.g., if a pre-rendered | 60 // consider it killed prematurely, as might happen, e.g., if a pre-rendered |
| 62 // page gets swapped in (and the current WebContents is destroyed). | 61 // page gets swapped in (and the current WebContents is destroyed). |
| 63 const base::TimeDelta kMinimumPromptDisplayTime = | 62 const base::TimeDelta kMinimumPromptDisplayTime = |
| 64 base::TimeDelta::FromSeconds(1); | 63 base::TimeDelta::FromSeconds(1); |
| 65 | 64 |
| 66 if (!uma_histogram_suffix_.empty()) { | 65 if (!uma_histogram_suffix_.empty()) { |
| 67 password_manager::metrics_util::LogUMAHistogramEnumeration( | 66 password_manager::metrics_util::LogUMAHistogramEnumeration( |
| 68 "PasswordManager.SavePasswordPromptResponse_" + uma_histogram_suffix_, | 67 "PasswordManager.SavePasswordPromptResponse_" + uma_histogram_suffix_, |
| 69 infobar_response_, | 68 infobar_response_, |
| 70 password_manager::metrics_util::NUM_RESPONSE_TYPES); | 69 password_manager::metrics_util::NUM_RESPONSE_TYPES); |
| 71 password_manager::metrics_util::LogUMAHistogramBoolean( | 70 password_manager::metrics_util::LogUMAHistogramBoolean( |
| 72 "PasswordManager.SavePasswordPromptDisappearedQuickly_" + | 71 "PasswordManager.SavePasswordPromptDisappearedQuickly_" + |
| 73 uma_histogram_suffix_, | 72 uma_histogram_suffix_, |
| 74 timer_.Elapsed() < kMinimumPromptDisplayTime); | 73 timer_.Elapsed() < kMinimumPromptDisplayTime); |
| 75 } | 74 } |
| 76 } | 75 } |
| 77 | 76 |
| 78 void SavePasswordInfoBarDelegate::SetUseAdditionalPasswordAuthentication( | |
| 79 bool use_additional_authentication) { | |
| 80 form_to_save_->SetUseAdditionalPasswordAuthentication( | |
|
Ilya Sherman
2014/10/08 18:58:22
It looks like SetUseAdditionalPasswordAuthenticati
| |
| 81 use_additional_authentication); | |
| 82 } | |
| 83 | |
| 84 SavePasswordInfoBarDelegate::SavePasswordInfoBarDelegate( | 77 SavePasswordInfoBarDelegate::SavePasswordInfoBarDelegate( |
| 85 scoped_ptr<password_manager::PasswordFormManager> form_to_save, | 78 scoped_ptr<password_manager::PasswordFormManager> form_to_save, |
| 86 const std::string& uma_histogram_suffix) | 79 const std::string& uma_histogram_suffix) |
| 87 : ConfirmInfoBarDelegate(), | 80 : ConfirmInfoBarDelegate(), |
| 88 form_to_save_(form_to_save.Pass()), | 81 form_to_save_(form_to_save.Pass()), |
| 89 infobar_response_(password_manager::metrics_util::NO_RESPONSE), | 82 infobar_response_(password_manager::metrics_util::NO_RESPONSE), |
| 90 uma_histogram_suffix_(uma_histogram_suffix) { | 83 uma_histogram_suffix_(uma_histogram_suffix) { |
| 91 if (!uma_histogram_suffix_.empty()) { | 84 if (!uma_histogram_suffix_.empty()) { |
| 92 password_manager::metrics_util::LogUMAHistogramBoolean( | 85 password_manager::metrics_util::LogUMAHistogramBoolean( |
| 93 "PasswordManager.SavePasswordPromptDisplayed_" + uma_histogram_suffix_, | 86 "PasswordManager.SavePasswordPromptDisplayed_" + uma_histogram_suffix_, |
| 94 true); | 87 true); |
| 95 } | 88 } |
| 96 } | 89 } |
| 97 | 90 |
| 98 #if !defined(OS_ANDROID) | |
| 99 // On Android, the save password infobar supports an additional checkbox to | |
| 100 // require additional authentication before autofilling a saved password. | |
| 101 // Because of this non-standard UI, the Android version is special cased and | |
| 102 // constructed in: | |
| 103 // chrome/browser/ui/android/infobars/save_password_infobar.cc | |
| 104 | |
| 105 // static | |
| 106 scoped_ptr<infobars::InfoBar> SavePasswordInfoBarDelegate::CreateInfoBar( | |
| 107 scoped_ptr<SavePasswordInfoBarDelegate> delegate) { | |
| 108 return ConfirmInfoBarDelegate::CreateInfoBar( | |
| 109 delegate.PassAs<ConfirmInfoBarDelegate>()); | |
| 110 } | |
| 111 #endif | |
| 112 | |
| 113 bool SavePasswordInfoBarDelegate::ShouldExpire( | 91 bool SavePasswordInfoBarDelegate::ShouldExpire( |
| 114 const NavigationDetails& details) const { | 92 const NavigationDetails& details) const { |
| 115 return !details.is_redirect && | 93 return !details.is_redirect && |
| 116 infobars::InfoBarDelegate::ShouldExpire(details); | 94 infobars::InfoBarDelegate::ShouldExpire(details); |
| 117 } | 95 } |
| 118 | 96 |
| 119 int SavePasswordInfoBarDelegate::GetIconID() const { | 97 int SavePasswordInfoBarDelegate::GetIconID() const { |
| 120 return IDR_INFOBAR_SAVE_PASSWORD; | 98 return IDR_INFOBAR_SAVE_PASSWORD; |
| 121 } | 99 } |
| 122 | 100 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 151 | 129 |
| 152 void SavePasswordInfoBarDelegate::InfoBarDismissed() { | 130 void SavePasswordInfoBarDelegate::InfoBarDismissed() { |
| 153 DCHECK(form_to_save_.get()); | 131 DCHECK(form_to_save_.get()); |
| 154 infobar_response_ = password_manager::metrics_util::INFOBAR_DISMISSED; | 132 infobar_response_ = password_manager::metrics_util::INFOBAR_DISMISSED; |
| 155 } | 133 } |
| 156 | 134 |
| 157 infobars::InfoBarDelegate::InfoBarAutomationType | 135 infobars::InfoBarDelegate::InfoBarAutomationType |
| 158 SavePasswordInfoBarDelegate::GetInfoBarAutomationType() const { | 136 SavePasswordInfoBarDelegate::GetInfoBarAutomationType() const { |
| 159 return PASSWORD_INFOBAR; | 137 return PASSWORD_INFOBAR; |
| 160 } | 138 } |
| OLD | NEW |