blob: a0a3d77e7390257bcec72a2b1ea4b7bbff25cb5b [file] [log] [blame]
function mediaControlsElement(first, id)
{
for (var element = first; element; element = element.nextSibling) {
// Not every element in the media controls has a shadow pseudo ID, eg. the
// text nodes for the time values, so guard against exceptions.
try {
if (internals.shadowPseudoId(element) == id)
return element;
} catch (exception) { }
if (element.firstChild) {
var childElement = mediaControlsElement(element.firstChild, id);
if (childElement)
return childElement;
}
}
return null;
}
function dumpMediaControlsTree(first)
{
for (var element = first; element; element = element.nextSibling) {
// Not every element in the media controls has a shadow pseudo ID, eg. the
// text nodes for the time values, so guard against exceptions.
try {
var pseudo = internals.shadowPseudoId(element);
if (pseudo == "")
pseudo = "none";
consoleWrite(pseudo + ": classes: [" + element.classList + "]");
} catch (exception) { }
if (element.firstChild)
dumpMediaControlsTree(element.firstChild);
}
return null;
}
function mediaControlsButtonCoordinates(element, id)
{
var controlID = "-webkit-media-controls-" + id;
var button = mediaControlsElement(internals.shadowRoot(element).firstChild, controlID);
if (!button)
throw "Failed to find media control element ID '" + id + "'";
var buttonBoundingRect = button.getBoundingClientRect();
var x = buttonBoundingRect.left + buttonBoundingRect.width / 2;
var y = buttonBoundingRect.top + buttonBoundingRect.height / 2;
return new Array(x, y);
}
function mediaControlsButtonDimensions(element, id)
{
var controlID = "-webkit-media-controls-" + id;
var button = mediaControlsElement(internals.shadowRoot(element).firstChild, controlID);
if (!button)
throw "Failed to find media control element ID '" + id + "'";
var buttonBoundingRect = button.getBoundingClientRect();
return new Array(buttonBoundingRect.width, buttonBoundingRect.height);
}
function textTrackDisplayElement(parentElement, id, cueNumber)
{
var textTrackContainerID = "-webkit-media-text-track-container";
var containerElement = mediaControlsElement(internals.shadowRoot(parentElement).firstChild, "-webkit-media-text-track-container");
if (!containerElement)
throw "Failed to find text track container element";
if (!id)
return containerElement;
if (arguments[1] != 'cue')
var controlID = "-webkit-media-text-track-" + arguments[1];
else
var controlID = arguments[1];
var displayElement = mediaControlsElement(containerElement.firstChild, controlID);
if (!displayElement)
throw "No text track cue with display id '" + controlID + "' is currently visible";
if (cueNumber) {
for (i = 0; i < cueNumber; i++)
displayElement = displayElement.nextSibling;
if (!displayElement)
throw "There are not " + cueNumber + " text track cues visible";
}
return displayElement;
}
// FIXME: Make this work for iOS.
function clickPlayButton(video)
{
if (!window.eventSender)
return;
var playButtonCoordinates = mediaControlsButtonCoordinates(video, "play-button");
var x = playButtonCoordinates[0];
var y = playButtonCoordinates[1];
eventSender.mouseMoveTo(x, y);
eventSender.mouseDown();
eventSender.mouseUp();
}