Title: [252056] trunk
Revision
252056
Author
[email protected]
Date
2019-11-05 08:58:57 -0800 (Tue, 05 Nov 2019)

Log Message

MessagePort::close cannot assume that is execution context is not null
https://bugs.webkit.org/show_bug.cgi?id=203843
<rdar://problem/55599877>

Reviewed by Chris Dumez.

Source/WebCore:

Covered by updated test.

* dom/MessagePort.cpp:
(WebCore::MessagePort::close):
Do not use m_scriptExecutionContext since it can be nulled out in MessagePort::disentangle.
* dom/messageports/WorkerMessagePortChannelProvider.cpp:
(WebCore::WorkerMessagePortChannelProvider::messagePortClosed):

LayoutTests:

* http/tests/workers/service/basic-messageport-expected.txt:
* http/tests/workers/service/resources/basic-messageport.js:
(async.doLog):
(then):
(): Deleted.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (252055 => 252056)


--- trunk/LayoutTests/ChangeLog	2019-11-05 16:52:31 UTC (rev 252055)
+++ trunk/LayoutTests/ChangeLog	2019-11-05 16:58:57 UTC (rev 252056)
@@ -1,3 +1,17 @@
+2019-11-05  youenn fablet  <[email protected]>
+
+        MessagePort::close cannot assume that is execution context is not null
+        https://bugs.webkit.org/show_bug.cgi?id=203843
+        <rdar://problem/55599877>
+
+        Reviewed by Chris Dumez.
+
+        * http/tests/workers/service/basic-messageport-expected.txt:
+        * http/tests/workers/service/resources/basic-messageport.js:
+        (async.doLog):
+        (then):
+        (): Deleted.
+
 2019-11-05  Eric Carlson  <[email protected]>
 
         [iOS] Update fast/forms/ios/file-upload-panel.html test and results

Modified: trunk/LayoutTests/http/tests/workers/service/basic-messageport-expected.txt (252055 => 252056)


--- trunk/LayoutTests/http/tests/workers/service/basic-messageport-expected.txt	2019-11-05 16:52:31 UTC (rev 252055)
+++ trunk/LayoutTests/http/tests/workers/service/basic-messageport-expected.txt	2019-11-05 16:58:57 UTC (rev 252056)
@@ -1,4 +1,5 @@
 Message received from MessagePort: MessagePort echo: Message to a port!
 Message received from ServiceWorker: PASS: Got the MessagePort
 Message received from ServiceWorker: messageport thing received....
+Test finished
 

Modified: trunk/LayoutTests/http/tests/workers/service/resources/basic-messageport.js (252055 => 252056)


--- trunk/LayoutTests/http/tests/workers/service/resources/basic-messageport.js	2019-11-05 16:52:31 UTC (rev 252055)
+++ trunk/LayoutTests/http/tests/workers/service/resources/basic-messageport.js	2019-11-05 16:58:57 UTC (rev 252056)
@@ -1,6 +1,7 @@
 var messages = [];
+var registration;
 
-function doLog(message)
+async function doLog(message)
 {
     messages.push(message)
     if (messages.length === 3) {
@@ -7,6 +8,10 @@
         messages.sort();
         for (let message of messages)
             log(message);
+        channel.port2.close();
+        if (registration)
+            await registration.unregister();
+        log("Test finished");
         finishSWTest();
     }
 }
@@ -20,12 +25,15 @@
     doLog("Message received from MessagePort: " + event.data);
 }
 
-navigator.serviceWorker.register("resources/messageport-echo-worker.js", { }).then(function(registration) {
+navigator.serviceWorker.register("resources/messageport-echo-worker.js", { }).then((r) => {
+    registration = r;
     try {
         registration.installing.postMessage("Here is your port", [channel.port2]);
         channel.port1.postMessage("Message to a port!");
     } catch(e) {
         doLog("Exception: " + e);
+        if (registration)
+            registration.unregister();
         finishSWTest();
     }
 });

Modified: trunk/Source/WebCore/ChangeLog (252055 => 252056)


--- trunk/Source/WebCore/ChangeLog	2019-11-05 16:52:31 UTC (rev 252055)
+++ trunk/Source/WebCore/ChangeLog	2019-11-05 16:58:57 UTC (rev 252056)
@@ -1,3 +1,19 @@
+2019-11-05  youenn fablet  <[email protected]>
+
+        MessagePort::close cannot assume that is execution context is not null
+        https://bugs.webkit.org/show_bug.cgi?id=203843
+        <rdar://problem/55599877>
+
+        Reviewed by Chris Dumez.
+
+        Covered by updated test.
+
+        * dom/MessagePort.cpp:
+        (WebCore::MessagePort::close):
+        Do not use m_scriptExecutionContext since it can be nulled out in MessagePort::disentangle.
+        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
+        (WebCore::WorkerMessagePortChannelProvider::messagePortClosed):
+
 2019-11-05  James Darpinian  <[email protected]>
 
         Enable powerPreference controlled GPU switching with ANGLE

Modified: trunk/Source/WebCore/dom/MessagePort.cpp (252055 => 252056)


--- trunk/Source/WebCore/dom/MessagePort.cpp	2019-11-05 16:52:31 UTC (rev 252055)
+++ trunk/Source/WebCore/dom/MessagePort.cpp	2019-11-05 16:58:57 UTC (rev 252056)
@@ -226,7 +226,14 @@
         return;
     m_closed = true;
 
-    MessagePortChannelProvider::fromContext(*m_scriptExecutionContext).messagePortClosed(m_identifier);
+    if (isMainThread())
+        MessagePortChannelProvider::singleton().messagePortClosed(m_identifier);
+    else {
+        callOnMainThread([identifier = m_identifier] {
+            MessagePortChannelProvider::singleton().messagePortClosed(identifier);
+        });
+    }
+
     removeAllEventListeners();
     m_eventQueue->close();
 }

Modified: trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp (252055 => 252056)


--- trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp	2019-11-05 16:52:31 UTC (rev 252055)
+++ trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp	2019-11-05 16:58:57 UTC (rev 252056)
@@ -74,11 +74,9 @@
     });
 }
 
-void WorkerMessagePortChannelProvider::messagePortClosed(const MessagePortIdentifier& local)
+void WorkerMessagePortChannelProvider::messagePortClosed(const MessagePortIdentifier&)
 {
-    callOnMainThread([local] {
-        MessagePortChannelProvider::singleton().messagePortClosed(local);
-    });
+    ASSERT_NOT_REACHED();
 }
 
 void WorkerMessagePortChannelProvider::postMessageToRemote(const MessageWithMessagePorts& message, const MessagePortIdentifier& remoteTarget)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to