Title: [287676] trunk/Source/WebKit
Revision
287676
Author
[email protected]
Date
2022-01-06 02:23:42 -0800 (Thu, 06 Jan 2022)

Log Message

ServiceWorkerNavigationPreloader::didComplete should make sure to call its bodyCallback
https://bugs.webkit.org/show_bug.cgi?id=234884

Reviewed by Alex Christensen.

Covered by existing tests.

* NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
Call to responseCallback may destroy the ServiceWorkerNavigationPreloader.
To make sure to call its bodyCallback, we move it in the stack before calling responseCallback.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (287675 => 287676)


--- trunk/Source/WebKit/ChangeLog	2022-01-06 09:29:55 UTC (rev 287675)
+++ trunk/Source/WebKit/ChangeLog	2022-01-06 10:23:42 UTC (rev 287676)
@@ -1,3 +1,16 @@
+2022-01-06  Youenn Fablet  <[email protected]>
+
+        ServiceWorkerNavigationPreloader::didComplete should make sure to call its bodyCallback
+        https://bugs.webkit.org/show_bug.cgi?id=234884
+
+        Reviewed by Alex Christensen.
+
+        Covered by existing tests.
+
+        * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
+        Call to responseCallback may destroy the ServiceWorkerNavigationPreloader.
+        To make sure to call its bodyCallback, we move it in the stack before calling responseCallback.
+
 2021-10-30  Myles C. Maxfield  <[email protected]>
 
         [GPU Process] Small ImageBuffers cause the web process to crash

Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp (287675 => 287676)


--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp	2022-01-06 09:29:55 UTC (rev 287675)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp	2022-01-06 10:23:42 UTC (rev 287676)
@@ -201,11 +201,15 @@
 {
     m_networkLoad = nullptr;
 
-    if (auto callback = std::exchange(m_responseCallback, { }))
-        callback();
+    auto responseCallback = std::exchange(m_responseCallback, { });
+    auto bodyCallback = std::exchange(m_bodyCallback, { });
 
-    if (m_bodyCallback)
-        m_bodyCallback({ }, 0);
+    // After calling responseCallback or bodyCallback, |this| might be destroyed.
+    if (responseCallback)
+        responseCallback();
+
+    if (bodyCallback)
+        bodyCallback({ }, 0);
 }
 
 void ServiceWorkerNavigationPreloader::waitForResponse(ResponseCallback&& callback)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to