diff options
Diffstat (limited to 'WebCore/bindings/js/JSWorkerConstructor.cpp')
-rw-r--r-- | WebCore/bindings/js/JSWorkerConstructor.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/WebCore/bindings/js/JSWorkerConstructor.cpp b/WebCore/bindings/js/JSWorkerConstructor.cpp index 8ea6718..9943cfb 100644 --- a/WebCore/bindings/js/JSWorkerConstructor.cpp +++ b/WebCore/bindings/js/JSWorkerConstructor.cpp @@ -41,15 +41,17 @@ namespace WebCore { const ClassInfo JSWorkerConstructor::s_info = { "WorkerConstructor", 0, 0, 0 }; -JSWorkerConstructor::JSWorkerConstructor(ExecState* exec) - : DOMObject(JSWorkerConstructor::createStructure(exec->lexicalGlobalObject()->objectPrototype())) +JSWorkerConstructor::JSWorkerConstructor(ExecState* exec, JSDOMGlobalObject* globalObject) + : DOMConstructorObject(JSWorkerConstructor::createStructure(globalObject->objectPrototype()), globalObject) { - putDirect(exec->propertyNames().prototype, JSWorkerPrototype::self(exec, exec->lexicalGlobalObject()), None); + putDirect(exec->propertyNames().prototype, JSWorkerPrototype::self(exec, globalObject), None); putDirect(exec->propertyNames().length, jsNumber(exec, 1), ReadOnly|DontDelete|DontEnum); } -static JSObject* constructWorker(ExecState* exec, JSObject*, const ArgList& args) +static JSObject* constructWorker(ExecState* exec, JSObject* constructor, const ArgList& args) { + JSWorkerConstructor* jsConstructor = static_cast<JSWorkerConstructor*>(constructor); + if (args.size() == 0) return throwError(exec, SyntaxError, "Not enough arguments"); @@ -57,13 +59,17 @@ static JSObject* constructWorker(ExecState* exec, JSObject*, const ArgList& args if (exec->hadException()) return 0; + // See section 4.8.2 step 14 of WebWorkers for why this is the lexicalGlobalObject. DOMWindow* window = asJSDOMWindow(exec->lexicalGlobalObject())->impl(); - + ExceptionCode ec = 0; RefPtr<Worker> worker = Worker::create(scriptURL, window->document(), ec); - setDOMException(exec, ec); + if (ec) { + setDOMException(exec, ec); + return 0; + } - return asObject(toJS(exec, worker.release())); + return asObject(toJS(exec, jsConstructor->globalObject(), worker.release())); } ConstructType JSWorkerConstructor::getConstructData(ConstructData& constructData) |