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