mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
139 lines
3.6 KiB
JavaScript
139 lines
3.6 KiB
JavaScript
// META: global=window,dedicatedworker
|
|
// META: script=/common/media.js
|
|
// META: script=/webcodecs/utils.js
|
|
|
|
var defaultInit = {
|
|
timestamp : 100,
|
|
duration : 33,
|
|
}
|
|
|
|
function createDefaultVideoFrame() {
|
|
let image = makeImageBitmap(32,16);
|
|
|
|
return new VideoFrame(image, defaultInit);
|
|
}
|
|
|
|
test(t => {
|
|
let frame = createDefaultVideoFrame();
|
|
|
|
let clone = frame.clone();
|
|
|
|
assert_equals(frame.timestamp, clone.timestamp);
|
|
assert_equals(frame.duration, clone.duration);
|
|
assert_equals(frame.visibleRect.left, clone.visibleRect.left);
|
|
assert_equals(frame.visibleRect.top, clone.visibleRect.top);
|
|
assert_equals(frame.visibleRect.width, clone.visibleRect.width);
|
|
assert_equals(frame.visibleRect.height, clone.visibleRect.height);
|
|
|
|
frame.close();
|
|
assert_true(isFrameClosed(frame));
|
|
clone.close();
|
|
assert_true(isFrameClosed(clone));
|
|
}, 'Test we can clone a VideoFrame.');
|
|
|
|
test(t => {
|
|
let frame = createDefaultVideoFrame();
|
|
|
|
let copy = frame;
|
|
let clone = frame.clone();
|
|
|
|
frame.close();
|
|
|
|
assert_equals(copy.timestamp, defaultInit.timestamp);
|
|
assert_equals(copy.duration, defaultInit.duration);
|
|
assert_true(isFrameClosed(copy));
|
|
assert_equals(clone.timestamp, defaultInit.timestamp);
|
|
assert_false(isFrameClosed(clone));
|
|
|
|
clone.close();
|
|
}, 'Verify closing a frame doesn\'t affect its clones.');
|
|
|
|
test(t => {
|
|
let frame = createDefaultVideoFrame();
|
|
|
|
frame.close();
|
|
|
|
assert_throws_dom("InvalidStateError", () => {
|
|
let clone = frame.clone();
|
|
});
|
|
}, 'Verify cloning a closed frame throws.');
|
|
|
|
async_test(t => {
|
|
let localFrame = createDefaultVideoFrame();
|
|
|
|
let channel = new MessageChannel();
|
|
let localPort = channel.port1;
|
|
let externalPort = channel.port2;
|
|
|
|
externalPort.onmessage = t.step_func((e) => {
|
|
let externalFrame = e.data;
|
|
externalFrame.close();
|
|
externalPort.postMessage("Done");
|
|
})
|
|
|
|
localPort.onmessage = t.step_func_done((e) => {
|
|
assert_equals(localFrame.timestamp, defaultInit.timestamp);
|
|
localFrame.close();
|
|
})
|
|
|
|
localPort.postMessage(localFrame);
|
|
}, 'Verify closing frames does not propagate accross contexts.');
|
|
|
|
async_test(t => {
|
|
let localFrame = createDefaultVideoFrame();
|
|
|
|
let channel = new MessageChannel();
|
|
let localPort = channel.port1;
|
|
let externalPort = channel.port2;
|
|
|
|
externalPort.onmessage = t.step_func_done((e) => {
|
|
let externalFrame = e.data;
|
|
assert_equals(externalFrame.timestamp, defaultInit.timestamp);
|
|
externalFrame.close();
|
|
})
|
|
|
|
localPort.postMessage(localFrame, [localFrame]);
|
|
assert_true(isFrameClosed(localFrame));
|
|
}, 'Verify transferring frames closes them.');
|
|
|
|
async_test(t => {
|
|
let localFrame = createDefaultVideoFrame();
|
|
|
|
let channel = new MessageChannel();
|
|
let localPort = channel.port1;
|
|
|
|
localPort.onmessage = t.unreached_func();
|
|
|
|
localFrame.close();
|
|
|
|
assert_throws_dom("DataCloneError", () => {
|
|
localPort.postMessage(localFrame);
|
|
});
|
|
|
|
t.done();
|
|
}, 'Verify posting closed frames throws.');
|
|
|
|
promise_test(async t => {
|
|
const open = indexedDB.open('VideoFrameTestDB', 1);
|
|
open.onerror = t.unreached_func('open should succeed');
|
|
open.onupgradeneeded = (event) => {
|
|
let db = event.target.result;
|
|
db.createObjectStore('MyVideoFrames', { keyPath: 'id' });
|
|
};
|
|
let db = await new Promise((resolve) => {
|
|
open.onsuccess = (e) => {
|
|
resolve(e.target.result);
|
|
};
|
|
});
|
|
t.add_cleanup(() => {
|
|
db.close();
|
|
indexedDB.deleteDatabase(db.name);
|
|
});
|
|
|
|
let transaction = db.transaction(['MyVideoFrames'], 'readwrite');
|
|
const store = transaction.objectStore('MyVideoFrames');
|
|
let frame = createDefaultVideoFrame();
|
|
assert_throws_dom("DataCloneError", () => {
|
|
store.add(frame);
|
|
});
|
|
}, 'Verify storing a frame throws.');
|