chromium/ios/chrome/browser/overlays/ui_bundled/overlay_request_mediator.h

// Copyright 2019 The Chromium Authors
// 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_UI_BUNDLED_OVERLAY_REQUEST_MEDIATOR_H_
#define IOS_CHROME_BROWSER_OVERLAYS_UI_BUNDLED_OVERLAY_REQUEST_MEDIATOR_H_

#import <Foundation/Foundation.h>

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.  Must return a non-null value.
@property(class, nonatomic, readonly)
    const OverlayRequestSupport* requestSupport;

// The request passed on initialization.  Reset to nullptr if the request is
// cancelled while its overlay UI is still visible.
@property(nonatomic, readonly) OverlayRequest* request;

// The delegate.
@property(nonatomic, weak) id<OverlayRequestMediatorDelegate> delegate;

// Returns an OverlayRequestSupport that only supports requests created with
// ConfigType.
+ (const OverlayRequestSupport*)requestSupport;

// Initializer for a mediator that sets ups its consumer with `request`'s
// config.
- (instancetype)initWithRequest:(OverlayRequest*)request
    NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;

@end

// Delegate for the mediator used to stop the overlay when user interaction
// should trigger dismissal.
@protocol OverlayRequestMediatorDelegate <NSObject>

// Stops the overlay UI.
- (void)stopOverlayForMediator:(OverlayRequestMediator*)mediator;

@end

#endif  // IOS_CHROME_BROWSER_OVERLAYS_UI_BUNDLED_OVERLAY_REQUEST_MEDIATOR_H_