Revision ab5780956dda798c97707e05fd2e58df7963b6d0 authored by Harald Alvestrand on 05 October 2018, 09:29:42 UTC, committed by Chromium WPT Sync on 05 October 2018, 09:29:42 UTC
This reverts commit 3f90035e2fac160d23309a96ef2cf465b29cebe4.

Reason for revert: The original problem was solved using another approach, and this CL just adds complexity with no purpose.

Original change's description:
> Implement DTMF [[ToneBuffer]] in the blink layer
>
> This CL makes the Blink layer keep a copy of the tone buffer
> and update it on insertDTMF and ontonechange events only; this
> makes it possible to expose the state of the tone buffer at the
> time the event is fired to the Javascript callback.
>
> It removes a queueing step inside the DTMF sender, because
> that queueing step destroyed the consistency.
>
> Bug: chromium:816475
> Change-Id: I5aa68396299a67d6cea1e8a17d364f553514c291
> Reviewed-on: https://chromium-review.googlesource.com/1213084
> Reviewed-by: Guido Urdaneta <guidou@chromium.org>
> Reviewed-by: Kentaro Hara <haraken@chromium.org>
> Commit-Queue: Harald Alvestrand <hta@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#589910}

TBR=hta@chromium.org,haraken@chromium.org,hbos@chromium.org,guidou@chromium.org,foolip@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: chromium:816475
Change-Id: Iaee9fefa8a37e3c6c7256dacac0855f426601e0d
1 parent 006e385
Raw File
mediasource-liveseekable.html
<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<meta charset="utf-8">
<title>Checks setting/clearing the live seekable range and HTMLMediaElement.seekable</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="mediasource-util.js"></script>
<script>
test(function(test)
{
    var mediaSource = new MediaSource();
    assert_equals(mediaSource.readyState, "closed", "media source is closed.");
    assert_throws("InvalidStateError", function() { mediaSource.setLiveSeekableRange(0, 1); });
}, "setLiveSeekableRange throws an InvalidStateError exception if the readyState attribute is not 'open'");


test(function(test)
{
    var mediaSource = new MediaSource();
    assert_equals(mediaSource.readyState, "closed", "media source is closed.");
    assert_throws("InvalidStateError", function() { mediaSource.clearLiveSeekableRange(); });
}, "clearLiveSeekableRange throws an InvalidStateError exception if the readyState attribute is not 'open'");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE;
    var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
    sourceBuffer.appendBuffer(new Uint8Array(0));
    assert_true(sourceBuffer.updating, "Updating set when a buffer is appended.");
    mediaSource.setLiveSeekableRange(0, 1);
    test.done();
}, "setLiveSeekableRange does not restrict to not currently updating");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE;
    var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
    sourceBuffer.appendBuffer(new Uint8Array(0));
    assert_true(sourceBuffer.updating, "Updating set when a buffer is appended.");
    mediaSource.clearLiveSeekableRange();
    test.done();
}, "clearLiveSeekableRange does not restrict to not currently updating");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    assert_throws(new TypeError(), function() { mediaSource.setLiveSeekableRange(-1, 1); });
    test.done();
}, "setLiveSeekableRange throws a TypeError if start is negative");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    assert_throws(new TypeError(), function() { mediaSource.setLiveSeekableRange(2, 1); });
    test.done();
}, "setLiveSeekableRange throws a TypeError if start is greater than end");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    mediaSource.setLiveSeekableRange(0, 1);
    test.done();
}, "setLiveSeekableRange returns with no error when conditions are correct");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    mediaSource.clearLiveSeekableRange();
    test.done();
}, "clearLiveSeekableRange returns with no error when conditions are correct");


mediasource_test(function(test, mediaElement, mediaSource)
{
    mediaSource.duration = +Infinity;
    mediaSource.setLiveSeekableRange(1, 2);
    assert_equals(mediaElement.seekable.length, 1,
      'The seekable attribute contains a single range.');
    assertSeekableEquals(mediaElement, '{ [1.000, 2.000) }',
      'The seekable attribute returns the correct range.');

    mediaSource.clearLiveSeekableRange();
    assertSeekableEquals(mediaElement, '{ }',
      'The seekable attribute now returns an empty range.');
    test.done();
}, "HTMLMediaElement.seekable returns the live seekable range or an empty range if that range was cleared when nothing is buffered");


mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
{
    var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
    test.expectEvent(sourceBuffer, 'updateend', 'Init segment appended to SourceBuffer.');
    sourceBuffer.appendBuffer(initSegment);
    test.waitForExpectedEvents(function()
    {
        mediaSource.duration = +Infinity;
        mediaSource.setLiveSeekableRange(40, 42);

        // Append a segment that starts after 1s to ensure seekable
        // won't use 0 as starting point.
        var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[5]);
        test.expectEvent(sourceBuffer, 'updateend');
        sourceBuffer.appendBuffer(midSegment);
        test.waitForExpectedEvents(function()
        {
            assert_equals(mediaElement.seekable.length, 1,
              'The seekable attribute contains a single range.');
            assert_equals(mediaElement.buffered.length, 1,
              'The buffered attribute contains a single range.');
            assert_not_equals(mediaElement.seekable.start(0), 0,
              'The range starts after 0.');
            assert_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0),
              'The start time is the start time of the buffered range.');
            assert_equals(mediaElement.seekable.end(0), 42,
              'The end time is the end time of the seekable range.');

            mediaSource.clearLiveSeekableRange();
            assert_equals(mediaElement.seekable.length, 1,
              'The seekable attribute contains a single range.');
            assert_equals(mediaElement.seekable.start(0), 0,
              'The start time is now 0.');
            assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0),
              'The end time is now the end time of the buffered range.');

            test.done();
        });
    });
}, 'HTMLMediaElement.seekable returns the union of the buffered range and the live seekable range, when set');
</script>
back to top