10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Google Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions are 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * met: 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * * Redistributions of source code must retain the above copyright 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer. 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * * Redistributions in binary form must reproduce the above 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * in the documentation and/or other materials provided with the 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * distribution. 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * * Neither the name of Google Inc. nor the names of its 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * contributors may be used to endorse or promote products derived from 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * this software without specific prior written permission. 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */ 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h" 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(WORKERS) 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "V8DedicatedWorkerContext.h" 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "DedicatedWorkerContext.h" 37d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WorkerContextExecutionProxy.h" 38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "V8Binding.h" 39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "V8MessagePortCustom.h" 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "V8Proxy.h" 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "V8WorkerContextEventListener.h" 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore { 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 45d0825bca7fe65beaee391d30da42e937db621564Steve Blockv8::Handle<v8::Value> V8DedicatedWorkerContext::postMessageCallback(const v8::Arguments& args) 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block INC_STATS(L"DOM.DedicatedWorkerContext.postMessage"); 48d0825bca7fe65beaee391d30da42e937db621564Steve Block DedicatedWorkerContext* workerContext = V8DedicatedWorkerContext::toNative(args.Holder()); 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool didThrow = false; 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0], didThrow); 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (didThrow) 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return v8::Undefined(); 53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block MessagePortArray portArray; 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (args.Length() > 1) { 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!getMessagePortArray(args[1], portArray)) 56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return v8::Undefined(); 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ExceptionCode ec = 0; 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block workerContext->postMessage(message.release(), &portArray, ec); 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return throwError(ec); 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // ENABLE(WORKERS) 66