| // 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_PUBLIC_OVERLAY_CALLBACK_MANAGER_H_ |
| #define IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_OVERLAY_CALLBACK_MANAGER_H_ |
| |
| #include <memory> |
| |
| #include "ios/chrome/browser/overlays/public/overlay_dispatch_callback.h" |
| #include "ios/chrome/browser/overlays/public/overlay_user_data.h" |
| |
| class OverlayResponse; |
| // Completion callback for OverlayRequests. If an overlay requires a completion |
| // block to be executed after its UI is dismissed, OverlayPresenter clients can |
| // provide a callback that uses the OverlayResponse provided to the request. |
| // `response` may be null if no response has been provided. |
| typedef base::OnceCallback<void(OverlayResponse* response)> |
| OverlayCompletionCallback; |
| |
| // Helper object owned by an OverlayRequest that is used to communicate overlay |
| // UI interaction information back to the overlay's requester. Supports |
| // completion calllbacks, which are executed when the overlay is finished. |
| class OverlayCallbackManager { |
| public: |
| OverlayCallbackManager() = default; |
| virtual ~OverlayCallbackManager() = default; |
| |
| // The completion response object for the request whose callbacks are being |
| // managed by this object. `response` is passed as the argument for |
| // completion callbacks when the overlay UI is finished or the request is |
| // cancelled. |
| virtual void SetCompletionResponse( |
| std::unique_ptr<OverlayResponse> response) = 0; |
| virtual OverlayResponse* GetCompletionResponse() const = 0; |
| |
| // Adds a completion callback. Provided callbacks are guaranteed to be |
| // executed once with the completion response when the overlay UI is finished |
| // or the request is cancelled. |
| virtual void AddCompletionCallback(OverlayCompletionCallback callback) = 0; |
| |
| // Dispatches `response` to all callbacks that have been added for its |
| // info type. Used to send user interaction information back to the overlay's |
| // requester for ongoing overlay UI. |
| virtual void DispatchResponse(std::unique_ptr<OverlayResponse> response) = 0; |
| |
| // Adds `callback` to be executed for dispatched responses. The provided |
| // callbacks are not guaranteed to be called, as there is no guarantee that a |
| // supported response will be sent for the overlay. |
| virtual void AddDispatchCallback(OverlayDispatchCallback callback) = 0; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_OVERLAY_CALLBACK_MANAGER_H_ |