Commit 02a3a63a authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Create InfobarBannerOverlayRequestConfig.

This is an auxiliary OverlayRequest config that will be used to
set up infobar banner UI.

This CL also adds code to produce the appropriate banner config for
save passwords overlays.

Bug: 1030357
Change-Id: I9b455a3ffb696138b4cff1dad7c0cd4a827c8736
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1963384
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726047}
parent 23e63033
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "components/autofill/core/common/password_form.h"
#include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar.h"
#include "components/password_manager/core/browser/mock_password_form_manager_for_ui.h" #include "components/password_manager/core/browser/mock_password_form_manager_for_ui.h"
#include "ios/chrome/browser/infobars/infobar_ios.h" #include "ios/chrome/browser/infobars/infobar_ios.h"
...@@ -13,6 +14,7 @@ ...@@ -13,6 +14,7 @@
#import "ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h" #import "ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h"
#import "ios/chrome/browser/ui/infobars/infobar_feature.h" #import "ios/chrome/browser/ui/infobars/infobar_feature.h"
#import "ios/chrome/browser/ui/infobars/test/fake_infobar_ui_delegate.h" #import "ios/chrome/browser/ui/infobars/test/fake_infobar_ui_delegate.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h" #include "testing/platform_test.h"
...@@ -41,11 +43,14 @@ class InfobarOverlayRequestFactoryImplTest : public PlatformTest { ...@@ -41,11 +43,14 @@ class InfobarOverlayRequestFactoryImplTest : public PlatformTest {
TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) { TEST_F(InfobarOverlayRequestFactoryImplTest, SavePasswords) {
FakeInfobarUIDelegate* ui_delegate = [[FakeInfobarUIDelegate alloc] init]; FakeInfobarUIDelegate* ui_delegate = [[FakeInfobarUIDelegate alloc] init];
ui_delegate.infobarType = InfobarType::kInfobarTypePasswordSave; ui_delegate.infobarType = InfobarType::kInfobarTypePasswordSave;
std::unique_ptr<password_manager::PasswordFormManagerForUI> form = std::unique_ptr<password_manager::MockPasswordFormManagerForUI> form_manager =
std::make_unique<password_manager::MockPasswordFormManagerForUI>(); std::make_unique<password_manager::MockPasswordFormManagerForUI>();
autofill::PasswordForm form;
EXPECT_CALL(*form_manager, GetPendingCredentials())
.WillRepeatedly(testing::ReturnRef(form));
std::unique_ptr<InfoBarDelegate> delegate = std::unique_ptr<InfoBarDelegate> delegate =
std::make_unique<IOSChromeSavePasswordInfoBarDelegate>(false, false, std::make_unique<IOSChromeSavePasswordInfoBarDelegate>(
std::move(form)); false, false, std::move(form_manager));
InfoBarIOS infobar(ui_delegate, std::move(delegate)); InfoBarIOS infobar(ui_delegate, std::move(delegate));
std::unique_ptr<OverlayRequest> request = std::unique_ptr<OverlayRequest> request =
factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner); factory()->CreateInfobarRequest(&infobar, InfobarOverlayType::kBanner);
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
source_set("infobars") { source_set("infobars") {
sources = [ sources = [
"infobar_banner_overlay_request_config.h",
"infobar_banner_overlay_request_config.mm",
"infobar_overlay_request_config.h", "infobar_overlay_request_config.h",
"infobar_overlay_request_config.mm", "infobar_overlay_request_config.mm",
] ]
...@@ -14,6 +16,8 @@ source_set("infobars") { ...@@ -14,6 +16,8 @@ source_set("infobars") {
"//base", "//base",
"//components/infobars/core", "//components/infobars/core",
"//ios/chrome/browser/infobars", "//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars:public", "//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/overlays", "//ios/chrome/browser/overlays",
"//ios/chrome/browser/ui/infobars:infobars_ui", "//ios/chrome/browser/ui/infobars:infobars_ui",
......
// Copyright 2019 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.
#ifndef IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_COMMON_INFOBARS_INFOBAR_BANNER_OVERLAY_REQUEST_CONFIG_H_
#define IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_COMMON_INFOBARS_INFOBAR_BANNER_OVERLAY_REQUEST_CONFIG_H_
#import <Foundation/Foundation.h>
#include "ios/chrome/browser/overlays/public/overlay_user_data.h"
// OverlayUserData used to configure an InfobarBannerConsumer. Used as
// auxiliary data for OverlayRequests for InfoBars.
class InfobarBannerOverlayRequestConfig
: public OverlayUserData<InfobarBannerOverlayRequestConfig> {
public:
~InfobarBannerOverlayRequestConfig() override;
// The optional accessibility label to use for the banner UI.
NSString* banner_accessibility_label() const {
return banner_accessibility_label_;
}
// The text to add to the button.
NSString* button_text() const { return button_text_; }
// The name of the image to use for the banner icon.
NSString* icon_image_name() const { return icon_image_name_; }
// Whether the banner can present a modal.
bool presents_modal() const { return presents_modal_; }
// The title text of the banner.
NSString* title_text() const { return title_text_; }
// The subtitle text of the banner.
NSString* subtitle_text() const { return subtitle_text_; }
private:
OVERLAY_USER_DATA_SETUP(InfobarBannerOverlayRequestConfig);
explicit InfobarBannerOverlayRequestConfig(
NSString* banner_accessibility_label,
NSString* button_text,
NSString* icon_image_name,
bool presents_modal,
NSString* title_text,
NSString* subtitle_text);
NSString* banner_accessibility_label_;
NSString* button_text_;
NSString* icon_image_name_;
bool presents_modal_ = false;
NSString* title_text_;
NSString* subtitle_text_;
};
#endif // IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_COMMON_INFOBARS_INFOBAR_BANNER_OVERLAY_REQUEST_CONFIG_H_
// Copyright 2019 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.
#import "ios/chrome/browser/overlays/public/common/infobars/infobar_banner_overlay_request_config.h"
#include "base/logging.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
OVERLAY_USER_DATA_SETUP_IMPL(InfobarBannerOverlayRequestConfig);
InfobarBannerOverlayRequestConfig::InfobarBannerOverlayRequestConfig(
NSString* banner_accessibility_label,
NSString* button_text,
NSString* icon_image_name,
bool presents_modal,
NSString* title_text,
NSString* subtitle_text)
: banner_accessibility_label_(banner_accessibility_label),
button_text_(button_text),
icon_image_name_(icon_image_name),
presents_modal_(presents_modal),
title_text_(title_text),
subtitle_text_(subtitle_text) {}
InfobarBannerOverlayRequestConfig::~InfobarBannerOverlayRequestConfig() =
default;
...@@ -13,8 +13,12 @@ source_set("infobar_banner") { ...@@ -13,8 +13,12 @@ source_set("infobar_banner") {
deps = [ deps = [
"//base", "//base",
"//components/infobars/core", "//components/infobars/core",
"//ios/chrome/app/strings:ios_strings_grit",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/overlays", "//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/common/infobars", "//ios/chrome/browser/overlays/public/common/infobars",
"//ios/chrome/browser/passwords:infobar_delegates", "//ios/chrome/browser/passwords:infobar_delegates",
"//ios/chrome/browser/ui/infobars:infobars_ui",
"//ui/base",
] ]
} }
...@@ -5,9 +5,17 @@ ...@@ -5,9 +5,17 @@
#import "ios/chrome/browser/overlays/public/infobar_banner/save_password_infobar_banner_overlay.h" #import "ios/chrome/browser/overlays/public/infobar_banner/save_password_infobar_banner_overlay.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/strings/stringprintf.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.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#import "ios/chrome/browser/overlays/public/common/infobars/infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/common/infobars/infobar_overlay_request_config.h" #import "ios/chrome/browser/overlays/public/common/infobars/infobar_overlay_request_config.h"
#import "ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h" #import "ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h"
#import "ios/chrome/browser/ui/infobars/infobar_ui_delegate.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -15,6 +23,11 @@ ...@@ -15,6 +23,11 @@
using infobars::InfoBar; using infobars::InfoBar;
namespace {
// The name of the icon image for the save passwords banner.
NSString* const kIconImageName = @"infobar_passwords_icon";
}
OVERLAY_USER_DATA_SETUP_IMPL(SavePasswordInfobarBannerOverlayRequestConfig); OVERLAY_USER_DATA_SETUP_IMPL(SavePasswordInfobarBannerOverlayRequestConfig);
SavePasswordInfobarBannerOverlayRequestConfig:: SavePasswordInfobarBannerOverlayRequestConfig::
...@@ -33,4 +46,28 @@ SavePasswordInfobarBannerOverlayRequestConfig:: ...@@ -33,4 +46,28 @@ SavePasswordInfobarBannerOverlayRequestConfig::
void SavePasswordInfobarBannerOverlayRequestConfig::CreateAuxilliaryData( void SavePasswordInfobarBannerOverlayRequestConfig::CreateAuxilliaryData(
base::SupportsUserData* user_data) { base::SupportsUserData* user_data) {
InfobarOverlayRequestConfig::CreateForUserData(user_data, infobar_); InfobarOverlayRequestConfig::CreateForUserData(user_data, infobar_);
InfobarOverlayRequestConfig* infobar_config =
InfobarOverlayRequestConfig::FromUserData(user_data);
// Use the save passwords delegate to configure the request for its banner UI.
NSString* title_text =
base::SysUTF16ToNSString(save_password_delegate_->GetMessageText());
NSString* username = save_password_delegate_->GetUserNameText();
NSString* password = save_password_delegate_->GetPasswordText();
password = [@"" stringByPaddingToLength:[password length]
withString:@"•"
startingAtIndex:0];
NSString* subtitle_text =
[NSString stringWithFormat:@"%@ %@", username, password];
NSString* button_text =
base::SysUTF16ToNSString(save_password_delegate_->GetButtonLabel(
ConfirmInfoBarDelegate::BUTTON_OK));
NSString* hidden_password_text =
l10n_util::GetNSString(IDS_IOS_SETTINGS_PASSWORD_HIDDEN_LABEL);
NSString* banner_accessibility_label =
[NSString stringWithFormat:@"%@,%@, %@", title_text, username,
hidden_password_text];
bool presents_modal = infobar_config->has_badge();
InfobarBannerOverlayRequestConfig::CreateForUserData(
user_data, banner_accessibility_label, button_text, kIconImageName,
presents_modal, title_text, subtitle_text);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment