Added |-cancelJavaScriptDialogsForWebController:| to UI delegate.
This is necessary to cancel enqueued JavaScript dialogs before their
associated web view is deallocated.
BUG=564916
Review URL: https://codereview.chromium.org/1504493002
Cr-Commit-Position: refs/heads/master@{#364268}
diff --git a/ios/web/public/web_state/crw_web_user_interface_delegate.h b/ios/web/public/web_state/crw_web_user_interface_delegate.h
index f293b2d..47cfa3e 100644
--- a/ios/web/public/web_state/crw_web_user_interface_delegate.h
+++ b/ios/web/public/web_state/crw_web_user_interface_delegate.h
@@ -49,6 +49,10 @@
completionHandler:
(void (^)(NSString* input))completionHandler;
+// Cancels any outstanding JavaScript dialogs requested by the functions above.
+- (void)cancelJavaScriptDialogsForWebController:
+ (CRWWebController*)webController;
+
// Displays a context menu for DOM element. |point| and |view| represent the
// location and UIView where the context menu was triggered by a user gesture.
// |menuInfo| keys are defined in crw_context_menu_provider.h.
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 43b1f97..9d14095 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -691,6 +691,11 @@
if (!self.webView)
return;
+ SEL cancelDialogsSelector =
+ @selector(cancelJavaScriptDialogsForWebController:);
+ if ([self.UIDelegate respondsToSelector:cancelDialogsSelector])
+ [self.UIDelegate cancelJavaScriptDialogsForWebController:self];
+
if (allowCache)
_expectedReconstructionURL = [self currentNavigationURL];
else
diff --git a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
index 6e5e4d7..3d0fcc6 100644
--- a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
+++ b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
@@ -943,10 +943,13 @@
- (void)webViewWebProcessDidCrash {
_webProcessIsDead = YES;
- if ([self.delegate respondsToSelector:
- @selector(webControllerWebProcessDidCrash:)]) {
+ SEL cancelDialogsSelector =
+ @selector(cancelJavaScriptDialogsForWebController:);
+ if ([self.UIDelegate respondsToSelector:cancelDialogsSelector])
+ [self.UIDelegate cancelJavaScriptDialogsForWebController:self];
+ SEL rendererCrashSelector = @selector(webControllerWebProcessDidCrash:);
+ if ([self.delegate respondsToSelector:rendererCrashSelector])
[self.delegate webControllerWebProcessDidCrash:self];
- }
}
- (void)queryPageReferrerPolicy:(void(^)(NSString*))responseHandler {