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