# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import py_utils
from telemetry.page import page
from telemetry.page import cache_temperature as cache_temperature_module
from telemetry.page import traffic_setting as traffic_setting_module
from telemetry.page import shared_page_state
_NAVIGATION_TIMEOUT = 180
_WEB_CONTENTS_TIMEOUT = 180
class PageCyclerStory(page.Page):
def __init__(self, url, page_set,
shared_page_state_class=shared_page_state.SharedDesktopPageState,
cache_temperature=cache_temperature_module.ANY, name='',
traffic_setting=traffic_setting_module.NONE, **kwargs):
super(PageCyclerStory, self).__init__(
url=url, page_set=page_set,
shared_page_state_class=shared_page_state_class,
cache_temperature=cache_temperature, name=name,
traffic_setting=traffic_setting,
**kwargs)
if cache_temperature != cache_temperature_module.ANY:
self.grouping_keys['cache_temperature'] = cache_temperature
if traffic_setting != traffic_setting_module.NONE:
self.grouping_keys['traffic_setting'] = traffic_setting
def RunNavigateSteps(self, action_runner):
url = self.file_path_url_with_scheme if self.is_file else self.url
action_runner.Navigate(url,
self.script_to_evaluate_on_commit,
timeout_in_seconds=_NAVIGATION_TIMEOUT)
def RunPageInteractions(self, action_runner):
py_utils.WaitFor(action_runner.tab.HasReachedQuiescence,
_WEB_CONTENTS_TIMEOUT)
py_utils.WaitFor(action_runner.tab.IsServiceWorkerActivatedOrNotRegistered,
_WEB_CONTENTS_TIMEOUT)
# Wait an extra 5 seconds to give the page a chance to reach First
# Interactive, so we can compute Time to Interactive and Total Blocking
# Time.
action_runner.Wait(5)