Index: ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/web_java_script_dialog_presenter.mm |
diff --git a/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/web_java_script_dialog_presenter.mm b/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/web_java_script_dialog_presenter.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f91c41d5a5eb4e3d810130e41aa7e79086530072 |
--- /dev/null |
+++ b/ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/web_java_script_dialog_presenter.mm |
@@ -0,0 +1,53 @@ |
+// 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/web_java_script_dialog_presenter.h" |
+ |
+#import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_coordinator.h" |
+#import "ios/clean/chrome/browser/ui/dialogs/java_script_dialogs/java_script_dialog_state.h" |
+#import "ios/clean/chrome/browser/ui/overlays/overlay_queue.h" |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+DEFINE_WEB_STATE_USER_DATA_KEY(WebJavaScriptDialogPresenter); |
+ |
+WebJavaScriptDialogPresenter::WebJavaScriptDialogPresenter( |
+ web::WebState* web_state) |
+ : web_state_(web_state) { |
+ DCHECK(web_state); |
+} |
+ |
+WebJavaScriptDialogPresenter::~WebJavaScriptDialogPresenter() {} |
+ |
+void WebJavaScriptDialogPresenter::RunJavaScriptDialog( |
+ web::WebState* web_state, |
+ const GURL& origin_url, |
+ web::JavaScriptDialogType dialog_type, |
+ NSString* message_text, |
+ NSString* default_prompt_text, |
+ const web::DialogClosedCallback& callback) { |
+ // This presenter should only attempt to present dialogs from its associated |
+ // WebState. |
+ DCHECK_EQ(web_state_, web_state); |
+ // Create a new coordinator and add it to the overlay queue. |
+ JavaScriptDialogState* state = |
+ [JavaScriptDialogState stateWithWebState:web_state |
+ type:dialog_type |
+ originURL:origin_url |
+ message:message_text |
+ defaultPromptText:default_prompt_text |
+ callback:callback]; |
+ JavaScriptDialogCoordinator* dialog_coordinator = |
+ [[JavaScriptDialogCoordinator alloc] initWithState:state]; |
+ OverlayQueue::FromWebState(web_state_)->AddOverlay(dialog_coordinator); |
+} |
+ |
+void WebJavaScriptDialogPresenter::CancelDialogs(web::WebState* web_state) { |
+ // This presenter should only attempt to block dialogs from its associated |
+ // WebState. |
+ DCHECK_EQ(web_state_, web_state); |
+ OverlayQueue::FromWebState(web_state_)->CancelOverlays(); |
+} |