From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jeremy Rose Date: Mon, 5 Dec 2022 14:28:40 -0800 Subject: allow embedder to control CodeGenerationFromStringsCallback This is needed to blend Blink and Node's code generation policy. This should be upstreamed. diff --git a/src/api/environment.cc b/src/api/environment.cc index e3c42d892eed8dd605301348c08ad24f4362a7aa..c718b9919bb30627e5da2b92a8de58c494bf4b93 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -268,11 +268,15 @@ void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s) { void SetIsolateMiscHandlers(v8::Isolate* isolate, const IsolateSettings& s) { isolate->SetMicrotasksPolicy(s.policy); + // Allow the embedder first chance at policy decisions. + // This is particularly important for embedders that combine Node and Blink, + // as Blink must be able to make Content Security Policy-based decisions. auto* allow_wasm_codegen_cb = s.allow_wasm_code_generation_callback ? s.allow_wasm_code_generation_callback : AllowWasmCodeGenerationCallback; isolate->SetAllowWasmCodeGenerationCallback(allow_wasm_codegen_cb); - isolate->SetModifyCodeGenerationFromStringsCallback( - ModifyCodeGenerationFromStrings); + auto* modify_code_generation_from_strings_callback = s.modify_code_generation_from_strings_callback ? + s.modify_code_generation_from_strings_callback : ModifyCodeGenerationFromStrings; + isolate->SetModifyCodeGenerationFromStringsCallback(modify_code_generation_from_strings_callback); Mutex::ScopedLock lock(node::per_process::cli_options_mutex); if (per_process::cli_options->get_per_isolate_options() diff --git a/src/node.h b/src/node.h index 6ff7527d4fe4d126bda80615ffed75f77f700b86..5a849f047feca5d4d101c21c125e1c0500150077 100644 --- a/src/node.h +++ b/src/node.h @@ -463,6 +463,8 @@ struct IsolateSettings { v8::PromiseRejectCallback promise_reject_callback = nullptr; v8::AllowWasmCodeGenerationCallback allow_wasm_code_generation_callback = nullptr; + v8::ModifyCodeGenerationFromStringsCallback2 + modify_code_generation_from_strings_callback = nullptr; }; // Overriding IsolateSettings may produce unexpected behavior