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);