v8::Handle<v8::Value> V8MessagePort::postMessageCallback(const v8::Arguments& args) { INC_STATS("DOM.MessagePort.postMessage"); MessagePort* messagePort = V8DOMWrapper::convertToNativeObject<MessagePort>(V8ClassIndex::MESSAGEPORT, args.Holder()); RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(toWebCoreString(args[0])); MessagePortArray portArray; if (args.Length() > 1) { if (!getMessagePortArray(args[1], portArray)) return v8::Undefined(); } ExceptionCode ec = 0; messagePort->postMessage(message.release(), &portArray, ec); return throwError(ec); }
void V8MessagePort::postMessageMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { ExceptionState exceptionState(ExceptionState::ExecutionContext, "postMessage", "MessagePort", info.Holder(), info.GetIsolate()); MessagePort* messagePort = V8MessagePort::toNative(info.Holder()); MessagePortArray portArray; ArrayBufferArray arrayBufferArray; if (info.Length() > 1) { const int transferablesArgIndex = 1; if (!SerializedScriptValue::extractTransferables(info[transferablesArgIndex], transferablesArgIndex, portArray, arrayBufferArray, exceptionState, info.GetIsolate())) { exceptionState.throwIfNeeded(); return; } } RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(info[0], &portArray, &arrayBufferArray, exceptionState, info.GetIsolate()); if (exceptionState.throwIfNeeded()) return; messagePort->postMessage(message.release(), &portArray, exceptionState); exceptionState.throwIfNeeded(); }
v8::Handle<v8::Value> V8MessagePort::postMessageCallback(const v8::Arguments& args) { INC_STATS("DOM.MessagePort.postMessage"); MessagePort* messagePort = V8MessagePort::toNative(args.Holder()); MessagePortArray portArray; ArrayBufferArray arrayBufferArray; if (args.Length() > 1) { if (!extractTransferables(args[1], portArray, arrayBufferArray)) return v8::Undefined(); } bool didThrow = false; RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], &portArray, didThrow); if (didThrow) return v8::Undefined(); ExceptionCode ec = 0; messagePort->postMessage(message.release(), &portArray, ec); return throwError(ec); }