|
@@ -0,0 +1,89 @@
|
|
|
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
+From: Shelley Vohr <[email protected]>
|
|
|
+Date: Mon, 5 Oct 2020 16:05:45 -0700
|
|
|
+Subject: chore: expose v8 initialization isolate callbacks
|
|
|
+
|
|
|
+Exposes v8 initializer callbacks to Electron so that we can call them
|
|
|
+directly. We expand upon and adapt their behavior, so allows us to
|
|
|
+ensure that we stay in sync with Node.js default behavior.
|
|
|
+
|
|
|
+This will be upstreamed.
|
|
|
+
|
|
|
+diff --git a/src/api/environment.cc b/src/api/environment.cc
|
|
|
+index 28851b8a8f8bdd6dec0f54c62f79fd75a3be08ed..e42416b4807fcc9d35a93399b916968b45ed0c7a 100644
|
|
|
+--- a/src/api/environment.cc
|
|
|
++++ b/src/api/environment.cc
|
|
|
+@@ -26,14 +26,16 @@ using v8::PropertyDescriptor;
|
|
|
+ using v8::String;
|
|
|
+ using v8::Value;
|
|
|
+
|
|
|
+-static bool AllowWasmCodeGenerationCallback(Local<Context> context,
|
|
|
++// static
|
|
|
++bool Environment::AllowWasmCodeGenerationCallback(Local<Context> context,
|
|
|
+ Local<String>) {
|
|
|
+ Local<Value> wasm_code_gen =
|
|
|
+ context->GetEmbedderData(ContextEmbedderIndex::kAllowWasmCodeGeneration);
|
|
|
+ return wasm_code_gen->IsUndefined() || wasm_code_gen->IsTrue();
|
|
|
+ }
|
|
|
+
|
|
|
+-static bool ShouldAbortOnUncaughtException(Isolate* isolate) {
|
|
|
++// static
|
|
|
++bool Environment::ShouldAbortOnUncaughtException(Isolate* isolate) {
|
|
|
+ DebugSealHandleScope scope(isolate);
|
|
|
+ Environment* env = Environment::GetCurrent(isolate);
|
|
|
+ return env != nullptr &&
|
|
|
+@@ -42,7 +44,8 @@ static bool ShouldAbortOnUncaughtException(Isolate* isolate) {
|
|
|
+ !env->inside_should_not_abort_on_uncaught_scope();
|
|
|
+ }
|
|
|
+
|
|
|
+-static MaybeLocal<Value> PrepareStackTraceCallback(Local<Context> context,
|
|
|
++// static
|
|
|
++MaybeLocal<Value> Environment::PrepareStackTraceCallback(Local<Context> context,
|
|
|
+ Local<Value> exception,
|
|
|
+ Local<Array> trace) {
|
|
|
+ Environment* env = Environment::GetCurrent(context);
|
|
|
+@@ -216,7 +219,7 @@ void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s) {
|
|
|
+
|
|
|
+ auto* abort_callback = s.should_abort_on_uncaught_exception_callback ?
|
|
|
+ s.should_abort_on_uncaught_exception_callback :
|
|
|
+- ShouldAbortOnUncaughtException;
|
|
|
++ Environment::ShouldAbortOnUncaughtException;
|
|
|
+ isolate->SetAbortOnUncaughtExceptionCallback(abort_callback);
|
|
|
+
|
|
|
+ auto* fatal_error_cb = s.fatal_error_callback ?
|
|
|
+@@ -224,7 +227,7 @@ void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s) {
|
|
|
+ isolate->SetFatalErrorHandler(fatal_error_cb);
|
|
|
+
|
|
|
+ auto* prepare_stack_trace_cb = s.prepare_stack_trace_callback ?
|
|
|
+- s.prepare_stack_trace_callback : PrepareStackTraceCallback;
|
|
|
++ s.prepare_stack_trace_callback : Environment::PrepareStackTraceCallback;
|
|
|
+ isolate->SetPrepareStackTraceCallback(prepare_stack_trace_cb);
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -232,7 +235,7 @@ void SetIsolateMiscHandlers(v8::Isolate* isolate, const IsolateSettings& s) {
|
|
|
+ isolate->SetMicrotasksPolicy(s.policy);
|
|
|
+
|
|
|
+ auto* allow_wasm_codegen_cb = s.allow_wasm_code_generation_callback ?
|
|
|
+- s.allow_wasm_code_generation_callback : AllowWasmCodeGenerationCallback;
|
|
|
++ s.allow_wasm_code_generation_callback : Environment::AllowWasmCodeGenerationCallback;
|
|
|
+ isolate->SetAllowWasmCodeGenerationCallback(allow_wasm_codegen_cb);
|
|
|
+
|
|
|
+ if (s.flags & SHOULD_SET_PROMISE_REJECTION_CALLBACK) {
|
|
|
+diff --git a/src/env.h b/src/env.h
|
|
|
+index 9420bdf3f71e2df1011ddd7e583071f5c99beac8..a5c72b6c145feedd624f7b6e407617ab295ad3bb 100644
|
|
|
+--- a/src/env.h
|
|
|
++++ b/src/env.h
|
|
|
+@@ -918,6 +918,13 @@ class Environment : public MemoryRetainer {
|
|
|
+ void Exit(int code);
|
|
|
+ void ExitEnv();
|
|
|
+
|
|
|
++ static bool AllowWasmCodeGenerationCallback(v8::Local<v8::Context> context,
|
|
|
++ v8::Local<v8::String>);
|
|
|
++ static bool ShouldAbortOnUncaughtException(v8::Isolate* isolate);
|
|
|
++ static v8::MaybeLocal<v8::Value> PrepareStackTraceCallback(v8::Local<v8::Context> context,
|
|
|
++ v8::Local<v8::Value> exception,
|
|
|
++ v8::Local<v8::Array> trace);
|
|
|
++
|
|
|
+ // Register clean-up cb to be called on environment destruction.
|
|
|
+ inline void RegisterHandleCleanup(uv_handle_t* handle,
|
|
|
+ HandleCleanupCb cb,
|