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 eb8968c2a86102d0d3a21f07c394f1c360083c6c..025ef3f70a5ae34faf8c6013fbfba171c7f501ac 100644
  11. --- a/content/public/renderer/content_renderer_client.h
  12. +++ b/content/public/renderer/content_renderer_client.h
  13. @@ -356,6 +356,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 030fd7ed2ea675e42e7894b1d89e636f5f5b85a6..998fe8b45959b8cfd91a1ed4f75f5946adf61537 100644
  26. --- a/content/renderer/renderer_blink_platform_impl.cc
  27. +++ b/content/renderer/renderer_blink_platform_impl.cc
  28. @@ -950,6 +950,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 8cbfe0a939e97de8dd8d4b5e4d741fb46e94fd45..2bc2ef61890a4c189613ae8a3f61c746ffc5d310 100644
  42. --- a/content/renderer/renderer_blink_platform_impl.h
  43. +++ b/content/renderer/renderer_blink_platform_impl.h
  44. @@ -208,6 +208,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 ced2c8e433d5b807bd4f1aa44c6af53e93261c23..53b1ebb708e2332e38090d1adba88dbe850bf02d 100644
  54. --- a/third_party/blink/public/platform/platform.h
  55. +++ b/third_party/blink/public/platform/platform.h
  56. @@ -716,6 +716,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 2406a8b438de5f01f5354e08bcfc8810238b1bea..e7a60f6cae0fabeac6a5adec633ad5f45d43ef33 100644
  66. --- a/third_party/blink/renderer/core/workers/worker_thread.cc
  67. +++ b/third_party/blink/renderer/core/workers/worker_thread.cc
  68. @@ -731,6 +731,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() {
  69. nested_runner_->QuitNow();
  70. }
  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);