Index: Source/core/workers/WorkerGlobalScope.cpp |
diff --git a/Source/core/workers/WorkerGlobalScope.cpp b/Source/core/workers/WorkerGlobalScope.cpp |
index a517c8704513d3fd0cbcb0632728b7eb664c560b..ce2b8b5c153cf0c3d0bed9dd606594f97ec67952 100644 |
--- a/Source/core/workers/WorkerGlobalScope.cpp |
+++ b/Source/core/workers/WorkerGlobalScope.cpp |
@@ -92,12 +92,7 @@ WorkerGlobalScope::WorkerGlobalScope(const KURL& url, const String& userAgent, W |
WorkerGlobalScope::~WorkerGlobalScope() |
{ |
- ASSERT(thread()->isCurrentThread()); |
- |
- // Notify proxy that we are going away. This can free the WorkerThread object, so do not access it after this. |
- thread()->workerReportingProxy().workerGlobalScopeDestroyed(); |
- |
- setClient(0); |
+ ASSERT(!m_thread); |
} |
void WorkerGlobalScope::applyContentSecurityPolicyFromString(const String& policy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) |
@@ -189,6 +184,19 @@ void WorkerGlobalScope::clearInspector() |
m_workerInspectorController.clear(); |
} |
+void WorkerGlobalScope::detach() |
+{ |
+ ASSERT(thread()->isCurrentThread()); |
+ |
+ // Notify proxy that we are going away. This can free the WorkerThread object, so do not access it after this. |
+ thread()->workerReportingProxy().workerGlobalScopeDestroyed(); |
+ |
+ clearScript(); |
+ clearInspector(); |
+ setClient(0); |
+ clearThread(); |
+} |
+ |
void WorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionState& exceptionState) |
{ |
ASSERT(contentSecurityPolicy()); |
@@ -280,4 +288,12 @@ WorkerEventQueue* WorkerGlobalScope::eventQueue() const |
return m_eventQueue.get(); |
} |
+void WorkerGlobalScope::trace(Visitor* visitor) |
+{ |
+ visitor->trace(m_console); |
+ visitor->trace(m_location); |
+ visitor->trace(m_navigator); |
+ WorkerSupplementable::trace(visitor); |
+} |
+ |
} // namespace WebCore |