diff options
author | dimich@google.com <dimich@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-24 18:29:25 +0000 |
---|---|---|
committer | dimich@google.com <dimich@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-24 18:29:25 +0000 |
commit | 3a9059af548b217862ab7471531e719627cfa816 (patch) | |
tree | d2b6ba3e683d3f1c39a5561b4cb417a0514e73ff /webkit | |
parent | a8ad78109b8332225248a382ee750f94536daa6c (diff) | |
download | chromium_src-3a9059af548b217862ab7471531e719627cfa816.zip chromium_src-3a9059af548b217862ab7471531e719627cfa816.tar.gz chromium_src-3a9059af548b217862ab7471531e719627cfa816.tar.bz2 |
Start using upstreamed worker files and remove the old ones from webkit/port.
Before submitting, I'll add DEPS with corresponding WebKit rev (see http://codereview.chromium.org/52007)
Review URL: http://codereview.chromium.org/45035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12377 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/build/V8Bindings/SConscript | 4 | ||||
-rw-r--r-- | webkit/build/V8Bindings/V8Bindings.vcproj | 8 | ||||
-rw-r--r-- | webkit/port/bindings/v8/WorkerContextExecutionProxy.cpp | 361 | ||||
-rw-r--r-- | webkit/port/bindings/v8/WorkerContextExecutionProxy.h | 116 | ||||
-rw-r--r-- | webkit/port/bindings/v8/WorkerScriptController.cpp | 93 | ||||
-rw-r--r-- | webkit/port/bindings/v8/WorkerScriptController.h | 72 | ||||
-rw-r--r-- | webkit/webkit.gyp | 8 |
7 files changed, 10 insertions, 652 deletions
diff --git a/webkit/build/V8Bindings/SConscript b/webkit/build/V8Bindings/SConscript index 02b777b..dd6a25a 100644 --- a/webkit/build/V8Bindings/SConscript +++ b/webkit/build/V8Bindings/SConscript @@ -360,8 +360,8 @@ inputs = [ '$PORT_DIR/bindings/v8/V8XMLHttpRequestCustom.cpp', '$PORT_DIR/bindings/v8/V8XMLHttpRequestUploadCustom.cpp', '$PORT_DIR/bindings/v8/V8XMLHttpRequestUtilities.cpp', - '$PORT_DIR/bindings/v8/WorkerContextExecutionProxy.cpp', - '$PORT_DIR/bindings/v8/WorkerScriptController.cpp', + '$WEBCORE_DIR/bindings/v8/WorkerContextExecutionProxy.cpp', + '$WEBCORE_DIR/bindings/v8/WorkerScriptController.cpp', '$WEBCORE_DIR/bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp', '$WEBCORE_DIR/bindings/v8/custom/V8ClipboardCustom.cpp', diff --git a/webkit/build/V8Bindings/V8Bindings.vcproj b/webkit/build/V8Bindings/V8Bindings.vcproj index 7111942..c5d1326 100644 --- a/webkit/build/V8Bindings/V8Bindings.vcproj +++ b/webkit/build/V8Bindings/V8Bindings.vcproj @@ -3049,19 +3049,19 @@ > </File> <File - RelativePath="..\..\port\bindings\v8\WorkerContextExecutionProxy.cpp" + RelativePath="..\..\..\third_party\WebKit\WebCore\bindings\v8\WorkerContextExecutionProxy.cpp" > </File> <File - RelativePath="..\..\port\bindings\v8\WorkerContextExecutionProxy.h" + RelativePath="..\..\..\third_party\WebKit\WebCore\bindings\v8\WorkerContextExecutionProxy.h" > </File> <File - RelativePath="..\..\port\bindings\v8\WorkerScriptController.cpp" + RelativePath="..\..\..\third_party\WebKit\WebCore\bindings\v8\WorkerScriptController.cpp" > </File> <File - RelativePath="..\..\port\bindings\v8\WorkerScriptController.h" + RelativePath="..\..\..\third_party\WebKit\WebCore\bindings\v8\WorkerScriptController.h" > </File> </Files> diff --git a/webkit/port/bindings/v8/WorkerContextExecutionProxy.cpp b/webkit/port/bindings/v8/WorkerContextExecutionProxy.cpp deleted file mode 100644 index e0d3462..0000000 --- a/webkit/port/bindings/v8/WorkerContextExecutionProxy.cpp +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (C) 009 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "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 THE COPYRIGHT - * OWNER 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 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#include "config.h" - -#if ENABLE(WORKERS) - -#include "WorkerContextExecutionProxy.h" - -#include "V8Binding.h" -#include "V8Proxy.h" -#include "v8_index.h" -#include "Event.h" -#include "V8WorkerContextEventListener.h" -#include "WorkerContext.h" -#include "WorkerLocation.h" -#include "WorkerNavigator.h" -#include "WorkerScriptController.h" - -namespace WebCore { - -static bool isWorkersEnabled = false; - -bool WorkerContextExecutionProxy::isWebWorkersEnabled() -{ - return isWorkersEnabled; -} - -void WorkerContextExecutionProxy::setIsWebWorkersEnabled(bool value) -{ - isWorkersEnabled = value; -} - -WorkerContextExecutionProxy::WorkerContextExecutionProxy(WorkerContext* workerContext) - : m_workerContext(workerContext) - , m_recursion(0) -{ -} - -WorkerContextExecutionProxy::~WorkerContextExecutionProxy() -{ - dispose(); -} - -void WorkerContextExecutionProxy::dispose() -{ - // Disconnect all event listeners. - for (EventListenerList::iterator iter = m_listeners.begin(); iter != m_listeners.end(); ++iter) - static_cast<V8WorkerContextEventListener*>(*iter)->disconnect(); - - m_listeners.clear(); - - // Detach all events from their JS wrappers. - for (EventSet::iterator iter = m_events.begin(); iter != m_events.end(); ++iter) { - Event* event = *iter; - if (forgetV8EventObject(event)) - event->deref(); - } - m_events.clear(); - - // Dispose the context. - if (!m_context.IsEmpty()) { - m_context.Dispose(); - m_context.Clear(); - } - - // Remove the wrapping between JS object and DOM object. This is because - // the worker context object is going to be disposed immediately when a - // worker thread is tearing down. We do not want to re-delete the real object - // when JS object is garbage collected. - v8::Locker locker; - v8::HandleScope scope; - v8::Persistent<v8::Object> wrapper = GetDOMObjectMap().get(m_workerContext); - if (!wrapper.IsEmpty()) - V8Proxy::SetDOMWrapper(wrapper, V8ClassIndex::INVALID_CLASS_INDEX, NULL); - GetDOMObjectMap().forget(m_workerContext); -} - -WorkerContextExecutionProxy* WorkerContextExecutionProxy::retrieve() -{ - v8::Handle<v8::Context> context = v8::Context::GetCurrent(); - v8::Handle<v8::Object> global = context->Global(); - global = V8Proxy::LookupDOMWrapper(V8ClassIndex::WORKERCONTEXT, global); - ASSERT(!global.IsEmpty()); - WorkerContext* worker_context = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, global); - return worker_context->script()->proxy(); -} - -void WorkerContextExecutionProxy::initContextIfNeeded() -{ - // Bail out if the context has already been initialized. - if (!m_context.IsEmpty()) - return; - - // Create a new environment - v8::Persistent<v8::ObjectTemplate> global_template; - m_context = v8::Context::New(NULL, global_template); - - // Starting from now, use local context only. - v8::Local<v8::Context> context = v8::Local<v8::Context>::New(m_context); - v8::Context::Scope scope(context); - - // Allocate strings used during initialization. - v8::Handle<v8::String> implicit_proto_string = v8::String::New("__proto__"); - - // Create a new JS object and use it as the prototype for the shadow global object. - v8::Handle<v8::Function> worker_context_constructor = GetConstructor(V8ClassIndex::WORKERCONTEXT); - v8::Local<v8::Object> js_worker_context = SafeAllocation::NewInstance(worker_context_constructor); - // Bail out if allocation failed. - if (js_worker_context.IsEmpty()) { - dispose(); - return; - } - - // Wrap the object. - V8Proxy::SetDOMWrapper(js_worker_context, V8ClassIndex::ToInt(V8ClassIndex::WORKERCONTEXT), m_workerContext); - - V8Proxy::SetJSWrapperForDOMObject(m_workerContext, v8::Persistent<v8::Object>::New(js_worker_context)); - - // Insert the object instance as the prototype of the shadow object. - v8::Handle<v8::Object> v8_global = m_context->Global(); - v8_global->Set(implicit_proto_string, js_worker_context); -} - -v8::Local<v8::Function> WorkerContextExecutionProxy::GetConstructor(V8ClassIndex::V8WrapperType type) -{ - // Enter the context of the proxy to make sure that the function is - // constructed in the context corresponding to this proxy. - v8::Context::Scope scope(m_context); - v8::Handle<v8::FunctionTemplate> functionTemplate = V8Proxy::GetTemplate(type); - - // Getting the function might fail if we're running out of - // stack or memory. - v8::TryCatch try_catch; - v8::Local<v8::Function> value = functionTemplate->GetFunction(); - if (value.IsEmpty()) - return v8::Local<v8::Function>(); - - return value; -} - -v8::Handle<v8::Value> WorkerContextExecutionProxy::ToV8Object(V8ClassIndex::V8WrapperType type, void* impl) -{ - if (!impl) - return v8::Null(); - - if (type == V8ClassIndex::WORKERCONTEXT) - return WorkerContextToV8Object(static_cast<WorkerContext*>(impl)); - - // Non DOM node - v8::Persistent<v8::Object> result = GetDOMObjectMap().get(impl); - if (result.IsEmpty()) { - v8::Local<v8::Object> v8obj = instantiateV8Object(type, type, impl); - if (!v8obj.IsEmpty()) { - switch (type) { - case V8ClassIndex::WORKERLOCATION: - static_cast<WorkerLocation*>(impl)->ref(); - break; - case V8ClassIndex::WORKERNAVIGATOR: - static_cast<WorkerNavigator*>(impl)->ref(); - break; - default: - ASSERT(false); - } - result = v8::Persistent<v8::Object>::New(v8obj); - V8Proxy::SetJSWrapperForDOMObject(impl, result); - } - } - return result; -} - -v8::Handle<v8::Value> WorkerContextExecutionProxy::EventToV8Object(Event* event) -{ - if (!event) - return v8::Null(); - - v8::Handle<v8::Object> wrapper = GetDOMObjectMap().get(event); - if (!wrapper.IsEmpty()) - return wrapper; - - V8ClassIndex::V8WrapperType type = V8ClassIndex::EVENT; - - if (event->isMessageEvent()) - type = V8ClassIndex::MESSAGEEVENT; - - v8::Handle<v8::Object> result = instantiateV8Object(type, V8ClassIndex::EVENT, event); - if (result.IsEmpty()) { - // Instantiation failed. Avoid updating the DOM object map and return null which - // is already handled by callers of this function in case the event is NULL. - return v8::Null(); - } - - event->ref(); // fast ref - V8Proxy::SetJSWrapperForDOMObject(event, v8::Persistent<v8::Object>::New(result)); - - return result; -} - -// A JS object of type EventTarget in the worker context can only be WorkerContext. -v8::Handle<v8::Value> WorkerContextExecutionProxy::EventTargetToV8Object(EventTarget* target) -{ - if (!target) - return v8::Null(); - - WorkerContext* worker_context = target->toWorkerContext(); - if (worker_context) - return WorkerContextToV8Object(worker_context); - - ASSERT_NOT_REACHED(); - return v8::Handle<v8::Value>(); -} - -v8::Handle<v8::Value> WorkerContextExecutionProxy::WorkerContextToV8Object(WorkerContext* workerContext) -{ - if (!workerContext) - return v8::Null(); - - v8::Handle<v8::Context> context = workerContext->script()->proxy()->GetContext(); - - v8::Handle<v8::Object> global = context->Global(); - ASSERT(!global.IsEmpty()); - return global; -} - -v8::Local<v8::Object> WorkerContextExecutionProxy::instantiateV8Object(V8ClassIndex::V8WrapperType descType, V8ClassIndex::V8WrapperType cptrType, void* impl) -{ - v8::Local<v8::Function> function; - WorkerContextExecutionProxy* proxy = retrieve(); - if (proxy) - function = proxy->GetConstructor(descType); - else - function = V8Proxy::GetTemplate(descType)->GetFunction(); - - v8::Local<v8::Object> instance = SafeAllocation::NewInstance(function); - if (!instance.IsEmpty()) { - // Avoid setting the DOM wrapper for failed allocations. - V8Proxy::SetDOMWrapper(instance, V8ClassIndex::ToInt(cptrType), impl); - } - return instance; -} - -bool WorkerContextExecutionProxy::forgetV8EventObject(Event* event) -{ - if (GetDOMObjectMap().contains(event)) { - GetDOMObjectMap().forget(event); - return true; - } else - return false; -} - -v8::Local<v8::Value> WorkerContextExecutionProxy::evaluate(const String& str, const String& fileName, int baseLine) -{ - v8::Locker locker; - v8::HandleScope hs; - - initContextIfNeeded(); - v8::Context::Scope scope(m_context); - - v8::Local<v8::String> code = v8ExternalString(str); - v8::Handle<v8::Script> script = V8Proxy::CompileScript(code, fileName, baseLine); - return runScript(script); -} - -v8::Local<v8::Value> WorkerContextExecutionProxy::runScript(v8::Handle<v8::Script> script) -{ - if (script.IsEmpty()) - return v8::Local<v8::Value>(); - - // Compute the source string and prevent against infinite recursion. - if (m_recursion >= kMaxRecursionDepth) { - v8::Local<v8::String> code = v8ExternalString("throw RangeError('Recursion too deep')"); - script = V8Proxy::CompileScript(code, "", 0); - } - - if (V8Proxy::HandleOutOfMemory()) - ASSERT(script.IsEmpty()); - - if (script.IsEmpty()) - return v8::Local<v8::Value>(); - - // Run the script and keep track of the current recursion depth. - v8::Local<v8::Value> result; - { - m_recursion++; - result = script->Run(); - m_recursion--; - } - - // Handle V8 internal error situation (Out-of-memory). - if (result.IsEmpty()) - return v8::Local<v8::Value>(); - - return result; -} - -PassRefPtr<V8EventListener> WorkerContextExecutionProxy::FindOrCreateEventListener(v8::Local<v8::Value> obj, bool isInline, bool findOnly) -{ - if (!obj->IsObject()) - return 0; - - for (EventListenerList::iterator iter = m_listeners.begin(); iter != m_listeners.end(); ++iter) { - V8EventListener* el = *iter; - if (el->isInline() == isInline && el->getListenerObject() == obj) - return el; - } - if (findOnly) - return NULL; - - // Create a new one, and add to cache. - RefPtr<V8EventListener> listener = V8WorkerContextEventListener::create(this, v8::Local<v8::Object>::Cast(obj), isInline); - m_listeners.push_back(listener.get()); - - return listener.release(); -} - -void WorkerContextExecutionProxy::RemoveEventListener(V8EventListener* listener) -{ - for (EventListenerList::iterator iter = m_listeners.begin(); iter != m_listeners.end(); ++iter) { - if (*iter == listener) { - m_listeners.erase(iter); - return; - } - } -} - -void WorkerContextExecutionProxy::trackEvent(Event* event) -{ - m_events.add(event); -} - -} // namespace WebCore - -#endif // ENABLE(WORKERS) diff --git a/webkit/port/bindings/v8/WorkerContextExecutionProxy.h b/webkit/port/bindings/v8/WorkerContextExecutionProxy.h deleted file mode 100644 index 0da12ad..0000000 --- a/webkit/port/bindings/v8/WorkerContextExecutionProxy.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 009 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "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 THE COPYRIGHT - * OWNER 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 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#ifndef WorkerContextExecutionProxy_h -#define WorkerContextExecutionProxy_h - -#if ENABLE(WORKERS) - -#include <list> -#include "v8.h" -#include "v8_index.h" -#include <wtf/HashSet.h> - -namespace WebCore { - - class Event; - class EventTarget; - class V8EventListener; - class WorkerContext; - - class WorkerContextExecutionProxy { - public: - WorkerContextExecutionProxy(WorkerContext*); - ~WorkerContextExecutionProxy(); - - // Returns a local handle of the context. - v8::Local<v8::Context> GetContext() { return v8::Local<v8::Context>::New(m_context); } - - // Returns the dom constructor function for the given node type. - v8::Local<v8::Function> GetConstructor(V8ClassIndex::V8WrapperType); - - // Finds or creates an event listener; - PassRefPtr<V8EventListener> FindOrCreateEventListener(v8::Local<v8::Value> listener, bool isInline, bool findOnly); - - // Removes an event listener; - void RemoveEventListener(V8EventListener*); - - // Track the event so that we can detach it from the JS wrapper when a worker - // terminates. This is needed because we need to be able to dispose these - // events and releases references to their event targets: WorkerContext. - void trackEvent(Event*); - - // Evaluate a script file in the current execution environment. - v8::Local<v8::Value> evaluate(const String& str, const String& fileName, int baseLine); - - // Returns WorkerContext object. - WorkerContext* workerContext() { return m_workerContext; } - - // Returns WorkerContextExecutionProxy object of the currently executing context. - static WorkerContextExecutionProxy* retrieve(); - - // Returns the JS wrapper of object. - static v8::Handle<v8::Value> ToV8Object(V8ClassIndex::V8WrapperType type, void* impl); - static v8::Handle<v8::Value> EventToV8Object(Event* event); - static v8::Handle<v8::Value> EventTargetToV8Object(EventTarget* target); - static v8::Handle<v8::Value> WorkerContextToV8Object(WorkerContext* wc); - - // Enables HTML5 worker support. - static bool isWebWorkersEnabled(); - static void setIsWebWorkersEnabled(bool); - - private: - void initContextIfNeeded(); - void dispose(); - - // Run an already compiled script. - v8::Local<v8::Value> runScript(v8::Handle<v8::Script>); - - static v8::Local<v8::Object> instantiateV8Object(V8ClassIndex::V8WrapperType descType, V8ClassIndex::V8WrapperType cptrType, void* impl); - - static bool forgetV8EventObject(Event*); - - WorkerContext* m_workerContext; - v8::Persistent<v8::Context> m_context; - int m_recursion; - - typedef std::list<V8EventListener*> EventListenerList; - EventListenerList m_listeners; - - typedef HashSet<Event*> EventSet; - EventSet m_events; - }; - -} // namespace WebCore - -#endif // ENABLE(WORKERS) - -#endif // WorkerContextExecutionProxy_h diff --git a/webkit/port/bindings/v8/WorkerScriptController.cpp b/webkit/port/bindings/v8/WorkerScriptController.cpp deleted file mode 100644 index 761d92a..0000000 --- a/webkit/port/bindings/v8/WorkerScriptController.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2009 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "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 THE COPYRIGHT - * OWNER 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 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#if ENABLE(WORKERS) - -#include "WorkerScriptController.h" - -#include "v8.h" - -#include "ScriptSourceCode.h" -#include "ScriptValue.h" -#include "DOMTimer.h" -#include "WorkerContext.h" -#include "WorkerContextExecutionProxy.h" -#include "WorkerObjectProxy.h" -#include "WorkerThread.h" - -namespace WebCore { - -WorkerScriptController::WorkerScriptController(WorkerContext* workerContext) - : m_workerContext(workerContext) - , m_proxy(new WorkerContextExecutionProxy(workerContext)) - , m_executionForbidden(false) -{ -} - -WorkerScriptController::~WorkerScriptController() -{ -} - -ScriptValue WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode) -{ - { - MutexLocker lock(m_sharedDataMutex); - if (m_executionForbidden) - return ScriptValue(); - } - - v8::Local<v8::Value> result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), sourceCode.startLine() - 1); - m_workerContext->thread()->workerObjectProxy()->reportPendingActivity(m_workerContext->hasPendingActivity()); - return ScriptValue(); -} - -ScriptValue WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode, ScriptValue* exception) -{ - // FIXME(jianli): to be implemented. - return evaluate(sourceCode); -} - -void WorkerScriptController::forbidExecution() -{ - // This function is called from another thread. - MutexLocker lock(m_sharedDataMutex); - m_executionForbidden = true; -} - -void WorkerScriptController::setException(ScriptValue exception) -{ - notImplemented(); -} - -} // namespace WebCore - -#endif // ENABLE(WORKERS) diff --git a/webkit/port/bindings/v8/WorkerScriptController.h b/webkit/port/bindings/v8/WorkerScriptController.h deleted file mode 100644 index 07e224c..0000000 --- a/webkit/port/bindings/v8/WorkerScriptController.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2009 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "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 THE COPYRIGHT - * OWNER 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 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef WorkerScriptController_h -#define WorkerScriptController_h - -#if ENABLE(WORKERS) - -#include <wtf/OwnPtr.h> -#include <wtf/Threading.h> - -namespace WebCore { - - class ScriptSourceCode; - class ScriptValue; - class WorkerContext; - class WorkerContextExecutionProxy; - - class WorkerScriptController { - public: - WorkerScriptController(WorkerContext*); - ~WorkerScriptController(); - - WorkerContextExecutionProxy* proxy() { return m_proxy.get(); } - - ScriptValue evaluate(const ScriptSourceCode&); - ScriptValue evaluate(const ScriptSourceCode&, ScriptValue* exception); - - void setException(ScriptValue); - - void forbidExecution(); - - private: - WorkerContext* m_workerContext; - OwnPtr<WorkerContextExecutionProxy> m_proxy; - - Mutex m_sharedDataMutex; - bool m_executionForbidden; - }; - -} // namespace WebCore - -#endif // ENABLE(WORKERS) - -#endif // WorkerScriptController_h diff --git a/webkit/webkit.gyp b/webkit/webkit.gyp index 90ae37c..76c84b5 100644 --- a/webkit/webkit.gyp +++ b/webkit/webkit.gyp @@ -1042,6 +1042,10 @@ '../third_party/WebKit/WebCore/bindings/v8/V8Proxy.h', '../third_party/WebKit/WebCore/bindings/v8/V8WorkerContextEventListener.cpp', '../third_party/WebKit/WebCore/bindings/v8/V8WorkerContextEventListener.h', + '../third_party/WebKit/WebCore/bindings/v8/WorkerContextExecutionProxy.h', + '../third_party/WebKit/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp', + '../third_party/WebKit/WebCore/bindings/v8/WorkerScriptController.h', + '../third_party/WebKit/WebCore/bindings/v8/WorkerScriptController.cpp', 'extensions/v8/gc_extension.cc', 'extensions/v8/gc_extension.h', 'extensions/v8/gears_extension.cc', @@ -1070,10 +1074,6 @@ 'port/bindings/v8/V8XMLHttpRequestUploadCustom.cpp', 'port/bindings/v8/V8XMLHttpRequestUtilities.cpp', 'port/bindings/v8/V8XMLHttpRequestUtilities.h', - 'port/bindings/v8/WorkerContextExecutionProxy.cpp', - 'port/bindings/v8/WorkerContextExecutionProxy.h', - 'port/bindings/v8/WorkerScriptController.cpp', - 'port/bindings/v8/WorkerScriptController.h', 'port/bindings/v8/dom_wrapper_map.h', 'port/bindings/v8/NPV8Object.cpp', 'port/bindings/v8/NPV8Object.h', |