Chromium Code Reviews| Index: ios/web_view/internal/web_view_java_script_dialog_presenter.mm |
| diff --git a/ios/web_view/internal/web_view_java_script_dialog_presenter.mm b/ios/web_view/internal/web_view_java_script_dialog_presenter.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..71cd0e18231a49f927b9c40e8d508d56f35a81bd |
| --- /dev/null |
| +++ b/ios/web_view/internal/web_view_java_script_dialog_presenter.mm |
| @@ -0,0 +1,122 @@ |
| +// 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/web_view/internal/web_view_java_script_dialog_presenter.h" |
| + |
| +#import "ios/web_view/public/cwv_ui_delegate.h" |
| +#import "net/base/mac/url_conversions.h" |
| + |
| +namespace ios_web_view { |
| + |
| +WebViewJavaScriptDialogPresenter::WebViewJavaScriptDialogPresenter( |
| + CWVWebView* web_view, |
| + id<CWVUIDelegate> ui_delegate) |
| + : ui_delegate_(ui_delegate), web_view_(web_view) {} |
| + |
| +WebViewJavaScriptDialogPresenter::~WebViewJavaScriptDialogPresenter() = default; |
| + |
| +void WebViewJavaScriptDialogPresenter::RunJavaScriptDialog( |
| + web::WebState* web_state, |
| + const GURL& origin_url, |
| + web::JavaScriptDialogType dialog_type, |
| + NSString* message_text, |
| + NSString* default_prompt_text, |
| + const web::DialogClosedCallback& callback) { |
| + switch (dialog_type) { |
| + case web::JAVASCRIPT_DIALOG_TYPE_ALERT: { |
|
Eugene But (OOO till 7-30)
2017/02/27 22:01:05
Do you still need braces?
michaeldo
2017/02/27 23:39:15
Nope. Removed.
|
| + HandleJavaScriptAlert(origin_url, message_text, callback); |
| + break; |
| + } |
| + case web::JAVASCRIPT_DIALOG_TYPE_CONFIRM: { |
| + HandleJavaScriptConfirmDialog(origin_url, message_text, callback); |
| + break; |
| + } |
| + case web::JAVASCRIPT_DIALOG_TYPE_PROMPT: { |
| + HandleJavaScriptTextPrompt(origin_url, message_text, default_prompt_text, |
| + callback); |
| + break; |
| + } |
| + default: |
|
Eugene But (OOO till 7-30)
2017/02/27 22:01:05
Please remove default. It is better to get a compi
michaeldo
2017/02/27 23:39:15
Done.
|
| + break; |
| + } |
| +} |
| + |
| +void WebViewJavaScriptDialogPresenter::HandleJavaScriptAlert( |
| + const GURL& origin_url, |
| + NSString* message_text, |
| + const web::DialogClosedCallback& callback) { |
| + if ([ui_delegate_ respondsToSelector:@selector |
|
Eugene But (OOO till 7-30)
2017/02/27 22:01:05
Optional nit: do you want to swap if-else block an
michaeldo
2017/02/27 23:39:15
Done.
|
| + (webView:runJavaScriptAlertPanelWithMessage:pageURL |
| + :completionHandler:)]) { |
| + web::DialogClosedCallback scoped_callback = callback; |
| + [ui_delegate_ webView:web_view_ |
| + runJavaScriptAlertPanelWithMessage:message_text |
| + pageURL:net::NSURLWithGURL(origin_url) |
| + completionHandler:^{ |
| + if (!scoped_callback.is_null()) { |
| + scoped_callback.Run(YES, nil); |
| + } |
| + }]; |
| + } else { |
| + callback.Run(NO, nil); |
| + } |
| +} |
| + |
| +void WebViewJavaScriptDialogPresenter::HandleJavaScriptConfirmDialog( |
| + const GURL& origin_url, |
| + NSString* message_text, |
| + const web::DialogClosedCallback& callback) { |
| + if ([ui_delegate_ respondsToSelector:@selector |
| + (webView:runJavaScriptConfirmPanelWithMessage:pageURL |
| + :completionHandler:)]) { |
| + web::DialogClosedCallback scoped_callback = callback; |
| + [ui_delegate_ webView:web_view_ |
| + runJavaScriptConfirmPanelWithMessage:message_text |
| + pageURL:net::NSURLWithGURL(origin_url) |
| + completionHandler:^(BOOL is_confirmed) { |
| + if (!scoped_callback.is_null()) { |
| + scoped_callback.Run(is_confirmed, nil); |
| + } |
| + }]; |
| + } else { |
| + callback.Run(NO, nil); |
| + } |
| +} |
| + |
| +void WebViewJavaScriptDialogPresenter::HandleJavaScriptTextPrompt( |
| + const GURL& origin_url, |
| + NSString* message_text, |
| + NSString* default_prompt_text, |
| + const web::DialogClosedCallback& callback) { |
| + if ([ui_delegate_ respondsToSelector:@selector |
| + (webView:runJavaScriptTextInputPanelWithPrompt:defaultText |
| + :pageURL:completionHandler:)]) { |
| + web::DialogClosedCallback scoped_callback = callback; |
| + [ui_delegate_ webView:web_view_ |
| + runJavaScriptTextInputPanelWithPrompt:message_text |
| + defaultText:default_prompt_text |
| + pageURL:net::NSURLWithGURL(origin_url) |
| + completionHandler:^(NSString* text_input) { |
| + if (!scoped_callback.is_null()) { |
| + if (text_input == nil) { |
| + scoped_callback.Run(NO, nil); |
| + } else { |
| + scoped_callback.Run(YES, text_input); |
| + } |
| + } |
| + }]; |
| + } else { |
| + callback.Run(NO, nil); |
| + } |
| +} |
| + |
| +void WebViewJavaScriptDialogPresenter::CancelDialogs(web::WebState* web_state) { |
| +} |
| + |
| +void WebViewJavaScriptDialogPresenter::SetUIDelegate( |
| + id<CWVUIDelegate> ui_delegate) { |
| + ui_delegate_.reset(ui_delegate); |
| +} |
| + |
| +} // namespace ios_web_view |