| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """A Telemetry page_action that performs the "seek" action on media elements. | 5 """A Telemetry page_action that performs the "seek" action on media elements. |
| 6 | 6 |
| 7 Action parameters are: | 7 Action parameters are: |
| 8 - seconds: The media time to seek to. Test fails if not provided. | 8 - seconds: The media time to seek to. Test fails if not provided. |
| 9 - selector: If no selector is defined then the action attempts to seek the first | 9 - selector: If no selector is defined then the action attempts to seek the first |
| 10 media element on the page. If 'all' then seek all media elements. | 10 media element on the page. If 'all' then seek all media elements. |
| 11 - timeout_in_seconds: Maximum waiting time for the "seeked" event | 11 - timeout_in_seconds: Maximum waiting time for the "seeked" event |
| 12 (dispatched when the seeked operation completes) | 12 (dispatched when the seeked operation completes) |
| 13 to be fired. 0 means do not wait. | 13 to be fired. 0 means do not wait. |
| 14 - log_time: If true the seek time is recorded, otherwise media | 14 - log_time: If true the seek time is recorded, otherwise media |
| 15 measurement will not be aware of the seek action. Used to | 15 measurement will not be aware of the seek action. Used to |
| 16 perform multiple seeks. Default true. | 16 perform multiple seeks. Default true. |
| 17 - label: A suffix string to name the seek perf measurement. | 17 - label: A suffix string to name the seek perf measurement. |
| 18 """ | 18 """ |
| 19 | 19 |
| 20 from telemetry.core import exceptions | 20 from telemetry.core import exceptions |
| 21 from telemetry.internal.actions import media_action | 21 from telemetry.internal.actions import media_action |
| 22 from telemetry.internal.actions import page_action | 22 from telemetry.internal.actions import page_action |
| 23 from telemetry.internal.actions import utils |
| 23 | 24 |
| 24 | 25 |
| 25 class SeekAction(media_action.MediaAction): | 26 class SeekAction(media_action.MediaAction): |
| 26 def __init__(self, seconds, selector=None, timeout_in_seconds=0, | 27 def __init__(self, seconds, selector=None, timeout_in_seconds=0, |
| 27 log_time=True, label=''): | 28 log_time=True, label=''): |
| 28 super(SeekAction, self).__init__() | 29 super(SeekAction, self).__init__() |
| 29 self._seconds = seconds | 30 self._seconds = seconds |
| 30 self._selector = selector if selector else '' | 31 self._selector = selector if selector else '' |
| 31 self._timeout_in_seconds = timeout_in_seconds | 32 self._timeout_in_seconds = timeout_in_seconds |
| 32 self._log_time = log_time | 33 self._log_time = log_time |
| 33 self._label = label | 34 self._label = label |
| 34 | 35 |
| 35 def WillRunAction(self, tab): | 36 def WillRunAction(self, tab): |
| 36 """Load the media metrics JS code prior to running the action.""" | 37 """Load the media metrics JS code prior to running the action.""" |
| 37 super(SeekAction, self).WillRunAction(tab) | 38 super(SeekAction, self).WillRunAction(tab) |
| 38 self.LoadJS(tab, 'seek.js') | 39 utils.InjectJavaScript(tab, 'seek.js') |
| 39 | 40 |
| 40 def RunAction(self, tab): | 41 def RunAction(self, tab): |
| 41 try: | 42 try: |
| 42 tab.ExecuteJavaScript( | 43 tab.ExecuteJavaScript( |
| 43 'window.__seekMedia("%s", "%s", %i, "%s");' % | 44 'window.__seekMedia("%s", "%s", %i, "%s");' % |
| 44 (self._selector, self._seconds, self._log_time, self._label)) | 45 (self._selector, self._seconds, self._log_time, self._label)) |
| 45 if self._timeout_in_seconds > 0: | 46 if self._timeout_in_seconds > 0: |
| 46 self.WaitForEvent(tab, self._selector, 'seeked', | 47 self.WaitForEvent(tab, self._selector, 'seeked', |
| 47 self._timeout_in_seconds) | 48 self._timeout_in_seconds) |
| 48 except exceptions.EvaluateException: | 49 except exceptions.EvaluateException: |
| 49 raise page_action.PageActionFailed('Cannot seek media element(s) with ' | 50 raise page_action.PageActionFailed('Cannot seek media element(s) with ' |
| 50 'selector = %s.' % self._selector) | 51 'selector = %s.' % self._selector) |
| OLD | NEW |