Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(488)

Side by Side Diff: ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_mediator.mm

Issue 2928723002: [iOS Clean] Added JavaScript dialog support.
Patch Set: rebase & Mark's comments Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dia log_mediator.h"
6
7 #include "base/logging.h"
8 #include "components/strings/grit/components_strings.h"
9 #import "ios/clean/chrome/browser/ui/commands/java_script_dialog_commands.h"
10 #import "ios/clean/chrome/browser/ui/dialogs/dialog_button_configuration.h"
11 #import "ios/clean/chrome/browser/ui/dialogs/dialog_mediator+subclassing.h"
12 #import "ios/clean/chrome/browser/ui/dialogs/dialog_text_field_configuration.h"
13 #import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dia log_request.h"
14 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
15 #include "ui/base/l10n/l10n_util.h"
16
17 #if !defined(__has_feature) || !__has_feature(objc_arc)
18 #error "This file requires ARC support."
19 #endif
20
21 namespace {
22 // Dialog configuration identifiers.
23 NSString* const kOKButtonID = @"OK";
24 NSString* const kCancelButtonID = @"Cancel";
25 NSString* const kPromptTextFieldID = @"Prompt Text Field";
26 }
27
28 @interface JavaScriptDialogMediator ()<DialogDismissalCommands>
29
30 // The dismissal dispatcher
31 @property(nonatomic, readonly, strong) id<JavaScriptDialogDismissalCommands>
32 dismissalDispatcher;
33 // The request passed on initializaton.
34 @property(nonatomic, readonly, strong) JavaScriptDialogRequest* request;
35
36 // Called when buttons are tapped to dispatch JavaScriptDialogDismissalCommands.
37 - (void)OKButtonWasTappedWithTextFieldValues:
38 (NSDictionary<id, NSString*>*)textFieldValues;
39 - (void)cancelButtonWasTapped;
40
41 @end
42
43 @implementation JavaScriptDialogMediator
44 @synthesize dismissalDispatcher = _dismissalDispatcher;
45 @synthesize request = _request;
46
47 - (instancetype)initWithRequest:(JavaScriptDialogRequest*)request
48 dispatcher:
49 (id<JavaScriptDialogDismissalCommands>)dispatcher {
50 DCHECK(request);
51 DCHECK(dispatcher);
52 if ((self = [super init])) {
53 _request = request;
54 _dismissalDispatcher = dispatcher;
55 }
56 return self;
57 }
58
59 #pragma mark - DialogDismissalCommands
60
61 - (void)dismissDialogWithButtonID:(id)buttonID
62 textFieldValues:
63 (NSDictionary<id, NSString*>*)textFieldValues {
64 if (buttonID == kOKButtonID) {
65 [self OKButtonWasTappedWithTextFieldValues:textFieldValues];
66 } else if (buttonID == kCancelButtonID) {
67 [self cancelButtonWasTapped];
68 } else {
69 NOTREACHED() << "Received dialog dismissal for unknown button tag.";
70 }
71 }
72
73 #pragma mark -
74
75 - (void)OKButtonWasTappedWithTextFieldValues:
76 (NSDictionary<id, NSString*>*)textFieldValues {
77 NSString* userInput = nil;
78 if (self.request.type == web::JAVASCRIPT_DIALOG_TYPE_PROMPT) {
79 userInput = textFieldValues[kPromptTextFieldID];
80 userInput = userInput ? userInput : @"";
81 }
82 [self.request finishRequestWithSuccess:YES userInput:userInput];
83 [self.dismissalDispatcher dismissJavaScriptDialog];
84 }
85
86 - (void)cancelButtonWasTapped {
87 DCHECK_NE(self.request.type, web::JAVASCRIPT_DIALOG_TYPE_ALERT);
88 [self.request finishRequestWithSuccess:NO userInput:nil];
89 [self.dismissalDispatcher dismissJavaScriptDialog];
90 }
91
92 @end
93
94 @implementation JavaScriptDialogMediator (Internal)
95
96 - (NSString*)dialogTitle {
97 return self.request.title;
98 }
99
100 - (NSString*)dialogMessage {
101 return self.request.message;
102 }
103
104 - (NSArray<DialogButtonConfiguration*>*)buttonConfigs {
105 NSMutableArray<DialogButtonConfiguration*>* configs =
106 [[NSMutableArray alloc] init];
107 // All JavaScript dialogs have an OK button.
108 [configs addObject:[DialogButtonConfiguration
109 itemWithText:l10n_util::GetNSString(IDS_OK)
110 style:DialogButtonStyle::DEFAULT
111 identifier:kOKButtonID]];
112 // Only confirmations and prompts get cancel buttons.
113 if (self.request.type != web::JAVASCRIPT_DIALOG_TYPE_ALERT) {
114 NSString* cancelText = l10n_util::GetNSString(IDS_CANCEL);
115 [configs addObject:[DialogButtonConfiguration
116 itemWithText:cancelText
117 style:DialogButtonStyle::CANCEL
118 identifier:kCancelButtonID]];
119 }
120 return configs;
121 }
122
123 - (NSArray<DialogTextFieldConfiguration*>*)textFieldConfigs {
124 // Only prompts have text fields.
125 if (self.request.type != web::JAVASCRIPT_DIALOG_TYPE_PROMPT)
126 return nil;
127 return @[ [DialogTextFieldConfiguration
128 itemWithDefaultText:self.request.defaultPromptText
129 placeholderText:nil
130 secure:NO
131 identifier:kPromptTextFieldID] ];
132 }
133
134 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698