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