Title: [228150] trunk
Revision
228150
Author
commit-qu...@webkit.org
Date
2018-02-05 19:57:32 -0800 (Mon, 05 Feb 2018)

Log Message

Crash in imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html
https://bugs.webkit.org/show_bug.cgi?id=182422
<rdar://problem/37182665>

Patch by Youenn Fablet <you...@apple.com> on 2018-02-05
Reviewed by Alex Christensen.

Source/WebCore:

Covered by test no longer crashing in Debug mode.
Make sure completionHandler is called on the main thread.

* platform/network/cocoa/WebCoreNSURLSession.mm:
(-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):

LayoutTests:

* platform/mac/TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (228149 => 228150)


--- trunk/LayoutTests/ChangeLog	2018-02-06 03:50:30 UTC (rev 228149)
+++ trunk/LayoutTests/ChangeLog	2018-02-06 03:57:32 UTC (rev 228150)
@@ -1,3 +1,13 @@
+2018-02-05  Youenn Fablet  <you...@apple.com>
+
+        Crash in imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html
+        https://bugs.webkit.org/show_bug.cgi?id=182422
+        <rdar://problem/37182665>
+
+        Reviewed by Alex Christensen.
+
+        * platform/mac/TestExpectations:
+
 2018-02-05  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Test gardening after r228044

Modified: trunk/LayoutTests/platform/mac/TestExpectations (228149 => 228150)


--- trunk/LayoutTests/platform/mac/TestExpectations	2018-02-06 03:50:30 UTC (rev 228149)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2018-02-06 03:57:32 UTC (rev 228150)
@@ -1740,4 +1740,4 @@
 webkit.org/b/181831 [ HighSierra+ ] fast/forms/searchfield-heights.html [ Pass Failure ]
 
 webkit.org/b/182422 imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html [ Pass Failure ]
-webkit.org/b/182422 imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html [ Skip ]
+webkit.org/b/182422 imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html [ Pass Failure ]

Modified: trunk/Source/WebCore/ChangeLog (228149 => 228150)


--- trunk/Source/WebCore/ChangeLog	2018-02-06 03:50:30 UTC (rev 228149)
+++ trunk/Source/WebCore/ChangeLog	2018-02-06 03:57:32 UTC (rev 228150)
@@ -1,3 +1,17 @@
+2018-02-05  Youenn Fablet  <you...@apple.com>
+
+        Crash in imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html
+        https://bugs.webkit.org/show_bug.cgi?id=182422
+        <rdar://problem/37182665>
+
+        Reviewed by Alex Christensen.
+
+        Covered by test no longer crashing in Debug mode.
+        Make sure completionHandler is called on the main thread.
+
+        * platform/network/cocoa/WebCoreNSURLSession.mm:
+        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):
+
 2018-02-05  Filip Pizlo  <fpi...@apple.com>
 
         Global objects should be able to use TLCs to allocate from different blocks from each other

Modified: trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm (228149 => 228150)


--- trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm	2018-02-06 03:50:30 UTC (rev 228149)
+++ trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm	2018-02-06 03:57:32 UTC (rev 228150)
@@ -389,7 +389,10 @@
 
 void WebCoreNSURLSessionDataTaskClient::redirectReceived(PlatformMediaResource& resource, ResourceRequest&& request, const ResourceResponse& response, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
-    [m_task resource:resource receivedRedirect:response request:WTFMove(request) completionHandler:WTFMove(completionHandler)];
+    [m_task resource:resource receivedRedirect:response request:WTFMove(request) completionHandler: [completionHandler = WTFMove(completionHandler)] (auto&& request) {
+        ASSERT(isMainThread());
+        completionHandler(WTFMove(request));
+    }];
 }
 
 void WebCoreNSURLSessionDataTaskClient::accessControlCheckFailed(PlatformMediaResource& resource, const ResourceError& error)
@@ -618,20 +621,32 @@
 - (void)resource:(PlatformMediaResource&)resource receivedRedirect:(const ResourceResponse&)response request:(ResourceRequest&&)request completionHandler:(CompletionHandler<void(ResourceRequest&&)>&&)completionHandler
 {
     ASSERT_UNUSED(resource, &resource == _resource);
-    [self.session addDelegateOperation:[strongSelf = retainPtr(self), response = retainPtr(response.nsURLResponse()), request = WTFMove(request), completionHandler = WTFMove(completionHandler)] () mutable {
+    [self.session addDelegateOperation:[strongSelf = retainPtr(self), response = retainPtr(response.nsURLResponse()), request = request.isolatedCopy(), completionHandler = WTFMove(completionHandler)] () mutable {
         if (![response isKindOfClass:[NSHTTPURLResponse class]]) {
             ASSERT_NOT_REACHED();
-            return completionHandler(WTFMove(request));
+            callOnMainThread([request = WTFMove(request), completionHandler = WTFMove(completionHandler)] () mutable {
+                completionHandler(WTFMove(request));
+            });
+            return;
         }
         
         id<NSURLSessionDataDelegate> dataDelegate = (id<NSURLSessionDataDelegate>)strongSelf.get().session.delegate;
         if ([dataDelegate respondsToSelector:@selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)]) {
             auto completionHandlerBlock = BlockPtr<void(NSURLRequest *)>::fromCallable([completionHandler = WTFMove(completionHandler)](NSURLRequest *newRequest) mutable {
+                if (!isMainThread()) {
+                    callOnMainThread([request = ResourceRequest { newRequest }, completionHandler = WTFMove(completionHandler)] () mutable {
+                        completionHandler(WTFMove(request));
+                    });
+                    return;
+                }
                 completionHandler(newRequest);
             });
             [dataDelegate URLSession:(NSURLSession *)strongSelf.get().session task:(NSURLSessionTask *)strongSelf.get() willPerformHTTPRedirection:(NSHTTPURLResponse *)response.get() newRequest:request.nsURLRequest(DoNotUpdateHTTPBody) completionHandler:completionHandlerBlock.get()];
-        } else
-            completionHandler(WTFMove(request));
+        } else {
+            callOnMainThread([request = WTFMove(request), completionHandler = WTFMove(completionHandler)] () mutable {
+                completionHandler(WTFMove(request));
+            });
+        }
     }];
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to