diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp')
-rw-r--r-- | Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp | 109 |
1 files changed, 53 insertions, 56 deletions
diff --git a/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp b/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp index bc42aba4c..f1e6d8ed4 100644 --- a/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp +++ b/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2009, 2016 Apple Inc. All rights reserved. * Copyright (C) 2009 Google Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,10 +11,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -26,58 +26,70 @@ */ #include "config.h" - #include "JSWorkerGlobalScopeBase.h" #include "DOMWrapperWorld.h" #include "JSDOMGlobalObjectTask.h" #include "JSDedicatedWorkerGlobalScope.h" +#include "JSDynamicDowncast.h" #include "JSWorkerGlobalScope.h" +#include "Language.h" #include "WorkerGlobalScope.h" +#include "WorkerThread.h" +#include <runtime/JSCInlines.h> +#include <runtime/JSCJSValueInlines.h> #include <runtime/Microtask.h> -#if ENABLE(SHARED_WORKERS) -#include "JSSharedWorkerGlobalScope.h" -#endif - using namespace JSC; namespace WebCore { -const ClassInfo JSWorkerGlobalScopeBase::s_info = { "WorkerGlobalScope", &JSDOMGlobalObject::s_info, 0, 0, CREATE_METHOD_TABLE(JSWorkerGlobalScopeBase) }; +const ClassInfo JSWorkerGlobalScopeBase::s_info = { "WorkerGlobalScope", &JSDOMGlobalObject::s_info, 0, CREATE_METHOD_TABLE(JSWorkerGlobalScopeBase) }; -const GlobalObjectMethodTable JSWorkerGlobalScopeBase::s_globalObjectMethodTable = { &allowsAccessFrom, &supportsProfiling, &supportsRichSourceInfo, &shouldInterruptScript, &javaScriptExperimentsEnabled, &queueTaskToEventLoop, &shouldInterruptScriptBeforeTimeout }; +const GlobalObjectMethodTable JSWorkerGlobalScopeBase::s_globalObjectMethodTable = { + &supportsRichSourceInfo, + &shouldInterruptScript, + &javaScriptRuntimeFlags, + &queueTaskToEventLoop, + &shouldInterruptScriptBeforeTimeout, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + &defaultLanguage +}; -JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase(JSC::VM& vm, JSC::Structure* structure, PassRefPtr<WorkerGlobalScope> impl) - : JSDOMGlobalObject(vm, structure, &normalWorld(vm), &s_globalObjectMethodTable) - , m_impl(impl) +JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase(JSC::VM& vm, JSC::Structure* structure, RefPtr<WorkerGlobalScope>&& impl) + : JSDOMGlobalObject(vm, structure, normalWorld(vm), &s_globalObjectMethodTable) + , m_wrapped(WTFMove(impl)) { } -void JSWorkerGlobalScopeBase::finishCreation(VM& vm) +void JSWorkerGlobalScopeBase::finishCreation(VM& vm, JSProxy* proxy) { - Base::finishCreation(vm); - ASSERT(inherits(info())); -} + m_proxy.set(vm, this, proxy); -void JSWorkerGlobalScopeBase::destroy(JSCell* cell) -{ - static_cast<JSWorkerGlobalScopeBase*>(cell)->JSWorkerGlobalScopeBase::~JSWorkerGlobalScopeBase(); + Base::finishCreation(vm, m_proxy.get()); + ASSERT(inherits(vm, info())); } -ScriptExecutionContext* JSWorkerGlobalScopeBase::scriptExecutionContext() const +void JSWorkerGlobalScopeBase::visitChildren(JSCell* cell, SlotVisitor& visitor) { - return m_impl.get(); + JSWorkerGlobalScopeBase* thisObject = jsCast<JSWorkerGlobalScopeBase*>(cell); + ASSERT_GC_OBJECT_INHERITS(thisObject, info()); + Base::visitChildren(thisObject, visitor); + visitor.append(thisObject->m_proxy); } -bool JSWorkerGlobalScopeBase::allowsAccessFrom(const JSGlobalObject* object, ExecState* exec) +void JSWorkerGlobalScopeBase::destroy(JSCell* cell) { - return JSGlobalObject::allowsAccessFrom(object, exec); + static_cast<JSWorkerGlobalScopeBase*>(cell)->JSWorkerGlobalScopeBase::~JSWorkerGlobalScopeBase(); } -bool JSWorkerGlobalScopeBase::supportsProfiling(const JSGlobalObject* object) +ScriptExecutionContext* JSWorkerGlobalScopeBase::scriptExecutionContext() const { - return JSGlobalObject::supportsProfiling(object); + return m_wrapped.get(); } bool JSWorkerGlobalScopeBase::supportsRichSourceInfo(const JSGlobalObject* object) @@ -95,64 +107,49 @@ bool JSWorkerGlobalScopeBase::shouldInterruptScriptBeforeTimeout(const JSGlobalO return JSGlobalObject::shouldInterruptScriptBeforeTimeout(object); } -bool JSWorkerGlobalScopeBase::javaScriptExperimentsEnabled(const JSGlobalObject* object) +RuntimeFlags JSWorkerGlobalScopeBase::javaScriptRuntimeFlags(const JSGlobalObject* object) { - return JSGlobalObject::javaScriptExperimentsEnabled(object); + const JSWorkerGlobalScopeBase *thisObject = jsCast<const JSWorkerGlobalScopeBase*>(object); + return thisObject->m_wrapped->thread().runtimeFlags(); } -void JSWorkerGlobalScopeBase::queueTaskToEventLoop(const JSGlobalObject* object, PassRefPtr<Microtask> task) +void JSWorkerGlobalScopeBase::queueTaskToEventLoop(const JSGlobalObject* object, Ref<JSC::Microtask>&& task) { const JSWorkerGlobalScopeBase* thisObject = static_cast<const JSWorkerGlobalScopeBase*>(object); - thisObject->scriptExecutionContext()->postTask(JSGlobalObjectTask::create((JSDOMGlobalObject*)thisObject, task)); + thisObject->scriptExecutionContext()->postTask(JSGlobalObjectTask((JSDOMGlobalObject*)thisObject, WTFMove(task))); } -JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerGlobalScope* workerGlobalScope) +JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerGlobalScope& workerGlobalScope) { return toJS(exec, workerGlobalScope); } -JSValue toJS(ExecState*, WorkerGlobalScope* workerGlobalScope) +JSValue toJS(ExecState*, WorkerGlobalScope& workerGlobalScope) { - if (!workerGlobalScope) - return jsNull(); - WorkerScriptController* script = workerGlobalScope->script(); + WorkerScriptController* script = workerGlobalScope.script(); if (!script) return jsNull(); JSWorkerGlobalScope* contextWrapper = script->workerGlobalScopeWrapper(); ASSERT(contextWrapper); - return contextWrapper; + return contextWrapper->proxy(); } -JSDedicatedWorkerGlobalScope* toJSDedicatedWorkerGlobalScope(JSValue value) +JSDedicatedWorkerGlobalScope* toJSDedicatedWorkerGlobalScope(VM& vm, JSValue value) { if (!value.isObject()) return 0; - const ClassInfo* classInfo = asObject(value)->classInfo(); + const ClassInfo* classInfo = asObject(value)->classInfo(vm); if (classInfo == JSDedicatedWorkerGlobalScope::info()) return jsCast<JSDedicatedWorkerGlobalScope*>(asObject(value)); + if (classInfo == JSProxy::info()) + return jsDynamicDowncast<JSDedicatedWorkerGlobalScope*>(vm, jsCast<JSProxy*>(asObject(value))->target()); return 0; } -#if ENABLE(SHARED_WORKERS) -JSSharedWorkerGlobalScope* toJSSharedWorkerGlobalScope(JSValue value) -{ - if (!value.isObject()) - return 0; - const ClassInfo* classInfo = asObject(value)->classInfo(); - if (classInfo == JSSharedWorkerGlobalScope::info()) - return jsCast<JSSharedWorkerGlobalScope*>(asObject(value)); - return 0; -} -#endif -JSWorkerGlobalScope* toJSWorkerGlobalScope(JSValue value) +JSWorkerGlobalScope* toJSWorkerGlobalScope(VM& vm, JSValue value) { - JSWorkerGlobalScope* context = toJSDedicatedWorkerGlobalScope(value); -#if ENABLE(SHARED_WORKERS) - if (!context) - context = toJSSharedWorkerGlobalScope(value); -#endif - return context; + return toJSDedicatedWorkerGlobalScope(vm, value); } } // namespace WebCore |