Automatic update from web-platform-tests [wpt] Fix failing image decoder test Test was just missing a tracks.ready wait R=tguilbert Bug: 515679398 Change-Id: Ie8d0ec4d35cd39c3087b226af4481588ea45080e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8093160 Commit-Queue: Dale Curtis <dalecurtis@chromium.org> Reviewed-by: Thomas Guilbert <tguilbert@chromium.org> Commit-Queue: Thomas Guilbert <tguilbert@chromium.org> Auto-Submit: Dale Curtis <dalecurtis@chromium.org> Cr-Commit-Position: refs/heads/main@{#1662218} -- wpt-commits: 3d44aebd35c499395df6e10acb6a5cb5e4050707 wpt-pr: 61295
50 lines
2.1 KiB
JavaScript
50 lines
2.1 KiB
JavaScript
// META: global=window,dedicatedworker
|
|
|
|
// Bug: An animated GIF whose first frame has delay_time=0 is incorrectly
|
|
// detected as non-animated by the metadata decoder. This causes ImageDecoder
|
|
// to report frameCount=1 and reject decode requests for subsequent frames.
|
|
|
|
promise_test(async t => {
|
|
let support = await ImageDecoder.isTypeSupported('image/gif');
|
|
assert_implements_optional(support, 'Optional codec image/gif not supported.');
|
|
|
|
let response = await fetch('animated-zero-delay.gif');
|
|
let buffer = await response.arrayBuffer();
|
|
let decoder = new ImageDecoder({data: buffer, type: 'image/gif'});
|
|
|
|
await decoder.tracks.ready;
|
|
assert_equals(decoder.tracks.length, 1, 'Should have one track');
|
|
|
|
let track = decoder.tracks.selectedTrack;
|
|
assert_true(track.animated, 'Track should be detected as animated');
|
|
assert_equals(track.frameCount, 2, 'Should report 2 frames');
|
|
|
|
let result0 = await decoder.decode({frameIndex: 0});
|
|
assert_true(result0.complete, 'Frame 0 should be complete');
|
|
assert_equals(result0.image.codedWidth, 2);
|
|
assert_equals(result0.image.codedHeight, 2);
|
|
|
|
let result1 = await decoder.decode({frameIndex: 1});
|
|
assert_true(result1.complete, 'Frame 1 should be complete');
|
|
assert_equals(result1.image.codedWidth, 2);
|
|
assert_equals(result1.image.codedHeight, 2);
|
|
}, 'Test animated GIF with zero first-frame delay decodes all frames');
|
|
|
|
promise_test(async t => {
|
|
let support = await ImageDecoder.isTypeSupported('image/gif');
|
|
assert_implements_optional(support, 'Optional codec image/gif not supported.');
|
|
|
|
let response = await fetch('animated-zero-delay.gif');
|
|
let buffer = await response.arrayBuffer();
|
|
let decoder = new ImageDecoder({data: buffer, type: 'image/gif'});
|
|
|
|
await decoder.tracks.ready;
|
|
await decoder.completed;
|
|
|
|
let track = decoder.tracks.selectedTrack;
|
|
assert_true(track.animated, 'Track should be animated after completed');
|
|
assert_equals(track.frameCount, 2, 'Should report 2 frames after completed');
|
|
assert_equals(track.repetitionCount, Infinity,
|
|
'Should report infinite repetitions (loop=0)');
|
|
}, 'Test animated GIF with zero first-frame delay reports correct metadata');
|