blob: e9df62de97f641e39ec25a343dc4f379064549e7 [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 provides common functions for media actions.
window.__findMediaElements = function(selector) {
// Returns elements matching the selector, otherwise returns the first video
// or audio tag element that can be found.
// If selector == 'all', returns all media elements.
if (selector == 'all') {
return document.querySelectorAll('video, audio');
} else if (selector) {
return document.querySelectorAll(selector);
} else {
var media = document.getElementsByTagName('video');
if (media.length > 0) {
return [media[0]];
} else {
media = document.getElementsByTagName('audio');
if (media.length > 0) {
return [media[0]];
}
}
}
console.error('Could not find any media elements matching: ' + selector);
return [];
};
window.__hasEventCompleted = function(selector, event_name) {
// Return true if the event_name fired for media satisfying the selector.
var mediaElements = window.__findMediaElements(selector);
for (var i = 0; i < mediaElements.length; i++) {
if (!mediaElements[i][event_name + '_completed'])
return false;
}
return true;
};
window.__registerHTML5ErrorEvents = function(element) {
// Listens to HTML5 media errors.
function onError(e) {
window.__error = 'Media error: ' + e.type + ', code:' + e.target.error.code;
throw new Error(window.__error);
}
element.addEventListener('error', onError);
element.addEventListener('abort', onError);
};
window.__registerHTML5EventCompleted = function(element, event_name) {
// Logs |even_name| on element when completed.
var logEventHappened = function(e) {
element[e.type + '_completed'] = true;
element.removeEventListener(event_name, logEventHappened);
}
element.addEventListener(event_name, logEventHappened);
};
window.__error = null;