Files
sousa-gecko/js/public/WasmModule.h
T
Yury Delendik c040d15e28 Bug 2002637 - Remove asm.js from JS public API and embedder integration. r=jandem,devtools-reviewers,ochameau
Drop AsmJSOption and throwOnAsmJSValidationFailure plumbing from
PrefableCompileOptions and ContextOptions, the createObjectForAsmJS
hook on JS::WasmModule, the Failure_AsmJSNotSupported transcode
result, objectsMallocHeapElementsAsmJS, the ASMJS/USE_ASM use
counters and JSMSG_USE_ASM_* error messages, and the remaining
asm.js mentions in ArrayBuffer.h and experimental/JSStencil.h.

Update the embedders accordingly: xpconnect (XPCJSContext,
XPCJSRuntime), dom/ipc/JSValidatorChild, dom/base/UseCounters.conf,
the three javascript.options.asmjs* prefs in StaticPrefList.yaml,
and the pref override in the devtools debugger mochitest browser.toml.
Drop the now-dead asm.js implementations in wasm/WasmModule,
frontend/Stencil, and shell/js.

dom/base/use_counter_metrics.yaml was regenerated with
`mach gen-use-counter-metrics` after removing the asm.js use counters
from UseCounters.conf.

Depends on D300555

Differential Revision: https://phabricator.services.mozilla.com/D300556
2026-06-29 15:35:40 +00:00

44 lines
1.6 KiB
C++

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef js_WasmModule_h
#define js_WasmModule_h
#include "mozilla/RefPtr.h" // RefPtr
#include "jstypes.h" // JS_PUBLIC_API
#include "js/RefCounted.h" // AtomicRefCounted
#include "js/TypeDecls.h" // HandleObject
namespace JS {
/**
* The WasmModule interface allows the embedding to hold a reference to the
* underlying C++ implementation of a JS WebAssembly.Module object for purposes
* of efficient postMessage() and (de)serialization from a random thread.
*
* In particular, this allows postMessage() of a WebAssembly.Module:
* GetWasmModule() is called when making a structured clone of a payload
* containing a WebAssembly.Module object. The structured clone buffer holds a
* refcount of the JS::WasmModule until createObject() is called in the target
* agent's JSContext. The new WebAssembly.Module object continues to hold the
* JS::WasmModule and thus the final reference of a JS::WasmModule may be
* dropped from any thread and so the virtual destructor (and all internal
* methods of the C++ module) must be thread-safe.
*/
struct WasmModule : js::AtomicRefCounted<WasmModule> {
virtual ~WasmModule() = default;
virtual JSObject* createObject(JSContext* cx) const = 0;
};
extern JS_PUBLIC_API bool IsWasmModuleObject(HandleObject obj);
extern JS_PUBLIC_API RefPtr<WasmModule> GetWasmModule(HandleObject obj);
} // namespace JS
#endif /* js_WasmModule_h */