1
2<html>
3    <head>
4        <!-- LayoutTests location is hard-coded to avoid duplication of code. -->
5        <script src="http://svn.webkit.org/repository/webkit/trunk/LayoutTests/media/media-file.js"></script>
6        <script src="http://svn.webkit.org/repository/webkit/trunk/LayoutTests/media/video-test.js"></script>
7
8        <script>
9            var expectedRates = { "defaultPlaybackRate" : 1, "playbackRate" : 1};
10            var playingFromScript = false;
11            var changedRate = false;
12
13            function absoluteUrl(url)
14            {
15                var a = document.createElement('a');
16                a.href = url;
17                return a.href;
18            }
19
20            function testRates()
21            {
22                consoleWrite("");
23                var playWithControllerButton = !changedRate && !playingFromScript;
24                testExpected("video.playbackRate", playWithControllerButton ? expectedRates['defaultPlaybackRate'] : expectedRates['playbackRate']);
25                testExpected("video.defaultPlaybackRate", expectedRates['defaultPlaybackRate']);
26                changedRate = false;
27            }
28
29            function playing()
30            {
31                consoleWrite("<br>'playing' event");
32                expectedRates['playbackRate'] = playingFromScript ? video.playbackRate : video.defaultPlaybackRate;
33                testRates();
34                playingFromScript = false;
35            }
36
37            function ratechange()
38            {
39                consoleWrite("<br>'ratechange' event");
40                testRates();
41            }
42
43            function start()
44            {
45                findMediaElement();
46                video.addEventListener('ratechange', ratechange);
47                video.addEventListener('playing', playing);
48
49                // Use the video file from the svn repository to avoid duplicating the file.
50                video.src = absoluteUrl(findMediaFile('video', 'http://svn.webkit.org/repository/webkit/trunk/LayoutTests/media/content/test'));
51                testRates();
52            }
53
54            function play()
55            {
56                playingFromScript = true;
57                video.play();
58            }
59
60            function setRate(which, rate)
61            {
62                changedRate = true;
63                video[which] = rate;
64                expectedRates[which] = rate;
65            }
66
67        </script>
68    </head>
69
70    <body onload="start()">
71        
72        <video controls > </video>
73        <ul>
74            <li>The current 'playbackRate' and 'defaultPlaybackRate' should be logged every time either changes.</li>
75            <li>'playbackRate' should be set to 'defaultPlaybackRate' when the Play button in the built-in controls is pressed</li>
76            <li>'playbackRate' should NOT when play() is called from script.</li>
77        </ul>
78        <div>
79            <button id="controls" onclick="setRate('defaultPlaybackRate', 2)">defaultPlaybackRate = 2</button>
80            <button id="controls" onclick="setRate('defaultPlaybackRate', 1)">defaultPlaybackRate = 1</button>
81            <button id="controls" onclick="setRate('playbackRate', 2)">playbackRate = 2</button>
82            <button id="controls" onclick="setRate('playbackRate', 1)">playbackRate = 1</button>
83        </div>
84        <div>
85            <button id="controls" onclick="play()">play()</button>
86            <button id="controls" onclick="video.pause()">pause()</button>
87        </div>
88        <br>
89    </body>
90</html>
91