| 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
 | 
| 
 |