From 27953cc9f1925e2aca13413e7fe32eabdb87cb91 Mon Sep 17 00:00:00 2001 From: ldm0 Date: Wed, 7 Oct 2026 10:21:44 +0800 Subject: [PATCH] fix(performance): validate observer options and retain observe mode --- moli-renderer-v8/src/script_vm/tests/mod.rs | 1 + .../src/worker/thread/tests/mod.rs | 1 + .../tests/performance_observer_contract.rs | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 moli-renderer-v8/src/worker/thread/tests/performance_observer_contract.rs diff --git a/moli-renderer-v8/src/script_vm/tests/mod.rs b/moli-renderer-v8/src/script_vm/tests/mod.rs index bc0366e0e0..1f445bcd0e 100644 --- a/moli-renderer-v8/src/script_vm/tests/mod.rs +++ b/moli-renderer-v8/src/script_vm/tests/mod.rs @@ -2313,6 +2313,7 @@ mod offline_audio_context_interfaces; mod offline_audio_float; mod payment_response_interfaces; mod performance_measurement_interfaces; +mod performance_observer_contract; mod performance_receivers; mod periodic_wave_interfaces; mod popup_root_window; diff --git a/moli-renderer-v8/src/worker/thread/tests/mod.rs b/moli-renderer-v8/src/worker/thread/tests/mod.rs index 5457c76a0c..9dc66c6d21 100644 --- a/moli-renderer-v8/src/worker/thread/tests/mod.rs +++ b/moli-renderer-v8/src/worker/thread/tests/mod.rs @@ -1541,6 +1541,7 @@ mod strict_script_mime; mod network; mod onerror; +mod performance_observer_contract; mod postmessage; mod canvas_transform_snapshots; mod synthetic_exceptions; diff --git a/moli-renderer-v8/src/worker/thread/tests/performance_observer_contract.rs b/moli-renderer-v8/src/worker/thread/tests/performance_observer_contract.rs new file mode 100644 index 0000000000..20bf6534ee --- /dev/null +++ b/moli-renderer-v8/src/worker/thread/tests/performance_observer_contract.rs @@ -0,0 +1,19 @@ +use super::*; + +#[tokio::test] +async fn worker_observer_options_modes_and_disconnect_match_window_semantics() { + ensure_v8(); + let source = format!( + r#"const probe = {}; + const checks = probe(globalThis, globalThis, 'worker'); + postMessage({{total: checks.length, failures: checks.filter(row => !row.passed)}}); + close();"#, + include_str!("../../../script_vm/tests/performance_observer_contract.js"), + ); + let mut worker = spawn_worker(source, "test://performance_observer_contract".into()); + let message = timeout(TIMEOUT, worker.recv()) + .await + .expect("timed out") + .expect("channel closed"); + assert_eq!(expect_post_json(message), r#"{"total":91,"failures":[]}"#); +}