Chromium Code Reviews| Index: chrome/browser/password_manager/update_password_infobar_delegate.cc |
| diff --git a/chrome/browser/password_manager/update_password_infobar_delegate.cc b/chrome/browser/password_manager/update_password_infobar_delegate.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..873d6eb02fd615ba284a1ce6fe86f34e95da8f36 |
| --- /dev/null |
| +++ b/chrome/browser/password_manager/update_password_infobar_delegate.cc |
| @@ -0,0 +1,107 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/password_manager/update_password_infobar_delegate.h" |
| + |
| +#include "base/numerics/safe_conversions.h" |
| +#include "chrome/browser/infobars/infobar_service.h" |
| +#include "chrome/browser/password_manager/chrome_password_manager_client.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/sync/profile_sync_service_factory.h" |
| +#include "chrome/browser/ui/android/infobars/update_password_infobar.h" |
| +#include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" |
| +#include "chrome/grit/chromium_strings.h" |
| +#include "chrome/grit/generated_resources.h" |
| +#include "components/browser_sync/browser/profile_sync_service.h" |
| +#include "components/infobars/core/infobar.h" |
| +#include "components/password_manager/core/browser/password_bubble_experiment.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| + |
| +// static |
| +void UpdatePasswordInfoBarDelegate::Create( |
| + content::WebContents* web_contents, |
| + scoped_ptr<password_manager::PasswordFormManager> form_to_save) { |
| + Profile* profile = |
| + Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| + sync_driver::SyncService* sync_service = |
| + ProfileSyncServiceFactory::GetForProfile(profile); |
| + bool is_smartlock_branding_enabled = |
| + password_bubble_experiment::IsSmartLockBrandingEnabled(sync_service); |
|
Peter Kasting
2016/02/22 22:38:13
Nit: Could save a couple lines by just inlining:
melandory
2016/02/23 16:35:07
Done.
|
| + InfoBarService::FromWebContents(web_contents) |
| + ->AddInfoBar(make_scoped_ptr(new UpdatePasswordInfoBar( |
| + make_scoped_ptr(new UpdatePasswordInfoBarDelegate( |
| + web_contents, std::move(form_to_save), |
| + is_smartlock_branding_enabled))))); |
| +} |
| + |
| +UpdatePasswordInfoBarDelegate::~UpdatePasswordInfoBarDelegate() {} |
| + |
| +bool UpdatePasswordInfoBarDelegate::ShowMultipleAccounts() const { |
| + const password_manager::PasswordFormManager* form_manager = |
| + passwords_data_.form_manager(); |
| + bool is_password_overriden = |
| + form_manager ? form_manager->password_overridden() : false; |
|
Peter Kasting
2016/02/22 22:38:13
Simpler:
const bool is_password_overriden =
melandory
2016/02/23 16:35:07
Done.
|
| + return GetCurrentForms().size() > 1 && !is_password_overriden; |
| +} |
| + |
| +const std::vector<const autofill::PasswordForm*>& |
| +UpdatePasswordInfoBarDelegate::GetCurrentForms() const { |
| + return passwords_data_.GetCurrentForms(); |
| +} |
| + |
| +base::string16 |
| +UpdatePasswordInfoBarDelegate::GetUsernameForSingleAccountCase() { |
| + password_manager::PasswordFormManager* form_manager = |
| + passwords_data_.form_manager(); |
| + return form_manager->pending_credentials().username_value; |
|
Peter Kasting
2016/02/22 22:38:13
Nit: Just inline:
return passwords_data_.form_m
melandory
2016/02/23 16:35:07
Done.
|
| +} |
| + |
| +UpdatePasswordInfoBarDelegate::UpdatePasswordInfoBarDelegate( |
| + content::WebContents* web_contents, |
| + scoped_ptr<password_manager::PasswordFormManager> form_to_update, |
| + bool is_smartlock_branding_enabled) |
| + : PasswordManagerInfoBarDelegate(), |
|
Peter Kasting
2016/02/22 22:38:13
Nit: Explicit call to parent null constructor not
melandory
2016/02/23 16:35:07
Done.
|
| + is_smartlock_branding_enabled_(is_smartlock_branding_enabled) { |
| + // TODO(crbug.com/577129): Add histograms. |
|
Peter Kasting
2016/02/22 22:38:13
Nit: TODO form is to list a username in the parens
melandory
2016/02/23 16:35:07
Done.
|
| + passwords_data_.set_client( |
| + ChromePasswordManagerClient::FromWebContents(web_contents)); |
| + passwords_data_.OnUpdatePassword(std::move(form_to_update)); |
| + branding_ = l10n_util::GetStringUTF16( |
|
Peter Kasting
2016/02/22 22:38:12
Why do we need a member for this? Why not change
melandory
2016/02/23 16:35:07
Done.
|
| + is_smartlock_branding_enabled |
| + ? IDS_PASSWORD_MANAGER_SMART_LOCK_FOR_PASSWORDS |
| + : IDS_PASSWORD_MANAGER_TITLE_BRAND); |
| +} |
| + |
| +infobars::InfoBarDelegate::InfoBarIdentifier |
| +UpdatePasswordInfoBarDelegate::GetIdentifier() const { |
| + return UPDATE_PASSWORD_INFOBAR_DELEGATE; |
| +} |
| + |
| +base::string16 UpdatePasswordInfoBarDelegate::GetButtonLabel( |
| + InfoBarButton button) const { |
| + return l10n_util::GetStringUTF16((button == BUTTON_OK) |
| + ? IDS_PASSWORD_MANAGER_UPDATE_BUTTON |
| + : IDS_PASSWORD_MANAGER_CANCEL_BUTTON); |
| +} |
| + |
| +bool UpdatePasswordInfoBarDelegate::Accept() { |
| + UpdatePasswordInfoBar* update_password_infobar = |
| + static_cast<UpdatePasswordInfoBar*>(infobar()); |
| + password_manager::PasswordFormManager* form_manager = |
| + passwords_data_.form_manager(); |
| + if (ShowMultipleAccounts()) { |
| + int form_index = update_password_infobar->GetIdOfSelectedUsername(); |
| + DCHECK_GE(form_index, 0); |
| + DCHECK_LT(static_cast<size_t>(form_index), GetCurrentForms().size()); |
| + form_manager->Update(*GetCurrentForms()[form_index]); |
| + } else { |
| + form_manager->Update(form_manager->pending_credentials()); |
| + } |
| + return true; |
| +} |
| + |
| +bool UpdatePasswordInfoBarDelegate::Cancel() { |
| + return true; |
| +} |