• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2012 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
5import logging
6import os
7import time
8
9from autotest_lib.client.bin import test, utils
10from autotest_lib.client.common_lib import error
11from autotest_lib.client.common_lib.cros import chrome
12from autotest_lib.client.cros.power import sys_power
13
14
15class power_FlashVideoSuspend(test.test):
16    """Suspend the system with a video playing."""
17    version = 2
18
19    def run_once(self, video_url=None):
20        utils.verify_flash_installed()
21        with chrome.Chrome(init_network_controller=True) as cr:
22            cr.browser.platform.SetHTTPServerDirectories(self.bindir)
23            tab = cr.browser.tabs[0]
24            tab.Navigate(cr.browser.platform.http_server.UrlOf(
25                os.path.join(self.bindir, 'youtube.html')))
26            self.suspend_with_youtube(cr.browser.tabs[0], video_url)
27
28
29    def check_video_is_playing(self, tab):
30        """
31        Checks if video is playing or not.
32
33        @param tab: Object to the browser tab
34        """
35        def get_current_time():
36            """Get current time from the javascript."""
37            return tab.EvaluateJavaScript('player.getCurrentTime()')
38
39        old_time = get_current_time()
40        utils.poll_for_condition(
41            condition=lambda: get_current_time() > old_time,
42            exception=error.TestError('Player is stuck until timeout.'))
43
44
45    def suspend_with_youtube(self, tab, video_url):
46        """
47        Suspends kernel while video is running in browser.
48
49        @param tab: Object to the browser tab
50        @param video_url: Object to video url
51        """
52        tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
53        logging.info('video url is %s', video_url)
54        tab.EvaluateJavaScript('play("%s")' % video_url)
55        tab.WaitForJavaScriptCondition('typeof player != "undefined"',
56                                       timeout=10)
57
58        self.check_video_is_playing(tab)
59
60        time.sleep(2)
61        try:
62            sys_power.do_suspend(10)
63        except Exception as e:
64            logging.error(e)
65            raise error.TestFail('====Kernel suspend failed====')
66        time.sleep(2)
67
68        self.check_video_is_playing(tab)
69