Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/coreclr/vm/wasm/helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,9 +379,9 @@ void _DacGlobals::Initialize()
// Incorrectly typed temporary symbol to satisfy the linker.
int g_pDebugger;

extern "C" int32_t mono_wasm_browser_entropy(uint8_t* buffer, int32_t bufferLength)
extern "C" int32_t SystemJS_RandomBytes(uint8_t* buffer, int32_t bufferLength)
{
PORTABILITY_ASSERT("mono_wasm_browser_entropy is not implemented");
PORTABILITY_ASSERT("SystemJS_RandomBytes is not implemented");
return -1;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ public static void BeforeSyncJSExport(JSMarshalerArgument* arguments_buffer)
try
{
var ctx = arg_exc.AssertCurrentThreadContext();
// note that this method is only executed when the caller is on another thread, via mono_wasm_invoke_jsexport_sync -> mono_wasm_install_js_worker_interop_wrapper
// note that this method is only executed when the caller is on another thread, via mono_wasm_invoke_jsexport_sync -> SystemInteropJS_InstallWebWorkerInterop
ctx.IsPendingSynchronousCall = true;
if (ctx.IsMainThread)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ internal static unsafe void ResolveOrRejectPromise(JSProxyContext targetContext,
// meaning JS side needs to dispose it
exc.slot.ReceiverShouldFree = true;

// this copy is freed in mono_wasm_resolve_or_reject_promise
// this copy is freed in SystemInteropJS_ResolveOrRejectPromise
var bytes = sizeof(JSMarshalerArgument) * arguments.Length;
void* cpy = (void*)Marshal.AllocHGlobal(bytes);
arguments.CopyTo(new Span<JSMarshalerArgument>(cpy, arguments.Length));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ private bool CanMarshalTaskResultOnSameCall(JSProxyContext ctx)
}

// Otherwise this is JSExport return value and we can't use the args buffer, because the args buffer arrived in async message and nobody is reading after this.
// In such case the JS side already pre-created the Promise and we have to use it, to resolve it in separate call via `mono_wasm_resolve_or_reject_promise_post`
// In such case the JS side already pre-created the Promise and we have to use it, to resolve it in separate call via `SystemInteropJS_ResolveOrRejectPromisePost`
// there is JSVHandle in this arg
return false;
}
Expand Down
8 changes: 4 additions & 4 deletions src/mono/browser/runtime/cancelable-promise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ export function wrap_as_cancelable<T> (inner: Promise<T>): ControllablePromise<T
return promise;
}

export function mono_wasm_cancel_promise (task_holder_gc_handle: GCHandle): void {
// cancelation should not arrive earlier than the promise created by marshaling in mono_wasm_invoke_jsimport_MT
invoke_later_when_on_ui_thread_async(() => mono_wasm_cancel_promise_impl(task_holder_gc_handle));
export function SystemInteropJS_CancelPromise (task_holder_gc_handle: GCHandle): void {
// cancelation should not arrive earlier than the promise created by marshaling in SystemInteropJS_InvokeJSImportSync
invoke_later_when_on_ui_thread_async(() => SystemInteropJS_CancelPromiseImpl(task_holder_gc_handle));
}

export function mono_wasm_cancel_promise_impl (task_holder_gc_handle: GCHandle): void {
export function SystemInteropJS_CancelPromiseImpl (task_holder_gc_handle: GCHandle): void {
if (!loaderHelpers.is_runtime_running()) {
mono_log_debug("This promise can't be canceled, mono runtime already exited.");
return;
Expand Down
128 changes: 64 additions & 64 deletions src/mono/browser/runtime/corebindings.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,81 +21,81 @@
#include "gc-common.h"

//JS funcs
extern void mono_wasm_release_cs_owned_object (int js_handle);
extern void mono_wasm_resolve_or_reject_promise (void *args);
extern void mono_wasm_cancel_promise (int task_holder_gc_handle);
extern void mono_wasm_console_clear ();
extern void SystemInteropJS_ReleaseCSOwnedObject (int js_handle);
extern void SystemInteropJS_ResolveOrRejectPromise (void *args);
extern void SystemInteropJS_CancelPromise (int task_holder_gc_handle);
extern void SystemJS_ConsoleClear ();
extern void mono_wasm_set_entrypoint_breakpoint (int entry_point_metadata_token);
extern void mono_wasm_trace_logger (const char *log_domain, const char *log_level, const char *message, mono_bool fatal, void *user_data);
extern void mono_wasm_invoke_js_function (int function_js_handle, void *args);
extern void SystemInteropJS_InvokeJSFunction (int function_js_handle, void *args);

extern int mono_runtime_run_module_cctor (MonoImage *image, MonoError *error);

typedef void (*background_job_cb)(void);
typedef int (*ds_job_cb)(void* data);

void mono_wasm_bind_assembly_exports (char *assembly_name);
void mono_wasm_assembly_get_entry_point (char *assembly_name, int auto_insert_breakpoint, MonoMethod **method_out);
void mono_wasm_get_assembly_export (char *assembly_name, char *namespace, char *classname, char *methodname, int signature_hash, MonoMethod **method_out);
void SystemInteropJS_BindAssemblyExports (char *assembly_name);
void SystemInteropJS_AssemblyGetEntryPoint (char *assembly_name, int auto_insert_breakpoint, MonoMethod **method_out);
void SystemInteropJS_GetAssemblyExport (char *assembly_name, char *namespace, char *classname, char *methodname, int signature_hash, MonoMethod **method_out);

#ifndef DISABLE_THREADS
void mono_wasm_release_cs_owned_object_post (pthread_t target_tid, int js_handle);
void mono_wasm_resolve_or_reject_promise_post (pthread_t target_tid, void *args);
void mono_wasm_cancel_promise_post (pthread_t target_tid, int task_holder_gc_handle);

extern void mono_wasm_install_js_worker_interop (int context_gc_handle);
void mono_wasm_install_js_worker_interop_wrapper (int context_gc_handle, void* beforeSyncJSImport, void* afterSyncJSImport, void* pumpHandler);
extern void mono_wasm_uninstall_js_worker_interop ();
extern void mono_wasm_invoke_jsimport_MT (void* signature, void* args);
void mono_wasm_invoke_jsimport_async_post (pthread_t target_tid, void* signature, void* args);
void mono_wasm_invoke_jsimport_sync_send (pthread_t target_tid, void* signature, void* args);
void mono_wasm_invoke_js_function_send (pthread_t target_tid, int function_js_handle, void *args);
void SystemInteropJS_ReleaseCSOwnedObjectPost (pthread_t target_tid, int js_handle);
void SystemInteropJS_ResolveOrRejectPromisePost (pthread_t target_tid, void *args);
void SystemInteropJS_CancelPromisePost (pthread_t target_tid, int task_holder_gc_handle);

extern void SystemInteropJS_InstallWebWorkerInteropImpl (int context_gc_handle);
void SystemInteropJS_InstallWebWorkerInterop (int context_gc_handle, void* beforeSyncJSImport, void* afterSyncJSImport, void* pumpHandler);
extern void SystemInteropJS_UninstallWebWorkerInterop ();
extern void SystemInteropJS_InvokeJSImportSync (void* signature, void* args);
void SystemInteropJS_InvokeJSImportAsyncPost (pthread_t target_tid, void* signature, void* args);
void SystemInteropJS_InvokeJSImportSyncSend (pthread_t target_tid, void* signature, void* args);
void SystemInteropJS_InvokeJSFunctionSend (pthread_t target_tid, int function_js_handle, void *args);
extern void mono_threads_wasm_async_run_in_target_thread_vi (pthread_t target_thread, void (*func) (gpointer), gpointer user_data1);
extern void mono_threads_wasm_async_run_in_target_thread_vii (pthread_t target_thread, void (*func) (gpointer, gpointer), gpointer user_data1, gpointer user_data2);
extern void mono_threads_wasm_sync_run_in_target_thread_vii (pthread_t target_thread, void (*func) (gpointer, gpointer), gpointer user_data1, gpointer args);
extern void mono_wasm_warn_about_blocking_wait (void* ptr, int32_t length);
extern void SystemJS_WarnAboutBlockingWait (void* ptr, int32_t length);
#else
extern void* mono_wasm_bind_js_import_ST (void *signature);
extern void mono_wasm_invoke_jsimport_ST (int function_handle, void *args);
extern void* SystemInteropJS_BindJSImportST (void *signature);
extern void SystemInteropJS_InvokeJSImportST (int function_handle, void *args);
#endif /* DISABLE_THREADS */

// JS-based globalization
extern char16_t* mono_wasm_get_locale_info (const uint16_t* locale, int32_t localeLength, const uint16_t* culture, int32_t cultureLength, const uint16_t* result, int32_t resultMaxLength, int *resultLength);
extern char16_t* SystemJS_GetLocaleInfo (const uint16_t* locale, int32_t localeLength, const uint16_t* culture, int32_t cultureLength, const uint16_t* result, int32_t resultMaxLength, int *resultLength);

void bindings_initialize_internals (void)
{
#ifndef ENABLE_JS_INTEROP_BY_VALUE
mono_add_internal_call ("Interop/Runtime::RegisterGCRoot", mono_wasm_register_root);
mono_add_internal_call ("Interop/Runtime::DeregisterGCRoot", mono_wasm_deregister_root);
mono_add_internal_call ("Interop/Runtime::RegisterGCRoot", SystemInteropJS_RegisterGCRoot);
mono_add_internal_call ("Interop/Runtime::DeregisterGCRoot", SystemInteropJS_UnregisterGCRoot);
#endif /* ENABLE_JS_INTEROP_BY_VALUE */

#ifndef DISABLE_THREADS
mono_add_internal_call ("Interop/Runtime::ReleaseCSOwnedObjectPost", mono_wasm_release_cs_owned_object_post);
mono_add_internal_call ("Interop/Runtime::ResolveOrRejectPromisePost", mono_wasm_resolve_or_reject_promise_post);
mono_add_internal_call ("Interop/Runtime::InstallWebWorkerInterop", mono_wasm_install_js_worker_interop_wrapper);
mono_add_internal_call ("Interop/Runtime::UninstallWebWorkerInterop", mono_wasm_uninstall_js_worker_interop);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportSync", mono_wasm_invoke_jsimport_MT);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportSyncSend", mono_wasm_invoke_jsimport_sync_send);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportAsyncPost", mono_wasm_invoke_jsimport_async_post);
mono_add_internal_call ("Interop/Runtime::InvokeJSFunctionSend", mono_wasm_invoke_js_function_send);
mono_add_internal_call ("Interop/Runtime::CancelPromisePost", mono_wasm_cancel_promise_post);
mono_add_internal_call ("System.Threading.Thread::WarnAboutBlockingWait", mono_wasm_warn_about_blocking_wait);
mono_add_internal_call ("Interop/Runtime::ReleaseCSOwnedObjectPost", SystemInteropJS_ReleaseCSOwnedObjectPost);
mono_add_internal_call ("Interop/Runtime::ResolveOrRejectPromisePost", SystemInteropJS_ResolveOrRejectPromisePost);
mono_add_internal_call ("Interop/Runtime::InstallWebWorkerInterop", SystemInteropJS_InstallWebWorkerInterop);
mono_add_internal_call ("Interop/Runtime::UninstallWebWorkerInterop", SystemInteropJS_UninstallWebWorkerInterop);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportSync", SystemInteropJS_InvokeJSImportSync);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportSyncSend", SystemInteropJS_InvokeJSImportSyncSend);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportAsyncPost", SystemInteropJS_InvokeJSImportAsyncPost);
mono_add_internal_call ("Interop/Runtime::InvokeJSFunctionSend", SystemInteropJS_InvokeJSFunctionSend);
mono_add_internal_call ("Interop/Runtime::CancelPromisePost", SystemInteropJS_CancelPromisePost);
mono_add_internal_call ("System.Threading.Thread::WarnAboutBlockingWait", SystemJS_WarnAboutBlockingWait);
#else
mono_add_internal_call ("Interop/Runtime::BindJSImportST", mono_wasm_bind_js_import_ST);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportST", mono_wasm_invoke_jsimport_ST);
mono_add_internal_call ("Interop/Runtime::BindJSImportST", SystemInteropJS_BindJSImportST);
mono_add_internal_call ("Interop/Runtime::InvokeJSImportST", SystemInteropJS_InvokeJSImportST);
#endif /* DISABLE_THREADS */

mono_add_internal_call ("Interop/Runtime::ReleaseCSOwnedObject", mono_wasm_release_cs_owned_object);
mono_add_internal_call ("Interop/Runtime::ResolveOrRejectPromise", mono_wasm_resolve_or_reject_promise);
mono_add_internal_call ("Interop/Runtime::InvokeJSFunction", mono_wasm_invoke_js_function);
mono_add_internal_call ("Interop/Runtime::CancelPromise", mono_wasm_cancel_promise);
mono_add_internal_call ("Interop/Runtime::AssemblyGetEntryPoint", mono_wasm_assembly_get_entry_point);
mono_add_internal_call ("Interop/Runtime::BindAssemblyExports", mono_wasm_bind_assembly_exports);
mono_add_internal_call ("Interop/Runtime::GetAssemblyExport", mono_wasm_get_assembly_export);
mono_add_internal_call ("System.ConsolePal::Clear", mono_wasm_console_clear);
mono_add_internal_call ("Interop/Runtime::ReleaseCSOwnedObject", SystemInteropJS_ReleaseCSOwnedObject);
mono_add_internal_call ("Interop/Runtime::ResolveOrRejectPromise", SystemInteropJS_ResolveOrRejectPromise);
mono_add_internal_call ("Interop/Runtime::InvokeJSFunction", SystemInteropJS_InvokeJSFunction);
mono_add_internal_call ("Interop/Runtime::CancelPromise", SystemInteropJS_CancelPromise);
mono_add_internal_call ("Interop/Runtime::AssemblyGetEntryPoint", SystemInteropJS_AssemblyGetEntryPoint);
mono_add_internal_call ("Interop/Runtime::BindAssemblyExports", SystemInteropJS_BindAssemblyExports);
mono_add_internal_call ("Interop/Runtime::GetAssemblyExport", SystemInteropJS_GetAssemblyExport);
mono_add_internal_call ("System.ConsolePal::Clear", SystemJS_ConsoleClear);

// JS-based globalization
mono_add_internal_call ("Interop/JsGlobalization::GetLocaleInfo", mono_wasm_get_locale_info);
mono_add_internal_call ("Interop/JsGlobalization::GetLocaleInfo", SystemJS_GetLocaleInfo);
}

static MonoAssembly* _mono_wasm_assembly_load (char *assembly_name)
Expand All @@ -112,7 +112,7 @@ static MonoAssembly* _mono_wasm_assembly_load (char *assembly_name)
return res;
}

void mono_wasm_assembly_get_entry_point (char *assembly_name, int auto_insert_breakpoint, MonoMethod **method_out)
void SystemInteropJS_AssemblyGetEntryPoint (char *assembly_name, int auto_insert_breakpoint, MonoMethod **method_out)
{
assert (assembly_name);
*method_out = NULL;
Expand Down Expand Up @@ -176,7 +176,7 @@ void mono_wasm_assembly_get_entry_point (char *assembly_name, int auto_insert_br
*method_out = method;
}

void mono_wasm_bind_assembly_exports (char *assembly_name)
void SystemInteropJS_BindAssemblyExports (char *assembly_name)
{
MonoError error;
MonoAssembly* assembly;
Expand All @@ -200,7 +200,7 @@ void mono_wasm_bind_assembly_exports (char *assembly_name)
PVOLATILE(MonoObject) exc2 = NULL;
store_volatile((MonoObject**)&temp_exc, (MonoObject*)mono_object_to_string ((MonoObject*)temp_exc, (MonoObject **)&exc2));
if (exc2) {
mono_wasm_trace_logger ("jsinterop", "critical", "mono_wasm_bind_assembly_exports unexpected double fault", 1, NULL);
mono_wasm_trace_logger ("jsinterop", "critical", "SystemInteropJS_BindAssemblyExports unexpected double fault", 1, NULL);
} else {
mono_wasm_trace_logger ("jsinterop", "critical", mono_string_to_utf8((MonoString*)temp_exc), 1, NULL);
}
Expand All @@ -213,7 +213,7 @@ void mono_wasm_bind_assembly_exports (char *assembly_name)
}
}

void mono_wasm_get_assembly_export (char *assembly_name, char *namespace, char *classname, char *methodname, int signature_hash, MonoMethod **method_out)
void SystemInteropJS_GetAssemblyExport (char *assembly_name, char *namespace, char *classname, char *methodname, int signature_hash, MonoMethod **method_out)
{
MonoError error;
MonoAssembly* assembly;
Expand Down Expand Up @@ -251,48 +251,48 @@ void* before_sync_js_import;
void* after_sync_js_import;
void* synchronization_context_pump_handler;

void mono_wasm_install_js_worker_interop_wrapper (int context_gc_handle, void* beforeSyncJSImport, void* afterSyncJSImport, void* pumpHandler)
void SystemInteropJS_InstallWebWorkerInterop (int context_gc_handle, void* beforeSyncJSImport, void* afterSyncJSImport, void* pumpHandler)
{
before_sync_js_import = beforeSyncJSImport;
after_sync_js_import = afterSyncJSImport;
synchronization_context_pump_handler = pumpHandler;
mono_wasm_install_js_worker_interop (context_gc_handle);
SystemInteropJS_InstallWebWorkerInteropImpl (context_gc_handle);
}

// async
void mono_wasm_release_cs_owned_object_post (pthread_t target_tid, int js_handle)
void SystemInteropJS_ReleaseCSOwnedObjectPost (pthread_t target_tid, int js_handle)
{
mono_threads_wasm_async_run_in_target_thread_vi (target_tid, (void (*) (gpointer))mono_wasm_release_cs_owned_object, (gpointer)js_handle);
mono_threads_wasm_async_run_in_target_thread_vi (target_tid, (void (*) (gpointer))SystemInteropJS_ReleaseCSOwnedObject, (gpointer)js_handle);
}

// async
void mono_wasm_resolve_or_reject_promise_post (pthread_t target_tid, void* args)
void SystemInteropJS_ResolveOrRejectPromisePost (pthread_t target_tid, void* args)
{
mono_threads_wasm_async_run_in_target_thread_vi (target_tid, (void (*) (gpointer))mono_wasm_resolve_or_reject_promise, (gpointer)args);
mono_threads_wasm_async_run_in_target_thread_vi (target_tid, (void (*) (gpointer))SystemInteropJS_ResolveOrRejectPromise, (gpointer)args);
}

// async
void mono_wasm_cancel_promise_post (pthread_t target_tid, int task_holder_gc_handle)
void SystemInteropJS_CancelPromisePost (pthread_t target_tid, int task_holder_gc_handle)
{
mono_threads_wasm_async_run_in_target_thread_vi (target_tid, (void (*) (gpointer))mono_wasm_cancel_promise, (gpointer)task_holder_gc_handle);
mono_threads_wasm_async_run_in_target_thread_vi (target_tid, (void (*) (gpointer))SystemInteropJS_CancelPromise, (gpointer)task_holder_gc_handle);
}

// async
void mono_wasm_invoke_jsimport_async_post (pthread_t target_tid, void* signature, void* args)
void SystemInteropJS_InvokeJSImportAsyncPost (pthread_t target_tid, void* signature, void* args)
{
mono_threads_wasm_async_run_in_target_thread_vii (target_tid, (void (*) (gpointer, gpointer))mono_wasm_invoke_jsimport_MT, (gpointer)signature, (gpointer)args);
mono_threads_wasm_async_run_in_target_thread_vii (target_tid, (void (*) (gpointer, gpointer))SystemInteropJS_InvokeJSImportSync, (gpointer)signature, (gpointer)args);
}

// sync
void mono_wasm_invoke_jsimport_sync_send (pthread_t target_tid, void* signature, void* args)
void SystemInteropJS_InvokeJSImportSyncSend (pthread_t target_tid, void* signature, void* args)
{
mono_threads_wasm_sync_run_in_target_thread_vii (target_tid, (void (*) (gpointer, gpointer))mono_wasm_invoke_jsimport_MT, (gpointer)signature, (gpointer)args);
mono_threads_wasm_sync_run_in_target_thread_vii (target_tid, (void (*) (gpointer, gpointer))SystemInteropJS_InvokeJSImportSync, (gpointer)signature, (gpointer)args);
}

// sync
void mono_wasm_invoke_js_function_send (pthread_t target_tid, int function_js_handle, void *args)
void SystemInteropJS_InvokeJSFunctionSend (pthread_t target_tid, int function_js_handle, void *args)
{
mono_threads_wasm_sync_run_in_target_thread_vii (target_tid, (void (*) (gpointer, gpointer))mono_wasm_invoke_js_function, (gpointer)function_js_handle, (gpointer)args);
mono_threads_wasm_sync_run_in_target_thread_vii (target_tid, (void (*) (gpointer, gpointer))SystemInteropJS_InvokeJSFunction, (gpointer)function_js_handle, (gpointer)args);
}

#endif /* DISABLE_THREADS */
2 changes: 1 addition & 1 deletion src/mono/browser/runtime/crypto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { isSharedArrayBuffer, localHeapViewU8 } from "./memory";
const batchedQuotaMax = 65536;
let warnOnce = true;

export function mono_wasm_browser_entropy (bufferPtr: number, bufferLength: number): number {
export function SystemJS_RandomBytes (bufferPtr: number, bufferLength: number): number {
if (!globalThis.crypto || !globalThis.crypto.getRandomValues) {
if (warnOnce) {
mono_log_warn("This engine doesn't support crypto.getRandomValues. Please use a modern version or provide polyfill for 'globalThis.crypto.getRandomValues'.");
Expand Down
Loading