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