blob: f8627843e68602fbe6b70c45c7a088b670800a7a [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file performs actions on media elements.
(function() {
function loopMedia(selector, loopCount) {
// Loops media playback `loopCount` times.
var mediaElements = window.__findMediaElements(selector);
for (var i = 0; i < mediaElements.length; i++) {
loop(mediaElements[i], loopCount);
}
}
function loop(element, loopCount) {
if (element instanceof HTMLMediaElement)
loopHTML5Element(element, loopCount);
else
throw new Error('Can not play non HTML5 media elements.');
}
function loopHTML5Element(element, loopCount) {
window.__registerHTML5ErrorEvents(element);
element['loop_completed'] = false;
var currentLoop = 0;
var onLoop = function(e) {
++currentLoop;
if (currentLoop == loopCount) {
element.pause();
element.removeEventListener('seeked', onLoop);
element['loop_completed'] = true;
// Dispatch endLoopEvent to mark end of looping.
var endLoopEvent = document.createEvent('Event');
endLoopEvent.initEvent('endLoop', false, false);
element.dispatchEvent(endLoopEvent);
}
};
element.addEventListener('seeked', onLoop);
element.loop = true;
// Dispatch willLoopEvent to measure loop time.
var willLoopEvent = document.createEvent('Event');
willLoopEvent.initEvent('willLoop', false, false);
willLoopEvent.loopCount = loopCount;
element.dispatchEvent(willLoopEvent);
// Reset HTML5 player to start playback from beginning.
element.load();
element.play();
}
window.__loopMedia = loopMedia;
})();