Commit be8f137e authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Use OverlayRequestSupport in overlay UI classes.

Previously, each OverlayRequestCoordinator had an associated
OverlayRequestMediator that also supported the same request
type.  However, with the introduction of infobar overlays,
we will have a single OverlayRequestCoordinator managing the
UI, but separate mediators that support only a specific
request config type used to configure the shared consumer
protocol.

This CL adds class properties to the coordinator and mediator
interfaces that return OverlayRequestSupports rather than
keeping |+supportsRequest:|.  This allows each class to
specify its request support separately without the need to
introduce an additional |+supportRequest:| to the mediator.

Bug: none
Change-Id: I990467855d6cd1193db9d70e68ce412866128f74
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1981198
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarMike Dougherty <michaeldo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#727525}
parent 64a8cd8f
......@@ -43,7 +43,7 @@ TEST_F(SupportsOverlayRequestTest, SupportNone) {
}
// Tests that the SupportsOverlayRequest template returns true when
// SupportsRequest() is called with a request with the config type used to
// IsRequestSupported() is called with a request with the config type used to
// create the template specialization.
TEST_F(SupportsOverlayRequestTest, SupportsRequestTemplate) {
std::unique_ptr<OverlayRequestSupport> support =
......
......@@ -64,11 +64,6 @@
#pragma mark - OverlayRequestCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
NOTREACHED() << "Subclasses implement.";
return NO;
}
+ (BOOL)showsOverlayUsingChildViewController {
return YES;
}
......
......@@ -5,6 +5,7 @@
#import "ios/chrome/browser/ui/overlays/overlay_coordinator_factory.h"
#include "base/logging.h"
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
#import "ios/chrome/browser/ui/overlays/infobar_banner/infobar_banner_supported_overlay_coordinator_classes.h"
#import "ios/chrome/browser/ui/overlays/infobar_modal/infobar_modal_supported_overlay_coordinator_classes.h"
#import "ios/chrome/browser/ui/overlays/overlay_coordinator_factory+initialization.h"
......@@ -72,10 +73,9 @@
NSArray<Class>* supportedClasses =
self.supportedOverlayRequestCoordinatorClasses;
for (Class coordinatorClass in supportedClasses) {
if ([coordinatorClass supportsRequest:request]) {
if ([coordinatorClass requestSupport]->IsRequestSupported(request))
return coordinatorClass;
}
}
NOTREACHED() << "Received unsupported request type.";
return nil;
}
......
......@@ -7,14 +7,16 @@
#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
class OverlayRequestSupport;
class OverlayRequestCoordinatorDelegate;
class OverlayRequest;
// Coordinator superclass used to present UI for an OverlayRequest.
@interface OverlayRequestCoordinator : ChromeCoordinator
// Returns whether this overlay coordinator type supports |request|.
+ (BOOL)supportsRequest:(OverlayRequest*)request;
// Returns the request support for this coordinator.
@property(class, nonatomic, readonly)
const OverlayRequestSupport* requestSupport;
// Returns whether this overlay coordinator type uses child view controllers
// instead of presentating over the container context. Default value is NO.
......
......@@ -5,6 +5,7 @@
#import "ios/chrome/browser/ui/overlays/overlay_request_coordinator.h"
#include "base/logging.h"
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
#import "ios/chrome/browser/ui/overlays/overlay_request_coordinator_delegate.h"
#import "ios/chrome/browser/ui/overlays/overlay_request_mediator.h"
......@@ -29,8 +30,9 @@
[self stopAnimated:NO];
}
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return NO;
+ (const OverlayRequestSupport*)requestSupport {
NOTREACHED() << "Subclasses implement.";
return OverlayRequestSupport::None();
}
+ (BOOL)showsOverlayUsingChildViewController {
......@@ -42,7 +44,7 @@
request:(OverlayRequest*)request
delegate:(OverlayRequestCoordinatorDelegate*)
delegate {
DCHECK([[self class] supportsRequest:request]);
DCHECK([self class].requestSupport->IsRequestSupported(request));
self = [super initWithBaseViewController:viewController browser:browser];
if (self) {
_request = request;
......
......@@ -9,12 +9,17 @@
class OverlayRequest;
@protocol OverlayRequestMediatorDelegate;
class OverlayRequestSupport;
// Mediator used to configure overlay UI consumers using an OverlayRequest.
// Subclasses should use the request passed on initialization to set up overlay
// UI via consumer protocols specific to that config type.
@interface OverlayRequestMediator : NSObject
// Returns the request support for this mediator.
@property(class, nonatomic, readonly)
const OverlayRequestSupport* requestSupport;
// Initializer for a mediator that sets ups its consumer with |request|'s
// config.
- (instancetype)initWithRequest:(OverlayRequest*)request
......
......@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "ios/chrome/browser/overlays/public/overlay_callback_manager.h"
#include "ios/chrome/browser/overlays/public/overlay_request.h"
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -29,6 +30,13 @@
return self;
}
#pragma mark - Public
+ (const OverlayRequestSupport*)requestSupport {
NOTREACHED() << "Subclasses implement.";
return OverlayRequestSupport::None();
}
#pragma mark - Private
// Returns an OverlayCompletionCallback to reset the request pointer upon
......
......@@ -15,6 +15,7 @@ source_set("test") {
deps = [
"//base",
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/ui/overlays:coordinators",
"//testing/gtest",
]
......
......@@ -4,14 +4,16 @@
#import "ios/chrome/browser/ui/overlays/test/fake_overlay_request_coordinator.h"
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@implementation FakeOverlayRequestCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return YES;
+ (const OverlayRequestSupport*)requestSupport {
return OverlayRequestSupport::All();
}
- (void)startAnimated:(BOOL)animated {
......
......@@ -15,8 +15,10 @@
@implementation AppLauncherAlertOverlayCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return !!request->GetConfig<AppLauncherAlertOverlayRequestConfig>();
#pragma mark - OverlayRequestCoordinator
+ (const OverlayRequestSupport*)requestSupport {
return AppLauncherAlertOverlayRequestConfig::RequestSupport();
}
@end
......
......@@ -46,6 +46,12 @@
: nullptr;
}
#pragma mark - OverlayRequestMediator
+ (const OverlayRequestSupport*)requestSupport {
return AppLauncherAlertOverlayRequestConfig::RequestSupport();
}
#pragma mark - Response helpers
- (void)updateResponseAllowingAppLaunch:(BOOL)allowAppLaunch {
......
......@@ -19,10 +19,10 @@
@implementation HTTPAuthDialogOverlayCoordinator
#pragma mark - OverlayCoordinator
#pragma mark - OverlayRequestCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return !!request->GetConfig<HTTPAuthOverlayRequestConfig>();
+ (const OverlayRequestSupport*)requestSupport {
return HTTPAuthOverlayRequestConfig::RequestSupport();
}
@end
......
......@@ -48,6 +48,12 @@
: nullptr;
}
#pragma mark - OverlayRequestMediator
+ (const OverlayRequestSupport*)requestSupport {
return HTTPAuthOverlayRequestConfig::RequestSupport();
}
#pragma mark - Response helpers
- (void)updateResponseCancelled:(BOOL)cancelled {
......
......@@ -5,6 +5,7 @@
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_alert_overlay_coordinator.h"
#import "ios/chrome/browser/overlays/public/overlay_request.h"
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_alert_overlay.h"
#import "ios/chrome/browser/ui/overlays/common/alerts/alert_overlay_coordinator+alert_mediator_creation.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_alert_overlay_mediator.h"
......@@ -17,8 +18,8 @@
#pragma mark - OverlayRequestCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return !!request->GetConfig<JavaScriptAlertOverlayRequestConfig>();
+ (const OverlayRequestSupport*)requestSupport {
return JavaScriptAlertOverlayRequestConfig::RequestSupport();
}
@end
......
......@@ -44,6 +44,12 @@
: nullptr;
}
#pragma mark - OverlayRequestMediator
+ (const OverlayRequestSupport*)requestSupport {
return JavaScriptAlertOverlayRequestConfig::RequestSupport();
}
@end
@implementation JavaScriptAlertOverlayMediator (AlertConsumerSupport)
......
......@@ -17,8 +17,8 @@
#pragma mark - OverlayRequestCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return !!request->GetConfig<JavaScriptConfirmationOverlayRequestConfig>();
+ (const OverlayRequestSupport*)requestSupport {
return JavaScriptConfirmationOverlayRequestConfig::RequestSupport();
}
@end
......
......@@ -48,6 +48,12 @@
: nullptr;
}
#pragma mark - OverlayRequestMediator
+ (const OverlayRequestSupport*)requestSupport {
return JavaScriptConfirmationOverlayRequestConfig::RequestSupport();
}
#pragma mark - Response helpers
// Sets the OverlayResponse using the user's selection from the confirmation UI.
......
......@@ -15,10 +15,10 @@
@implementation JavaScriptPromptOverlayCoordinator
#pragma mark - OverlayCoordinator
#pragma mark - OverlayRequestCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return !!request->GetConfig<JavaScriptPromptOverlayRequestConfig>();
+ (const OverlayRequestSupport*)requestSupport {
return JavaScriptPromptOverlayRequestConfig::RequestSupport();
}
@end
......
......@@ -51,6 +51,12 @@
: nullptr;
}
#pragma mark - OverlayRequestMediator
+ (const OverlayRequestSupport*)requestSupport {
return JavaScriptPromptOverlayRequestConfig::RequestSupport();
}
#pragma mark - Response helpers
- (void)setPromptResponse:(NSString*)textInput {
......
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