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 "chrome/browser/password_manager/password_store_factory.h" | 7 #include "chrome/browser/password_manager/password_store_factory.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
10 #include "chrome/browser/ui/browser_finder.h" | 10 #include "chrome/browser/ui/browser_finder.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 password_bubble_experiment::RecordBubbleClosed(profile->GetPrefs(), reason); | 54 password_bubble_experiment::RecordBubbleClosed(profile->GetPrefs(), reason); |
55 } | 55 } |
56 | 56 |
57 base::string16 PendingStateTitleBasedOnSavePasswordPref( | 57 base::string16 PendingStateTitleBasedOnSavePasswordPref( |
58 bool never_save_passwords) { | 58 bool never_save_passwords) { |
59 return l10n_util::GetStringUTF16( | 59 return l10n_util::GetStringUTF16( |
60 never_save_passwords ? IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_TITLE | 60 never_save_passwords ? IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_TITLE |
61 : IDS_SAVE_PASSWORD); | 61 : IDS_SAVE_PASSWORD); |
62 } | 62 } |
63 | 63 |
64 class URLCollectionFeedbackSender { | 64 ScopedVector<const autofill::PasswordForm> DeepCopyForms( |
65 public: | 65 const std::vector<const autofill::PasswordForm*>& forms) { |
66 URLCollectionFeedbackSender(content::BrowserContext* context, | 66 ScopedVector<const autofill::PasswordForm> result; |
67 const std::string& url); | 67 result.reserve(forms.size()); |
68 void SendFeedback(); | 68 std::transform(forms.begin(), forms.end(), std::back_inserter(result), |
69 | 69 [](const autofill::PasswordForm* form) { |
70 private: | 70 return new autofill::PasswordForm(*form); |
71 static const char kPasswordManagerURLCollectionBucket[]; | 71 }); |
72 content::BrowserContext* context_; | 72 return result.Pass(); |
73 std::string url_; | |
74 | |
75 DISALLOW_COPY_AND_ASSIGN(URLCollectionFeedbackSender); | |
76 }; | |
77 | |
78 const char URLCollectionFeedbackSender::kPasswordManagerURLCollectionBucket[] = | |
79 "ChromePasswordManagerFailure"; | |
80 | |
81 URLCollectionFeedbackSender::URLCollectionFeedbackSender( | |
82 content::BrowserContext* context, | |
83 const std::string& url) | |
84 : context_(context), url_(url) { | |
85 } | |
86 | |
87 void URLCollectionFeedbackSender::SendFeedback() { | |
88 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
89 scoped_refptr<FeedbackData> feedback_data = new FeedbackData(); | |
90 feedback_data->set_category_tag(kPasswordManagerURLCollectionBucket); | |
91 feedback_data->set_description(""); | |
92 | |
93 feedback_data->set_image(make_scoped_ptr(new std::string)); | |
94 | |
95 feedback_data->set_page_url(url_); | |
96 feedback_data->set_user_email(""); | |
97 feedback_data->set_context(context_); | |
98 feedback_util::SendReport(feedback_data); | |
99 } | 73 } |
100 | 74 |
101 } // namespace | 75 } // namespace |
102 | 76 |
103 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( | 77 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel( |
104 content::WebContents* web_contents) | 78 content::WebContents* web_contents) |
105 : content::WebContentsObserver(web_contents), | 79 : content::WebContentsObserver(web_contents), |
106 never_save_passwords_(false), | 80 never_save_passwords_(false), |
107 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), | 81 display_disposition_(metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING), |
108 dismissal_reason_(metrics_util::NOT_DISPLAYED) { | 82 dismissal_reason_(metrics_util::NOT_DISPLAYED) { |
109 ManagePasswordsUIController* controller = | 83 ManagePasswordsUIController* controller = |
110 ManagePasswordsUIController::FromWebContents(web_contents); | 84 ManagePasswordsUIController::FromWebContents(web_contents); |
111 | 85 |
112 origin_ = controller->origin(); | 86 origin_ = controller->origin(); |
113 state_ = controller->state(); | 87 state_ = controller->state(); |
114 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { | 88 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
115 pending_password_ = controller->PendingPassword(); | 89 pending_password_ = controller->PendingPassword(); |
116 best_matches_ = controller->best_matches(); | 90 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); |
| 91 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
| 92 // We don't need anything. |
117 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 93 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
118 local_pending_credentials_.swap(controller->local_credentials_forms()); | 94 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); |
119 federated_pending_credentials_.swap( | 95 federated_credentials_ = DeepCopyForms(controller->GetFederatedForms()); |
120 controller->federated_credentials_forms()); | |
121 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { | 96 } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) { |
122 pending_password_ = *controller->local_credentials_forms()[0]; | 97 pending_password_ = *controller->GetCurrentForms()[0]; |
123 } else { | 98 } else { |
124 best_matches_ = controller->best_matches(); | 99 local_credentials_ = DeepCopyForms(controller->GetCurrentForms()); |
125 } | 100 } |
126 | 101 |
127 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { | 102 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE) { |
128 title_ = PendingStateTitleBasedOnSavePasswordPref(never_save_passwords_); | 103 title_ = PendingStateTitleBasedOnSavePasswordPref(never_save_passwords_); |
129 } else if (state_ == password_manager::ui::BLACKLIST_STATE) { | 104 } else if (state_ == password_manager::ui::BLACKLIST_STATE) { |
130 title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_BLACKLISTED_TITLE); | 105 title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_BLACKLISTED_TITLE); |
131 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { | 106 } else if (state_ == password_manager::ui::CONFIRMATION_STATE) { |
132 title_ = | 107 title_ = |
133 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); | 108 l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE); |
134 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { | 109 } else if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 ManagePasswordsUIController* controller = | 163 ManagePasswordsUIController* controller = |
189 ManagePasswordsUIController::FromWebContents(web_contents()); | 164 ManagePasswordsUIController::FromWebContents(web_contents()); |
190 controller->OnBubbleShown(); | 165 controller->OnBubbleShown(); |
191 } | 166 } |
192 | 167 |
193 void ManagePasswordsBubbleModel::OnBubbleHidden() { | 168 void ManagePasswordsBubbleModel::OnBubbleHidden() { |
194 ManagePasswordsUIController* manage_passwords_ui_controller = | 169 ManagePasswordsUIController* manage_passwords_ui_controller = |
195 web_contents() ? | 170 web_contents() ? |
196 ManagePasswordsUIController::FromWebContents(web_contents()) | 171 ManagePasswordsUIController::FromWebContents(web_contents()) |
197 : nullptr; | 172 : nullptr; |
198 if (state_ == password_manager::ui::CREDENTIAL_REQUEST_STATE && | |
199 manage_passwords_ui_controller) { | |
200 // It's time to run the pending callback if it wasn't called in | |
201 // OnChooseCredentials(). | |
202 // TODO(vasilii): remove this. It's not a bubble's problem because the | |
203 // controller is notified anyway about closed bubble. | |
204 manage_passwords_ui_controller->ChooseCredential( | |
205 autofill::PasswordForm(), | |
206 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY); | |
207 state_ = password_manager::ui::INACTIVE_STATE; | |
208 } | |
209 if (manage_passwords_ui_controller) | 173 if (manage_passwords_ui_controller) |
210 manage_passwords_ui_controller->OnBubbleHidden(); | 174 manage_passwords_ui_controller->OnBubbleHidden(); |
211 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) | 175 if (dismissal_reason_ == metrics_util::NOT_DISPLAYED) |
212 return; | 176 return; |
213 | 177 |
214 metrics_util::LogUIDismissalReason(dismissal_reason_); | 178 metrics_util::LogUIDismissalReason(dismissal_reason_); |
215 // Other use cases have been reported in the callbacks like OnSaveClicked(). | 179 // Other use cases have been reported in the callbacks like OnSaveClicked(). |
216 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE && | 180 if (state_ == password_manager::ui::PENDING_PASSWORD_STATE && |
217 dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION) | 181 dismissal_reason_ == metrics_util::NO_DIRECT_INTERACTION) |
218 RecordExperimentStatistics(web_contents(), dismissal_reason_); | 182 RecordExperimentStatistics(web_contents(), dismissal_reason_); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 | 280 |
317 // static | 281 // static |
318 int ManagePasswordsBubbleModel::UsernameFieldWidth() { | 282 int ManagePasswordsBubbleModel::UsernameFieldWidth() { |
319 return GetFieldWidth(USERNAME_FIELD); | 283 return GetFieldWidth(USERNAME_FIELD); |
320 } | 284 } |
321 | 285 |
322 // static | 286 // static |
323 int ManagePasswordsBubbleModel::PasswordFieldWidth() { | 287 int ManagePasswordsBubbleModel::PasswordFieldWidth() { |
324 return GetFieldWidth(PASSWORD_FIELD); | 288 return GetFieldWidth(PASSWORD_FIELD); |
325 } | 289 } |
OLD | NEW |