Index: ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm |
diff --git a/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4b1dde1fddc47a14caa402fc37b5c3913b17a521 |
--- /dev/null |
+++ b/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm |
@@ -0,0 +1,111 @@ |
+// 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 "ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.h" |
+ |
+#include <utility> |
+ |
+#include "base/memory/ptr_util.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "components/infobars/core/infobar.h" |
+#include "components/infobars/core/infobar_manager.h" |
+#include "components/password_manager/core/browser/password_form_manager.h" |
+#include "components/password_manager/core/browser/password_manager_constants.h" |
+#include "components/strings/grit/components_strings.h" |
+#import "ios/chrome/browser/infobars/confirm_infobar_controller.h" |
+#include "ios/chrome/browser/infobars/infobar.h" |
+#include "ios/chrome/grit/ios_chromium_strings.h" |
+#include "ios/chrome/grit/ios_google_chrome_strings.h" |
+#include "ios/chrome/grit/ios_strings.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+using password_manager::PasswordFormManager; |
+ |
+// static |
+void IOSChromeUpdatePasswordInfoBarDelegate::Create( |
+ bool is_smart_lock_branding_enabled, |
+ infobars::InfoBarManager* infobar_manager, |
+ std::unique_ptr<PasswordFormManager> form_manager) { |
+ DCHECK(infobar_manager); |
+ auto delegate = base::WrapUnique(new IOSChromeUpdatePasswordInfoBarDelegate( |
+ is_smart_lock_branding_enabled, std::move(form_manager))); |
+ std::unique_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate))); |
+ // TODO(crbug.com/622244): Replace ConfirmInfoBarController with update |
+ // password controller class. |
+ base::scoped_nsobject<ConfirmInfoBarController> controller( |
+ [[ConfirmInfoBarController alloc] initWithDelegate:infobar.get()]); |
+ infobar->SetController(controller); |
+ infobar_manager->AddInfoBar(std::move(infobar)); |
+} |
+ |
+IOSChromeUpdatePasswordInfoBarDelegate:: |
+ ~IOSChromeUpdatePasswordInfoBarDelegate() {} |
+ |
+IOSChromeUpdatePasswordInfoBarDelegate::IOSChromeUpdatePasswordInfoBarDelegate( |
+ bool is_smart_lock_branding_enabled, |
+ std::unique_ptr<PasswordFormManager> form_manager) |
+ : IOSChromePasswordManagerInfoBarDelegate(is_smart_lock_branding_enabled, |
+ std::move(form_manager)) { |
+ selected_account_ = form_to_save()->preferred_match()->username_value; |
+} |
+ |
+bool IOSChromeUpdatePasswordInfoBarDelegate::ShowMultipleAccounts() const { |
+ // If a password is overriden, we know that the preferred match account is |
+ // correct, so should not provide the option to choose a different account. |
+ return form_to_save()->best_matches().size() > 1 && |
+ !form_to_save()->password_overridden(); |
+} |
+ |
+NSArray* IOSChromeUpdatePasswordInfoBarDelegate::GetAccounts() const { |
+ NSMutableArray* usernames = [NSMutableArray array]; |
+ const autofill::PasswordFormMap& matches = form_to_save()->best_matches(); |
+ for (const auto& match : matches) { |
+ [usernames addObject:base::SysUTF16ToNSString(match.first)]; |
+ } |
+ return usernames; |
+} |
+ |
+base::string16 IOSChromeUpdatePasswordInfoBarDelegate::GetBranding() const { |
+ return l10n_util::GetStringUTF16( |
+ is_smart_lock_branding_enabled() |
+ ? IDS_IOS_PASSWORD_MANAGER_SMART_LOCK_FOR_PASSWORDS |
+ : IDS_IOS_PASSWORD_MANAGER_TITLE_BRAND); |
+} |
+ |
+infobars::InfoBarDelegate::InfoBarIdentifier |
+IOSChromeUpdatePasswordInfoBarDelegate::GetIdentifier() const { |
+ return UPDATE_PASSWORD_INFOBAR_DELEGATE; |
+} |
+ |
+base::string16 IOSChromeUpdatePasswordInfoBarDelegate::GetMessageText() const { |
+ return selected_account_.length() > 0 |
+ ? l10n_util::GetStringFUTF16( |
+ IDS_IOS_PASSWORD_MANAGER_UPDATE_PASSWORD_FOR_ACCOUNT, |
+ GetBranding(), selected_account_) |
+ : l10n_util::GetStringFUTF16( |
+ IDS_IOS_PASSWORD_MANAGER_UPDATE_PASSWORD, GetBranding()); |
+} |
+ |
+base::string16 IOSChromeUpdatePasswordInfoBarDelegate::GetButtonLabel( |
+ InfoBarButton button) const { |
+ return l10n_util::GetStringUTF16( |
+ (button == BUTTON_OK) ? IDS_IOS_PASSWORD_MANAGER_UPDATE_BUTTON |
+ : IDS_IOS_PASSWORD_MANAGER_CANCEL_BUTTON); |
+} |
+ |
+bool IOSChromeUpdatePasswordInfoBarDelegate::Accept() { |
+ DCHECK(form_to_save()); |
+ if (ShowMultipleAccounts()) { |
+ form_to_save()->Update( |
+ *form_to_save()->best_matches().at(selected_account_).get()); |
+ } else { |
+ form_to_save()->Update(form_to_save()->pending_credentials()); |
+ } |
+ return true; |
+} |
+ |
+bool IOSChromeUpdatePasswordInfoBarDelegate::Cancel() { |
+ return true; |
+} |