mode-exclusive.https.any.js (1029B)
1 // META: title=Web Locks API: Exclusive Mode 2 // META: global=window,dedicatedworker,sharedworker,serviceworker 3 4 'use strict'; 5 6 promise_test(async t => { 7 const granted = []; 8 function log_grant(n) { return () => { granted.push(n); }; } 9 10 await Promise.all([ 11 navigator.locks.request('a', log_grant(1)), 12 navigator.locks.request('a', log_grant(2)), 13 navigator.locks.request('a', log_grant(3)) 14 ]); 15 assert_array_equals(granted, [1, 2, 3]); 16 }, 'Lock requests are granted in order'); 17 18 promise_test(async t => { 19 const granted = []; 20 function log_grant(n) { return () => { granted.push(n); }; } 21 22 let inner_promise; 23 await navigator.locks.request('a', async lock => { 24 inner_promise = Promise.all([ 25 // This will be blocked. 26 navigator.locks.request('a', log_grant(1)), 27 // But this should be grantable immediately. 28 navigator.locks.request('b', log_grant(2)) 29 ]); 30 }); 31 32 await inner_promise; 33 assert_array_equals(granted, [2, 1]); 34 }, 'Requests for distinct resources can be granted');