Index: ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.mm |
diff --git a/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.mm b/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f43f219138845868356076e46972f8df0b5dfb6e |
--- /dev/null |
+++ b/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.mm |
@@ -0,0 +1,134 @@ |
+// Copyright 2017 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. |
+ |
+#import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.h" |
+ |
+#include "base/logging.h" |
+#include "components/strings/grit/components_strings.h" |
+#import "ios/clean/chrome/browser/ui/commands/java_script_dialog_commands.h" |
+#import "ios/clean/chrome/browser/ui/dialogs/dialog_button_configuration.h" |
+#import "ios/clean/chrome/browser/ui/dialogs/dialog_mediator+subclassing.h" |
+#import "ios/clean/chrome/browser/ui/dialogs/dialog_text_field_configuration.h" |
+#import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_request.h" |
+#import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+namespace { |
+// Dialog configuration identifiers. |
+NSString* const kOKButtonID = @"OK"; |
+NSString* const kCancelButtonID = @"Cancel"; |
+NSString* const kPromptTextFieldID = @"Prompt Text Field"; |
+} |
+ |
+@interface JavaScriptDialogMediator ()<DialogDismissalCommands> |
+ |
+// The dismissal dispatcher |
+@property(nonatomic, readonly, strong) id<JavaScriptDialogDismissalCommands> |
+ dismissalDispatcher; |
+// The request passed on initializaton. |
+@property(nonatomic, readonly, strong) JavaScriptDialogRequest* request; |
+ |
+// Called when buttons are tapped to dispatch JavaScriptDialogDismissalCommands. |
+- (void)OKButtonWasTappedWithTextFieldValues: |
+ (NSDictionary<id, NSString*>*)textFieldValues; |
+- (void)cancelButtonWasTapped; |
+ |
+@end |
+ |
+@implementation JavaScriptDialogMediator |
+@synthesize dismissalDispatcher = _dismissalDispatcher; |
+@synthesize request = _request; |
+ |
+- (instancetype)initWithRequest:(JavaScriptDialogRequest*)request |
+ dispatcher: |
+ (id<JavaScriptDialogDismissalCommands>)dispatcher { |
+ DCHECK(request); |
+ DCHECK(dispatcher); |
+ if ((self = [super init])) { |
+ _request = request; |
+ _dismissalDispatcher = dispatcher; |
+ } |
+ return self; |
+} |
+ |
+#pragma mark - DialogDismissalCommands |
+ |
+- (void)dismissDialogWithButtonID:(id)buttonID |
+ textFieldValues: |
+ (NSDictionary<id, NSString*>*)textFieldValues { |
+ if (buttonID == kOKButtonID) { |
+ [self OKButtonWasTappedWithTextFieldValues:textFieldValues]; |
+ } else if (buttonID == kCancelButtonID) { |
+ [self cancelButtonWasTapped]; |
+ } else { |
+ NOTREACHED() << "Received dialog dismissal for unknown button tag."; |
+ } |
+} |
+ |
+#pragma mark - |
+ |
+- (void)OKButtonWasTappedWithTextFieldValues: |
+ (NSDictionary<id, NSString*>*)textFieldValues { |
+ NSString* userInput = nil; |
+ if (self.request.type == web::JAVASCRIPT_DIALOG_TYPE_PROMPT) { |
+ userInput = textFieldValues[kPromptTextFieldID]; |
+ userInput = userInput ? userInput : @""; |
+ } |
+ [self.request finishRequestWithSuccess:YES userInput:userInput]; |
+ [self.dismissalDispatcher dismissJavaScriptDialog]; |
+} |
+ |
+- (void)cancelButtonWasTapped { |
+ DCHECK_NE(self.request.type, web::JAVASCRIPT_DIALOG_TYPE_ALERT); |
+ [self.request finishRequestWithSuccess:NO userInput:nil]; |
+ [self.dismissalDispatcher dismissJavaScriptDialog]; |
+} |
+ |
+@end |
+ |
+@implementation JavaScriptDialogMediator (Internal) |
+ |
+- (NSString*)dialogTitle { |
+ return self.request.title; |
+} |
+ |
+- (NSString*)dialogMessage { |
+ return self.request.message; |
+} |
+ |
+- (NSArray<DialogButtonConfiguration*>*)buttonConfigs { |
+ NSMutableArray<DialogButtonConfiguration*>* configs = |
+ [[NSMutableArray alloc] init]; |
+ // All JavaScript dialogs have an OK button. |
+ [configs addObject:[DialogButtonConfiguration |
+ itemWithText:l10n_util::GetNSString(IDS_OK) |
+ style:DialogButtonStyle::DEFAULT |
+ identifier:kOKButtonID]]; |
+ // Only confirmations and prompts get cancel buttons. |
+ if (self.request.type != web::JAVASCRIPT_DIALOG_TYPE_ALERT) { |
+ NSString* cancelText = l10n_util::GetNSString(IDS_CANCEL); |
+ [configs addObject:[DialogButtonConfiguration |
+ itemWithText:cancelText |
+ style:DialogButtonStyle::CANCEL |
+ identifier:kCancelButtonID]]; |
+ } |
+ return configs; |
+} |
+ |
+- (NSArray<DialogTextFieldConfiguration*>*)textFieldConfigs { |
+ // Only prompts have text fields. |
+ if (self.request.type != web::JAVASCRIPT_DIALOG_TYPE_PROMPT) |
+ return nil; |
+ return @[ [DialogTextFieldConfiguration |
+ itemWithDefaultText:self.request.defaultPromptText |
+ placeholderText:nil |
+ secure:NO |
+ identifier:kPromptTextFieldID] ]; |
+} |
+ |
+@end |