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

Unified Diff: ios/web/web_state/ui/web_view_js_utils.mm

Issue 1416743008: [ios] Do not copy JS evaluation handlers before passing to WKWebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated comments Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/web_state/ui/web_view_js_utils.mm
diff --git a/ios/web/web_state/ui/web_view_js_utils.mm b/ios/web/web_state/ui/web_view_js_utils.mm
index 8f7b202b044bd60289af98e906e276c243cbe1c2..bd5b9434b88c8d7aad6ba0037d4b4f700119eb9f 100644
--- a/ios/web/web_state/ui/web_view_js_utils.mm
+++ b/ios/web/web_state/ui/web_view_js_utils.mm
@@ -56,22 +56,16 @@ void EvaluateJavaScript(WKWebView* web_view,
NSString* script,
JavaScriptCompletion completion_handler) {
DCHECK([script length]);
- // __block qualifier ensures that web_view_completion_handler is correctly
- // captured by itself.
- __block void (^web_view_completion_handler)(id, NSError*) = nil;
- // Do not create a web_view_completion_handler if no |handler| is passed to
- // this function. This results in no creation of an unnecessary block.
+ void (^web_view_completion_handler)(id, NSError*) = nil;
+ // Do not create a web_view_completion_handler if no |completion_handler| is
+ // passed to this function. WKWebView guarantees to call all completion
+ // handlers before deallocation. Passing nil as completion handler (when
+ // appropriate) may speed up web view deallocation, because there will be no
+ // need to call those completion handlers.
if (completion_handler) {
- // WKWebView crashes on deallocation when it flushes scripts that did not
- // finish the execution but have |completion_handler|. Passing
- // |completion_handler| ownership to the block itself and keeping it alive
- // until it's executed fixes the crash. No memory leak is expected since
- // |completion_handler| is always executed even if WKWebView is deallocated.
- // https://bugs.webkit.org/show_bug.cgi?id=140203
- web_view_completion_handler = [^(id result, NSError* error) {
+ web_view_completion_handler = ^(id result, NSError* error) {
completion_handler(UIResultFromWKResult(result), error);
- [web_view_completion_handler autorelease];
- } copy];
+ };
}
[web_view evaluateJavaScript:script
completionHandler:web_view_completion_handler];
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698