Title: [226398] trunk/Source/WebCore
Revision
226398
Author
[email protected]
Date
2018-01-04 00:26:01 -0800 (Thu, 04 Jan 2018)

Log Message

Cancel pending script loads when service worker is being terminated
https://bugs.webkit.org/show_bug.cgi?id=181250

Patch by Youenn Fablet <[email protected]> on 2018-01-04
Reviewed by Alex Christensen.

Covered by service worker tests no longer crashing in ASAN builds.

* workers/WorkerScriptLoader.cpp:
(WebCore::WorkerScriptLoader::notifyFinished): Clearing loader when finished.
(WebCore::WorkerScriptLoader::cancel): Implementing cancel of a script loader by cancelling the underlying threadable loader.
* workers/WorkerScriptLoader.h:
* workers/service/ServiceWorkerContainer.cpp: Canceling loads of all pending jobs.
(WebCore::ServiceWorkerContainer::stop):
* workers/service/ServiceWorkerJob.cpp:
(WebCore::ServiceWorkerJob::cancelPendingLoad):
* workers/service/ServiceWorkerJob.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (226397 => 226398)


--- trunk/Source/WebCore/ChangeLog	2018-01-04 08:24:54 UTC (rev 226397)
+++ trunk/Source/WebCore/ChangeLog	2018-01-04 08:26:01 UTC (rev 226398)
@@ -1,5 +1,24 @@
 2018-01-04  Youenn Fablet  <[email protected]>
 
+        Cancel pending script loads when service worker is being terminated
+        https://bugs.webkit.org/show_bug.cgi?id=181250
+
+        Reviewed by Alex Christensen.
+
+        Covered by service worker tests no longer crashing in ASAN builds.
+
+        * workers/WorkerScriptLoader.cpp:
+        (WebCore::WorkerScriptLoader::notifyFinished): Clearing loader when finished.
+        (WebCore::WorkerScriptLoader::cancel): Implementing cancel of a script loader by cancelling the underlying threadable loader.
+        * workers/WorkerScriptLoader.h:
+        * workers/service/ServiceWorkerContainer.cpp: Canceling loads of all pending jobs.
+        (WebCore::ServiceWorkerContainer::stop):
+        * workers/service/ServiceWorkerJob.cpp:
+        (WebCore::ServiceWorkerJob::cancelPendingLoad):
+        * workers/service/ServiceWorkerJob.h:
+
+2018-01-04  Youenn Fablet  <[email protected]>
+
         Implement  https://fetch.spec.whatwg.org/#main-fetch default referrer policy setting
         https://bugs.webkit.org/show_bug.cgi?id=181239
 

Modified: trunk/Source/WebCore/workers/WorkerScriptLoader.cpp (226397 => 226398)


--- trunk/Source/WebCore/workers/WorkerScriptLoader.cpp	2018-01-04 08:24:54 UTC (rev 226397)
+++ trunk/Source/WebCore/workers/WorkerScriptLoader.cpp	2018-01-04 08:26:01 UTC (rev 226398)
@@ -194,6 +194,7 @@
 
 void WorkerScriptLoader::notifyFinished()
 {
+    m_threadableLoader = nullptr;
     if (!m_client || m_finishing)
         return;
 
@@ -201,4 +202,14 @@
     m_client->notifyFinished();
 }
 
+void WorkerScriptLoader::cancel()
+{
+    if (!m_threadableLoader)
+        return;
+
+    m_client = nullptr;
+    m_threadableLoader->cancel();
+    m_threadableLoader = nullptr;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/workers/WorkerScriptLoader.h (226397 => 226398)


--- trunk/Source/WebCore/workers/WorkerScriptLoader.h	2018-01-04 08:24:54 UTC (rev 226397)
+++ trunk/Source/WebCore/workers/WorkerScriptLoader.h	2018-01-04 08:26:01 UTC (rev 226398)
@@ -70,6 +70,8 @@
     void didFinishLoading(unsigned long identifier) override;
     void didFail(const ResourceError&) override;
 
+    void cancel();
+
 private:
     friend class WTF::RefCounted<WorkerScriptLoader>;
 

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (226397 => 226398)


--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2018-01-04 08:24:54 UTC (rev 226397)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2018-01-04 08:26:01 UTC (rev 226398)
@@ -579,6 +579,8 @@
     m_isStopped = true;
     removeAllEventListeners();
     m_pendingPromises.clear();
+    for (auto& job : m_jobMap.values())
+        job->cancelPendingLoad();
 }
 
 DocumentOrWorkerIdentifier ServiceWorkerContainer::contextIdentifier()

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp (226397 => 226398)


--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp	2018-01-04 08:24:54 UTC (rev 226397)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp	2018-01-04 08:26:01 UTC (rev 226398)
@@ -152,6 +152,14 @@
     m_scriptLoader = nullptr;
 }
 
+void ServiceWorkerJob::cancelPendingLoad()
+{
+    if (!m_scriptLoader)
+        return;
+    m_scriptLoader->cancel();
+    m_scriptLoader = nullptr;
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(SERVICE_WORKER)

Modified: trunk/Source/WebCore/workers/service/ServiceWorkerJob.h (226397 => 226398)


--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.h	2018-01-04 08:24:54 UTC (rev 226397)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.h	2018-01-04 08:26:01 UTC (rev 226398)
@@ -70,6 +70,8 @@
 
     const DocumentOrWorkerIdentifier& contextIdentifier() { return m_contextIdentifier; }
 
+    void cancelPendingLoad();
+
 private:
     ServiceWorkerJob(ServiceWorkerJobClient&, RefPtr<DeferredPromise>&&, ServiceWorkerJobData&&);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to