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