compute_pressure_disconnect_idempotent.https.window.js (1484B)
1 // META: variant=?globalScope=window 2 // META: variant=?globalScope=dedicated_worker 3 // META: script=/resources/testdriver.js 4 // META: script=/resources/testdriver-vendor.js 5 // META: script=/common/utils.js 6 // META: script=/common/dispatcher/dispatcher.js 7 // META: script=./resources/common.js 8 9 'use strict'; 10 11 pressure_test(async t => { 12 await create_virtual_pressure_source('cpu'); 13 t.add_cleanup(async () => { 14 await remove_virtual_pressure_source('cpu'); 15 }); 16 17 const observer1_changes = []; 18 const observer1 = new PressureObserver(changes => { 19 observer1_changes.push(changes); 20 }); 21 t.add_cleanup(() => observer1.disconnect()); 22 // Ensure that observer1's schema gets registered before observer2 starts. 23 const promise = observer1.observe('cpu'); 24 observer1.disconnect(); 25 observer1.disconnect(); 26 await promise_rejects_dom(t, 'AbortError', promise); 27 28 const observer2_promise = new Promise((resolve, reject) => { 29 const observer = new PressureObserver(resolve); 30 t.add_cleanup(() => observer.disconnect()); 31 observer.observe('cpu').catch(reject); 32 }); 33 await update_virtual_pressure_source('cpu', 'critical'); 34 const observer2_changes = await observer2_promise; 35 36 assert_equals( 37 observer1_changes.length, 0, 38 'stopped observers should not receive callbacks'); 39 40 assert_equals(observer2_changes.length, 1); 41 assert_equals(observer2_changes[0].state, 'critical'); 42 }, 'Stopped PressureObserver do not receive changes'); 43 44 mark_as_done();