[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756
japhet at chromium.org
japhet at chromium.org
Fri Feb 26 22:14:35 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit c4cbc3dcc1e7b125a11c494bcc907272ba5283a3
Author: japhet at chromium.org <japhet at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Feb 8 19:32:10 2010 +0000
2010-02-08 Nate Chapin <japhet at chromium.org>
Reviewed by Dimitri Glazkov.
[V8] Unify the WorkerContext V8 object wrapping code with
the standard V8 object wrapping code.
https://bugs.webkit.org/show_bug.cgi?id=34658
* bindings/scripts/CodeGeneratorV8.pm:
* bindings/v8/V8DOMWrapper.cpp:
(WebCore::V8DOMWrapper::instantiateV8Object):
(WebCore::V8DOMWrapper::convertEventTargetToV8Object):
* bindings/v8/V8WorkerContextEventListener.cpp:
(WebCore::V8WorkerContextEventListener::handleEvent):
(WebCore::V8WorkerContextEventListener::getReceiverObject):
* bindings/v8/WorkerContextExecutionProxy.cpp:
* bindings/v8/WorkerContextExecutionProxy.h:
* bindings/v8/custom/V8NotificationCenterCustom.cpp:
(WebCore::V8NotificationCenter::createHTMLNotificationCallback):
(WebCore::V8NotificationCenter::createNotificationCallback):
* bindings/v8/custom/V8WorkerContextCustom.cpp:
(WebCore::toV8):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54499 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index e8b5e7a..98d5988 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,27 @@
+2010-02-08 Nate Chapin <japhet at chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [V8] Unify the WorkerContext V8 object wrapping code with
+ the standard V8 object wrapping code.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34658
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * bindings/v8/V8DOMWrapper.cpp:
+ (WebCore::V8DOMWrapper::instantiateV8Object):
+ (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
+ * bindings/v8/V8WorkerContextEventListener.cpp:
+ (WebCore::V8WorkerContextEventListener::handleEvent):
+ (WebCore::V8WorkerContextEventListener::getReceiverObject):
+ * bindings/v8/WorkerContextExecutionProxy.cpp:
+ * bindings/v8/WorkerContextExecutionProxy.h:
+ * bindings/v8/custom/V8NotificationCenterCustom.cpp:
+ (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
+ (WebCore::V8NotificationCenter::createNotificationCallback):
+ * bindings/v8/custom/V8WorkerContextCustom.cpp:
+ (WebCore::toV8):
+
2010-02-08 Kwang Yul Seo <skyul at company100.net>
Reviewed by Darin Adler.
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 1beda7b..ee8a9ee 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -272,6 +272,7 @@ sub GenerateHeader
public:
static bool HasInstance(v8::Handle<v8::Value> value);
static v8::Persistent<v8::FunctionTemplate> GetRawTemplate();
+ static v8::Persistent<v8::FunctionTemplate> GetTemplate();
static ${nativeType}* toNative(v8::Handle<v8::Object>);
static v8::Handle<v8::Object> wrap(${nativeType}*${forceNewObjectParameter});
END
@@ -336,8 +337,6 @@ END
}
push(@headerContent, <<END);
-
- static v8::Persistent<v8::FunctionTemplate> GetTemplate();
};
v8::Handle<v8::Value> toV8(${nativeType}*${forceNewObjectParameter});
@@ -608,7 +607,6 @@ END
return V8DOMWrapper::getConstructor(type, V8DOMWindow::toNative(info.Holder()));
END
} elsif ($classIndex eq "DEDICATEDWORKERCONTEXT" or $classIndex eq "WORKERCONTEXT" or $classIndex eq "SHAREDWORKERCONTEXT") {
- $implIncludes{"WorkerContextExecutionProxy.h"} = 1;
push(@implContentDecls, <<END);
return V8DOMWrapper::getConstructor(type, V8WorkerContext::toNative(info.Holder()));
END
@@ -1954,12 +1952,8 @@ sub GenerateToV8Converters
v8::Handle<v8::Object> ${className}::wrap(${nativeType}* impl${forceNewObjectInput}) {
v8::Handle<v8::Object> wrapper;
-END
- if (!NeedsWorkerContextExecutionProxyToV8($interfaceName)) {
- push(@implContent, <<END);
V8Proxy* proxy = 0;
END
- }
if (IsNodeSubType($dataNode)) {
push(@implContent, <<END);
@@ -1997,17 +1991,10 @@ END
context->Enter();
END
}
-
- if (NeedsWorkerContextExecutionProxyToV8($interfaceName)) {
- $implIncludes{"WorkerContextExecutionProxy.h"} = 1;
- push(@implContent, <<END);
- wrapper = WorkerContextExecutionProxy::toV8(${wrapperType}, impl);
-END
- } else {
- push(@implContent, <<END);
+
+ push(@implContent, <<END);
wrapper = V8DOMWrapper::instantiateV8Object(proxy, ${wrapperType}, impl);
END
- }
if (IsNodeSubType($dataNode)) {
push(@implContent, <<END);
@@ -2055,19 +2042,6 @@ END
}
}
-sub NeedsWorkerContextExecutionProxyToV8 {
- # These objects can be constructed under WorkerContextExecutionProxy. They need special
- # handling, since if we call V8Proxy::retrieve(), we will crash.
- # FIXME: websocket?
- $interfaceName = shift;
- return 1 if $interfaceName eq "DOMCoreException";
- return 1 if $interfaceName eq "EventException";
- return 1 if $interfaceName eq "RangeException";
- return 1 if $interfaceName eq "XMLHttpRequestException";
- return 1 if $interfaceName eq "MessagePort";
- return 0;
-}
-
sub HasCustomToV8Implementation {
# FIXME: This subroutine is lame. Probably should be an .idl attribute (CustomToV8)?
$dataNode = shift;
@@ -2089,6 +2063,7 @@ sub HasCustomToV8Implementation {
return 1 if $interfaceName eq "SVGDocument";
return 1 if $interfaceName eq "SVGElement";
return 1 if $interfaceName eq "Screen";
+ return 1 if $interfaceName eq "WorkerContext";
# We don't generate a custom converter (but JSC does) for the following:
return 0 if $interfaceName eq "AbstractWorker";
@@ -2779,18 +2754,6 @@ sub ReturnNativeToJSValue
return "return $value->deserialize()";
}
- if ($type eq "DedicatedWorkerContext" or $type eq "WorkerContext" or $type eq "SharedWorkerContext") {
- $implIncludes{"WorkerContextExecutionProxy.h"} = 1;
- return "return WorkerContextExecutionProxy::convertWorkerContextToV8Object($value)";
- }
-
- if ($type eq "WorkerLocation" or $type eq "WorkerNavigator" or $type eq "NotificationCenter") {
- $implIncludes{"WorkerContextExecutionProxy.h"} = 1;
- my $classIndex = uc($type);
-
- return "return WorkerContextExecutionProxy::convertToV8Object(V8ClassIndex::$classIndex, $value)";
- }
-
$implIncludes{"wtf/RefCounted.h"} = 1;
$implIncludes{"wtf/RefPtr.h"} = 1;
$implIncludes{"wtf/GetPtr.h"} = 1;
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index 2801c04..5756c1d 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -64,6 +64,8 @@
#include "V8StyleSheet.h"
#include "V8WebSocket.h"
#include "V8Worker.h"
+#include "V8WorkerContext.h"
+#include "V8XMLHttpRequest.h"
#include "WebGLArray.h"
#include "WebGLContextAttributes.h"
#include "WebGLUniformLocation.h"
@@ -267,13 +269,16 @@ PassRefPtr<NodeFilter> V8DOMWrapper::wrapNativeNodeFilter(v8::Handle<v8::Value>
v8::Local<v8::Object> V8DOMWrapper::instantiateV8Object(V8Proxy* proxy, V8ClassIndex::V8WrapperType type, void* impl)
{
+ // Get the WorkerContextExecutionProxy first. If we are in a WorkerContext and we try to call V8Proxy::retrieve(),
+ // we crash trying to retrieve a DOMWindow.
+ WorkerContextExecutionProxy* workerContextProxy = WorkerContextExecutionProxy::retrieve();
if (V8IsolatedContext::getEntered()) {
// This effectively disables the wrapper cache for isolated worlds.
proxy = 0;
// FIXME: Do we need a wrapper cache for the isolated world? We should
// see if the performance gains are worth while.
// We'll get one once we give the isolated context a proper window shell.
- } else if (!proxy)
+ } else if (!proxy && !workerContextProxy)
proxy = V8Proxy::retrieve();
v8::Local<v8::Object> instance;
@@ -281,7 +286,11 @@ v8::Local<v8::Object> V8DOMWrapper::instantiateV8Object(V8Proxy* proxy, V8ClassI
// FIXME: Fix this to work properly with isolated worlds (see above).
instance = proxy->windowShell()->createWrapperFromCache(type);
else {
- v8::Local<v8::Function> function = V8ClassIndex::getTemplate(type)->GetFunction();
+ v8::Local<v8::Function> function;
+ if (workerContextProxy)
+ function = getConstructor(type, workerContextProxy->workerContext());
+ else
+ function = V8ClassIndex::getTemplate(type)->GetFunction();
instance = SafeAllocation::newInstance(function);
}
if (!instance.IsEmpty()) {
@@ -365,11 +374,17 @@ v8::Handle<v8::Value> V8DOMWrapper::convertEventTargetToV8Object(EventTarget* ta
#if ENABLE(WORKERS)
if (Worker* worker = target->toWorker())
return toV8(worker);
+
+ if (DedicatedWorkerContext* workerContext = target->toDedicatedWorkerContext())
+ return toV8(workerContext);
#endif // WORKERS
#if ENABLE(SHARED_WORKERS)
if (SharedWorker* sharedWorker = target->toSharedWorker())
return toV8(sharedWorker);
+
+ if (SharedWorkerContext* sharedWorkerContext = target->toSharedWorkerContext())
+ return toV8(sharedWorkerContext);
#endif // SHARED_WORKERS
#if ENABLE(NOTIFICATIONS)
@@ -395,6 +410,9 @@ v8::Handle<v8::Value> V8DOMWrapper::convertEventTargetToV8Object(EventTarget* ta
return wrapper;
}
+ if (XMLHttpRequest* xhr = target->toXMLHttpRequest())
+ return toV8(xhr);
+
// MessagePort is created within its JS counterpart
if (MessagePort* port = target->toMessagePort()) {
v8::Handle<v8::Object> wrapper = getActiveDOMObjectMap().get(port);
diff --git a/WebCore/bindings/v8/V8WorkerContextEventListener.cpp b/WebCore/bindings/v8/V8WorkerContextEventListener.cpp
index e5356de..fa89ae6 100644
--- a/WebCore/bindings/v8/V8WorkerContextEventListener.cpp
+++ b/WebCore/bindings/v8/V8WorkerContextEventListener.cpp
@@ -34,8 +34,9 @@
#include "V8WorkerContextEventListener.h"
-#include "Event.h"
#include "V8Binding.h"
+#include "V8DOMWrapper.h"
+#include "V8Event.h"
#include "WorkerContext.h"
#include "WorkerContextExecutionProxy.h"
@@ -76,7 +77,7 @@ void V8WorkerContextEventListener::handleEvent(ScriptExecutionContext* context,
v8::Context::Scope scope(v8Context);
// Get the V8 wrapper for the event object.
- v8::Handle<v8::Value> jsEvent = WorkerContextExecutionProxy::convertEventToV8Object(event);
+ v8::Handle<v8::Value> jsEvent = toV8(event);
invokeEventHandler(context, event, jsEvent);
}
@@ -155,7 +156,7 @@ v8::Local<v8::Object> V8WorkerContextEventListener::getReceiverObject(ScriptExec
return listener;
EventTarget* target = event->currentTarget();
- v8::Handle<v8::Value> value = WorkerContextExecutionProxy::convertEventTargetToV8Object(target);
+ v8::Handle<v8::Value> value = V8DOMWrapper::convertEventTargetToV8Object(target);
if (value.IsEmpty())
return v8::Local<v8::Object>();
return v8::Local<v8::Object>::New(v8::Handle<v8::Object>::Cast(value));
diff --git a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
index ad30eed..603e0da 100644
--- a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
+++ b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
@@ -176,195 +176,6 @@ void WorkerContextExecutionProxy::initContextIfNeeded()
globalObject->Set(implicitProtoString, jsWorkerContext);
}
-v8::Handle<v8::Value> WorkerContextExecutionProxy::convertToV8Object(V8ClassIndex::V8WrapperType type, void* impl)
-{
- if (!impl)
- return v8::Null();
-
- if (type == V8ClassIndex::DEDICATEDWORKERCONTEXT
-#if ENABLE(SHARED_WORKERS)
- || type == V8ClassIndex::SHAREDWORKERCONTEXT
-#endif
- )
- return convertWorkerContextToV8Object(static_cast<WorkerContext*>(impl));
-
- bool isActiveDomObject = false;
- switch (type) {
-#define MAKE_CASE(TYPE, NAME) case V8ClassIndex::TYPE:
- ACTIVE_DOM_OBJECT_TYPES(MAKE_CASE)
- isActiveDomObject = true;
- break;
-#undef MAKE_CASE
- default:
- break;
- }
-
- if (isActiveDomObject) {
- v8::Persistent<v8::Object> result = getActiveDOMObjectMap().get(impl);
- if (!result.IsEmpty())
- return result;
-
- v8::Local<v8::Object> object = toV8(type, type, impl);
- switch (type) {
-#define MAKE_CASE(TYPE, NAME) \
- case V8ClassIndex::TYPE: static_cast<NAME*>(impl)->ref(); break;
- ACTIVE_DOM_OBJECT_TYPES(MAKE_CASE)
-#undef MAKE_CASE
- default:
- ASSERT_NOT_REACHED();
- }
-
- result = v8::Persistent<v8::Object>::New(object);
- V8DOMWrapper::setJSWrapperForActiveDOMObject(impl, result);
- return result;
- }
-
- // Non DOM node
- v8::Persistent<v8::Object> result = getDOMObjectMap().get(impl);
- if (result.IsEmpty()) {
- v8::Local<v8::Object> object = toV8(type, type, impl);
- if (!object.IsEmpty()) {
- switch (type) {
- case V8ClassIndex::WORKERLOCATION:
- static_cast<WorkerLocation*>(impl)->ref();
- break;
- case V8ClassIndex::WORKERNAVIGATOR:
- static_cast<WorkerNavigator*>(impl)->ref();
- break;
-#if ENABLE(NOTIFICATIONS)
- case V8ClassIndex::NOTIFICATIONCENTER:
- static_cast<NotificationCenter*>(impl)->ref();
- break;
- case V8ClassIndex::NOTIFICATION:
- static_cast<Notification*>(impl)->ref();
- break;
-#endif
- case V8ClassIndex::DOMCOREEXCEPTION:
- static_cast<DOMCoreException*>(impl)->ref();
- break;
- case V8ClassIndex::RANGEEXCEPTION:
- static_cast<RangeException*>(impl)->ref();
- break;
- case V8ClassIndex::EVENTEXCEPTION:
- static_cast<EventException*>(impl)->ref();
- break;
- case V8ClassIndex::XMLHTTPREQUESTEXCEPTION:
- static_cast<XMLHttpRequestException*>(impl)->ref();
- break;
- default:
- ASSERT(false);
- }
- result = v8::Persistent<v8::Object>::New(object);
- V8DOMWrapper::setJSWrapperForDOMObject(impl, result);
- }
- }
- return result;
-}
-
-v8::Handle<v8::Value> WorkerContextExecutionProxy::convertEventToV8Object(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 = toV8(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
- V8DOMWrapper::setJSWrapperForDOMObject(event, v8::Persistent<v8::Object>::New(result));
-
- return result;
-}
-
-v8::Handle<v8::Value> WorkerContextExecutionProxy::convertEventTargetToV8Object(EventTarget* target)
-{
- if (!target)
- return v8::Null();
-
- DedicatedWorkerContext* workerContext = target->toDedicatedWorkerContext();
- if (workerContext)
- return convertWorkerContextToV8Object(workerContext);
-
-#if ENABLE(SHARED_WORKERS)
- SharedWorkerContext* sharedWorkerContext = target->toSharedWorkerContext();
- if (sharedWorkerContext)
- return convertWorkerContextToV8Object(sharedWorkerContext);
-#endif
-
- Worker* worker = target->toWorker();
- if (worker)
- return convertToV8Object(V8ClassIndex::WORKER, worker);
-
-#if ENABLE(SHARED_WORKERS)
- SharedWorker* sharedWorker = target->toSharedWorker();
- if (sharedWorker)
- return convertToV8Object(V8ClassIndex::SHAREDWORKER, sharedWorker);
-#endif
-
- XMLHttpRequest* xhr = target->toXMLHttpRequest();
- if (xhr)
- return convertToV8Object(V8ClassIndex::XMLHTTPREQUEST, xhr);
-
- MessagePort* mp = target->toMessagePort();
- if (mp)
- return convertToV8Object(V8ClassIndex::MESSAGEPORT, mp);
-
-#if ENABLE(WEB_SOCKETS)
- WebSocket* webSocket = target->toWebSocket();
- if (webSocket)
- return convertToV8Object(V8ClassIndex::WEBSOCKET, webSocket);
-#endif
-
-#if ENABLE(EVENTSOURCE)
- EventSource* eventSource = target->toEventSource();
- if (eventSource)
- return convertToV8Object(V8ClassIndex::EVENTSOURCE, eventSource);
-#endif
-
- ASSERT_NOT_REACHED();
- return v8::Handle<v8::Value>();
-}
-
-v8::Handle<v8::Value> WorkerContextExecutionProxy::convertWorkerContextToV8Object(WorkerContext* workerContext)
-{
- if (!workerContext)
- return v8::Null();
-
- v8::Handle<v8::Context> context = workerContext->script()->proxy()->context();
-
- v8::Handle<v8::Object> global = context->Global();
- ASSERT(!global.IsEmpty());
- return global;
-}
-
-v8::Local<v8::Object> WorkerContextExecutionProxy::toV8(V8ClassIndex::V8WrapperType descriptorType, V8ClassIndex::V8WrapperType cptrType, void* impl)
-{
- v8::Local<v8::Function> function;
- WorkerContextExecutionProxy* proxy = retrieve();
- if (proxy)
- function = V8DOMWrapper::getConstructor(descriptorType, proxy->workerContext());
- else
- function = V8ClassIndex::getTemplate(descriptorType)->GetFunction();
-
- v8::Local<v8::Object> instance = SafeAllocation::newInstance(function);
- if (!instance.IsEmpty())
- // Avoid setting the DOM wrapper for failed allocations.
- V8DOMWrapper::setDOMWrapper(instance, V8ClassIndex::ToInt(cptrType), impl);
- return instance;
-}
-
bool WorkerContextExecutionProxy::forgetV8EventObject(Event* event)
{
if (getDOMObjectMap().contains(event)) {
diff --git a/WebCore/bindings/v8/WorkerContextExecutionProxy.h b/WebCore/bindings/v8/WorkerContextExecutionProxy.h
index b5e6afb..67a472b 100644
--- a/WebCore/bindings/v8/WorkerContextExecutionProxy.h
+++ b/WebCore/bindings/v8/WorkerContextExecutionProxy.h
@@ -84,22 +84,6 @@ namespace WebCore {
// Returns WorkerContextExecutionProxy object of the currently executing context. 0 will be returned if the current executing context is not the worker context.
static WorkerContextExecutionProxy* retrieve();
- // We have to keep all these conversion functions here before WorkerContextExecutionProxy is refactor-ed.
- template<typename T>
- static v8::Handle<v8::Value> convertToV8Object(V8ClassIndex::V8WrapperType type, PassRefPtr<T> impl)
- {
- return convertToV8Object(type, impl.get());
- }
- static v8::Handle<v8::Value> convertToV8Object(V8ClassIndex::V8WrapperType, void* impl);
- static v8::Handle<v8::Value> convertEventToV8Object(Event*);
- static v8::Handle<v8::Value> convertEventTargetToV8Object(EventTarget*);
- static v8::Handle<v8::Value> convertWorkerContextToV8Object(WorkerContext*);
-
- static v8::Local<v8::Object> toV8(V8ClassIndex::V8WrapperType type, void* impl)
- {
- return toV8(type, type, impl);
- }
-
private:
void initV8IfNeeded();
void initContextIfNeeded();
@@ -108,8 +92,6 @@ namespace WebCore {
// Run an already compiled script.
v8::Local<v8::Value> runScript(v8::Handle<v8::Script>);
- static v8::Local<v8::Object> toV8(V8ClassIndex::V8WrapperType descriptorType, V8ClassIndex::V8WrapperType cptrType, void* impl);
-
static bool forgetV8EventObject(Event*);
static const int kWorkerMaxStackSize = 500 * 1024;
diff --git a/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp b/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
index 5531b48..9c3ab45 100644
--- a/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
@@ -43,7 +43,6 @@
#include "V8Proxy.h"
#include "V8Utilities.h"
#include "WorkerContext.h"
-#include "WorkerContextExecutionProxy.h"
namespace WebCore {
@@ -91,9 +90,6 @@ v8::Handle<v8::Value> V8NotificationCenter::createHTMLNotificationCallback(const
if (ec)
return throwError(ec);
- if (notificationCenter->context()->isWorkerContext())
- return WorkerContextExecutionProxy::convertToV8Object(V8ClassIndex::NOTIFICATION, notification.get());
-
return toV8(notification.get());
}
@@ -108,9 +104,6 @@ v8::Handle<v8::Value> V8NotificationCenter::createNotificationCallback(const v8:
if (ec)
return throwError(ec);
- if (notificationCenter->context()->isWorkerContext())
- return WorkerContextExecutionProxy::convertToV8Object(V8ClassIndex::NOTIFICATION, notification.get());
-
return toV8(notification.get());
}
diff --git a/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp b/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
index bde6e86..805b746 100644
--- a/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
@@ -173,6 +173,16 @@ v8::Handle<v8::Value> V8WorkerContext::removeEventListenerCallback(const v8::Arg
return v8::Undefined();
}
+v8::Handle<v8::Value> toV8(WorkerContext* impl)
+{
+ if (!impl)
+ return v8::Null();
+
+ v8::Handle<v8::Object> global = impl->script()->proxy()->context()->Global();
+ ASSERT(!global.IsEmpty());
+ return global;
+}
+
} // namespace WebCore
#endif // ENABLE(WORKERS)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list