Title: [93986] trunk
Revision
93986
Author
[email protected]
Date
2011-08-29 10:57:55 -0700 (Mon, 29 Aug 2011)

Log Message

postMessage raises INVALID_STATE_ERR instead of DATA_CLONE_ERR in many cases.
https://bugs.webkit.org/show_bug.cgi?id=66713

Reviewed by Dmitry Titov.

Source/WebCore:

See http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#posting-messages for postMessage

* bindings/js/JSMessagePortCustom.cpp:
(WebCore::fillMessagePortArray):
* bindings/v8/custom/V8MessagePortCustom.cpp:
(WebCore::getMessagePortArray):
* dom/MessagePort.cpp:
(WebCore::MessagePort::postMessage):
(WebCore::MessagePort::disentanglePorts):

LayoutTests:

* fast/events/message-port-clone-expected.txt: Output changed from INVALID_STATE_ERR to DATA_CLONE_ERR.
* fast/events/message-port-multi-expected.txt: Ditto.
* fast/workers/worker-context-multi-port-expected.txt:  Ditto.
* fast/workers/worker-multi-port-expected.txt:  Ditto.
* platform/chromium-win/fast/events/message-port-multi-expected.txt: Ditto.
* platform/chromium-win/fast/workers/worker-context-multi-port-expected.txt: Ditto.
* platform/chromium-win/fast/workers/worker-multi-port-expected.txt: Ditto.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (93985 => 93986)


--- trunk/LayoutTests/ChangeLog	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/ChangeLog	2011-08-29 17:57:55 UTC (rev 93986)
@@ -1,3 +1,18 @@
+2011-08-22  David Levin  <[email protected]>
+
+        postMessage raises INVALID_STATE_ERR instead of DATA_CLONE_ERR in many cases.
+        https://bugs.webkit.org/show_bug.cgi?id=66713
+
+        Reviewed by Dmitry Titov.
+
+        * fast/events/message-port-clone-expected.txt: Output changed from INVALID_STATE_ERR to DATA_CLONE_ERR.
+        * fast/events/message-port-multi-expected.txt: Ditto.
+        * fast/workers/worker-context-multi-port-expected.txt:  Ditto.
+        * fast/workers/worker-multi-port-expected.txt:  Ditto.
+        * platform/chromium-win/fast/events/message-port-multi-expected.txt: Ditto.
+        * platform/chromium-win/fast/workers/worker-context-multi-port-expected.txt: Ditto.
+        * platform/chromium-win/fast/workers/worker-multi-port-expected.txt: Ditto.
+
 2011-08-29  Julien Chaffraix  <[email protected]>
 
         Assertion failure in WebCore::RenderFlow::rightmostPosition

Modified: trunk/LayoutTests/fast/events/message-port-clone-expected.txt (93985 => 93986)


--- trunk/LayoutTests/fast/events/message-port-clone-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/fast/events/message-port-clone-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -2,8 +2,8 @@
 
 Should be a series of SUCCESS messages, followed with DONE.
 
-SUCCESS: Posting port to itself: Error: INVALID_STATE_ERR: DOM Exception 11
-SUCCESS: Posting entangled port: Error: INVALID_STATE_ERR: DOM Exception 11
+SUCCESS: Posting port to itself: Error: DATA_CLONE_ERR: DOM Exception 25
+SUCCESS: Posting entangled port: Error: DATA_CLONE_ERR: DOM Exception 25
 SUCCESS: Posting cloned port.
 SUCCESS: Posted messages to cloned port.
 SUCCESS: Cloned both endpoints of a channel.

Modified: trunk/LayoutTests/fast/events/message-port-multi-expected.txt (93985 => 93986)


--- trunk/LayoutTests/fast/events/message-port-multi-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/fast/events/message-port-multi-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -3,13 +3,13 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS channel.port1.postMessage("same port", [channel.port1]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
-PASS channel.port1.postMessage("entangled port", [channel.port2]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
-PASS channel.port1.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS channel.port1.postMessage("same port", [channel.port1]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
+PASS channel.port1.postMessage("entangled port", [channel.port2]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
+PASS channel.port1.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
 PASS channel.port1.postMessage("notAPort", [channel3.port1, {}, channel3.port2]) threw exception TypeError: Type error.
 PASS channel.port1.postMessage("notAnArray", channel3.port1) threw exception TypeError: Type error.
 PASS channel.port1.postMessage("notASequence", [{length: 3}]) threw exception TypeError: Type error.
-PASS channel.port1.postMessage("largeSequence", largePortArray) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS channel.port1.postMessage("largeSequence", largePortArray) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
 PASS event.ports is non-null and zero length when no port sent
 PASS event.ports is non-null and zero length when empty array sent
 PASS event.ports contains two ports when two ports sent

Modified: trunk/LayoutTests/fast/workers/worker-context-multi-port-expected.txt (93985 => 93986)


--- trunk/LayoutTests/fast/workers/worker-context-multi-port-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/fast/workers/worker-context-multi-port-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -6,7 +6,7 @@
 PASS event.ports is non-null and zero length when no port sent
 PASS event.ports is non-null and zero length when empty array sent
 PASS event.ports contains two ports when two ports sent
-PASS posting a null port did throw: Error: INVALID_STATE_ERR: DOM Exception 11
+PASS posting a null port did throw: Error: DATA_CLONE_ERR: DOM Exception 25
 PASS posting a non-port did throw: TypeError: Type error
 PASS event.ports contains two ports when two ports re-sent after error
 PASS posting a non-array did throw: TypeError: Type error

Modified: trunk/LayoutTests/fast/workers/worker-multi-port-expected.txt (93985 => 93986)


--- trunk/LayoutTests/fast/workers/worker-multi-port-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/fast/workers/worker-multi-port-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS worker.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS worker.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
 PASS worker.postMessage("notAPort", [channel3.port1, {}, channel3.port2]) threw exception TypeError: Type error.
 PASS worker.postMessage("notAnArray", channel3.port1) threw exception TypeError: Type error.
 PASS worker.postMessage("notASequence", [{length: 3}]) threw exception TypeError: Type error.

Modified: trunk/LayoutTests/platform/chromium-win/fast/events/message-port-multi-expected.txt (93985 => 93986)


--- trunk/LayoutTests/platform/chromium-win/fast/events/message-port-multi-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/platform/chromium-win/fast/events/message-port-multi-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -3,9 +3,9 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS channel.port1.postMessage("same port", [channel.port1]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
-PASS channel.port1.postMessage("entangled port", [channel.port2]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
-PASS channel.port1.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS channel.port1.postMessage("same port", [channel.port1]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
+PASS channel.port1.postMessage("entangled port", [channel.port2]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
+PASS channel.port1.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
 PASS channel.port1.postMessage("notAPort", [channel3.port1, {}, channel3.port2]) threw exception TypeError: MessagePortArray argument must contain only MessagePorts.
 PASS channel.port1.postMessage("notAnArray", channel3.port1) threw exception TypeError: MessagePortArray argument has no length attribute.
 PASS channel.port1.postMessage("notASequence", [{length: 3}]) threw exception TypeError: MessagePortArray argument must contain only MessagePorts.

Modified: trunk/LayoutTests/platform/chromium-win/fast/workers/worker-context-multi-port-expected.txt (93985 => 93986)


--- trunk/LayoutTests/platform/chromium-win/fast/workers/worker-context-multi-port-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/platform/chromium-win/fast/workers/worker-context-multi-port-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -6,7 +6,7 @@
 PASS event.ports is non-null and zero length when no port sent
 PASS event.ports is non-null and zero length when empty array sent
 PASS event.ports contains two ports when two ports sent
-PASS posting a null port did throw: Error: INVALID_STATE_ERR: DOM Exception 11
+PASS posting a null port did throw: Error: DATA_CLONE_ERR: DOM Exception 25
 PASS posting a non-port did throw: TypeError: MessagePortArray argument must contain only MessagePorts
 PASS event.ports contains two ports when two ports re-sent after error
 PASS posting a non-array did throw: TypeError: MessagePortArray argument has no length attribute

Modified: trunk/LayoutTests/platform/chromium-win/fast/workers/worker-multi-port-expected.txt (93985 => 93986)


--- trunk/LayoutTests/platform/chromium-win/fast/workers/worker-multi-port-expected.txt	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/LayoutTests/platform/chromium-win/fast/workers/worker-multi-port-expected.txt	2011-08-29 17:57:55 UTC (rev 93986)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS worker.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: INVALID_STATE_ERR: DOM Exception 11.
+PASS worker.postMessage("null port", [channel3.port1, null, channel3.port2]) threw exception Error: DATA_CLONE_ERR: DOM Exception 25.
 PASS worker.postMessage("notAPort", [channel3.port1, {}, channel3.port2]) threw exception TypeError: MessagePortArray argument must contain only MessagePorts.
 PASS worker.postMessage("notAnArray", channel3.port1) threw exception TypeError: MessagePortArray argument has no length attribute.
 PASS worker.postMessage("notASequence", [{length: 3}]) threw exception TypeError: MessagePortArray argument must contain only MessagePorts.

Modified: trunk/Source/WebCore/ChangeLog (93985 => 93986)


--- trunk/Source/WebCore/ChangeLog	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/Source/WebCore/ChangeLog	2011-08-29 17:57:55 UTC (rev 93986)
@@ -1,3 +1,20 @@
+2011-08-22  David Levin  <[email protected]>
+
+        postMessage raises INVALID_STATE_ERR instead of DATA_CLONE_ERR in many cases.
+        https://bugs.webkit.org/show_bug.cgi?id=66713
+
+        Reviewed by Dmitry Titov.
+
+        See http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#posting-messages for postMessage
+
+        * bindings/js/JSMessagePortCustom.cpp:
+        (WebCore::fillMessagePortArray):
+        * bindings/v8/custom/V8MessagePortCustom.cpp:
+        (WebCore::getMessagePortArray):
+        * dom/MessagePort.cpp:
+        (WebCore::MessagePort::postMessage):
+        (WebCore::MessagePort::disentanglePorts):
+
 2011-08-29  Tom Zakrajsek  <[email protected]>
 
         canvas arc() missing line to start of arc if swing is zero

Modified: trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp (93985 => 93986)


--- trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp	2011-08-29 17:57:55 UTC (rev 93986)
@@ -79,9 +79,9 @@
         JSValue value = object->get(exec, i);
         if (exec->hadException())
             return;
-        // Validation of non-null objects, per HTML5 spec 8.3.3.
+        // Validation of non-null objects, per HTML5 spec 10.3.3.
         if (value.isUndefinedOrNull()) {
-            setDOMException(exec, INVALID_STATE_ERR);
+            setDOMException(exec, DATA_CLONE_ERR);
             return;
         }
 

Modified: trunk/Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp (93985 => 93986)


--- trunk/Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp	2011-08-29 17:57:55 UTC (rev 93986)
@@ -90,9 +90,9 @@
     // Validate the passed array of ports.
     for (unsigned int i = 0; i < length; ++i) {
         v8::Local<v8::Value> port = ports->Get(i);
-        // Validation of non-null objects, per HTML5 spec 8.3.3.
+        // Validation of non-null objects, per HTML5 spec 10.3.3.
         if (isUndefinedOrNull(port)) {
-            throwError(INVALID_STATE_ERR);
+            throwError(DATA_CLONE_ERR);
             return false;
         }
         // Validation of Objects implementing an interface, per WebIDL spec 4.1.15.

Modified: trunk/Source/WebCore/dom/MessagePort.cpp (93985 => 93986)


--- trunk/Source/WebCore/dom/MessagePort.cpp	2011-08-29 17:37:48 UTC (rev 93985)
+++ trunk/Source/WebCore/dom/MessagePort.cpp	2011-08-29 17:57:55 UTC (rev 93986)
@@ -83,7 +83,7 @@
         for (unsigned int i = 0; i < ports->size(); ++i) {
             MessagePort* dataPort = (*ports)[i].get();
             if (dataPort == this || m_entangledChannel->isConnectedTo(dataPort)) {
-                ec = INVALID_STATE_ERR;
+                ec = DATA_CLONE_ERR;
                 return;
             }
         }
@@ -216,7 +216,7 @@
     for (unsigned int i = 0; i < ports->size(); ++i) {
         MessagePort* port = (*ports)[i].get();
         if (!port || port->isCloned() || portSet.contains(port)) {
-            ec = INVALID_STATE_ERR;
+            ec = DATA_CLONE_ERR;
             return nullptr;
         }
         portSet.add(port);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to