Index: ios/web/web_state/ui/crw_wk_script_message_router.mm |
diff --git a/ios/web/web_state/ui/crw_wk_script_message_router.mm b/ios/web/web_state/ui/crw_wk_script_message_router.mm |
index 5699abdfb92067217ee1189e988c8afada72153d..0e1dfbb33e0dd333119542563b4cbd246663c9b7 100644 |
--- a/ios/web/web_state/ui/crw_wk_script_message_router.mm |
+++ b/ios/web/web_state/ui/crw_wk_script_message_router.mm |
@@ -100,8 +100,12 @@ |
- (void)tryRemoveScriptMessageHandlerForName:(NSString*)messageName |
webView:(WKWebView*)webView { |
NSMapTable* webViewToHandlerMap = [_handlers objectForKey:messageName]; |
- if (![webViewToHandlerMap objectForKey:webView]) |
+ id handler = [webViewToHandlerMap objectForKey:webView]; |
+ if (!handler) |
return; |
+ // Extend the lifetime of |handler| so removeScriptMessageHandlerForName: can |
+ // be called from inside of |handler|. |
+ [[handler retain] autorelease]; |
if (webViewToHandlerMap.count == 1) { |
[_handlers removeObjectForKey:messageName]; |
[_userContentController removeScriptMessageHandlerForName:messageName]; |