Commit 314711cc authored by sczs's avatar sczs Committed by Commit Bot

[ios] Creates InfobarSaveCardCoordinator

- Creates InfobarSaveCardCoordinator and implements stop and infobarWasDismissed
which is common between all InfobarCoordinators.
- Creates kInfobarTypeSaveCard and expands infobar_metrics_recorder to handle
this case. (The Histogram suffix is being updated on https://crrev.com/c/1862867)

Bug: 1014652
Change-Id: I86e70ce67f01e63622d83834094fb4bd4fded68e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862863Reviewed-by: default avatarPeter Lee <pkl@chromium.org>
Reviewed-by: default avatarChris Lu <thegreenfrog@chromium.org>
Commit-Queue: Sergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706490}
parent 9e803084
......@@ -51,6 +51,19 @@ const char kInfobarPasswordUpdateModalEventHistogram[] =
const char kInfobarPasswordUpdateBadgeTappedHistogram[] =
"Mobile.Messages.Badge.Tapped.InfobarTypePasswordUpdate";
// Histogram names for InfobarTypeSaveCard.
// Banner.
const char kInfobarSaveCardBannerEventHistogram[] =
"Mobile.Messages.Banner.Event.InfobarTypeSaveCard";
const char kInfobarSaveCardBannerDismissTypeHistogram[] =
"Mobile.Messages.Banner.Dismiss.InfobarTypeSaveCard";
// Modal.
const char kInfobarSaveCardModalEventHistogram[] =
"Mobile.Messages.Modal.Event.InfobarTypeSaveCard";
// Badge.
const char kInfobarSaveCardBadgeTappedHistogram[] =
"Mobile.Messages.Badge.Tapped.InfobarTypeSaveCard";
} // namespace
@interface InfobarMetricsRecorder ()
......@@ -83,6 +96,9 @@ const char kInfobarPasswordUpdateBadgeTappedHistogram[] =
UMA_HISTOGRAM_ENUMERATION(kInfobarPasswordUpdateBannerEventHistogram,
event);
break;
case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBannerEventHistogram, event);
break;
}
}
......@@ -100,6 +116,10 @@ const char kInfobarPasswordUpdateBadgeTappedHistogram[] =
UMA_HISTOGRAM_ENUMERATION(
kInfobarPasswordUpdateBannerDismissTypeHistogram, dismissType);
break;
case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBannerDismissTypeHistogram,
dismissType);
break;
}
}
......@@ -120,6 +140,9 @@ const char kInfobarPasswordUpdateBadgeTappedHistogram[] =
UMA_HISTOGRAM_ENUMERATION(kInfobarPasswordUpdateModalEventHistogram,
event);
break;
case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardModalEventHistogram, event);
break;
}
}
......@@ -136,6 +159,9 @@ const char kInfobarPasswordUpdateBadgeTappedHistogram[] =
UMA_HISTOGRAM_ENUMERATION(kInfobarPasswordUpdateBadgeTappedHistogram,
state);
break;
case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBadgeTappedHistogram, state);
break;
}
}
......
......@@ -14,6 +14,8 @@ enum class InfobarType {
kInfobarTypePasswordSave = 1,
// Message Infobar for Updating a password.
kInfobarTypePasswordUpdate = 2,
// Message Infobar for Saving a Credit Card.
kInfobarTypeSaveCard = 3,
};
#endif // IOS_CHROME_BROWSER_INFOBARS_INFOBAR_TYPE_H_
......@@ -12,9 +12,12 @@ source_set("coordinators") {
"infobar_coordinator_implementation.h",
"infobar_password_coordinator.h",
"infobar_password_coordinator.mm",
"infobar_save_card_coordinator.h",
"infobar_save_card_coordinator.mm",
]
deps = [
"//base",
"//components/autofill/core/browser",
"//components/infobars/core",
"//ios/chrome/app/strings:ios_strings_grit",
"//ios/chrome/browser/infobars:public",
......
// 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_UI_INFOBARS_COORDINATORS_INFOBAR_SAVE_CARD_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_INFOBARS_COORDINATORS_INFOBAR_SAVE_CARD_COORDINATOR_H_
#import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h"
namespace autofill {
class AutofillSaveCardInfoBarDelegateMobile;
} // namespace autofill
// Coordinator that creates and manages the SaveCardInfobar.
@interface InfobarSaveCardCoordinator : InfobarCoordinator
// Designated initializer. |saveCardInfoBarDelegate| is used to configure the
// Infobar and subsequently perform related actions.
- (instancetype)initWithInfoBarDelegate:
(autofill::AutofillSaveCardInfoBarDelegateMobile*)saveCardInfoBarDelegate
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithInfoBarDelegate:
(infobars::InfoBarDelegate*)infoBarDelegate
badgeSupport:(BOOL)badgeSupport
type:(InfobarType)infobarType NS_UNAVAILABLE;
@end
#endif // IOS_CHROME_BROWSER_UI_INFOBARS_COORDINATORS_INFOBAR_SAVE_CARD_COORDINATOR_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/ui/infobars/coordinators/infobar_save_card_coordinator.h"
#include "components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.h"
#include "ios/chrome/browser/infobars/infobar_controller_delegate.h"
#import "ios/chrome/browser/infobars/infobar_type.h"
#import "ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.h"
#import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h"
#import "ios/chrome/browser/ui/infobars/infobar_container.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface InfobarSaveCardCoordinator () <InfobarCoordinatorImplementation>
// InfobarBannerViewController owned by this Coordinator.
@property(nonatomic, strong) InfobarBannerViewController* bannerViewController;
// ModalViewController owned by this Coordinator.
// TODO(crbug.com/1014652): Replace with CustomVC later on.
@property(nonatomic, strong) UIViewController* modalViewController;
// Delegate that holds the Infobar information and actions.
@property(nonatomic, readonly)
autofill::AutofillSaveCardInfoBarDelegateMobile* saveCardInfoBarDelegate;
@end
@implementation InfobarSaveCardCoordinator
// Synthesize since readonly property from superclass is changed to readwrite.
@synthesize bannerViewController = _bannerViewController;
// Synthesize since readonly property from superclass is changed to readwrite.
@synthesize modalViewController = _modalViewController;
- (instancetype)initWithInfoBarDelegate:
(autofill::AutofillSaveCardInfoBarDelegateMobile*)saveCardInfoBarDelegate {
self = [super initWithInfoBarDelegate:saveCardInfoBarDelegate
badgeSupport:YES
type:InfobarType::kInfobarTypeSaveCard];
if (self) {
_saveCardInfoBarDelegate = saveCardInfoBarDelegate;
}
return self;
}
#pragma mark - ChromeCoordinator
- (void)start {
if (!self.started) {
self.started = YES;
// TODO(crbug.com/1014652): Configure and present Banner.
}
}
- (void)stop {
[super stop];
if (self.started) {
self.started = NO;
// RemoveInfoBar() will delete the InfobarIOS that owns this Coordinator
// from memory.
self.delegate->RemoveInfoBar();
_saveCardInfoBarDelegate = nil;
[self.infobarContainer childCoordinatorStopped:self];
}
}
#pragma mark - InfobarCoordinatorImplementation
- (void)performInfobarAction {
// TODO(crbug.com/1014652): Continue implementation.
}
- (void)infobarWasDismissed {
// Release these strong ViewControllers at the time of infobar dismissal.
self.bannerViewController = nil;
self.modalViewController = nil;
if (self.saveCardInfoBarDelegate)
self.saveCardInfoBarDelegate->InfoBarDismissed();
}
#pragma mark Banner
- (void)infobarBannerWasPresented {
// TODO(crbug.com/1014652): Continue implementation.
}
- (void)dismissBannerWhenInteractionIsFinished {
// TODO(crbug.com/1014652): Continue implementation.
}
- (void)infobarBannerWillBeDismissed:(BOOL)userInitiated {
// TODO(crbug.com/1014652): Continue implementation.
}
#pragma mark Modal
- (BOOL)configureModalViewController {
// TODO(crbug.com/1014652): Continue implementation.
return NO;
}
- (void)infobarModalPresentedFromBanner:(BOOL)presentedFromBanner {
// TODO(crbug.com/1014652): Continue implementation.
}
- (CGFloat)infobarModalHeightForWidth:(CGFloat)width {
// TODO(crbug.com/1014652): Continue implementation.
return 0.0;
}
@end
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