Changeset 252056 in webkit


Ignore:
Timestamp:
Nov 5, 2019 8:58:57 AM (4 years ago)
Author:
youenn@apple.com
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.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r252051 r252056  
     12019-11-05  youenn fablet  <youenn@apple.com>
     2
     3        MessagePort::close cannot assume that is execution context is not null
     4        https://bugs.webkit.org/show_bug.cgi?id=203843
     5        <rdar://problem/55599877>
     6
     7        Reviewed by Chris Dumez.
     8
     9        * http/tests/workers/service/basic-messageport-expected.txt:
     10        * http/tests/workers/service/resources/basic-messageport.js:
     11        (async.doLog):
     12        (then):
     13        (): Deleted.
     14
    1152019-11-05  Eric Carlson  <eric.carlson@apple.com>
    216
  • trunk/LayoutTests/http/tests/workers/service/basic-messageport-expected.txt

    r233554 r252056  
    22Message received from ServiceWorker: PASS: Got the MessagePort
    33Message received from ServiceWorker: messageport thing received....
     4Test finished
    45
  • trunk/LayoutTests/http/tests/workers/service/resources/basic-messageport.js

    r233554 r252056  
    11var messages = [];
     2var registration;
    23
    3 function doLog(message)
     4async function doLog(message)
    45{
    56    messages.push(message)
     
    89        for (let message of messages)
    910            log(message);
     11        channel.port2.close();
     12        if (registration)
     13            await registration.unregister();
     14        log("Test finished");
    1015        finishSWTest();
    1116    }
     
    2126}
    2227
    23 navigator.serviceWorker.register("resources/messageport-echo-worker.js", { }).then(function(registration) {
     28navigator.serviceWorker.register("resources/messageport-echo-worker.js", { }).then((r) => {
     29    registration = r;
    2430    try {
    2531        registration.installing.postMessage("Here is your port", [channel.port2]);
     
    2733    } catch(e) {
    2834        doLog("Exception: " + e);
     35        if (registration)
     36            registration.unregister();
    2937        finishSWTest();
    3038    }
  • trunk/Source/WebCore/ChangeLog

    r252055 r252056  
     12019-11-05  youenn fablet  <youenn@apple.com>
     2
     3        MessagePort::close cannot assume that is execution context is not null
     4        https://bugs.webkit.org/show_bug.cgi?id=203843
     5        <rdar://problem/55599877>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Covered by updated test.
     10
     11        * dom/MessagePort.cpp:
     12        (WebCore::MessagePort::close):
     13        Do not use m_scriptExecutionContext since it can be nulled out in MessagePort::disentangle.
     14        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
     15        (WebCore::WorkerMessagePortChannelProvider::messagePortClosed):
     16
    1172019-11-05  James Darpinian  <jdarpinian@chromium.org>
    218
  • trunk/Source/WebCore/dom/MessagePort.cpp

    r251425 r252056  
    227227    m_closed = true;
    228228
    229     MessagePortChannelProvider::fromContext(*m_scriptExecutionContext).messagePortClosed(m_identifier);
     229    if (isMainThread())
     230        MessagePortChannelProvider::singleton().messagePortClosed(m_identifier);
     231    else {
     232        callOnMainThread([identifier = m_identifier] {
     233            MessagePortChannelProvider::singleton().messagePortClosed(identifier);
     234        });
     235    }
     236
    230237    removeAllEventListeners();
    231238    m_eventQueue->close();
  • trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp

    r249637 r252056  
    7575}
    7676
    77 void WorkerMessagePortChannelProvider::messagePortClosed(const MessagePortIdentifier& local)
     77void WorkerMessagePortChannelProvider::messagePortClosed(const MessagePortIdentifier&)
    7878{
    79     callOnMainThread([local] {
    80         MessagePortChannelProvider::singleton().messagePortClosed(local);
    81     });
     79    ASSERT_NOT_REACHED();
    8280}
    8381
Note: See TracChangeset for help on using the changeset viewer.