blob: 446f79714f6ea718e3ef4ea021df3c207cec5a6b [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Common media action functions."""
import logging
import os
from telemetry.core import util
from telemetry.internal.actions import page_action
class MediaAction(page_action.PageAction):
def WillRunAction(self, tab):
"""Loads the common media action JS code prior to running the action."""
self.LoadJS(tab, 'media_action.js')
def RunAction(self, tab):
super(MediaAction, self).RunAction(tab)
def LoadJS(self, tab, js_file_name):
"""Loads and executes a JS file in the tab."""
with open(os.path.join(os.path.dirname(__file__), js_file_name)) as f:
js = f.read()
tab.ExecuteJavaScript(js)
def WaitForEvent(self, tab, selector, event_name, timeout_in_seconds):
"""Halts media action until the selector's event is fired.
Args:
tab: The tab to check for event on.
selector: Media element selector.
event_name: Name of the event to check if fired or not.
timeout_in_seconds: Timeout to check for event, throws an exception if
not fired.
"""
util.WaitFor(lambda:
self.HasEventCompletedOrError(tab, selector, event_name),
timeout=timeout_in_seconds)
def HasEventCompletedOrError(self, tab, selector, event_name):
if tab.EvaluateJavaScript(
'window.__hasEventCompleted("%s", "%s");' % (selector, event_name)):
return True
error = tab.EvaluateJavaScript('window.__error')
if error:
logging.error('Detected media error while waiting for %s: %s', event_name,
error)
return True
return False