1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * are met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * documentation and/or other materials provided with the distribution. 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WORKERS) 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "JSWorker.h" 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "JSDOMGlobalObject.h" 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "JSMessagePortCustom.h" 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Worker.h" 3506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "JSDOMWindowCustom.h" 3606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include <runtime/Error.h> 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace JSC; 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 425af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkeJSC::JSValue JSWorker::postMessage(JSC::ExecState* exec) 43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke return handlePostMessage(exec, impl()); 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian MonsenEncodedJSValue JSC_HOST_CALL JSWorkerConstructor::constructJSWorker(ExecState* exec) 4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 4906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen JSWorkerConstructor* jsConstructor = static_cast<JSWorkerConstructor*>(exec->callee()); 5006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 5106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!exec->argumentCount()) 5206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return throwVMError(exec, createSyntaxError(exec, "Not enough arguments")); 5306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen UString scriptURL = exec->argument(0).toString(exec); 5506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (exec->hadException()) 5606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return JSValue::encode(JSValue()); 5706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 5806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // See section 4.8.2 step 14 of WebWorkers for why this is the lexicalGlobalObject. 5906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen DOMWindow* window = asJSDOMWindow(exec->lexicalGlobalObject())->impl(); 6006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 6106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen ExceptionCode ec = 0; 6206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RefPtr<Worker> worker = Worker::create(ustringToString(scriptURL), window->document(), ec); 6306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (ec) { 6406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen setDOMException(exec, ec); 6506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return JSValue::encode(JSValue()); 6606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 6706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 6806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), worker.release()))); 6906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 7006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif // ENABLE(WORKERS) 74