| 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..b5a0f96a7e05840942071fa1d598a6b740583630
|
| --- /dev/null
|
| +++ b/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.mm
|
| @@ -0,0 +1,143 @@
|
| +// 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_item.h"
|
| +#import "ios/clean/chrome/browser/ui/dialogs/dialog_mediator+internal.h"
|
| +#import "ios/clean/chrome/browser/ui/dialogs/dialog_text_field_item.h"
|
| +#import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_state.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 {
|
| +// Button tags.
|
| +NSString* const kOKButtonTag = @"OK";
|
| +NSString* const kCancelButtonTag = @"Cancel";
|
| +}
|
| +
|
| +@interface JavaScriptDialogMediator ()<DialogDismissalCommands>
|
| +
|
| +// The dispatcher to use for JavaScriptdialogDismissalCommands.
|
| +@property(nonatomic, readonly) id<JavaScriptDialogDismissalCommands>
|
| + dismissalDispatcher;
|
| +// The state passed on initializaton.
|
| +@property(nonatomic, readonly, strong) JavaScriptDialogState* state;
|
| +
|
| +// Called when buttons are tapped to dispatch JavaScriptDialogDismissalCommands.
|
| +- (void)OKButtonWasTappedWithInputStrings:(NSArray<NSString*>*)inputStrings;
|
| +- (void)cancelButtonWasTapped;
|
| +
|
| +@end
|
| +
|
| +@implementation JavaScriptDialogMediator
|
| +
|
| +@synthesize state = _state;
|
| +
|
| +- (instancetype)initWithDispatcher:(CommandDispatcher*)dispatcher
|
| + state:(JavaScriptDialogState*)state {
|
| + DCHECK(state);
|
| + if ((self = [super initWithDispatcher:dispatcher])) {
|
| + _state = state;
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +#pragma mark - Accessors
|
| +
|
| +- (id<JavaScriptDialogDismissalCommands>)dismissalDispatcher {
|
| + return static_cast<id<JavaScriptDialogDismissalCommands>>(self.dispatcher);
|
| +}
|
| +
|
| +#pragma mark -
|
| +
|
| +- (void)OKButtonWasTappedWithInputStrings:(NSArray<NSString*>*)inputStrings {
|
| + switch (self.state.type) {
|
| + case web::JAVASCRIPT_DIALOG_TYPE_ALERT:
|
| + [self.dismissalDispatcher dismissJavaScriptAlert];
|
| + break;
|
| + case web::JAVASCRIPT_DIALOG_TYPE_CONFIRM:
|
| + [self.dismissalDispatcher dimsissJavaScriptConfirmationWithSuccess:YES];
|
| + break;
|
| + case web::JAVASCRIPT_DIALOG_TYPE_PROMPT:
|
| + DCHECK_EQ(inputStrings.count, 1U);
|
| + [self.dismissalDispatcher
|
| + dismissJavaScriptPromptWithResult:inputStrings[0]];
|
| + break;
|
| + }
|
| +}
|
| +
|
| +- (void)cancelButtonWasTapped {
|
| + switch (self.state.type) {
|
| + case web::JAVASCRIPT_DIALOG_TYPE_ALERT:
|
| + NOTREACHED() << "Alerts do not have cancel buttons.";
|
| + break;
|
| + case web::JAVASCRIPT_DIALOG_TYPE_CONFIRM:
|
| + [self.dismissalDispatcher dimsissJavaScriptConfirmationWithSuccess:NO];
|
| + break;
|
| + case web::JAVASCRIPT_DIALOG_TYPE_PROMPT:
|
| + [self.dismissalDispatcher dismissJavaScriptPromptWithResult:nil];
|
| + break;
|
| + }
|
| +}
|
| +
|
| +@end
|
| +
|
| +@implementation JavaScriptDialogMediator (Internal)
|
| +
|
| +- (NSString*)dialogTitle {
|
| + return self.state.title;
|
| +}
|
| +
|
| +- (NSString*)dialogMessage {
|
| + return self.state.message;
|
| +}
|
| +
|
| +- (NSArray<DialogButtonItem*>*)buttonItems {
|
| + NSMutableArray<DialogButtonItem*>* items = [[NSMutableArray alloc] init];
|
| + // All JavaScript dialogs have an OK button.
|
| + [items addObject:[DialogButtonItem itemWithText:l10n_util::GetNSString(IDS_OK)
|
| + style:DialogButtonStyle::DEFAULT
|
| + tag:kOKButtonTag]];
|
| + // Only confirmations and prompts get cancel buttons.
|
| + if (self.state.type != web::JAVASCRIPT_DIALOG_TYPE_ALERT) {
|
| + NSString* cancelText = l10n_util::GetNSString(IDS_CANCEL);
|
| + [items addObject:[DialogButtonItem itemWithText:cancelText
|
| + style:DialogButtonStyle::CANCEL
|
| + tag:kCancelButtonTag]];
|
| + }
|
| + return items;
|
| +}
|
| +
|
| +- (NSArray<DialogTextFieldItem*>*)textFieldItems {
|
| + // Only prompts have text fields.
|
| + if (self.state.type != web::JAVASCRIPT_DIALOG_TYPE_PROMPT)
|
| + return nil;
|
| + return
|
| + @[ [DialogTextFieldItem itemWithDefaultText:self.state.defaultPromptText
|
| + placeholderText:nil
|
| + secure:NO] ];
|
| +}
|
| +
|
| +#pragma mark - DialogDismissalCommands
|
| +
|
| +- (void)dismissDialogWithButtonTag:(id)buttonTag
|
| + userInputStrings:(NSArray<NSString*>*)inputStrings {
|
| + if (buttonTag == kOKButtonTag) {
|
| + [self OKButtonWasTappedWithInputStrings:inputStrings];
|
| + } else if (buttonTag == kCancelButtonTag) {
|
| + [self cancelButtonWasTapped];
|
| + } else {
|
| + NOTREACHED() << "Received dialog dismissal for unknown button tag.";
|
| + }
|
| +}
|
| +
|
| +@end
|
|
|