| // META: title=Web Locks API: Exclusive Mode |
| // META: global=window,dedicatedworker,sharedworker,serviceworker |
| |
| 'use strict'; |
| |
| promise_test(async t => { |
| const granted = []; |
| function log_grant(n) { return () => { granted.push(n); }; } |
| |
| await Promise.all([ |
| navigator.locks.request('a', log_grant(1)), |
| navigator.locks.request('a', log_grant(2)), |
| navigator.locks.request('a', log_grant(3)) |
| ]); |
| assert_array_equals(granted, [1, 2, 3]); |
| }, 'Lock requests are granted in order'); |
| |
| promise_test(async t => { |
| const granted = []; |
| function log_grant(n) { return () => { granted.push(n); }; } |
| |
| let inner_promise; |
| await navigator.locks.request('a', async lock => { |
| inner_promise = Promise.all([ |
| // This will be blocked. |
| navigator.locks.request('a', log_grant(1)), |
| // But this should be grantable immediately. |
| navigator.locks.request('b', log_grant(2)) |
| ]); |
| }); |
| |
| await inner_promise; |
| assert_array_equals(granted, [2, 1]); |
| }, 'Requests for distinct resources can be granted'); |