// META: title=Blob constructor with detached ArrayBuffer/ArrayBufferView // META: script=../support/Blob.js 'use strict'; function detachBuffer(buffer) { // Transfer the buffer to detach it. Works in both window and worker contexts. new MessageChannel().port1.postMessage(buffer, [buffer]); } test_blob(function() { const buffer = new ArrayBuffer(4); const view = new Uint8Array(buffer); view[0] = 0x41; view[1] = 0x42; view[2] = 0x43; view[3] = 0x44; detachBuffer(buffer); return new Blob([view]); }, { expected: '', type: '', desc: 'Blob from a detached ArrayBufferView should be empty' }); test_blob(function() { const buffer = new ArrayBuffer(4); const view = new Uint8Array(buffer, 1, 2); // offset=1, length=2 view[0] = 0x41; view[1] = 0x42; detachBuffer(buffer); return new Blob([view]); }, { expected: '', type: '', desc: 'Blob from a detached ArrayBufferView with offset should be empty' }); test_blob(function() { const buffer = new ArrayBuffer(4); detachBuffer(buffer); return new Blob([buffer]); }, { expected: '', type: '', desc: 'Blob from a detached ArrayBuffer should be empty' }); test_blob(function() { const buffer = new ArrayBuffer(4); const view = new Uint8Array(buffer); view[0] = 0x41; detachBuffer(buffer); // Mix detached view with a string return new Blob([view, 'hello']); }, { expected: 'hello', type: '', desc: 'Blob from a detached ArrayBufferView mixed with string, detached part ignored' });