summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp')
-rwxr-xr-xWebCore/bindings/v8/custom/V8WorkerContextCustom.cpp71
1 files changed, 46 insertions, 25 deletions
diff --git a/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp b/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
index a67cb10..b526040 100755
--- a/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
@@ -32,11 +32,8 @@
#if ENABLE(WORKERS)
-#include "WorkerContextExecutionProxy.h"
-
-#include "ExceptionCode.h"
#include "DOMTimer.h"
-#include "NotImplemented.h"
+#include "ExceptionCode.h"
#include "ScheduledAction.h"
#include "V8Binding.h"
#include "V8CustomBinding.h"
@@ -44,50 +41,51 @@
#include "V8Utilities.h"
#include "V8WorkerContextEventListener.h"
#include "WorkerContext.h"
+#include "WorkerContextExecutionProxy.h"
namespace WebCore {
ACCESSOR_GETTER(WorkerContextSelf)
{
INC_STATS(L"DOM.WorkerContext.self._get");
- WorkerContext* workerContext = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, info.Holder());
- return WorkerContextExecutionProxy::WorkerContextToV8Object(workerContext);
+ WorkerContext* workerContext = V8DOMWrapper::convertDOMWrapperToNative<WorkerContext>(info.Holder());
+ return WorkerContextExecutionProxy::convertWorkerContextToV8Object(workerContext);
}
-ACCESSOR_GETTER(WorkerContextOnmessage)
+ACCESSOR_GETTER(WorkerContextOnerror)
{
- INC_STATS(L"DOM.WorkerContext.onmessage._get");
- WorkerContext* workerContext = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, info.Holder());
- if (workerContext->onmessage()) {
- V8WorkerContextEventListener* listener = static_cast<V8WorkerContextEventListener*>(workerContext->onmessage());
+ INC_STATS(L"DOM.WorkerContext.onerror._get");
+ WorkerContext* workerContext = V8DOMWrapper::convertToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, info.Holder());
+ if (workerContext->onerror()) {
+ V8WorkerContextEventListener* listener = static_cast<V8WorkerContextEventListener*>(workerContext->onerror());
v8::Local<v8::Object> v8Listener = listener->getListenerObject();
return v8Listener;
}
return v8::Undefined();
}
-ACCESSOR_SETTER(WorkerContextOnmessage)
+ACCESSOR_SETTER(WorkerContextOnerror)
{
- INC_STATS(L"DOM.WorkerContext.onmessage._set");
- WorkerContext* workerContext = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, info.Holder());
- V8WorkerContextEventListener* oldListener = static_cast<V8WorkerContextEventListener*>(workerContext->onmessage());
+ INC_STATS(L"DOM.WorkerContext.onerror._set");
+ WorkerContext* workerContext = V8DOMWrapper::convertToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, info.Holder());
+ V8WorkerContextEventListener* oldListener = static_cast<V8WorkerContextEventListener*>(workerContext->onerror());
if (value->IsNull()) {
- if (workerContext->onmessage()) {
+ if (workerContext->onerror()) {
v8::Local<v8::Object> oldV8Listener = oldListener->getListenerObject();
removeHiddenDependency(info.Holder(), oldV8Listener, V8Custom::kWorkerContextRequestCacheIndex);
}
// Clear the listener.
- workerContext->setOnmessage(0);
+ workerContext->setOnerror(0);
} else {
- RefPtr<V8EventListener> listener = workerContext->script()->proxy()->findOrCreateEventListener(v8::Local<v8::Object>::Cast(value), false, false);
+ RefPtr<V8EventListener> listener = workerContext->script()->proxy()->findOrCreateEventListener(v8::Local<v8::Object>::Cast(value), true, false);
if (listener) {
if (oldListener) {
v8::Local<v8::Object> oldV8Listener = oldListener->getListenerObject();
removeHiddenDependency(info.Holder(), oldV8Listener, V8Custom::kWorkerContextRequestCacheIndex);
}
- workerContext->setOnmessage(listener);
+ workerContext->setOnerror(listener);
createHiddenDependency(info.Holder(), value, V8Custom::kWorkerContextRequestCacheIndex);
}
}
@@ -95,7 +93,7 @@ ACCESSOR_SETTER(WorkerContextOnmessage)
v8::Handle<v8::Value> SetTimeoutOrInterval(const v8::Arguments& args, bool singleShot)
{
- WorkerContext* workerContext = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, args.Holder());
+ WorkerContext* workerContext = V8DOMWrapper::convertDOMWrapperToNative<WorkerContext>(args.Holder());
int argumentCount = args.Length();
if (argumentCount < 1)
@@ -106,7 +104,7 @@ v8::Handle<v8::Value> SetTimeoutOrInterval(const v8::Arguments& args, bool singl
int timerId;
if (function->IsString()) {
- WebCore::String stringFunction = ToWebCoreString(function);
+ WebCore::String stringFunction = toWebCoreString(function);
timerId = DOMTimer::install(workerContext, new ScheduledAction(stringFunction, workerContext->url()), timeout, singleShot);
} else if (function->IsFunction()) {
size_t paramCount = argumentCount >= 2 ? argumentCount - 2 : 0;
@@ -129,7 +127,29 @@ v8::Handle<v8::Value> SetTimeoutOrInterval(const v8::Arguments& args, bool singl
CALLBACK_FUNC_DECL(WorkerContextImportScripts)
{
INC_STATS(L"DOM.WorkerContext.importScripts()");
- notImplemented();
+ if (!args.Length())
+ return v8::Undefined();
+
+ String callerURL = V8Proxy::sourceName();
+ int callerLine = V8Proxy::sourceLineNumber() + 1;
+
+ Vector<String> urls;
+ for (int i = 0; i < args.Length(); i++) {
+ v8::TryCatch tryCatch;
+ v8::Handle<v8::String> scriptUrl = args[i]->ToString();
+ if (tryCatch.HasCaught() || scriptUrl.IsEmpty())
+ return v8::Undefined();
+ urls.append(toWebCoreString(scriptUrl));
+ }
+
+ WorkerContext* workerContext = V8DOMWrapper::convertDOMWrapperToNative<WorkerContext>(args.Holder());
+
+ ExceptionCode ec = 0;
+ workerContext->importScripts(urls, callerURL, callerLine, ec);
+
+ if (ec)
+ return throwError(ec);
+
return v8::Undefined();
}
@@ -139,7 +159,8 @@ CALLBACK_FUNC_DECL(WorkerContextSetTimeout)
return SetTimeoutOrInterval(args, true);
}
-CALLBACK_FUNC_DECL(WorkerContextSetInterval) {
+CALLBACK_FUNC_DECL(WorkerContextSetInterval)
+{
INC_STATS(L"DOM.WorkerContext.setInterval()");
return SetTimeoutOrInterval(args, false);
}
@@ -147,7 +168,7 @@ CALLBACK_FUNC_DECL(WorkerContextSetInterval) {
CALLBACK_FUNC_DECL(WorkerContextAddEventListener)
{
INC_STATS(L"DOM.WorkerContext.addEventListener()");
- WorkerContext* workerContext = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, args.Holder());
+ WorkerContext* workerContext = V8DOMWrapper::convertDOMWrapperToNative<WorkerContext>(args.Holder());
RefPtr<V8EventListener> listener = workerContext->script()->proxy()->findOrCreateEventListener(v8::Local<v8::Object>::Cast(args[1]), false, false);
@@ -164,7 +185,7 @@ CALLBACK_FUNC_DECL(WorkerContextAddEventListener)
CALLBACK_FUNC_DECL(WorkerContextRemoveEventListener)
{
INC_STATS(L"DOM.WorkerContext.removeEventListener()");
- WorkerContext* workerContext = V8Proxy::ToNativeObject<WorkerContext>(V8ClassIndex::WORKERCONTEXT, args.Holder());
+ WorkerContext* workerContext = V8DOMWrapper::convertDOMWrapperToNative<WorkerContext>(args.Holder());
WorkerContextExecutionProxy* proxy = workerContext->script()->proxy();
RefPtr<V8EventListener> listener = proxy->findOrCreateEventListener(v8::Local<v8::Object>::Cast(args[1]), false, true);