From d2acf32aaebcc1c52dd060b4fb665eef3de1ed68 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Tue, 10 Dec 2024 13:29:37 +0000 Subject: [PATCH] LibWeb: Register Wasm memory grow hook in constructor of Memory objects Previously it would only register the hook for JavaScript constructed Memory objects. This allows Ruffle to load again. --- Libraries/LibWeb/WebAssembly/Memory.cpp | 9 ++++---- .../expected/Wasm/WebAssembly-grow-hook.txt | 3 +++ .../input/Wasm/WebAssembly-grow-hook.html | 22 +++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/Wasm/WebAssembly-grow-hook.txt create mode 100644 Tests/LibWeb/Text/input/Wasm/WebAssembly-grow-hook.html diff --git a/Libraries/LibWeb/WebAssembly/Memory.cpp b/Libraries/LibWeb/WebAssembly/Memory.cpp index 60e7de1d9e1..dd065023f1e 100644 --- a/Libraries/LibWeb/WebAssembly/Memory.cpp +++ b/Libraries/LibWeb/WebAssembly/Memory.cpp @@ -39,10 +39,6 @@ WebIDL::ExceptionOr> Memory::construct_impl(JS::Realm& realm, Me auto memory_object = realm.create(realm, *address, shared ? Shared::Yes : Shared::No); - cache.abstract_machine().store().get(*address)->successful_grow_hook = [memory_object] { - MUST(memory_object->reset_the_memory_buffer()); - }; - return memory_object; } @@ -51,6 +47,11 @@ Memory::Memory(JS::Realm& realm, Wasm::MemoryAddress address, Shared shared) , m_address(address) , m_shared(shared) { + auto& cache = Detail::get_cache(realm); + + cache.abstract_machine().store().get(address)->successful_grow_hook = [this] { + MUST(reset_the_memory_buffer()); + }; } void Memory::initialize(JS::Realm& realm) diff --git a/Tests/LibWeb/Text/expected/Wasm/WebAssembly-grow-hook.txt b/Tests/LibWeb/Text/expected/Wasm/WebAssembly-grow-hook.txt new file mode 100644 index 00000000000..ea8f339be68 --- /dev/null +++ b/Tests/LibWeb/Text/expected/Wasm/WebAssembly-grow-hook.txt @@ -0,0 +1,3 @@ +Size before grow: 65536 +Size after grow, before refresh: 0 +Size after grow, after refresh: 131072 diff --git a/Tests/LibWeb/Text/input/Wasm/WebAssembly-grow-hook.html b/Tests/LibWeb/Text/input/Wasm/WebAssembly-grow-hook.html new file mode 100644 index 00000000000..2e4700c1416 --- /dev/null +++ b/Tests/LibWeb/Text/input/Wasm/WebAssembly-grow-hook.html @@ -0,0 +1,22 @@ + + +