1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5
6// This file provides common functions for media actions.
7window.__findMediaElements = function(selector) {
8  // Returns elements matching the selector, otherwise returns the first video
9  // or audio tag element that can be found.
10  // If selector == 'all', returns all media elements.
11  if (selector == 'all') {
12    return document.querySelectorAll('video, audio');
13  } else if (selector) {
14    return document.querySelectorAll(selector);
15  } else {
16    var media = document.getElementsByTagName('video');
17    if (media.length > 0) {
18      return [media[0]];
19    } else {
20      media = document.getElementsByTagName('audio');
21      if (media.length > 0) {
22        return [media[0]];
23      }
24    }
25  }
26  console.error('Could not find any media elements matching: ' + selector);
27  return [];
28};
29
30window.__hasEventCompleted = function(selector, event_name) {
31  // Return true if the event_name fired for media satisfying the selector.
32  var mediaElements = window.__findMediaElements(selector);
33  for (var i = 0; i < mediaElements.length; i++) {
34    if (!mediaElements[i][event_name + '_completed'])
35      return false;
36  }
37  return true;
38};
39
40window.__registerHTML5ErrorEvents = function(element) {
41  // Listens to HTML5 media errors.
42  function onError(e) {
43    window.__error = 'Media error: ' + e.type + ', code:' + e.target.error.code;
44    throw new Error(window.__error);
45  }
46  element.addEventListener('error', onError);
47  element.addEventListener('abort', onError);
48};
49
50window.__registerHTML5EventCompleted = function(element, event_name) {
51  // Logs |even_name| on element when completed.
52  var logEventHappened = function(e) {
53    element[e.type + '_completed'] = true;
54    element.removeEventListener(event_name, logEventHappened);
55  }
56  element.addEventListener(event_name, logEventHappened);
57};
58
59window.__error = null;
60