Commit 7e12ca68 authored by slamm's avatar slamm Committed by Commit bot

Drop DidStartHTTPServer to simplify object interactions.

(Will make it easier to move the memory_cache_http_server ownership
from browser to platform.)

The page_cycler measurement was the only customer. This CL includes
an alternate implementation for that.

BUG=404771

Review URL: https://codereview.chromium.org/543243002

Cr-Commit-Position: refs/heads/master@{#294691}
parent e49301cf
......@@ -45,6 +45,7 @@ class PageCycler(page_test.PageTest):
self._cpu_metric = None
self._v8_object_stats_metric = None
self._has_loaded_page = collections.defaultdict(int)
self._initial_renderer_url = None # to avoid cross-renderer navigation
@classmethod
def AddCommandLineArgs(cls, parser):
......@@ -94,12 +95,15 @@ class PageCycler(page_test.PageTest):
if self._record_v8_object_stats:
self._v8_object_stats_metric = v8_object_stats.V8ObjectStatsMetric()
def DidStartHTTPServer(self, tab):
# Avoid paying for a cross-renderer navigation on the first page on legacy
# page cyclers which use the filesystem.
tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html'))
def WillNavigateToPage(self, page, tab):
if page.is_file:
# For legacy page cyclers which use the filesystem, do an initial
# navigate to avoid paying for a cross-renderer navigation.
initial_url = tab.browser.http_server.UrlOf('nonexistent.html')
if self._initial_renderer_url != initial_url:
self._initial_renderer_url = initial_url
tab.Navigate(self._initial_renderer_url)
page.script_to_evaluate_on_commit = self._page_cycler_js
if self.ShouldRunCold(page.url):
tab.ClearCache(force=True)
......
......@@ -38,17 +38,21 @@ class FakePage(object):
"""Used to mock loading a page."""
def __init__(self, url):
self.url = url
self.is_file = url.startswith('file://')
class FakeTab(object):
"""Used to mock a browser tab."""
def __init__(self):
self.clear_cache_calls = 0
self.navigated_urls = []
def ClearCache(self, force=False):
assert force
self.clear_cache_calls += 1
def EvaluateJavaScript(self, _):
return 1
def Navigate(self, url):
self.navigated_urls.append(url)
def WaitForJavaScriptExpression(self, _, __):
pass
@property
......@@ -73,6 +77,13 @@ class FakeBrowser(object):
def platform(self):
return FakePlatform()
@property
def http_server(self):
class FakeHttpServer(object):
def UrlOf(self, url_path):
return 'http://fakeserver:99999/%s' % url_path
return FakeHttpServer()
class FakePlatform(object):
def GetOSName(self):
......@@ -213,3 +224,16 @@ class PageCyclerUnitTest(unittest.TestCase):
self.assertEqual(value.units, '%')
cycler.DidNavigateToPage(page, tab)
def testLegacyPagesAvoidCrossRenderNavigation(self):
# For legacy page cyclers with file URLs, verify that WillNavigateToPage
# does an initial navigate to avoid paying for a cross-renderer navigation.
cycler = self.SetUpCycler([], True)
pages = [FakePage('file://fakepage1.com'), FakePage('file://fakepage2.com')]
tab = FakeTab()
self.assertEqual([], tab.navigated_urls)
for page in pages * 2:
cycler.WillNavigateToPage(page, tab)
self.assertEqual(
['http://fakeserver:99999/nonexistent.html'], tab.navigated_urls)
......@@ -152,10 +152,8 @@ class PageState(object):
def PreparePage(self, test=None):
if self.page.is_file:
server_started = self.tab.browser.SetHTTPServerDirectories(
self.page.page_set.serving_dirs | set([self.page.serving_dir]))
if server_started and test:
test.DidStartHTTPServer(self.tab)
self.tab.browser.SetHTTPServerDirectories(
self.page.page_set.serving_dirs | set([self.page.serving_dir]))
if self.page.credentials:
if not self.tab.browser.credentials.LoginNeeded(
......
......@@ -222,9 +222,6 @@ class PageTest(command_line.Command):
def DidRunPageRepeats(self, page):
"""Override to do operations after each page is iterated over."""
def DidStartHTTPServer(self, tab):
"""Override to do operations after the HTTP server is started."""
def WillNavigateToPage(self, page, tab):
"""Override to do operations before the page is navigated, notably Telemetry
will already have performed the following operations on the browser before
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment