Source/WebCore: https://bugs.webkit.org/show_bug.cgi?id=66714
authordslomov@google.com <dslomov@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 17 Sep 2011 04:01:31 +0000 (04:01 +0000)
committerdslomov@google.com <dslomov@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 17 Sep 2011 04:01:31 +0000 (04:01 +0000)
Add webkitPostMessage to allow for adding transferable support.
This adds webkitPostMessage, currently identical to postMessage, which
would later be a vehicle for adding transferable support for messaging.

Based on patch by Luke Zarko.

Reviewed by David Levin.

* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::webkitPostMessage):
* bindings/js/JSDedicatedWorkerContextCustom.cpp:
(WebCore::JSDedicatedWorkerContext::webkitPostMessage):
* bindings/js/JSMessageEventCustom.cpp:
(WebCore::JSMessageEvent::webkitInitMessageEvent):
* bindings/js/JSMessagePortCustom.cpp:
(WebCore::JSMessagePort::webkitPostMessage):
* bindings/js/JSWorkerCustom.cpp:
(WebCore::JSWorker::postMessage):
(WebCore::JSWorker::webkitPostMessage):
* bindings/v8/custom/V8DOMWindowCustom.cpp:
(WebCore::handlePostMessageCallback):
(WebCore::V8DOMWindow::postMessageCallback):
(WebCore::V8DOMWindow::webkitPostMessageCallback):
* bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
(WebCore::handlePostMessageCallback):
(WebCore::V8DedicatedWorkerContext::postMessageCallback):
(WebCore::V8DedicatedWorkerContext::webkitPostMessageCallback):
* bindings/v8/custom/V8MessageEventCustom.cpp:
(WebCore::V8MessageEvent::initMessageEventCallback):
(WebCore::V8MessageEvent::webkitInitMessageEventCallback):
* bindings/v8/custom/V8MessagePortCustom.cpp:
(WebCore::handlePostMessageCallback):
(WebCore::V8MessagePort::postMessageCallback):
(WebCore::V8MessagePort::webkitPostMessageCallback):
* bindings/v8/custom/V8WorkerCustom.cpp:
(WebCore::handlePostMessageCallback):
(WebCore::V8Worker::postMessageCallback):
(WebCore::V8Worker::webkitPostMessageCallback):
* dom/MessageEvent.idl:
* dom/MessagePort.idl:
* page/DOMWindow.idl:
* workers/DedicatedWorkerContext.idl:
* workers/Worker.idl:

LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=66714
Add webkitPostMessage to allow for adding transferable support.
This adds webkitPostMessage, currently identical to postMessage, which
would later be a vehicle for adding transferable support for messaging.
The tests ensure that webkitPostMessage and postMessage behave identically.

Based on patch by Luke Zarko.

Reviewed by David Levin.

* fast/dom/Window/window-postmessage-args-expected.txt:
* fast/dom/Window/window-postmessage-args.html:
* fast/dom/Window/window-property-descriptors-expected.txt:
* fast/events/message-port-expected.txt:
* fast/events/message-port.html:
* fast/workers/resources/worker-call.js:
* fast/workers/worker-call-expected.txt:
* platform/chromium/fast/dom/Window/window-postmessage-args-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@95362 268f45cc-cd09-0410-ab3c-d52691b4dbfc

26 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/Window/window-postmessage-args-expected.txt
LayoutTests/fast/dom/Window/window-postmessage-args.html
LayoutTests/fast/dom/Window/window-property-descriptors-expected.txt
LayoutTests/fast/events/message-port-expected.txt
LayoutTests/fast/events/message-port.html
LayoutTests/fast/workers/resources/worker-call.js
LayoutTests/fast/workers/worker-call-expected.txt
LayoutTests/platform/chromium/fast/dom/Window/window-postmessage-args-expected.txt
LayoutTests/platform/chromium/fast/dom/prototype-inheritance-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
Source/WebCore/bindings/js/JSDedicatedWorkerContextCustom.cpp
Source/WebCore/bindings/js/JSMessageEventCustom.cpp
Source/WebCore/bindings/js/JSMessagePortCustom.cpp
Source/WebCore/bindings/js/JSWorkerCustom.cpp
Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
Source/WebCore/bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp
Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp
Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp
Source/WebCore/bindings/v8/custom/V8WorkerCustom.cpp
Source/WebCore/dom/MessageEvent.idl
Source/WebCore/dom/MessagePort.idl
Source/WebCore/page/DOMWindow.idl
Source/WebCore/workers/DedicatedWorkerContext.idl
Source/WebCore/workers/Worker.idl

index b032916..9ef2853 100644 (file)
@@ -1,3 +1,24 @@
+2011-09-16  Dmitry Lomov  <dslomov@google.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=66714
+        Add webkitPostMessage to allow for adding transferable support.
+        This adds webkitPostMessage, currently identical to postMessage, which 
+        would later be a vehicle for adding transferable support for messaging.
+        The tests ensure that webkitPostMessage and postMessage behave identically.
+
+        Based on patch by Luke Zarko.
+
+        Reviewed by David Levin.
+
+        * fast/dom/Window/window-postmessage-args-expected.txt:
+        * fast/dom/Window/window-postmessage-args.html:
+        * fast/dom/Window/window-property-descriptors-expected.txt:
+        * fast/events/message-port-expected.txt:
+        * fast/events/message-port.html:
+        * fast/workers/resources/worker-call.js:
+        * fast/workers/worker-call-expected.txt:
+        * platform/chromium/fast/dom/Window/window-postmessage-args-expected.txt:
+
 2011-09-16  Alexei Svitkine  <asvitkine@chromium.org>
 
         Chromium: Fix repaint of rubber-band overhang area under composited path
index 89968c1..f64dd14 100644 (file)
@@ -1,18 +1,31 @@
 Test that the second argument of window.postMessage is ignored or triggers an error if it is not a message port. You should see PASS message '1' through '7', followed by 'done', with messages 4-7 received below.
 
 PASS: Posting message ('1', 1): threw exception TypeError: Type error
+PASS: Posting message ('1', 1): threw exception TypeError: Type error
+PASS: Posting message ('2', ): threw exception TypeError: Type error
 PASS: Posting message ('2', ): threw exception TypeError: Type error
 PASS: Posting message ('3', [object Object]): threw exception TypeError: Type error
+PASS: Posting message ('3', [object Object]): threw exception TypeError: Type error
+PASS: Posting message ('4', [object DOMWindow]) did not throw an exception
 PASS: Posting message ('4', [object DOMWindow]) did not throw an exception
 PASS: Posting message ('5', null) did not throw an exception
+PASS: Posting message ('5', null) did not throw an exception
+PASS: Posting message ('6', undefined) did not throw an exception
 PASS: Posting message ('6', undefined) did not throw an exception
 PASS: Posting message ('7', [object MessagePort],[object MessagePort]) did not throw an exception
+PASS: Posting message ('7', [object MessagePort],[object MessagePort]) did not throw an exception
+PASS: Posting message ('2147483648', null) did not throw an exception
 PASS: Posting message ('2147483648', null) did not throw an exception
 PASS: Posting message ('done', *) did not throw an exception
 Received message '4' with 0 ports.
+Received message '4' with 0 ports.
+Received message '5' with 0 ports.
 Received message '5' with 0 ports.
 Received message '6' with 0 ports.
+Received message '6' with 0 ports.
+Received message '7' with 2 ports.
 Received message '7' with 2 ports.
 Received message '2147483648' with 0 ports.
+Received message '2147483648' with 0 ports.
 Received message 'done' with 0 ports.
 
index 72a27e7..cbd243f 100644 (file)
@@ -23,30 +23,37 @@ function onmessage(evt) {
 
 window.addEventListener('message', onmessage, false);
 
-function tryPostMessage(first, second, third, shouldFail) {
-    try {
+function tryPostMessageFunction(postMessageFunction, first, second, third, shouldFail) {
+   try {
         if (!third)
-            window.postMessage(first, second);
+            postMessageFunction(first, second);
         else
-            window.postMessage(first, second, third);
+            postMessageFunction(first, second, third);
         console.innerHTML += (shouldFail ? "FAIL" : "PASS") + ": Posting message ('" + first + "', " + second + ") did not throw an exception<br>";
    } catch (e) {
         console.innerHTML += (shouldFail ? "PASS" : "FAIL") + ": Posting message ('" + first + "', " + second + "): threw exception " + e + "<br>";
    }
 }
 
+function tryPostMessage(first, second, third, shouldFail) {
+    tryPostMessageFunction(window.postMessage, first, second, third, shouldFail);
+    tryPostMessageFunction(window.webkitPostMessage, first, second, third, shouldFail);
+}
+
 document.getElementById("description").innerHTML = "Test that the second argument of window.postMessage is ignored or triggers an error if it is not a message port. You should see PASS message '1' through '7', followed by 'done', with messages 4-7 received below.<br><br>";
 
-var channel = new MessageChannel;
 tryPostMessage('1', 1, '*', true);
 tryPostMessage('2', "", '*', true);
 tryPostMessage('3', { x: 1 }, '*', true);
 tryPostMessage('4', window, '*');  // Passes because window has a "length" attribute of value '0', so it looks like an array
 tryPostMessage('5', null, '*');
 tryPostMessage('6', void 0, '*');
-tryPostMessage('7', [channel.port1, channel.port2], '*');
+var channel1 = new MessageChannel;
+tryPostMessageFunction(window.postMessage, '7', [channel1.port1, channel1.port2], '*');
+var channel2 = new MessageChannel;
+tryPostMessageFunction(window.webkitPostMessage, '7', [channel2.port1, channel2.port2], '*');
 tryPostMessage(2147483648, null, '*');
-tryPostMessage('done', '*');
+tryPostMessageFunction(window.postMessage, 'done', '*');
 </script>
 </body>
 </html>
index 6b477e1..e71960c 100644 (file)
@@ -543,6 +543,7 @@ PASS Object.getOwnPropertyDescriptor(window, 'toString') is undefined.
 PASS Object.getOwnPropertyDescriptor(window, 'valueOf') is undefined.
 PASS Object.getOwnPropertyDescriptor(window, 'webkitConvertPointFromNodeToPage') is undefined.
 PASS Object.getOwnPropertyDescriptor(window, 'webkitConvertPointFromPageToNode') is undefined.
+PASS Object.getOwnPropertyDescriptor(window, 'webkitPostMessage') is undefined.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 1c91d5c..955ad37 100644 (file)
@@ -3,9 +3,14 @@ Test cross-frame MessagePort communication.
 Should be a series of SUCCESS messages, followed with DONE.
 
 Simple exchange: SUCCESS
+Simple exchange: SUCCESS
+Posted port: SUCCESS
 Posted port: SUCCESS
 Event Listener: SUCCESS
+Event Listener: SUCCESS
 Closed port: SUCCESS
+Closed port: SUCCESS
+MessageEvent.cancelable defaults to false: PASS
 MessageEvent.cancelable defaults to false: PASS
 DONE
 
index eb80183..b590e47 100644 (file)
@@ -15,43 +15,63 @@ if (window.layoutTestController) {
 
 var mainPort;
 
-function test()
+var allTests;
+var currentTest = 0;
+
+function nextTest() 
+{
+    var fun = currentTest % 2 == 0 ? "postMessage" : "webkitPostMessage";
+    var testFunNo = Math.floor(currentTest / 2);
+    if (testFunNo < allTests.length)
+    {
+        var test = allTests[testFunNo];
+        currentTest++;
+        test(fun);
+    }
+    else
+    {
+        done();
+    }
+}
+
+function test(postMessageFun)
 {
     var channel = new MessageChannel;
-    window.frames[0].postMessage("msg", [channel.port2], "*");
+
+    window.frames[0][postMessageFun]("msg", [channel.port2], "*");
     mainPort = channel.port1;
-    mainPort.postMessage("ping");
+    mainPort[postMessageFun]("ping");
     mainPort.onmessage = function(evt) {
         if (evt.data == "pong" && evt.origin == "")
             log("Simple exchange: SUCCESS");
         else
             log("Simple exchange: FAIL. Got message '" + evt.data + "' from '" + evt.origin + "'.");
-        test2();
+        nextTest();
     };
 }
 
-function test2()
+function test2(postMessageFun)
 {
     var channel = new MessageChannel;
-    mainPort.postMessage("newPort", [channel.port2]);
+    mainPort[postMessageFun]("newPort", [channel.port2]);
     channel.port1.onmessage = function(evt) {
         if (evt.data == "yo" && evt.origin == "")
             log("Posted port: SUCCESS");
         else
             log("Posted port: FAIL. Got message '" + evt.data + "' from '" + evt.origin + "'.");
-        test3();
+        nextTest();
     };
 }
 
-function test3()
+function test3(postMessageFun)
 {
     var channel = new MessageChannel;
-    channel.port1.postMessage("1");
+    channel.port1[postMessageFun]("1");
     var started = false;
     channel.port2.addEventListener("message", function(evt) {
         if (started) {
             log("Event Listener: SUCCESS");
-            test4();
+            nextTest();
         } else
             log("Event Listener: FAIL. Event listener called before start()");
    });
@@ -62,36 +82,36 @@ function test3()
 
 }
 
-function test4()
+function test4(postMessageFun)
 {
     var channel = new MessageChannel;
-    channel.port1.postMessage("1");
+    channel.port1[postMessageFun]("1");
     channel.port1.close();
-    channel.port1.postMessage("2");
+    channel.port1[postMessageFun]("2");
     channel.port2.onmessage = function(evt) {
         if (evt.data == "1") {
             log("Closed port: SUCCESS");
-            test5();
+            nextTest();
         } else
             log("Closed port: FAIL. Got message: " + evt.data + " after close");
    }
 }
 
-function test5()
+function test5(postMessageFun)
 {
     // Create a channel and put some messages in it which will go undelivered and should not leak
     var channel = new MessageChannel;
-    channel.port1.postMessage("abcde");
-    test6();
+    channel.port1[postMessageFun]("abcde");
+    nextTest();
 }
 
-function test6()
+function test6(postMessageFun)
 {
     var channel = new MessageChannel;
-    channel.port1.postMessage("howdy");
+    channel.port1[postMessageFun]("howdy");
     channel.port2.onmessage = function(event) {
         log("MessageEvent.cancelable defaults to " + event.cancelable + ": " + (event.cancelable ? "FAIL" : "PASS"));
-        done();
+        nextTest();
     }
 }
 
@@ -104,6 +124,8 @@ function done() {
     }, 100);
 }
 
+allTests = [ test, test2, test3, test4, test5, test6 ]
+
 </script>
-<iframe src="resources/message-port-iframe.html" onload="test()"></iframe>
+<iframe src="resources/message-port-iframe.html" onload="nextTest()"></iframe>
 </body>
index 2f1ae2f..978056a 100644 (file)
@@ -1,5 +1,9 @@
 postMessage("SUCCESS: postMessage() called directly");
+webkitPostMessage("SUCCESS: webkitPostMessage() called directly");
 postMessage.call(null, "SUCCESS: postMessage() invoked via postMessage.call()");
+webkitPostMessage.call(null, "SUCCESS: webkitPostMessage() invoked via webkitPostMessage.call()");
 var saved = postMessage;
 saved("SUCCESS: postMessage() called via intermediate variable");
+var saved1 = webkitPostMessage;
+saved1("SUCCESS: webkitPostMessage() called via intermediate variable");
 postMessage("DONE");
index 621d3b5..b7d6cc4 100644 (file)
@@ -1,7 +1,10 @@
 Test calling functions from WorkerContext. Should print multiple SUCCESS lines, followed by DONE.
 
 SUCCESS: postMessage() called directly
+SUCCESS: webkitPostMessage() called directly
 SUCCESS: postMessage() invoked via postMessage.call()
+SUCCESS: webkitPostMessage() invoked via webkitPostMessage.call()
 SUCCESS: postMessage() called via intermediate variable
+SUCCESS: webkitPostMessage() called via intermediate variable
 DONE
 
index 45ec73d..5f8e99d 100644 (file)
@@ -1,18 +1,31 @@
 Test that the second argument of window.postMessage is ignored or triggers an error if it is not a message port. You should see PASS message '1' through '7', followed by 'done', with messages 4-7 received below.
 
 PASS: Posting message ('1', 1): threw exception TypeError: MessagePortArray argument must be an object
+PASS: Posting message ('1', 1): threw exception TypeError: MessagePortArray argument must be an object
+PASS: Posting message ('2', ): threw exception TypeError: MessagePortArray argument must be an object
 PASS: Posting message ('2', ): threw exception TypeError: MessagePortArray argument must be an object
 PASS: Posting message ('3', [object Object]): threw exception TypeError: MessagePortArray argument has no length attribute
+PASS: Posting message ('3', [object Object]): threw exception TypeError: MessagePortArray argument has no length attribute
+PASS: Posting message ('4', [object DOMWindow]) did not throw an exception
 PASS: Posting message ('4', [object DOMWindow]) did not throw an exception
 PASS: Posting message ('5', null) did not throw an exception
+PASS: Posting message ('5', null) did not throw an exception
+PASS: Posting message ('6', undefined) did not throw an exception
 PASS: Posting message ('6', undefined) did not throw an exception
 PASS: Posting message ('7', [object MessagePort],[object MessagePort]) did not throw an exception
+PASS: Posting message ('7', [object MessagePort],[object MessagePort]) did not throw an exception
+PASS: Posting message ('2147483648', null) did not throw an exception
 PASS: Posting message ('2147483648', null) did not throw an exception
 PASS: Posting message ('done', *) did not throw an exception
 Received message '4' with 0 ports.
+Received message '4' with 0 ports.
+Received message '5' with 0 ports.
 Received message '5' with 0 ports.
 Received message '6' with 0 ports.
+Received message '6' with 0 ports.
+Received message '7' with 2 ports.
 Received message '7' with 2 ports.
 Received message '2147483648' with 0 ports.
+Received message '2147483648' with 0 ports.
 Received message 'done' with 0 ports.
 
index 85cec98..c958650 100644 (file)
@@ -45,6 +45,8 @@ FAIL inner.toolbar.isInner should be true. Was false.
 FAIL inner.toolbar.constructor.isInner should be true. Was false.
 FAIL inner.webkitIndexedDB.isInner should be true. Was false.
 FAIL inner.webkitIndexedDB.constructor.isInner should be true. Was false.
+FAIL inner.webkitPostMessage.isInner should be true. Was false.
+FAIL inner.webkitPostMessage.constructor.isInner should be true. Was false.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f13543f..7c06f00 100644 (file)
@@ -1,3 +1,50 @@
+2011-09-16  Dmitry Lomov  <dslomov@google.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=66714
+        Add webkitPostMessage to allow for adding transferable support.
+        This adds webkitPostMessage, currently identical to postMessage, which 
+        would later be a vehicle for adding transferable support for messaging.
+        
+        Based on patch by Luke Zarko.
+
+        Reviewed by David Levin.
+
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::webkitPostMessage):
+        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
+        (WebCore::JSDedicatedWorkerContext::webkitPostMessage):
+        * bindings/js/JSMessageEventCustom.cpp:
+        (WebCore::JSMessageEvent::webkitInitMessageEvent):
+        * bindings/js/JSMessagePortCustom.cpp:
+        (WebCore::JSMessagePort::webkitPostMessage):
+        * bindings/js/JSWorkerCustom.cpp:
+        (WebCore::JSWorker::postMessage):
+        (WebCore::JSWorker::webkitPostMessage):
+        * bindings/v8/custom/V8DOMWindowCustom.cpp:
+        (WebCore::handlePostMessageCallback):
+        (WebCore::V8DOMWindow::postMessageCallback):
+        (WebCore::V8DOMWindow::webkitPostMessageCallback):
+        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
+        (WebCore::handlePostMessageCallback):
+        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
+        (WebCore::V8DedicatedWorkerContext::webkitPostMessageCallback):
+        * bindings/v8/custom/V8MessageEventCustom.cpp:
+        (WebCore::V8MessageEvent::initMessageEventCallback):
+        (WebCore::V8MessageEvent::webkitInitMessageEventCallback):
+        * bindings/v8/custom/V8MessagePortCustom.cpp:
+        (WebCore::handlePostMessageCallback):
+        (WebCore::V8MessagePort::postMessageCallback):
+        (WebCore::V8MessagePort::webkitPostMessageCallback):
+        * bindings/v8/custom/V8WorkerCustom.cpp:
+        (WebCore::handlePostMessageCallback):
+        (WebCore::V8Worker::postMessageCallback):
+        (WebCore::V8Worker::webkitPostMessageCallback):
+        * dom/MessageEvent.idl:
+        * dom/MessagePort.idl:
+        * page/DOMWindow.idl:
+        * workers/DedicatedWorkerContext.idl:
+        * workers/Worker.idl:
+
 2011-09-16  Alexei Svitkine  <asvitkine@chromium.org>
 
         Chromium: Fix repaint of rubber-band overhang area under composited path
index f6c89d9..842611c 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -724,6 +725,11 @@ JSValue JSDOMWindow::postMessage(ExecState* exec)
     return jsUndefined();
 }
 
+JSValue JSDOMWindow::webkitPostMessage(ExecState* exec)
+{
+    return postMessage(exec);
+}
+
 JSValue JSDOMWindow::setTimeout(ExecState* exec)
 {
     ContentSecurityPolicy* contentSecurityPolicy = impl()->document() ? impl()->document()->contentSecurityPolicy() : 0;
index 2222353..ab0c5dd 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2009 Google Inc. All rights reserved.
  * Copyright (C) 2009 Apple, Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -47,6 +47,11 @@ JSC::JSValue JSDedicatedWorkerContext::postMessage(JSC::ExecState* exec)
     return handlePostMessage(exec, impl());
 }
 
+JSC::JSValue JSDedicatedWorkerContext::webkitPostMessage(JSC::ExecState* exec)
+{
+    return handlePostMessage(exec, impl());
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WORKERS)
index 8be81be..e748cff 100644 (file)
@@ -119,4 +119,9 @@ JSC::JSValue JSMessageEvent::initMessageEvent(JSC::ExecState* exec)
     return jsUndefined();
 }
 
+JSC::JSValue JSMessageEvent::webkitInitMessageEvent(JSC::ExecState* exec)
+{
+    return initMessageEvent(exec);
+}
+
 } // namespace WebCore
index 017b24b..8adf4a7 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2011 Google Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -60,6 +61,11 @@ JSC::JSValue JSMessagePort::postMessage(JSC::ExecState* exec)
     return handlePostMessage(exec, impl());
 }
 
+JSC::JSValue JSMessagePort::webkitPostMessage(JSC::ExecState* exec)
+{
+    return handlePostMessage(exec, impl());
+}
+
 void fillMessagePortArray(JSC::ExecState* exec, JSC::JSValue value, MessagePortArray& portArray)
 {
     // Convert from the passed-in JS array-like object to a MessagePortArray.
index 3afdc09..0ba37e3 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2011 Google Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -44,6 +45,11 @@ JSC::JSValue JSWorker::postMessage(JSC::ExecState* exec)
     return handlePostMessage(exec, impl());
 }
 
+JSC::JSValue JSWorker::webkitPostMessage(JSC::ExecState* exec)
+{
+    return handlePostMessage(exec, impl());
+}
+
 EncodedJSValue JSC_HOST_CALL JSWorkerConstructor::constructJSWorker(ExecState* exec)
 {
     JSWorkerConstructor* jsConstructor = static_cast<JSWorkerConstructor*>(exec->callee());
index 2342fe6..cc0404e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -313,9 +313,8 @@ v8::Handle<v8::Value> V8DOMWindow::removeEventListenerCallback(const v8::Argumen
     return v8::Undefined();
 }
 
-v8::Handle<v8::Value> V8DOMWindow::postMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
 {
-    INC_STATS("DOM.DOMWindow.postMessage()");
     DOMWindow* window = V8DOMWindow::toNative(args.Holder());
 
     DOMWindow* source = V8Proxy::retrieveFrameForCallingContext()->domWindow();
@@ -350,6 +349,18 @@ v8::Handle<v8::Value> V8DOMWindow::postMessageCallback(const v8::Arguments& args
     return throwError(ec);
 }
 
+v8::Handle<v8::Value> V8DOMWindow::postMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.DOMWindow.postMessage()");
+    return handlePostMessageCallback(args);
+}
+
+v8::Handle<v8::Value> V8DOMWindow::webkitPostMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.DOMWindow.webkitPostMessage()");
+    return handlePostMessageCallback(args);
+}
+
 // FIXME(fqian): returning string is cheating, and we should
 // fix this by calling toString function on the receiver.
 // However, V8 implements toString in JavaScript, which requires
index 8fcf9a8..c38573a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -42,9 +42,8 @@
 
 namespace WebCore {
 
-v8::Handle<v8::Value> V8DedicatedWorkerContext::postMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
 {
-    INC_STATS(L"DOM.DedicatedWorkerContext.postMessage");
     DedicatedWorkerContext* workerContext = V8DedicatedWorkerContext::toNative(args.Holder());
     bool didThrow = false;
     RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow);
@@ -60,6 +59,18 @@ v8::Handle<v8::Value> V8DedicatedWorkerContext::postMessageCallback(const v8::Ar
     return throwError(ec);
 }
 
+v8::Handle<v8::Value> V8DedicatedWorkerContext::postMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS(L"DOM.DedicatedWorkerContext.postMessage");
+    return handlePostMessageCallback(args);
+}
+
+v8::Handle<v8::Value> V8DedicatedWorkerContext::webkitPostMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS(L"DOM.DedicatedWorkerContext.postMessage");
+    return handlePostMessageCallback(args);
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WORKERS)
index d64083c..b99672d 100644 (file)
@@ -125,6 +125,13 @@ v8::Handle<v8::Value> V8MessageEvent::initMessageEventCallback(const v8::Argumen
     v8::PropertyAttribute dataAttr = static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly);
     SerializedScriptValue::deserializeAndSetProperty(args.Holder(), "data", dataAttr, event->dataAsSerializedScriptValue());
     return v8::Undefined();
-  }
+}
+
+v8::Handle<v8::Value> V8MessageEvent::webkitInitMessageEventCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.MessageEvent.webkitInitMessageEvent");
+    return initMessageEventCallback(args);
+}
+
 
 } // namespace WebCore
index 94e1743..5543a1b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -42,9 +42,8 @@
 
 namespace WebCore {
 
-v8::Handle<v8::Value> V8MessagePort::postMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
 {
-    INC_STATS("DOM.MessagePort.postMessage");
     MessagePort* messagePort = V8MessagePort::toNative(args.Holder());
     bool didThrow = false;
     RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow);
@@ -60,6 +59,18 @@ v8::Handle<v8::Value> V8MessagePort::postMessageCallback(const v8::Arguments& ar
     return throwError(ec);
 }
 
+v8::Handle<v8::Value> V8MessagePort::postMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.MessagePort.postMessage");
+    return handlePostMessageCallback(args);
+}
+
+v8::Handle<v8::Value> V8MessagePort::webkitPostMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.MessagePort.webkitPostMessage");
+    return handlePostMessageCallback(args);
+}
+
 bool getMessagePortArray(v8::Local<v8::Value> value, MessagePortArray& portArray)
 {
     if (isUndefinedOrNull(value)) {
index 3a04057..a84120a 100644 (file)
@@ -47,7 +47,7 @@
 
 namespace WebCore {
 
-v8::Handle<v8::Value> V8Worker::postMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
 {
     INC_STATS("DOM.Worker.postMessage");
     Worker* worker = V8Worker::toNative(args.Holder());
@@ -65,6 +65,19 @@ v8::Handle<v8::Value> V8Worker::postMessageCallback(const v8::Arguments& args)
     return throwError(ec);
 }
 
+v8::Handle<v8::Value> V8Worker::postMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.Worker.postMessage");
+    return handlePostMessageCallback(args);
+}
+
+v8::Handle<v8::Value> V8Worker::webkitPostMessageCallback(const v8::Arguments& args)
+{
+    INC_STATS("DOM.Worker.webkitPostMessage");
+    return handlePostMessageCallback(args);
+}
+
+
 } // namespace WebCore
 
 #endif // ENABLE(WORKERS)
index 9694dee..6bb2b65 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2007 Henry Mason <hmason@mac.com>
+ * Copyright (C) 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -44,6 +45,15 @@ module events {
                                        in [Optional=CallWithDefaultValue] DOMString lastEventIdArg, 
                                        in [Optional=CallWithDefaultValue] DOMWindow sourceArg, 
                                        in [Optional=CallWithDefaultValue] Array messagePorts);
+
+        [Custom] void webkitInitMessageEvent(in [Optional=CallWithDefaultValue] DOMString typeArg,
+                                             in [Optional=CallWithDefaultValue] boolean canBubbleArg,
+                                             in [Optional=CallWithDefaultValue] boolean cancelableArg,
+                                             in [Optional=CallWithDefaultValue] SerializedScriptValue dataArg,
+                                             in [Optional=CallWithDefaultValue] DOMString originArg,
+                                             in [Optional=CallWithDefaultValue] DOMString lastEventIdArg,
+                                             in [Optional=CallWithDefaultValue] DOMWindow sourceArg,
+                                             in [Optional=CallWithDefaultValue] Array transferables);
 #else
         // Code generator for ObjC bindings does not support custom bindings, thus there is no good way to
         // return a variant value. As workaround, expose the data attribute as SerializedScriptValue.
index 28833ce..b26f320 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2011 Google Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -38,6 +39,8 @@ module events {
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
         [Custom] void postMessage(in DOMString message, in [Optional] Array messagePorts)
             raises(DOMException);
+        [Custom] void webkitPostMessage(in DOMString message, in [Optional] Array transfer)
+            raises(DOMException);
         void start();
         void close();
 
index fc90782..91d44fa 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -215,6 +216,8 @@ module window {
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
         [DoNotCheckDomainSecurity, Custom] void postMessage(in SerializedScriptValue message, in [Optional] Array messagePorts, in DOMString targetOrigin)
             raises(DOMException);
+        [DoNotCheckDomainSecurity, Custom] void webkitPostMessage(in SerializedScriptValue message, in [Optional] Array transferList, in DOMString targetOrigin)
+            raises(DOMException);
 #else
         // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
         [DoNotCheckDomainSecurity, Custom] void postMessage(in SerializedScriptValue message, in [Optional] MessagePort messagePort, in DOMString targetOrigin)
index 22d3525..9ebb0d1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -43,6 +43,8 @@ module threads {
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
         [Custom] void postMessage(in any message, in [Optional] Array messagePorts)
             raises(DOMException);
+        [Custom] void webkitPostMessage(in any message, in [Optional] Array transferList)
+            raises(DOMException);
 #else
         // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
         void postMessage(in DOMString message, in [Optional] MessagePort messagePort)
index f871df9..1faac7a 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2011 Google Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -45,6 +46,8 @@ module threads {
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
         [Custom] void postMessage(in SerialisedScriptValue message, in [Optional] Array messagePorts)
             raises(DOMException);
+        [Custom] void webkitPostMessage(in SerialisedScriptValue message, in [Optional] Array messagePorts)
+            raises(DOMException);
 #else
         // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
         void postMessage(in SerializedScriptValue message, in [Optional] MessagePort messagePort)