diff options
Diffstat (limited to 'testing/web-platform/tests/web-locks/mode-shared.tentative.https.any.js')
-rw-r--r-- | testing/web-platform/tests/web-locks/mode-shared.tentative.https.any.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/testing/web-platform/tests/web-locks/mode-shared.tentative.https.any.js b/testing/web-platform/tests/web-locks/mode-shared.tentative.https.any.js new file mode 100644 index 0000000000..fc4a6012fa --- /dev/null +++ b/testing/web-platform/tests/web-locks/mode-shared.tentative.https.any.js @@ -0,0 +1,38 @@ +// META: title=Web Locks API: Shared 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', {mode: 'shared'}, log_grant(1)), + navigator.locks.request('b', {mode: 'shared'}, log_grant(2)), + navigator.locks.request('c', {mode: 'shared'}, log_grant(3)), + navigator.locks.request('a', {mode: 'shared'}, log_grant(4)), + navigator.locks.request('b', {mode: 'shared'}, log_grant(5)), + navigator.locks.request('c', {mode: 'shared'}, log_grant(6)), + ]); + + assert_array_equals(granted, [1, 2, 3, 4, 5, 6]); +}, 'Lock requests are granted in order'); + +promise_test(async t => { + let a_acquired = false, a_acquired_again = false; + + await navigator.locks.request('a', {mode: 'shared'}, async lock => { + a_acquired = true; + + // Since lock is held, this request would be blocked if the + // lock was not 'shared', causing this test to time out. + + await navigator.locks.request('a', {mode: 'shared'}, lock => { + a_acquired_again = true; + }); + }); + + assert_true(a_acquired, 'first lock acquired'); + assert_true(a_acquired_again, 'second lock acquired'); +}, 'Shared locks are not exclusive'); |