| // META: title=Encrypted Media Extensions: Test handling of shared buffers |
| // META: script=/encrypted-media/util/utils.js |
| |
| // None of the BufferSource arguments in Encrypted Media Extensions are |
| // [AllowShared], so a SharedArrayBuffer, or a view onto one, has to throw a |
| // TypeError. |
| // |
| // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()`. |
| const sharedBuffer = new WebAssembly.Memory({ shared: true, initial: 1, maximum: 1 }).buffer; |
| |
| async function createMediaKeys() { |
| const access = await navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()); |
| return access.createMediaKeys(); |
| } |
| |
| for (const [kind, buffer] of [['SharedArrayBuffer', sharedBuffer], |
| ['Uint8Array(SharedArrayBuffer)', new Uint8Array(sharedBuffer)]]) { |
| // Converting the argument precedes the check for server certificate |
| // support, which Clear Key does not have, so a user agent that wrongly |
| // accepts the shared buffer resolves with false instead. |
| promise_test(async t => { |
| const mediaKeys = await createMediaKeys(); |
| await promise_rejects_js(t, TypeError, mediaKeys.setServerCertificate(buffer)); |
| }, `setServerCertificate() serverCertificate is a ${kind}`); |
| |
| promise_test(async t => { |
| const keyStatuses = (await createMediaKeys()).createSession().keyStatuses; |
| assert_throws_js(TypeError, () => keyStatuses.has(buffer)); |
| }, `MediaKeyStatusMap.has() keyId is a ${kind}`); |
| |
| promise_test(async t => { |
| const keyStatuses = (await createMediaKeys()).createSession().keyStatuses; |
| assert_throws_js(TypeError, () => keyStatuses.get(buffer)); |
| }, `MediaKeyStatusMap.get() keyId is a ${kind}`); |
| } |