summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/media-source/mediasource-attach-stops-delaying-load-event.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/media-source/mediasource-attach-stops-delaying-load-event.html')
-rw-r--r--testing/web-platform/tests/media-source/mediasource-attach-stops-delaying-load-event.html49
1 files changed, 49 insertions, 0 deletions
diff --git a/testing/web-platform/tests/media-source/mediasource-attach-stops-delaying-load-event.html b/testing/web-platform/tests/media-source/mediasource-attach-stops-delaying-load-event.html
new file mode 100644
index 0000000000..6b5d5b0ad1
--- /dev/null
+++ b/testing/web-platform/tests/media-source/mediasource-attach-stops-delaying-load-event.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
+<title>Tests that MediaSource attachment stops delaying the load event.</title>
+<link rel="author" title="Matthew Wolenetz" href="mailto:wolenetz@chromium.org"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+async_test(function(test)
+{
+ var receivedLoadEvent = false;
+ var receivedSourceOpenEvent = false;
+
+ window.addEventListener("load", test.step_func(function() {
+ assert_false(receivedLoadEvent, "window should not receive multiple load events");
+ receivedLoadEvent = true;
+ assert_equals(document.readyState, "complete", "document should be complete");
+ if (receivedLoadEvent && receivedSourceOpenEvent) {
+ test.done();
+ }
+ }));
+
+ assert_equals(document.readyState, "loading", "document should not be complete yet");
+ var video = document.createElement("video");
+ var mediaSource = new MediaSource();
+
+ // |video| should stop delaying the load event long and complete the MediaSource attachment
+ // before either a "progress", "stalled" or "suspend" event are enqueued.
+ video.addEventListener("suspend", test.unreached_func("unexpected 'suspend' event"));
+ video.addEventListener("stalled", test.unreached_func("unexpected 'stalled' event"));
+ video.addEventListener("progress", test.unreached_func("unexpected 'progress' event"));
+
+ // No error is expected.
+ video.addEventListener("error", test.unreached_func("unexpected 'error' event"));
+
+ mediaSource.addEventListener("sourceopen", test.step_func(function() {
+ assert_false(receivedSourceOpenEvent, "only one sourceopen event should occur in this test");
+ receivedSourceOpenEvent = true;
+ assert_equals(video.networkState, video.NETWORK_LOADING);
+ assert_equals(video.readyState, video.HAVE_NOTHING);
+ if (receivedLoadEvent && receivedSourceOpenEvent) {
+ test.done();
+ }
+ }));
+
+ var mediaSourceURL = URL.createObjectURL(mediaSource);
+ video.src = mediaSourceURL;
+ test.add_cleanup(function() { URL.revokeObjectURL(mediaSourceURL); });
+}, "MediaSource attachment should immediately stop delaying the load event");
+</script>