Index: tools/chrome_remote_control/chrome_remote_control/page_runner.py |
diff --git a/tools/chrome_remote_control/chrome_remote_control/page_runner.py b/tools/chrome_remote_control/chrome_remote_control/page_runner.py |
deleted file mode 100644 |
index 1295311e07cdd4abf5803491de5ec19237af462f..0000000000000000000000000000000000000000 |
--- a/tools/chrome_remote_control/chrome_remote_control/page_runner.py |
+++ /dev/null |
@@ -1,184 +0,0 @@ |
-# Copyright (c) 2012 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. |
-import logging |
-import os |
-import time |
-import traceback |
-import urlparse |
-import random |
-import csv |
- |
-from chrome_remote_control import page_test |
-from chrome_remote_control import util |
-from chrome_remote_control import wpr_modes |
- |
-class PageState(object): |
- def __init__(self): |
- self.did_login = False |
- |
-class PageRunner(object): |
- """Runs a given test against a given test.""" |
- def __init__(self, page_set): |
- self.page_set = page_set |
- |
- def __enter__(self): |
- return self |
- |
- def __exit__(self, *args): |
- self.Close() |
- |
- def _ReorderPageSet(self, test_shuffle_order_file): |
- page_set_dict = {} |
- for page in self.page_set: |
- page_set_dict[page.url] = page |
- |
- self.page_set.pages = [] |
- with open(test_shuffle_order_file, 'rb') as csv_file: |
- csv_reader = csv.reader(csv_file) |
- csv_header = csv_reader.next() |
- |
- if 'url' not in csv_header: |
- raise Exception('Unusable test_shuffle_order_file.') |
- |
- url_index = csv_header.index('url') |
- |
- for csv_row in csv_reader: |
- if csv_row[url_index] in page_set_dict: |
- self.page_set.pages.append(page_set_dict[csv_row[url_index]]) |
- else: |
- raise Exception('Unusable test_shuffle_order_file.') |
- |
- def Run(self, options, possible_browser, test, results): |
- archive_path = os.path.abspath(os.path.join(self.page_set.base_dir, |
- self.page_set.archive_path)) |
- if options.wpr_mode == wpr_modes.WPR_OFF: |
- if os.path.isfile(archive_path): |
- possible_browser.options.wpr_mode = wpr_modes.WPR_REPLAY |
- else: |
- possible_browser.options.wpr_mode = wpr_modes.WPR_OFF |
- if not self.page_set.ContainsOnlyFileURLs(): |
- logging.warning(""" |
-The page set archive %s does not exist, benchmarking against live sites! |
-Results won't be repeatable or comparable. |
- |
-To fix this, either add svn-internal to your .gclient using |
-http://goto/read-src-internal, or create a new archive using --record. |
-""", os.path.relpath(archive_path)) |
- |
- credentials_path = None |
- if self.page_set.credentials_path: |
- credentials_path = os.path.join(self.page_set.base_dir, |
- self.page_set.credentials_path) |
- if not os.path.exists(credentials_path): |
- credentials_path = None |
- |
- with possible_browser.Create() as b: |
- b.credentials.credentials_path = credentials_path |
- test.SetUpBrowser(b) |
- |
- b.credentials.WarnIfMissingCredentials(self.page_set) |
- |
- if not options.test_shuffle and options.test_shuffle_order_file is not\ |
- None: |
- raise Exception('--test-shuffle-order-file requires --test-shuffle.') |
- |
- # Set up a random generator for shuffling the page running order. |
- test_random = random.Random() |
- |
- b.SetReplayArchivePath(archive_path) |
- with b.ConnectToNthTab(0) as tab: |
- if options.test_shuffle_order_file is None: |
- for _ in range(int(options.pageset_repeat)): |
- if options.test_shuffle: |
- test_random.shuffle(self.page_set) |
- for page in self.page_set: |
- for _ in range(int(options.page_repeat)): |
- self._RunPage(options, page, tab, test, results) |
- else: |
- self._ReorderPageSet(options.test_shuffle_order_file) |
- for page in self.page_set: |
- self._RunPage(options, page, tab, test, results) |
- |
- def _RunPage(self, options, page, tab, test, results): |
- logging.info('Running %s' % page.url) |
- |
- page_state = PageState() |
- try: |
- did_prepare = self.PreparePage(page, tab, page_state, results) |
- except Exception, ex: |
- logging.error('Unexpected failure while running %s: %s', |
- page.url, traceback.format_exc()) |
- self.CleanUpPage(page, tab, page_state) |
- raise |
- |
- if not did_prepare: |
- self.CleanUpPage(page, tab, page_state) |
- return |
- |
- try: |
- test.Run(options, page, tab, results) |
- except page_test.Failure, ex: |
- logging.info('%s: %s', ex, page.url) |
- results.AddFailure(page, ex, traceback.format_exc()) |
- return |
- except util.TimeoutException, ex: |
- logging.warning('Timed out while running %s', page.url) |
- results.AddFailure(page, ex, traceback.format_exc()) |
- return |
- except Exception, ex: |
- logging.error('Unexpected failure while running %s: %s', |
- page.url, traceback.format_exc()) |
- raise |
- finally: |
- self.CleanUpPage(page, tab, page_state) |
- |
- def Close(self): |
- pass |
- |
- @staticmethod |
- def WaitForPageToLoad(expression, tab): |
- def IsPageLoaded(): |
- return tab.runtime.Evaluate(expression) |
- |
- # Wait until the form is submitted and the page completes loading. |
- util.WaitFor(lambda: IsPageLoaded(), 60) # pylint: disable=W0108 |
- |
- def PreparePage(self, page, tab, page_state, results): |
- parsed_url = urlparse.urlparse(page.url) |
- if parsed_url[0] == 'file': |
- path = os.path.join(self.page_set.base_dir, |
- parsed_url.netloc, |
- parsed_url.path) # pylint: disable=E1101 |
- dirname, filename = os.path.split(path) |
- tab.browser.SetHTTPServerDirectory(dirname) |
- target_side_url = tab.browser.http_server.UrlOf(filename) |
- else: |
- target_side_url = page.url |
- |
- if page.credentials: |
- page_state.did_login = tab.browser.credentials.LoginNeeded( |
- tab, page.credentials) |
- if not page_state.did_login: |
- msg = 'Could not login to %s on %s' % (page.credentials, |
- target_side_url) |
- logging.info(msg) |
- results.AddFailure(page, msg, "") |
- return False |
- |
- tab.page.Navigate(target_side_url) |
- |
- # Wait for unpredictable redirects. |
- if page.wait_time_after_navigate: |
- time.sleep(page.wait_time_after_navigate) |
- if page.wait_for_javascript_expression is not None: |
- self.WaitForPageToLoad(page.wait_for_javascript_expression, tab) |
- |
- tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() |
- return True |
- |
- def CleanUpPage(self, page, tab, page_state): # pylint: disable=R0201 |
- if page.credentials and page_state.did_login: |
- tab.browser.credentials.LoginNoLongerNeeded(tab, page.credentials) |
- tab.runtime.Evaluate("""window.chrome && chrome.benchmarking && |
- chrome.benchmarking.closeConnections()""") |