worker_context_will_destroy.patch 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Cheng Zhao <[email protected]>
  3. Date: Thu, 20 Sep 2018 17:47:12 -0700
  4. Subject: worker_context_will_destroy.patch
  5. This adds a hook for worker context destruction, which we use in Electron to
  6. shutdown node integration in the worker if relevant.
  7. An attempt to upstream this was made, but rejected:
  8. https://chromium-review.googlesource.com/c/chromium/src/+/1954347
  9. diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
  10. index 7a2d251ba2d13d0a34df176111e6524a27b87f55..cbbe0fbdd25a0f7859b113fdb3dcd9ce57e597d6 100644
  11. --- a/content/public/renderer/content_renderer_client.h
  12. +++ b/content/public/renderer/content_renderer_client.h
  13. @@ -417,6 +417,11 @@ class CONTENT_EXPORT ContentRendererClient {
  14. virtual void DidInitializeWorkerContextOnWorkerThread(
  15. v8::Local<v8::Context> context) {}
  16. + // Notifies that a worker context will be destroyed. This function is called
  17. + // from the worker thread.
  18. + virtual void WillDestroyWorkerContextOnWorkerThread(
  19. + v8::Local<v8::Context> context) {}
  20. +
  21. // Overwrites the given URL to use an HTML5 embed if possible.
  22. // An empty URL is returned if the URL is not overriden.
  23. virtual GURL OverrideFlashEmbedWithHTML(const GURL& url);
  24. diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
  25. index a287771fc347f1636e1252e431149c5bc6737fd4..7fc8bff33b785aa3d42248c22477474e84819dee 100644
  26. --- a/content/renderer/renderer_blink_platform_impl.cc
  27. +++ b/content/renderer/renderer_blink_platform_impl.cc
  28. @@ -890,6 +890,12 @@ void RendererBlinkPlatformImpl::WillStopWorkerThread() {
  29. WorkerThreadRegistry::Instance()->WillStopCurrentWorkerThread();
  30. }
  31. +void RendererBlinkPlatformImpl::WorkerContextWillDestroy(
  32. + const v8::Local<v8::Context>& worker) {
  33. + GetContentClient()->renderer()->WillDestroyWorkerContextOnWorkerThread(
  34. + worker);
  35. +}
  36. +
  37. void RendererBlinkPlatformImpl::WorkerContextCreated(
  38. const v8::Local<v8::Context>& worker) {
  39. GetContentClient()->renderer()->DidInitializeWorkerContextOnWorkerThread(
  40. diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
  41. index f726c03e34578032f5fc6c9a914ba72858efce89..9c5eeba6e24bb53fc112082c198a103256b06e32 100644
  42. --- a/content/renderer/renderer_blink_platform_impl.h
  43. +++ b/content/renderer/renderer_blink_platform_impl.h
  44. @@ -196,6 +196,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
  45. void DidStartWorkerThread() override;
  46. void WillStopWorkerThread() override;
  47. void WorkerContextCreated(const v8::Local<v8::Context>& worker) override;
  48. + void WorkerContextWillDestroy(const v8::Local<v8::Context>& worker) override;
  49. bool AllowScriptExtensionForServiceWorker(
  50. const blink::WebSecurityOrigin& script_origin) override;
  51. blink::ProtocolHandlerSecurityLevel GetProtocolHandlerSecurityLevel(
  52. diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
  53. index 8b87ad1fbda13dccee37fd27b3bdec8060caf50a..fec29a007b548b63d5efd6ae40eb7900b99d0d8e 100644
  54. --- a/third_party/blink/public/platform/platform.h
  55. +++ b/third_party/blink/public/platform/platform.h
  56. @@ -662,6 +662,7 @@ class BLINK_PLATFORM_EXPORT Platform {
  57. virtual void DidStartWorkerThread() {}
  58. virtual void WillStopWorkerThread() {}
  59. virtual void WorkerContextCreated(const v8::Local<v8::Context>& worker) {}
  60. + virtual void WorkerContextWillDestroy(const v8::Local<v8::Context>& worker) {}
  61. virtual bool AllowScriptExtensionForServiceWorker(
  62. const WebSecurityOrigin& script_origin) {
  63. return false;
  64. diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc
  65. index 6e0a669c741753e784fe8a967b1deb125b02d0bf..2449348f956f81845bf314558fa5b7268500adeb 100644
  66. --- a/third_party/blink/renderer/core/workers/worker_thread.cc
  67. +++ b/third_party/blink/renderer/core/workers/worker_thread.cc
  68. @@ -762,6 +762,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() {
  69. }
  70. pause_handle_.reset();
  71. + {
  72. + v8::HandleScope handle_scope(GetIsolate());
  73. + Platform::Current()->WorkerContextWillDestroy(
  74. + GlobalScope()->ScriptController()->GetContext());
  75. + }
  76. +
  77. if (WorkerThreadDebugger* debugger = WorkerThreadDebugger::From(GetIsolate()))
  78. debugger->WorkerThreadDestroyed(this);