Commit f92c252fe98 for nodejs

commit f92c252fe984865e1f0c2e694eb0fe63ce919807
Author: Joyee Cheung <joyeec9h3@gmail.com>
Date:   Tue Oct 6 14:30:36 2026 +0200

    src, test: migrate to cppgc-owned v8::MicrotaskQueue

    Co-Authored-By: Igor Sheludko <isheludko@gmail.com>
    Signed-off-by: Joyee Cheung <joyeec9h3@gmail.com>
    PR-URL: https://github.com/nodejs/node/pull/66537
    Reviewed-By: Richard Lau <richard.lau@ibm.com>
    Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
    Reviewed-By: Filip Skokan <panva.ip@gmail.com>
    Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>

diff --git a/src/node_contextify.cc b/src/node_contextify.cc
index 80efadd7a82..989ce5d6750 100644
--- a/src/node_contextify.cc
+++ b/src/node_contextify.cc
@@ -155,7 +155,7 @@ ContextifyContext* ContextifyContext::New(Environment* env,

   MicrotaskQueue* queue =
       options->own_microtask_queue
-          ? options->own_microtask_queue.get()
+          ? options->own_microtask_queue
           : env->isolate()->GetCurrentContext()->GetMicrotaskQueue();

   Local<Context> v8_context;
@@ -176,9 +176,7 @@ ContextifyContext::ContextifyContext(Environment* env,
                                      Local<Object> wrapper,
                                      Local<Context> v8_context,
                                      ContextOptions* options)
-    : microtask_queue_(options->own_microtask_queue
-                           ? options->own_microtask_queue.release()
-                           : nullptr) {
+    : microtask_queue_(options->own_microtask_queue) {
   CppgcMixin::Wrap(this, env, wrapper);

   context_.Reset(env->isolate(), v8_context);
diff --git a/src/node_contextify.h b/src/node_contextify.h
index 446cab2f580..be3034da39f 100644
--- a/src/node_contextify.h
+++ b/src/node_contextify.h
@@ -18,7 +18,7 @@ struct ContextOptions {
   v8::Local<v8::String> origin;
   v8::Local<v8::Boolean> allow_code_gen_strings;
   v8::Local<v8::Boolean> allow_code_gen_wasm;
-  std::unique_ptr<v8::MicrotaskQueue> own_microtask_queue;
+  v8::MicrotaskQueue* own_microtask_queue = nullptr;
   v8::Local<v8::Symbol> host_defined_options_id;
   bool vanilla = false;
 };
@@ -122,7 +122,7 @@ class ContextifyContext final : CPPGC_MIXIN(ContextifyContext) {
   }

   inline v8::MicrotaskQueue* microtask_queue() const {
-    return microtask_queue_.get();
+    return microtask_queue_;
   }

   template <typename T>
@@ -186,7 +186,7 @@ class ContextifyContext final : CPPGC_MIXIN(ContextifyContext) {
       const v8::PropertyCallbackInfo<v8::Array>& args);

   v8::TracedReference<v8::Context> context_;
-  std::unique_ptr<v8::MicrotaskQueue> microtask_queue_;
+  cppgc::Persistent<v8::MicrotaskQueue> microtask_queue_;
 };

 class ContextifyScript final : CPPGC_MIXIN(ContextifyScript) {
diff --git a/test/cctest/test_environment.cc b/test/cctest/test_environment.cc
index 7b3458a380f..1f6d3012e25 100644
--- a/test/cctest/test_environment.cc
+++ b/test/cctest/test_environment.cc
@@ -1062,15 +1062,16 @@ TEST_F(EnvironmentTest, NestedMicrotaskQueue) {
   const v8::HandleScope handle_scope(isolate_);
   const Argv argv;

-  std::unique_ptr<v8::MicrotaskQueue> queue = v8::MicrotaskQueue::New(
-      isolate_, v8::MicrotasksPolicy::kExplicit);
+  v8::MicrotaskQueue* queue =
+      v8::MicrotaskQueue::New(isolate_, v8::MicrotasksPolicy::kExplicit);
+
   v8::Local<v8::Context> context =
       v8::Context::New(isolate_,
                        nullptr,
                        {},
                        {},
                        v8::DeserializeInternalFieldsCallback(),
-                       queue.get());
+                       queue);
   node::InitializeContext(context);
   v8::Context::Scope context_scope(context);