From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 8 Mar 2023 13:04:21 -0800 Subject: refactor: expose HostImportModuleDynamically and HostGetImportMetaProperties to embedders This is so that Electron can blend Blink's and Node's implementations of these isolate handlers. diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc index 49ed3415ef4bbcdd71b12acbb6b149acd12eed84..91ded2f767b461d9d0152791fb02e31667186654 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc @@ -637,8 +637,9 @@ bool WasmJSPromiseIntegrationEnabledCallback(v8::Local context) { return RuntimeEnabledFeatures::WebAssemblyJSPromiseIntegrationEnabled( execution_context); } +} // namespace -v8::MaybeLocal HostImportModuleWithPhaseDynamically( +v8::MaybeLocal V8Initializer::HostImportModuleWithPhaseDynamically( v8::Local context, v8::Local v8_host_defined_options, v8::Local v8_referrer_resource_url, @@ -716,20 +717,23 @@ v8::MaybeLocal HostImportModuleWithPhaseDynamically( return resolver->Promise().V8Promise(); } +// namespace +namespace { v8::MaybeLocal HostImportModuleDynamically( v8::Local context, v8::Local v8_host_defined_options, v8::Local v8_referrer_resource_url, v8::Local v8_specifier, v8::Local v8_import_attributes) { - return HostImportModuleWithPhaseDynamically( + return V8Initializer::HostImportModuleWithPhaseDynamically( context, v8_host_defined_options, v8_referrer_resource_url, v8_specifier, v8::ModuleImportPhase::kEvaluation, v8_import_attributes); } +} // namespace // https://html.spec.whatwg.org/C/#hostgetimportmetaproperties -void HostGetImportMetaProperties(v8::Local context, +void V8Initializer::HostGetImportMetaProperties(v8::Local context, v8::Local module, v8::Local meta) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); @@ -756,6 +760,7 @@ void HostGetImportMetaProperties(v8::Local context, meta->CreateDataProperty(context, resolve_key, resolve_value).ToChecked(); } +namespace { bool IsDOMExceptionWrapper(v8::Isolate* isolate, v8::Local object) { return V8DOMException::HasInstance(isolate, object); } @@ -786,7 +791,6 @@ void EmitDevToolsEvent(v8::Isolate* isolate) { } // namespace -// static void V8Initializer::InitializeV8Common(v8::Isolate* isolate) { // Set up garbage collection before setting up anything else as V8 may trigger // GCs during Blink setup. @@ -803,9 +807,9 @@ void V8Initializer::InitializeV8Common(v8::Isolate* isolate) { SharedArrayBufferConstructorEnabledCallback); isolate->SetHostImportModuleDynamicallyCallback(HostImportModuleDynamically); isolate->SetHostImportModuleWithPhaseDynamicallyCallback( - HostImportModuleWithPhaseDynamically); + V8Initializer::HostImportModuleWithPhaseDynamically); isolate->SetHostInitializeImportMetaObjectCallback( - HostGetImportMetaProperties); + V8Initializer::HostGetImportMetaProperties); isolate->SetIsJSApiWrapperNativeErrorCallback(IsDOMExceptionWrapper); isolate->SetMetricsRecorder(std::make_shared(isolate)); diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.h b/third_party/blink/renderer/bindings/core/v8/v8_initializer.h index be5df8f98c3f7e308d79d43c1811a16c644b6158..599121e3dabecf1a8192ba410ff447dcb540376c 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.h +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.h @@ -85,6 +85,18 @@ class CORE_EXPORT V8Initializer { static void PromiseRejectHandlerInMainThread(v8::PromiseRejectMessage data); static void ExceptionPropagationCallback(v8::ExceptionPropagationMessage); + static v8::MaybeLocal HostImportModuleWithPhaseDynamically( + v8::Local context, + v8::Local v8_host_defined_options, + v8::Local v8_referrer_resource_url, + v8::Local v8_specifier, + v8::ModuleImportPhase import_phase, + v8::Local v8_import_assertions); + + static void HostGetImportMetaProperties(v8::Local context, + v8::Local module, + v8::Local meta); + static void WasmAsyncResolvePromiseCallback( v8::Isolate* isolate, v8::Local context,