Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

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