Index: tools/telemetry/telemetry/page/page_runner.py |
diff --git a/tools/telemetry/telemetry/page/page_runner.py b/tools/telemetry/telemetry/page/page_runner.py |
index 1df51dec457283f4f00680c9383ec7e09c2e86ee..84ca2c0483de4241387c37c0d4d9e752267dcfac 100644 |
--- a/tools/telemetry/telemetry/page/page_runner.py |
+++ b/tools/telemetry/telemetry/page/page_runner.py |
@@ -32,6 +32,7 @@ class _RunState(object): |
self._first_browser = True |
self.first_page = collections.defaultdict(lambda: True) |
self.profiler_dir = None |
+ self.repeat_state = None |
def StartBrowser(self, test, page_set, page, possible_browser, |
credentials_path, archive_path): |
@@ -110,12 +111,9 @@ class PageState(object): |
def PreparePage(self, page, tab, test=None): |
if page.is_file: |
- serving_dirs, filename = page.serving_dirs_and_file |
+ serving_dirs = page.serving_dirs_and_file[0] |
if tab.browser.SetHTTPServerDirectories(serving_dirs) and test: |
test.DidStartHTTPServer(tab) |
- target_side_url = tab.browser.http_server.UrlOf(filename) |
- else: |
- target_side_url = page.url |
if page.credentials: |
if not tab.browser.credentials.LoginNeeded(tab, page.credentials): |
@@ -125,6 +123,19 @@ class PageState(object): |
if test: |
if test.clear_cache_before_each_run: |
tab.ClearCache() |
+ |
+ def ImplicitPageNavigation(self, page, tab, test=None): |
+ """Executes the implicit navigation that occurs for every page iteration. |
+ |
+ This function will be called once per page before any actions are executed. |
+ """ |
+ if page.is_file: |
+ filename = page.serving_dirs_and_file[1] |
+ target_side_url = tab.browser.http_server.UrlOf(filename) |
+ else: |
+ target_side_url = page.url |
+ |
+ if test: |
test.WillNavigateToPage(page, tab) |
tab.Navigate(target_side_url, page.script_to_evaluate_on_commit) |
if test: |
@@ -181,7 +192,7 @@ def _PrepareAndRunPage(test, page_set, expectations, options, page, |
state.browser.platform, page) |
try: |
- _RunPage(test, page, state.tab, expectation, |
+ _RunPage(test, page, state, expectation, |
results_for_current_run, options) |
_CheckThermalThrottling(state.browser.platform) |
except exceptions.TabCrashException: |
@@ -262,19 +273,19 @@ def Run(test, page_set, expectations, options): |
try: |
test.WillRunTest(state.tab) |
- repeat_state = page_runner_repeat.PageRunnerRepeatState( |
- options.repeat_options) |
+ state.repeat_state = page_runner_repeat.PageRunnerRepeatState( |
+ options.repeat_options) |
- repeat_state.WillRunPageSet() |
- while repeat_state.ShouldRepeatPageSet(): |
+ state.repeat_state.WillRunPageSet() |
+ while state.repeat_state.ShouldRepeatPageSet(): |
for page in pages: |
- repeat_state.WillRunPage() |
- while repeat_state.ShouldRepeatPage(): |
+ state.repeat_state.WillRunPage() |
+ while state.repeat_state.ShouldRepeatPage(): |
# execute test on page |
_PrepareAndRunPage(test, page_set, expectations, options, page, |
credentials_path, possible_browser, results, state) |
- repeat_state.DidRunPage() |
- repeat_state.DidRunPageSet() |
+ state.repeat_state.DidRunPage() |
+ state.repeat_state.DidRunPageSet() |
test.DidRunTest(state.tab, results) |
finally: |
@@ -356,13 +367,16 @@ def _CheckArchives(page_set, pages, results): |
pages_missing_archive_path + pages_missing_archive_data] |
-def _RunPage(test, page, tab, expectation, results, options): |
+def _RunPage(test, page, state, expectation, results, options): |
logging.info('Running %s' % page.url) |
page_state = PageState() |
+ tab = state.tab |
try: |
page_state.PreparePage(page, tab, test) |
+ if state.repeat_state.ShouldNavigate(options.skip_navigate_on_repeat): |
+ page_state.ImplicitPageNavigation(page, tab, test) |
test.Run(options, page, tab, results) |
util.CloseConnections(tab) |
except page_test.Failure: |