1# Copyright 2015 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5
6from autotest_lib.client.cros.video import video_player
7
8
9class NativeHtml5Player(video_player.VideoPlayer):
10    """
11    Provides an interface to interact with native html5 player in chrome.
12
13    """
14
15
16    def inject_source_file(self):
17        """
18        Injects the path to the video file under test into the html doc.
19
20
21        """
22        self.tab.ExecuteJavaScript(
23            'loadVideoSource("%s")' % self.video_src_path)
24
25
26    def is_video_ready(self):
27        """
28        Determines if a native html5 video is ready by using javascript.
29
30        returns: bool, True if video is ready, else False.
31
32        """
33        return self.tab.EvaluateJavaScript('canplay()')
34
35
36    def play(self):
37        """
38        Plays the video.
39
40        """
41        self.tab.ExecuteJavaScript('play()')
42
43
44    def pause(self):
45        """
46        Pauses the video.
47
48        """
49        self.tab.ExecuteJavaScript('pause()')
50
51
52    def paused(self):
53        """
54        Checks whether video paused.
55
56        """
57        cmd = "%s.paused" % self.video_id
58        return self.tab.EvaluateJavaScript(cmd)
59
60
61    def ended(self):
62        """
63        Checks whether video paused.
64
65        """
66        cmd = "%s.ended" % self.video_id
67        return self.tab.EvaluateJavaScript(cmd)
68
69
70    def currentTime(self):
71        """
72        Returns the current time of the video element.
73
74        """
75        return self.tab.EvaluateJavaScript('currentTime()')
76
77
78    def seek_to(self, t):
79        """
80        Seeks a video to a time stamp.
81
82        @param t: timedelta, time value to seek to.
83
84        """
85        cmd = "%s.currentTime=%.3f" % (self.video_id, t.total_seconds())
86        self.tab.ExecuteJavaScript(cmd)
87
88
89    def has_video_finished_seeking(self):
90        """
91        Determines if the video has finished seeking.
92
93        """
94        return self.tab.EvaluateJavaScript('finishedSeeking()')
95
96
97    def wait_for_error(self):
98        """
99        Determines if the video has any errors
100
101        """
102        return self.tab.WaitForJavaScriptExpression('errorDetected();', 30)
103