| // 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'); |