summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/media/media-controls.js
blob: e4c5d32043ad1ee0b0e7cea126e89ec238cd734f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
var captionsButtonElement;
var captionsButtonCoordinates;

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 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, textTrackContainerID);

    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;
}

function testClosedCaptionsButtonVisibility(expected)
{
    try {
        captionsButtonElement = mediaControlsElement(internals.shadowRoot(video).firstChild, "-webkit-media-controls-toggle-closed-captions-button");
        captionsButtonCoordinates = mediaControlsButtonCoordinates(video, "toggle-closed-captions-button");
    } catch (exception) {
        consoleWrite("Failed to find a closed captions button or its coordinates: " + exception);
        if (expected)
            failTest();
        return;
    }

    consoleWrite("");
    if (expected == true) {
        consoleWrite("** Caption button should be visible and enabled because we have a captions track.");
        testExpected("captionsButtonCoordinates[0]", 0, ">");
        testExpected("captionsButtonCoordinates[1]", 0, ">");
        testExpected("captionsButtonElement.disabled", false);
    } else {
        consoleWrite("** Caption button should not be visible as there are no caption tracks.");
        testExpected("captionsButtonCoordinates[0]", 0, "<=");
        testExpected("captionsButtonCoordinates[1]", 0, "<=");
    }
}

function clickCCButton()
{
    consoleWrite("*** Click the CC button.");
    eventSender.mouseMoveTo(captionsButtonCoordinates[0], captionsButtonCoordinates[1]);
    eventSender.mouseDown();
    eventSender.mouseUp();
}