| 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 |