Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1645)

Unified Diff: Source/core/workers/WorkerGlobalScope.cpp

Issue 1134933003: Revert of Remove the concept of a cleanup task (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/parser/HTMLParserThread.cpp ('k') | Source/core/workers/WorkerThread.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/workers/WorkerGlobalScope.cpp
diff --git a/Source/core/workers/WorkerGlobalScope.cpp b/Source/core/workers/WorkerGlobalScope.cpp
index bb5558f8c3c93e269f4580741cdb7dd66b3555e1..1c0e3df625225876635810a810df379f5f1de242 100644
--- a/Source/core/workers/WorkerGlobalScope.cpp
+++ b/Source/core/workers/WorkerGlobalScope.cpp
@@ -68,6 +68,23 @@
namespace blink {
+class CloseWorkerGlobalScopeTask : public ExecutionContextTask {
+public:
+ static PassOwnPtr<CloseWorkerGlobalScopeTask> create()
+ {
+ return adoptPtr(new CloseWorkerGlobalScopeTask);
+ }
+
+ virtual void performTask(ExecutionContext *context)
+ {
+ WorkerGlobalScope* workerGlobalScope = toWorkerGlobalScope(context);
+ // Notify parent that this context is closed. Parent is responsible for calling WorkerThread::stop().
+ workerGlobalScope->thread()->workerReportingProxy().workerGlobalScopeClosed();
+ }
+
+ virtual bool isCleanupTask() const { return true; }
+};
+
WorkerGlobalScope::WorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThread* thread, double timeOrigin, const SecurityOrigin* starterOrigin, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients)
: m_url(url)
, m_userAgent(userAgent)
@@ -159,8 +176,14 @@
void WorkerGlobalScope::close()
{
- // Let current script run to completion, but tell the worker micro task runner to tear down the thread after this task.
+ if (m_closing)
+ return;
+
+ // Let current script run to completion but prevent future script evaluations.
+ // After m_closing is set, all the tasks in the queue continue to be fetched but only
+ // tasks with isCleanupTask()==true will be executed.
m_closing = true;
+ postTask(FROM_HERE, CloseWorkerGlobalScopeTask::create());
}
WorkerConsole* WorkerGlobalScope::console()
@@ -193,11 +216,6 @@
void WorkerGlobalScope::dispose()
{
ASSERT(thread()->isCurrentThread());
- stopActiveDOMObjects();
-
- // Event listeners would keep DOMWrapperWorld objects alive for too long. Also, they have references to JS objects,
- // which become dangling once Heap is destroyed.
- removeAllEventListeners();
clearScript();
clearInspector();
« no previous file with comments | « Source/core/html/parser/HTMLParserThread.cpp ('k') | Source/core/workers/WorkerThread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698