1. 21 Jun, 2009 4 commits
    • levin@chromium.org's avatar
      2009-06-21 David Levin <levin@chromium.org> · 0255857a
      levin@chromium.org authored
              Reviewed by NOBODY.
      
              Speculative tiger build fix and a windows build fix.
              More fixes may still be in order.
      
              * WebCore.vcproj/WebCoreCommon.vsprops:
              * dom/default/PlatformMessagePortChannel.h:
              (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@44918 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      0255857a
    • levin@chromium.org's avatar
      2009-06-21 David Levin <levin@chromium.org> · 7ee2077b
      levin@chromium.org authored
              Reviewed by NOBODY (Speculative tiger build fix).
      
              * dom/default/PlatformMessagePortChannel.h:
              (WebCore::PlatformMessagePortChannel::MessagePortQueue::~MessagePortQueue):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@44917 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      7ee2077b
    • levin@chromium.org's avatar
      WebCore: · a12e4afc
      levin@chromium.org authored
      2009-06-21  Drew Wilson  <atwilson@google.com>
      
              Reviewed by David Levin.
      
              <https://bugs.webkit.org/show_bug.cgi?id=26448>
      
              Added optimized GC for MessagePorts when the entangled port is run by the same thread.
              Fixed bug in isProxyFor() that was not properly throwing an exception when trying to clone the entangled port.
      
              * bindings/js/JSDOMBinding.cpp:
              (WebCore::markActiveObjectsForContext):
              Now marks remotely entangled ports as in-use, in addition to those with pending activity.
              * bindings/js/JSMessagePortCustom.cpp:
              (WebCore::JSMessagePort::mark):
              Now checks if the entangled port is local (run by same thread) and if so mark()s it.
              * dom/MessagePort.cpp:
              (WebCore::MessagePort::postMessage):
              (WebCore::MessagePort::disentangle):
              Removes cloned ports from the ScriptExecutionContext - this allows cloned ports to be GC'd as otherwise they look like remotely entangled ports.
              (WebCore::MessagePort::start):
              (WebCore::MessagePort::locallyEntangledPort):
              Added API for fetching the entangled port if it is run by the same thread
              * dom/MessagePort.h:
              * dom/MessagePortProxyWrapper.h:
              * dom/default/MessagePortProxy.cpp:
              (WebCore::MessagePortProxyWrapper::locallyEntangledPort):
              Added API for fetching the entangled port if it is run by the same thread
              (WebCore::MessagePortProxy::hasPendingActivity):
              Changed definition of hasPendingActivity() to be stricter - only returns true if there are pending messages.
              (WebCore::MessagePortProxy::locallyEntangledPort):
              * dom/default/MessagePortProxy.h:
      
      LayoutTests:
      
      2009-06-21  Drew Wilson  <atwilson@google.com>
      
              Reviewed by David Levin.
      
              <https://bugs.webkit.org/show_bug.cgi?id=26448>
      
              New tests for MessagePort GC cases that weren't previously covered.
      
              * fast/events/message-channel-gc-4-expected.txt: Added.
              Test for case where both MessagePorts are in-transit (cloned) when a GC occurs.
              * fast/events/message-channel-gc-4.html-disabled: Added.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@44916 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      a12e4afc
    • 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