45 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 
								 | 
							
								From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
							 | 
						||
| 
								 | 
							
								From: Shelley Vohr <shelley.vohr@gmail.com>
							 | 
						||
| 
								 | 
							
								Date: Mon, 7 Dec 2020 16:54:23 -0800
							 | 
						||
| 
								 | 
							
								Subject: Allow preventing PrepareStackTraceCallback
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Node.js sets a stack trace handler specific to the v8::Context
							 | 
						||
| 
								 | 
							
								corresponding to the current Environment. When we're running in a
							 | 
						||
| 
								 | 
							
								non-Node.js v8::Context, there will be no correspondent Environment - we
							 | 
						||
| 
								 | 
							
								therefore need to prevent this handler being set so that Blink falls back to its
							 | 
						||
| 
								 | 
							
								default handling and displays the correct stacktrace.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								diff --git a/src/api/environment.cc b/src/api/environment.cc
							 | 
						||
| 
								 | 
							
								index a8cf0d763f78c2752e3aa22479dadd9fa53c222f..8ccc0638b32039571c4a56725e21f0353b592984 100644
							 | 
						||
| 
								 | 
							
								--- a/src/api/environment.cc
							 | 
						||
| 
								 | 
							
								+++ b/src/api/environment.cc
							 | 
						||
| 
								 | 
							
								@@ -228,9 +228,11 @@ void SetIsolateErrorHandlers(v8::Isolate* isolate, const IsolateSettings& s) {
							 | 
						||
| 
								 | 
							
								       s.fatal_error_callback : OnFatalError;
							 | 
						||
| 
								 | 
							
								   isolate->SetFatalErrorHandler(fatal_error_cb);
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								-  auto* prepare_stack_trace_cb = s.prepare_stack_trace_callback ?
							 | 
						||
| 
								 | 
							
								-      s.prepare_stack_trace_callback : PrepareStackTraceCallback;
							 | 
						||
| 
								 | 
							
								-  isolate->SetPrepareStackTraceCallback(prepare_stack_trace_cb);
							 | 
						||
| 
								 | 
							
								+  if ((s.flags & SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK) == 0) {
							 | 
						||
| 
								 | 
							
								+    auto* prepare_stack_trace_cb = s.prepare_stack_trace_callback ?
							 | 
						||
| 
								 | 
							
								+        s.prepare_stack_trace_callback : PrepareStackTraceCallback;
							 | 
						||
| 
								 | 
							
								+    isolate->SetPrepareStackTraceCallback(prepare_stack_trace_cb);
							 | 
						||
| 
								 | 
							
								+  }
							 | 
						||
| 
								 | 
							
								 }
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 void SetIsolateMiscHandlers(v8::Isolate* isolate, const IsolateSettings& s) {
							 | 
						||
| 
								 | 
							
								diff --git a/src/node.h b/src/node.h
							 | 
						||
| 
								 | 
							
								index 14893ad605b9f8c64b0b8fc28625e235655dcd63..f150725b54ee1315476d202797963369490d5152 100644
							 | 
						||
| 
								 | 
							
								--- a/src/node.h
							 | 
						||
| 
								 | 
							
								+++ b/src/node.h
							 | 
						||
| 
								 | 
							
								@@ -340,7 +340,8 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
							 | 
						||
| 
								 | 
							
								 enum IsolateSettingsFlags {
							 | 
						||
| 
								 | 
							
								   MESSAGE_LISTENER_WITH_ERROR_LEVEL = 1 << 0,
							 | 
						||
| 
								 | 
							
								   DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1,
							 | 
						||
| 
								 | 
							
								-  SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2
							 | 
						||
| 
								 | 
							
								+  SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2,
							 | 
						||
| 
								 | 
							
								+  SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK = 1 << 3
							 | 
						||
| 
								 | 
							
								 };
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								 struct IsolateSettings {
							 |