Diff
Modified: trunk/Source/WebCore/ChangeLog (97515 => 97516)
--- trunk/Source/WebCore/ChangeLog 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/ChangeLog 2011-10-14 22:13:00 UTC (rev 97516)
@@ -1,3 +1,42 @@
+2011-10-14 Dmitry Lomov <dslo...@google.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=70120
+ [Chromium] Pass MessagePortArray to SerializedScriptValue::serialize/deserialize.
+ This patch augments SerializedScriptValue with MessagePortArray* parameter to implement MessagePort
+ transfer within the message in the future.
+
+ Reviewed by David Levin.
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ (GenerateParametersCheck):
+ * bindings/v8/SerializedScriptValue.cpp:
+ (WebCore::SerializedScriptValue::create):
+ (WebCore::SerializedScriptValue::SerializedScriptValue):
+ (WebCore::SerializedScriptValue::deserialize):
+ * bindings/v8/SerializedScriptValue.h:
+ * 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/V8HistoryCustom.cpp:
+ (WebCore::V8History::pushStateCallback):
+ (WebCore::V8History::replaceStateCallback):
+ * bindings/v8/custom/V8MessageEventCustom.cpp:
+ (WebCore::V8MessageEvent::dataAccessorGetter):
+ * 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):
+ * workers/Worker.idl:
+
2011-10-14 Jeff Miller <je...@apple.com>
InjectedBundleHitTestResult::imageRect() should return rect in WKView coordinates
Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm (97515 => 97516)
--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm 2011-10-14 22:13:00 UTC (rev 97516)
@@ -1458,7 +1458,7 @@
} elsif ($parameter->type eq "SerializedScriptValue") {
AddToImplIncludes("SerializedScriptValue.h");
$parameterCheckString .= " bool ${parameterName}DidThrow = false;\n";
- $parameterCheckString .= " $nativeType $parameterName = SerializedScriptValue::create(args[$paramIndex], ${parameterName}DidThrow);\n";
+ $parameterCheckString .= " $nativeType $parameterName = SerializedScriptValue::create(args[$paramIndex], 0, ${parameterName}DidThrow);\n";
$parameterCheckString .= " if (${parameterName}DidThrow)\n";
$parameterCheckString .= " return v8::Undefined();\n";
} elsif (TypeCanFailConversion($parameter)) {
Modified: trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -46,6 +46,7 @@
#include "Int16Array.h"
#include "Int32Array.h"
#include "Int8Array.h"
+#include "MessagePort.h"
#include "SharedBuffer.h"
#include "Uint16Array.h"
#include "Uint32Array.h"
@@ -1840,7 +1841,6 @@
};
} // namespace
-
void SerializedScriptValue::deserializeAndSetProperty(v8::Handle<v8::Object> object, const char* propertyName,
v8::PropertyAttribute attribute, SerializedScriptValue* value)
{
@@ -1856,15 +1856,15 @@
deserializeAndSetProperty(object, propertyName, attribute, value.get());
}
-PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::Value> value, bool& didThrow)
+PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::Value> value, MessagePortArray* messagePorts, bool& didThrow)
{
- return adoptRef(new SerializedScriptValue(value, didThrow));
+ return adoptRef(new SerializedScriptValue(value, messagePorts, didThrow));
}
PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::Value> value)
{
bool didThrow;
- return adoptRef(new SerializedScriptValue(value, didThrow));
+ return adoptRef(new SerializedScriptValue(value, 0, didThrow));
}
PassRefPtr<SerializedScriptValue> SerializedScriptValue::createFromWire(const String& data)
@@ -1920,7 +1920,7 @@
{
}
-SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, bool& didThrow)
+SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, MessagePortArray*, bool& didThrow)
{
didThrow = false;
Writer writer;
@@ -1965,7 +1965,7 @@
m_data = wireData.crossThreadString();
}
-v8::Handle<v8::Value> SerializedScriptValue::deserialize()
+v8::Handle<v8::Value> SerializedScriptValue::deserialize(MessagePortArray*)
{
if (!m_data.impl())
return v8::Null();
Modified: trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h 2011-10-14 22:13:00 UTC (rev 97516)
@@ -37,6 +37,10 @@
namespace WebCore {
+class MessagePort;
+
+typedef Vector<RefPtr<MessagePort>, 1> MessagePortArray;
+
class SerializedScriptValue : public ThreadSafeRefCounted<SerializedScriptValue> {
public:
static void deserializeAndSetProperty(v8::Handle<v8::Object>, const char* propertyName,
@@ -49,7 +53,7 @@
// be thrown using v8::ThrowException(), and sets |didThrow|. In this case
// the caller must not invoke any V8 operations until control returns to
// V8. When serialization is successful, |didThrow| is false.
- static PassRefPtr<SerializedScriptValue> create(v8::Handle<v8::Value> value, bool& didThrow);
+ static PassRefPtr<SerializedScriptValue> create(v8::Handle<v8::Value>, MessagePortArray*, bool& didThrow);
static PassRefPtr<SerializedScriptValue> create(v8::Handle<v8::Value>);
static PassRefPtr<SerializedScriptValue> createFromWire(const String& data);
static PassRefPtr<SerializedScriptValue> create(const String& data);
@@ -64,7 +68,7 @@
// Deserializes the value (in the current context). Returns a null value in
// case of failure.
- v8::Handle<v8::Value> deserialize();
+ v8::Handle<v8::Value> deserialize(MessagePortArray* = 0);
private:
enum StringDataMode {
@@ -73,7 +77,7 @@
};
SerializedScriptValue();
- SerializedScriptValue(v8::Handle<v8::Value>, bool& didThrow);
+ SerializedScriptValue(v8::Handle<v8::Value>, MessagePortArray*, bool& didThrow);
explicit SerializedScriptValue(const String& wireData);
String m_data;
Modified: trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -313,35 +313,36 @@
return v8::Undefined();
}
-static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args, bool doTransfer)
{
DOMWindow* window = V8DOMWindow::toNative(args.Holder());
DOMWindow* source = V8Proxy::retrieveFrameForCallingContext()->domWindow();
ASSERT(source->frame());
- bool didThrow = false;
- RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow);
- if (didThrow)
- return v8::Undefined();
-
- MessagePortArray portArray;
- String targetOrigin;
-
// This function has variable arguments and can either be:
// postMessage(message, port, targetOrigin);
// or
// postMessage(message, targetOrigin);
- v8::TryCatch tryCatch;
- if (args.Length() > 2) {
- if (!getMessagePortArray(args[1], portArray))
+ MessagePortArray portArray;
+ String targetOrigin;
+ {
+ v8::TryCatch tryCatch;
+ if (args.Length() > 2) {
+ if (!getMessagePortArray(args[1], portArray))
+ return v8::Undefined();
+ targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[2]);
+ } else
+ targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[1]);
+
+ if (tryCatch.HasCaught())
return v8::Undefined();
- targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[2]);
- } else {
- targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[1]);
}
- if (tryCatch.HasCaught())
+
+ bool didThrow = false;
+ RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], doTransfer ? &portArray : 0, didThrow);
+ if (didThrow)
return v8::Undefined();
ExceptionCode ec = 0;
@@ -352,13 +353,13 @@
v8::Handle<v8::Value> V8DOMWindow::postMessageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.DOMWindow.postMessage()");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, false);
}
v8::Handle<v8::Value> V8DOMWindow::webkitPostMessageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.DOMWindow.webkitPostMessage()");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, true);
}
// FIXME(fqian): returning string is cheating, and we should
Modified: trunk/Source/WebCore/bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -42,19 +42,19 @@
namespace WebCore {
-static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args, bool doTransfer)
{
DedicatedWorkerContext* workerContext = V8DedicatedWorkerContext::toNative(args.Holder());
- bool didThrow = false;
- RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow);
- if (didThrow)
- return v8::Undefined();
MessagePortArray portArray;
if (args.Length() > 1) {
if (!getMessagePortArray(args[1], portArray))
return v8::Undefined();
}
- ExceptionCode ec = 0;
+ bool didThrow = false;
+ RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], doTransfer ? &portArray : 0, didThrow);
+ if (didThrow)
+ return v8::Undefined();
+ ExceptionCode ec = 0;
workerContext->postMessage(message.release(), &portArray, ec);
return throwError(ec);
}
@@ -62,13 +62,13 @@
v8::Handle<v8::Value> V8DedicatedWorkerContext::postMessageCallback(const v8::Arguments& args)
{
INC_STATS(L"DOM.DedicatedWorkerContext.postMessage");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, false);
}
v8::Handle<v8::Value> V8DedicatedWorkerContext::webkitPostMessageCallback(const v8::Arguments& args)
{
INC_STATS(L"DOM.DedicatedWorkerContext.postMessage");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, true);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/bindings/v8/custom/V8HistoryCustom.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/custom/V8HistoryCustom.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/custom/V8HistoryCustom.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -44,7 +44,7 @@
v8::Handle<v8::Value> V8History::pushStateCallback(const v8::Arguments& args)
{
bool didThrow = false;
- RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create(args[0], didThrow);
+ RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create(args[0], 0, didThrow);
if (didThrow)
return v8::Undefined();
@@ -68,7 +68,7 @@
v8::Handle<v8::Value> V8History::replaceStateCallback(const v8::Arguments& args)
{
bool didThrow = false;
- RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create(args[0], didThrow);
+ RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create(args[0], 0, didThrow);
if (didThrow)
return v8::Undefined();
Modified: trunk/Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -53,7 +53,7 @@
switch (event->dataType()) {
case MessageEvent::DataTypeSerializedScriptValue:
if (SerializedScriptValue* serializedValue = event->dataAsSerializedScriptValue())
- result = serializedValue->deserialize();
+ result = serializedValue->deserialize(event->ports());
else
result = v8::Null();
break;
Modified: trunk/Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -42,18 +42,18 @@
namespace WebCore {
-static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args, bool doTransfer)
{
MessagePort* messagePort = V8MessagePort::toNative(args.Holder());
- bool didThrow = false;
- RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow);
- if (didThrow)
- return v8::Undefined();
MessagePortArray portArray;
if (args.Length() > 1) {
if (!getMessagePortArray(args[1], portArray))
return v8::Undefined();
}
+ bool didThrow = false;
+ RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], doTransfer ? &portArray : 0, didThrow);
+ if (didThrow)
+ return v8::Undefined();
ExceptionCode ec = 0;
messagePort->postMessage(message.release(), &portArray, ec);
return throwError(ec);
@@ -62,13 +62,13 @@
v8::Handle<v8::Value> V8MessagePort::postMessageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.MessagePort.postMessage");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, false);
}
v8::Handle<v8::Value> V8MessagePort::webkitPostMessageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.MessagePort.webkitPostMessage");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, true);
}
bool getMessagePortArray(v8::Local<v8::Value> value, MessagePortArray& portArray)
Modified: trunk/Source/WebCore/bindings/v8/custom/V8WorkerCustom.cpp (97515 => 97516)
--- trunk/Source/WebCore/bindings/v8/custom/V8WorkerCustom.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/bindings/v8/custom/V8WorkerCustom.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -47,19 +47,19 @@
namespace WebCore {
-static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args)
+static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args, bool doTransfer)
{
INC_STATS("DOM.Worker.postMessage");
Worker* worker = V8Worker::toNative(args.Holder());
- bool didThrow = false;
- RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow);
- if (didThrow)
- return v8::Undefined();
MessagePortArray portArray;
if (args.Length() > 1) {
if (!getMessagePortArray(args[1], portArray))
return v8::Undefined();
}
+ bool didThrow = false;
+ RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], doTransfer ? &portArray : 0, didThrow);
+ if (didThrow)
+ return v8::Undefined();
ExceptionCode ec = 0;
worker->postMessage(message.release(), &portArray, ec);
return throwError(ec);
@@ -68,13 +68,13 @@
v8::Handle<v8::Value> V8Worker::postMessageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Worker.postMessage");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, false);
}
v8::Handle<v8::Value> V8Worker::webkitPostMessageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Worker.webkitPostMessage");
- return handlePostMessageCallback(args);
+ return handlePostMessageCallback(args, true);
}
Modified: trunk/Source/WebCore/workers/Worker.idl (97515 => 97516)
--- trunk/Source/WebCore/workers/Worker.idl 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebCore/workers/Worker.idl 2011-10-14 22:13:00 UTC (rev 97516)
@@ -44,9 +44,9 @@
attribute EventListener onmessage;
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
- [Custom] void postMessage(in SerialisedScriptValue message, in [Optional] Array messagePorts)
+ [Custom] void postMessage(in SerializedScriptValue message, in [Optional] Array messagePorts)
raises(DOMException);
- [Custom] void webkitPostMessage(in SerialisedScriptValue message, in [Optional] Array messagePorts)
+ [Custom] void webkitPostMessage(in SerializedScriptValue 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.
Modified: trunk/Source/WebKit/chromium/ChangeLog (97515 => 97516)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-10-14 22:13:00 UTC (rev 97516)
@@ -1,3 +1,15 @@
+2011-10-14 Dmitry Lomov <dslo...@google.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=70120
+ [Chromium] Pass MessagePortArray to SerializedScriptValue::serialize/deserialize.
+ This patch augments SerializedScriptValue with MessagePortArray* parameter to implement MessagePort
+ transfer within the message in the future.
+
+ Reviewed by David Levin.
+
+ * src/WebSerializedScriptValue.cpp:
+ (WebKit::WebSerializedScriptValue::serialize):
+
2011-10-14 Sheriff Bot <webkit.review....@gmail.com>
Unreviewed. Rolled DEPS.
Modified: trunk/Source/WebKit/chromium/src/WebSerializedScriptValue.cpp (97515 => 97516)
--- trunk/Source/WebKit/chromium/src/WebSerializedScriptValue.cpp 2011-10-14 22:11:30 UTC (rev 97515)
+++ trunk/Source/WebKit/chromium/src/WebSerializedScriptValue.cpp 2011-10-14 22:13:00 UTC (rev 97516)
@@ -47,7 +47,7 @@
WebSerializedScriptValue WebSerializedScriptValue::serialize(v8::Handle<v8::Value> value)
{
bool didThrow;
- WebSerializedScriptValue serializedValue = SerializedScriptValue::create(value, didThrow);
+ WebSerializedScriptValue serializedValue = SerializedScriptValue::create(value, 0, didThrow);
if (didThrow)
return createInvalid();
return serializedValue;