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 |