Skip to content

Commit

Permalink
ManagedMediaExtension missing SkipVTableValidation in IDL
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=252307
rdar://105489108

Reviewed by Cameron McCormack.

ManagedMediaSource and ManagedSourceBuffer inherit from MediaSource
and SourceBuffer respectively.
As such, both MediaSource and SourceBuffer need SkipVTableValidation
keyword in their IDL definition to avoid
`RELEASE_ASSERT(actualVTablePointer == expectedVTablePointer);`

Added some minimal tests working on all platforms.

* LayoutTests/platform/glib/TestExpectations: Skip test for now (see bug 252386)
* LayoutTests/media/media-source/content/test-vorbis-manifest.json: Fix duration.
* LayoutTests/media/media-source/content/test-xhe-aac-manifest.json: Fix duration.
* LayoutTests/media/media-source/media-managedmse-expected.txt: Added.
* LayoutTests/media/media-source/media-managedmse.html: Added.
* LayoutTests/media/media-source/media-source-loader.js:
(MediaSourceLoader.prototype.mediaSegmentEndTime): Add method.
* Source/WebCore/Modules/mediasource/MediaSource.idl:
* Source/WebCore/Modules/mediasource/SourceBuffer.idl:

Canonical link: https://commits.webkit.org/260360@main
  • Loading branch information
jyavenard committed Feb 16, 2023
1 parent 0faaa00 commit b4f656f
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 4 deletions.
Expand Up @@ -2,8 +2,8 @@
"url": "content/test-vorbis.webm",
"type": "audio/webm; codecs=\"vorbis\"",
"init": { "offset": 0, "size": 3744 },
"duration": 1.33,
"duration": 1.325,
"media": [
{ "offset": 3744, "size": 10004, "timestamp": 0, "duration": 1.33 }
{ "offset": 3744, "size": 10004, "timestamp": 0, "duration": 1.3392 }
]
}
Expand Up @@ -2,8 +2,8 @@
"url": "content/test-xhe-aac.m4a",
"type": "audio/mp4; codecs=\"mp4a.40.42\"",
"init": { "offset": 0, "size": 756 },
"duration": 33.968,
"duration": 33.9683,
"media": [
{ "offset": 756, "size": 280130, "timestamp": 0, "duration": 33.968 }
{ "offset": 756, "size": 280130, "timestamp": 0, "duration": 33.9683 }
]
}
17 changes: 17 additions & 0 deletions LayoutTests/media/media-source/media-managedmse-expected.txt
@@ -0,0 +1,17 @@

RUN(video.src = URL.createObjectURL(source))
EVENT(sourceopen)
RUN(sourceBuffer = source.addSourceBuffer(loader.type()))
RUN(sourceBuffer.appendBuffer(loader.initSegment()))
EVENT(update)
Append a media segment.
RUN(sourceBuffer.appendBuffer(loader.mediaSegment(0)))
EVENT(update)
EXPECTED (sourceBuffer.buffered.length == '1') OK
EXPECTED (sourceBuffer.buffered.end(0).toFixed(4) == loader.mediaSegmentEndTime(0) == 'true') OK
Clean sourcebuffer of all content.
RUN(sourceBuffer.remove(0, 100))
EVENT(update)
EXPECTED (sourceBuffer.buffered.length == '0') OK
END OF TEST

61 changes: 61 additions & 0 deletions LayoutTests/media/media-source/media-managedmse.html
@@ -0,0 +1,61 @@
<!DOCTYPE html> <!-- webkit-test-runner [ ManagedMediaSourceEnabled=true MediaSourceEnabled=true ] -->
<html>
<head>
<title>managedmediasource</title>
<script src="../../media/media-source/media-source-loader.js"></script>
<script src="../../media/video-test.js"></script>
<script>
var loader;
var source;
var sourceBuffer;

function loaderPromise(loader) {
return new Promise((resolve, reject) => {
loader.onload = resolve;
loader.onerror = reject;
});
}

window.addEventListener('load', async event => {
try {
findMediaElement();

let manifests = [ 'content/test-opus-manifest.json', 'content/test-vorbis-manifest.json', 'content/test-48kHz-manifest.json', 'content/test-xhe-aac-manifest.json' ];
for (const manifest of manifests) {
loader = new MediaSourceLoader(manifest);
await loaderPromise(loader);
if (ManagedMediaSource.isTypeSupported(loader.type()))
break;
}

source = new ManagedMediaSource();
run('video.src = URL.createObjectURL(source)');
await waitFor(source, 'sourceopen');
waitFor(video, 'error').then(failTest);

run('sourceBuffer = source.addSourceBuffer(loader.type())');
run('sourceBuffer.appendBuffer(loader.initSegment())');
await waitFor(sourceBuffer, 'update');

consoleWrite('Append a media segment.')
run('sourceBuffer.appendBuffer(loader.mediaSegment(0))');
await waitFor(sourceBuffer, 'update');
testExpected('sourceBuffer.buffered.length', '1');
testExpected('sourceBuffer.buffered.end(0).toFixed(4) == loader.mediaSegmentEndTime(0)', true);

consoleWrite('Clean sourcebuffer of all content.');
run('sourceBuffer.remove(0, 100)');
await waitFor(sourceBuffer, 'update');
testExpected('sourceBuffer.buffered.length', '0');

endTest();
} catch (e) {
failTest(`Caught exception: "${e}"`);
}
});
</script>
</head>
<body>
<video controls></video>
</body>
</html>
8 changes: 8 additions & 0 deletions LayoutTests/media/media-source/media-source-loader.js
Expand Up @@ -87,6 +87,14 @@ MediaSourceLoader.prototype = {
return this._mediaData.slice(media.offset, media.offset + media.size);
},

mediaSegmentEndTime: function(segmentNumber)
{
if (!this._manifest || !this._manifest.media || !this._mediaData || segmentNumber >= this._manifest.media.length)
return 0;
var media = this._manifest.media[segmentNumber];
return media.timestamp + media.duration;
},

concatenateMediaSegments: function(segmentDataList)
{
var totalLength = 0;
Expand Down
2 changes: 2 additions & 0 deletions LayoutTests/platform/glib/TestExpectations
Expand Up @@ -1017,6 +1017,8 @@ webkit.org/b/211995 fast/images/animated-image-mp4.html [ Failure Timeout ]

webkit.org/b/214038 imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html [ Missing Failure ]

webkit.org/b/252386 media/media-source/media-managedmse.html [ Failure ]

# MSE failures
webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/URL-createObjectURL-revoke.html [ Failure ]

Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Modules/mediasource/MediaSource.idl
Expand Up @@ -40,6 +40,7 @@ enum ReadyState {
};

[
SkipVTableValidation,
ActiveDOMObject,
Conditional=MEDIA_SOURCE,
EnabledBySetting=MediaSourceEnabled,
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Modules/mediasource/SourceBuffer.idl
Expand Up @@ -34,6 +34,7 @@
};

[
SkipVTableValidation,
ActiveDOMObject,
Conditional=MEDIA_SOURCE,
EnabledBySetting=MediaSourceEnabled,
Expand Down

0 comments on commit b4f656f

Please sign in to comment.