Index: ios/chrome/browser/ui/dialogs/dialog_presenter.h |
diff --git a/ios/chrome/browser/ui/dialogs/dialog_presenter.h b/ios/chrome/browser/ui/dialogs/dialog_presenter.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b3e7a4244c8099c38221267bbf4b496d2ab09586 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/dialogs/dialog_presenter.h |
@@ -0,0 +1,107 @@ |
+// Copyright 2015 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_DIALOGS_DIALOG_PRESENTER_H_ |
+#define IOS_CHROME_BROWSER_UI_DIALOGS_DIALOG_PRESENTER_H_ |
+ |
+#import <UIKit/UIKit.h> |
+ |
+#import "base/ios/block_types.h" |
+ |
+@protocol DialogPresenterDelegate; |
+class GURL; |
+@class AlertCoordinator; |
+ |
+// Accessibility identifier added to the text field of JavaScript prompts. |
+extern NSString* const kJavaScriptDialogTextFieldAccessibiltyIdentifier; |
+ |
+namespace web { |
+class WebState; |
+} |
+ |
+// Handles the queued display of modal dialogs. |
+@interface DialogPresenter : NSObject |
+ |
+// Whether the DialogPresenter should attempt to show dialogs. When |active| is |
+// NO, dialogs will be queued and displayed when the DialogPresenter is |
+// activated. |
+@property(nonatomic, assign, getter=isActive) BOOL active; |
+ |
+// Dialogs will be presented from |viewController|. |
+- (instancetype)initWithDelegate:(id<DialogPresenterDelegate>)delegate |
+ presentingViewController:(UIViewController*)viewController |
+ NS_DESIGNATED_INITIALIZER; |
+- (instancetype)init NS_UNAVAILABLE; |
+ |
+// Methods to show JavaScriptDialogs of each JavaScriptAlertType. If a dialog |
+// is already being presented, these functions will enqueue a new dialog to be |
+// shown when the visible dialog is dismissed. |context| will be retained until |
+// its associated dialog is dismissed or |-cancelDialogForContext:| is called. |
+- (void)runJavaScriptAlertPanelWithMessage:(NSString*)message |
+ requestURL:(const GURL&)requestURL |
+ webState:(web::WebState*)webState |
+ completionHandler:(void (^)(void))completionHandler; |
+- (void)runJavaScriptConfirmPanelWithMessage:(NSString*)message |
+ requestURL:(const GURL&)requestURL |
+ webState:(web::WebState*)webState |
+ completionHandler: |
+ (void (^)(BOOL isConfirmed))completionHandler; |
+- (void)runJavaScriptTextInputPanelWithPrompt:(NSString*)message |
+ defaultText:(NSString*)defaultText |
+ requestURL:(const GURL&)requestURL |
+ webState:(web::WebState*)webState |
+ completionHandler: |
+ (void (^)(NSString* input))completionHandler; |
+ |
+// Displays an HTTP authentication dialog, which has 2 text fields |
+// (username and password), Login and Cancel button. If Login was tapped, |
+// |completionHandler| is called with valid strings which represent username |
+// and password inputs. If cancel is tapped then |completionHandler| is |
+// called with nil |user| and nil |password|. Username will be pre-populated |
+// from provided |credential|. |
+- (void)runAuthDialogForProtectionSpace:(NSURLProtectionSpace*)protectionSpace |
+ proposedCredential:(NSURLCredential*)credential |
+ webState:(web::WebState*)webState |
+ completionHandler: |
+ (void (^)(NSString* user, NSString* password))handler; |
+ |
+// Cancels the display of the dialog associated with |context|. |
+- (void)cancelDialogForWebState:(web::WebState*)webState; |
+ |
+// Dismisses the currently presented dialog and cancels all queued dialogs. |
+- (void)cancelAllDialogs; |
+ |
+// Tries to present an alert if needed and possible. Called by the view |
+// controller which will present the alert to notify that it has dismissed a |
+// view controller. |
+- (void)tryToPresent; |
+ |
+// Create an title for the alert base on the URL. |
++ (NSString*)localizedTitleForJavaScriptAlertFromPage:(const GURL&)pageURL; |
+ |
+@end |
+ |
+@interface DialogPresenter (ExposedForTesting) |
+// The dialog currently being shown. |
+@property(nonatomic, readonly) AlertCoordinator* presentedDialogCoordinator; |
+ |
+// Called when a button in |dialog| is tapped. |
+- (void)buttonWasTappedForCoordinator:(AlertCoordinator*)coordinator; |
+ |
+@end |
+ |
+// Delegate protocol for DialogPresenter. |
+@protocol DialogPresenterDelegate<NSObject> |
+ |
+// Called by |presenter| before showing the queued modal dialog associated with |
+// |context|. |
+- (void)dialogPresenter:(DialogPresenter*)presenter |
+ willShowDialogForWebState:(web::WebState*)webState; |
+ |
+// Whether the delegate is presenting another View Controller. |
+@property(nonatomic, assign) BOOL presenting; |
+ |
+@end |
+ |
+#endif // IOS_CHROME_BROWSER_UI_DIALOGS_DIALOG_PRESENTER_H_ |