compute_pressure_disconnect_immediately.https.window.js (2569B)
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 await promise_rejects_dom(t, 'AbortError', promise); 26 27 const observer2_promise = new Promise((resolve, reject) => { 28 const observer = new PressureObserver(resolve); 29 t.add_cleanup(() => observer.disconnect()); 30 observer.observe('cpu').catch(reject); 31 }); 32 await update_virtual_pressure_source('cpu', 'critical'); 33 const observer2_changes = await observer2_promise; 34 35 assert_equals( 36 observer1_changes.length, 0, 37 'stopped observers should not receive callbacks'); 38 39 assert_equals(observer2_changes.length, 1); 40 assert_equals(observer2_changes[0].state, 'critical'); 41 }, 'Stopped PressureObservers do not receive changes'); 42 43 pressure_test(async t => { 44 await create_virtual_pressure_source('cpu'); 45 t.add_cleanup(async () => { 46 await remove_virtual_pressure_source('cpu'); 47 }); 48 49 const observer1_changes = []; 50 const observer1 = new PressureObserver(changes => { 51 observer1_changes.push(changes); 52 }); 53 t.add_cleanup(() => observer1.disconnect()); 54 55 let observer2; 56 const observer2_promise = new Promise(resolve => { 57 observer2 = new PressureObserver(resolve); 58 t.add_cleanup(() => observer2.disconnect()); 59 }); 60 61 await update_virtual_pressure_source('cpu', 'critical'); 62 63 const observer1_observe_promise = observer1.observe('cpu'); 64 observer2.observe('cpu'); 65 observer1.disconnect(); 66 await promise_rejects_dom(t, 'AbortError', observer1_observe_promise); 67 const observer2_changes = await observer2_promise; 68 69 assert_equals( 70 observer1_changes.length, 0, 71 'stopped observers should not receive callbacks'); 72 73 assert_equals(observer2_changes.length, 1); 74 assert_equals(observer2_changes[0].state, 'critical'); 75 }, 'Removing observer before observe() resolves does not affect other observers'); 76 77 mark_as_done();