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 6dff7d89d284279025548af45d3d0712476c5e89..b9a5f2becbd5401579b25e5f7ffd6ae69902c282 100644
  11. --- a/content/public/renderer/content_renderer_client.h
  12. +++ b/content/public/renderer/content_renderer_client.h
  13. @@ -407,6 +407,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 15e662c573b71697e982e7dbf60b3564b949e9e3..985000af087d53908fb1b5eee28e4d34e49b2474 100644
  26. --- a/content/renderer/renderer_blink_platform_impl.cc
  27. +++ b/content/renderer/renderer_blink_platform_impl.cc
  28. @@ -896,6 +896,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 c1db7661ae79709afcb7a686a792ba0bbafdc59b..1a2ef563c5393ba5e1e2f0ae49b152555587d324 100644
  42. --- a/content/renderer/renderer_blink_platform_impl.h
  43. +++ b/content/renderer/renderer_blink_platform_impl.h
  44. @@ -195,6 +195,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 1131374e07a14bfb4297b2034b669c6b5afe27d1..0f6cf25c6203c4c2bf28b9f4536a153427841502 100644
  54. --- a/third_party/blink/public/platform/platform.h
  55. +++ b/third_party/blink/public/platform/platform.h
  56. @@ -664,6 +664,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 9866cc85f4d2c9d834538010f8b1ca64efc701b9..5af206ddc527f7d7cf44b6c363d2ede08a36ff55 100644
  66. --- a/third_party/blink/renderer/core/workers/worker_thread.cc
  67. +++ b/third_party/blink/renderer/core/workers/worker_thread.cc
  68. @@ -764,6 +764,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);