Skip to content
  • levin@chromium.org's avatar
    JavaScriptCore: · 3affb89e
    levin@chromium.org authored
    2009-06-21  Drew Wilson  <atwilson@google.com>
    
            Reviewed by David Levin.
    
            <https://bugs.webkit.org/show_bug.cgi?id=25043>
            Added support for multi-threaded MessagePorts.
    
            * wtf/MessageQueue.h:
            (WTF::::appendAndCheckEmpty):
                Added API to test whether the queue was empty before adding an element.
    
    WebCore:
    
    2009-06-21  Drew Wilson  <atwilson@google.com>
    
            Reviewed by David Levin.
    
            <https://bugs.webkit.org/show_bug.cgi?id=25043>
            Removed obsolete MessagePort.startConversation(), active and onclose APIs.
    
            Refactored MessagePortProxy into MessagePortChannel and a platform-dependent PlatformMessagePortChannel
            implementation. Modified APIs to simplify cross-process implementations by moving the messaging code
            entirely into the platform-dependent proxy.
    
            Created a thread-safe default PlatformMessagePortChannel implementation.
    
            Changed DOMWindow messaging to create the MessageEvent in the target ScriptExecutionContext to match how
            cross-thread MessagePorts work.
    
            * GNUMakefile.am:
            * WebCore.vcproj/WebCore.vcproj:
            * WebCore.xcodeproj/project.pbxproj:
                Added MessagePortChannel/PlatformMessagePortChannel files.
            * bindings/js/JSMessagePortCustom.cpp:
            (WebCore::JSMessagePort::mark):
                Changed ports to not mark their entangled pair as reachable, per the spec.
            * bindings/v8/custom/V8MessagePortCustom.cpp:
            * dom/MessageChannel.cpp:
            (WebCore::MessageChannel::MessageChannel):
                Updated to use PlatformMessagePortChannel::createChannel() to entangle the ports.
            * dom/MessagePort.cpp:
            (WebCore::MessagePort::MessagePort):
            (WebCore::MessagePort::~MessagePort):
            (WebCore::MessagePort::postMessage):
            (WebCore::MessagePort::disentangle):
            (WebCore::MessagePort::messageAvailable):
            (WebCore::MessagePort::start):
            (WebCore::MessagePort::close):
            (WebCore::MessagePort::entangle):
            (WebCore::MessagePort::contextDestroyed):
            (WebCore::MessagePort::dispatchMessages):
            (WebCore::MessagePort::setOnmessage):
            (WebCore::MessagePort::hasPendingActivity):
                Changed these APIs to delegate to new PlatformMessagePortChannel APIs.
            * dom/MessagePort.h:
                Renamed isQueueOpen() to started().
            * dom/MessagePort.idl:
                Removed startConversation and onclose.
            * dom/MessagePortProxy.h: Removed.
            * dom/MessagePortChannel.cpp: Added.
            (WebCore::MessagePortChannel::EventData::create):
            (WebCore::MessagePortChannel::EventData::EventData):
            (WebCore::MessagePortChannel::~MessagePortChannel):
            * dom/MessagePortChannel.h: Added.
            (WebCore::MessagePortChannel::EventData::message):
            (WebCore::MessagePortChannel::EventData::channel):
                Changed EventData to hold a reference to a MessagePortChannel object instead of a MessagePort to enable cross-thread messaging.
            (WebCore::MessagePortChannel::MessagePortChannel):
            (WebCore::MessagePortChannel::create):
            * dom/ScriptExecutionContext.cpp:
            (WebCore:ScriptExecutionContext::dispatchMessagePortEvents):
                Renamed isQueueOpen() to started().
            * dom/default/PlatformMessagePortChannel.cpp: Added.
            (WebCore::MessagePortChannel::entangleIfOpen):
            (WebCore::MessagePortChannel::disentangle):
            (WebCore::MessagePortChannel::postMessageToRemote):
            (WebCore::MessagePortChannel::tryGetMessageFromRemote):
            (WebCore::MessagePortChannel::close):
            (WebCore::MessagePortChannel::isConnectedTo):
            (WebCore::MessagePortChannel::hasPendingActivity):
            (WebCore::PlatformMessagePortChannel::PlatformMessagePortChannel):
            (WebCore::PlatformMessagePortChannel::~PlatformMessagePortChannel):
            (WebCore::PlatformMessagePortChannel::createChannel):
            (WebCore::PlatformMessagePortChannel::entangleIfOpen):
            (WebCore::PlatformMessagePortChannel::disentangle):
            (WebCore::PlatformMessagePortChannel::setRemotePort):
            (WebCore::PlatformMessagePortChannel::remotePort):
            (WebCore::PlatformMessagePortChannel::entangledChannel):
            (WebCore::PlatformMessagePortChannel::setEntangledChannel):
            (WebCore::PlatformMessagePortChannel::postMessageToRemote):
            (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
            (WebCore::PlatformMessagePortChannel::isConnectedTo):
            (WebCore::PlatformMessagePortChannel::close):
            (WebCore::PlatformMessagePortChannel::closeInternal):
            (WebCore::PlatformMessagePortChannel::hasPendingActivity):
            * dom/default/PlatformMessagePortChannel.h: Added.
            (WebCore::PlatformMessagePortChannel::MessagePortQueue::create):
            (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
            (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
            (WebCore::PlatformMessagePortChannel::MessagePortQueue::isEmpty):
            (WebCore::PlatformMessagePortChannel::MessagePortQueue::MessagePortQueue):
            * page/DOMWindow.cpp:
            (WebCore::PostMessageTimer::PostMessageTimer):
                Changed DOMWindow messaging to create the MessageEvent in the target ScriptExecutionContext to match how cross-thread MessagePorts work.
            (WebCore::PostMessageTimer::event):
            (WebCore::DOMWindow::postMessage):
            (WebCore::DOMWindow::postMessageTimerFired):
    
    LayoutTests:
    
    2009-06-21  Drew Wilson  <atwilson@google.com>
    
            Reviewed by David Levin.
    
            <https://bugs.webkit.org/show_bug.cgi?id=25043>
            Updated MessageChannel/MessagePorts tests to reflect latest spec (close event has been removed).
            Added more tests of port cloning.
    
            * fast/events/message-channel-gc-2-expected.txt:
            * fast/events/message-channel-gc-2.html-disabled:
            * fast/events/message-channel-gc-3-expected.txt:
            * fast/events/message-channel-gc-3.html-disabled:
            * fast/events/message-channel-gc-expected.txt:
            * fast/events/message-channel-gc.html-disabled:
            * fast/events/message-port-clone-expected.txt: Added.
            * fast/events/message-port-clone.html-disabled: Added.
            * fast/events/message-port-expected.txt:
            * fast/events/message-port-no-wrapper-expected.txt: Added.
            * fast/events/message-port-onclose-expected.txt: Removed.
            * fast/events/message-port-onclose.html-disabled: Removed.
            * fast/events/message-port.html-disabled:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@44915 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    3affb89e