summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorariblue <ariblue@google.com>2015-01-15 18:58:36 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-16 02:59:51 +0000
commit9f3f53769cafb2be799ca20b1dd8f22bbcbe6b5c (patch)
tree1328d854980efeef5f02f4a2a2903f086d5eed6e
parent40b00af6dafc68f032fae4b2249b776eff307ead (diff)
downloadchromium_src-9f3f53769cafb2be799ca20b1dd8f22bbcbe6b5c.zip
chromium_src-9f3f53769cafb2be799ca20b1dd8f22bbcbe6b5c.tar.gz
chromium_src-9f3f53769cafb2be799ca20b1dd8f22bbcbe6b5c.tar.bz2
LocalServerController currently has a dependency on browser_backend. We
want to instead depend on platform_backend. To remedy this, we move the forwarder_factory property and GetRemotePort() function from browser_backends to the corresponding platform_backends. BUG=423962 Review URL: https://codereview.chromium.org/814123004 Cr-Commit-Position: refs/heads/master@{#311825}
-rw-r--r--tools/telemetry/telemetry/core/backends/browser_backend.py11
-rw-r--r--tools/telemetry/telemetry/core/backends/chrome/android_browser_backend.py14
-rw-r--r--tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py5
-rw-r--r--tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend_unittest.py12
-rw-r--r--tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py13
-rw-r--r--tools/telemetry/telemetry/core/browser.py3
-rw-r--r--tools/telemetry/telemetry/core/local_server.py10
-rw-r--r--tools/telemetry/telemetry/core/platform/android_platform_backend.py15
-rw-r--r--tools/telemetry/telemetry/core/platform/cros_platform_backend.py12
-rw-r--r--tools/telemetry/telemetry/core/platform/network_controller_backend.py6
-rw-r--r--tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py5
-rw-r--r--tools/telemetry/telemetry/core/platform/platform_backend.py11
12 files changed, 69 insertions, 48 deletions
diff --git a/tools/telemetry/telemetry/core/backends/browser_backend.py b/tools/telemetry/telemetry/core/backends/browser_backend.py
index 9beaf02..8c3d21f 100644
--- a/tools/telemetry/telemetry/core/backends/browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/browser_backend.py
@@ -6,7 +6,6 @@ from telemetry import decorators
from telemetry.core import platform
from telemetry.core import web_contents
from telemetry.core.backends import app_backend
-from telemetry.core.forwarders import do_nothing_forwarder
class ExtensionsNotSupportedException(Exception):
@@ -24,7 +23,6 @@ class BrowserBackend(app_backend.AppBackend):
self._supports_extensions = supports_extensions
self.browser_options = browser_options
self._tab_list_backend_class = tab_list_backend
- self._forwarder_factory = None
def SetBrowser(self, browser):
super(BrowserBackend, self).SetApp(app=browser)
@@ -71,12 +69,6 @@ class BrowserBackend(app_backend.AppBackend):
def supports_system_info(self):
return False
- @property
- def forwarder_factory(self):
- if not self._forwarder_factory:
- self._forwarder_factory = do_nothing_forwarder.DoNothingForwarderFactory()
- return self._forwarder_factory
-
def StartTracing(self, trace_options, custom_categories=None,
timeout=web_contents.DEFAULT_WEB_CONTENTS_TIMEOUT):
raise NotImplementedError()
@@ -84,9 +76,6 @@ class BrowserBackend(app_backend.AppBackend):
def StopTracing(self, trace_data_builder):
raise NotImplementedError()
- def GetRemotePort(self, port):
- return port
-
def Start(self):
raise NotImplementedError()
diff --git a/tools/telemetry/telemetry/core/backends/chrome/android_browser_backend.py b/tools/telemetry/telemetry/core/backends/chrome/android_browser_backend.py
index d6841b4..9170014 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/android_browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/android_browser_backend.py
@@ -16,7 +16,6 @@ from telemetry.core.backends import browser_backend
from telemetry.core.backends.chrome import chrome_browser_backend
from telemetry.core.platform import android_platform_backend as \
android_platform_backend_module
-from telemetry.core.forwarders import android_forwarder
util.AddDirToPythonPath(util.GetChromiumSrcDir(), 'build', 'android')
from pylib.device import device_errors # pylint: disable=F0401
@@ -65,8 +64,10 @@ class AndroidBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
self._backend_settings.package,
self._backend_settings.profile_ignore_list)
- self._forwarder_factory = android_forwarder.AndroidForwarderFactory(
- self._adb, use_rndis_forwarder)
+ # Configure platform to use the rndis forwarder.
+ # TODO(ariblue): Move this setting out of a browser-specific path, since
+ # apps may want to use the forwarder, as well.
+ self._platform_backend.SetRndisForwarder(use_rndis_forwarder)
if self.browser_options.netsim or use_rndis_forwarder:
assert use_rndis_forwarder, 'Netsim requires RNDIS forwarding.'
@@ -137,10 +138,6 @@ class AndroidBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
return args
@property
- def forwarder_factory(self):
- return self._forwarder_factory
-
- @property
def adb(self):
return self._adb
@@ -184,9 +181,6 @@ class AndroidBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
def IsBrowserRunning(self):
return self.platform_backend.IsAppRunning(self._backend_settings.package)
- def GetRemotePort(self, local_port):
- return local_port
-
def GetStandardOutput(self):
return self.platform_backend.GetStandardOutput()
diff --git a/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py b/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py
index 0acb6846..892a1fe 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend.py
@@ -134,7 +134,7 @@ class ChromeBrowserBackend(browser_backend.BrowserBackend):
def _UseHostResolverRules(self):
"""Returns True to add --host-resolver-rules to send requests to replay."""
- if self.forwarder_factory.does_forwarder_override_dns:
+ if self._platform_backend.forwarder_factory.does_forwarder_override_dns:
# Avoid --host-resolver-rules when the forwarder will map DNS requests
# from the target platform to replay (on the host platform).
# This allows the browser to exercise DNS requests.
@@ -155,8 +155,9 @@ class ChromeBrowserBackend(browser_backend.BrowserBackend):
# and installed a root certificate.
replay_args.append('--ignore-certificate-errors')
if self._UseHostResolverRules():
+ # Force hostnames to resolve to the replay's host_ip.
replay_args.append('--host-resolver-rules=MAP * %s,EXCLUDE localhost' %
- self.forwarder_factory.host_ip) # replay's host_ip
+ self._platform_backend.forwarder_factory.host_ip)
# Force the browser to send HTTP/HTTPS requests to fixed ports if they
# are not the standard HTTP/HTTPS ports.
http_port = self.platform_backend.wpr_http_device_port
diff --git a/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend_unittest.py b/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend_unittest.py
index baed651..98ccb81 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend_unittest.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/chrome_browser_backend_unittest.py
@@ -10,11 +10,17 @@ from telemetry.core.backends.chrome import chrome_browser_backend
class FakePlatformBackend(object):
def __init__(self, wpr_http_device_port, wpr_https_device_port,
- is_host_platform):
+ is_host_platform, does_forwarder_override_dns):
self.wpr_http_device_port = wpr_http_device_port
self.wpr_https_device_port = wpr_https_device_port
+ self.does_forwarder_override_dns = does_forwarder_override_dns
self.is_host_platform = is_host_platform
+ @property
+ def forwarder_factory(self):
+ return FakeForwarderFactory(self.does_forwarder_override_dns)
+
+
class FakeBrowserOptions(object):
def __init__(self, netsim=False, wpr_mode=wpr_modes.WPR_OFF):
self.netsim = netsim
@@ -38,13 +44,13 @@ class TestChromeBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
is_running_locally=False):
super(TestChromeBrowserBackend, self).__init__(
platform_backend=FakePlatformBackend(
- wpr_http_device_port, wpr_https_device_port, is_running_locally),
+ wpr_http_device_port, wpr_https_device_port, is_running_locally,
+ does_forwarder_override_dns),
supports_tab_control=False,
supports_extensions=False,
browser_options=browser_options,
output_profile_path=None,
extensions_to_load=None)
- self._forwarder_factory = FakeForwarderFactory(does_forwarder_override_dns)
class ReplayStartupArgsTest(unittest.TestCase):
diff --git a/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py b/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py
index a796642..25ec3cd 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py
@@ -11,7 +11,6 @@ from telemetry.core import forwarders
from telemetry.core import util
from telemetry.core.backends.chrome import chrome_browser_backend
from telemetry.core.backends.chrome import misc_web_contents_backend
-from telemetry.core.forwarders import cros_forwarder
class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
@@ -99,11 +98,6 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
def profile_directory(self):
return '/home/chronos/Default'
- def GetRemotePort(self, port):
- if self._cri.local:
- return port
- return self._cri.GetRemotePort()
-
def __del__(self):
self.Close()
@@ -124,7 +118,7 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
if not self._cri.local:
self._port = util.GetUnreservedAvailableLocalPort()
- self._forwarder = self.forwarder_factory.Create(
+ self._forwarder = self._platform_backend.forwarder_factory.Create(
forwarders.PortPairs(
http=forwarders.PortPair(self._port, self._remote_debugging_port),
https=None,
@@ -174,11 +168,6 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
self._cri = None
- @property
- @decorators.Cache
- def forwarder_factory(self):
- return cros_forwarder.CrOsForwarderFactory(self._cri)
-
def IsBrowserRunning(self):
return bool(self.pid)
diff --git a/tools/telemetry/telemetry/core/browser.py b/tools/telemetry/telemetry/core/browser.py
index 85fde00..f7fc56f 100644
--- a/tools/telemetry/telemetry/core/browser.py
+++ b/tools/telemetry/telemetry/core/browser.py
@@ -31,7 +31,8 @@ class Browser(app.App):
platform_backend=platform_backend)
self._browser_backend = backend
self._platform_backend = platform_backend
- self._local_server_controller = local_server.LocalServerController(backend)
+ self._local_server_controller = local_server.LocalServerController(
+ platform_backend)
self._tabs = tab_list.TabList(backend.tab_list_backend)
self.credentials = browser_credentials.BrowserCredentials()
self.credentials.credentials_path = credentials_path
diff --git a/tools/telemetry/telemetry/core/local_server.py b/tools/telemetry/telemetry/core/local_server.py
index dae351f..131d7e2 100644
--- a/tools/telemetry/telemetry/core/local_server.py
+++ b/tools/telemetry/telemetry/core/local_server.py
@@ -138,10 +138,10 @@ class LocalServerController(object):
to prevent LocalServer subclasses from accessing the browser backend directly.
"""
- def __init__(self, browser_backend):
- self._browser_backend = browser_backend
+ def __init__(self, platform_backend):
+ self._platform_backend = platform_backend
self._local_servers_by_class = {}
- self.host_ip = self._browser_backend.forwarder_factory.host_ip
+ self.host_ip = self._platform_backend.forwarder_factory.host_ip
def StartServer(self, server):
assert not server.is_running, 'Server already started'
@@ -171,10 +171,10 @@ class LocalServerController(object):
traceback.print_exc()
def CreateForwarder(self, port_pairs):
- return self._browser_backend.forwarder_factory.Create(port_pairs)
+ return self._platform_backend.forwarder_factory.Create(port_pairs)
def GetRemotePort(self, port):
- return self._browser_backend.GetRemotePort(port)
+ return self._platform_backend.GetRemotePort(port)
def ServerDidClose(self, server):
del self._local_servers_by_class[server.__class__]
diff --git a/tools/telemetry/telemetry/core/platform/android_platform_backend.py b/tools/telemetry/telemetry/core/platform/android_platform_backend.py
index 69ceb6a..f8e8251 100644
--- a/tools/telemetry/telemetry/core/platform/android_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/android_platform_backend.py
@@ -15,6 +15,7 @@ from telemetry.core import exceptions
from telemetry.core import util
from telemetry.core import video
from telemetry.core.backends import adb_commands
+from telemetry.core.forwarders import android_forwarder
from telemetry.core.platform import android_device
from telemetry.core.platform import android_platform
from telemetry.core.platform import linux_based_platform_backend
@@ -89,6 +90,7 @@ class AndroidPlatformBackend(
self._wpr_ca_cert_path = None
self._device_cert_util = None
self._is_test_ca_installed = False
+ self._use_rndis_forwarder = False
_FixPossibleAdbInstability()
@@ -102,6 +104,19 @@ class AndroidPlatformBackend(
return android_platform.AndroidPlatform(AndroidPlatformBackend(device))
@property
+ def forwarder_factory(self):
+ if not self._forwarder_factory:
+ self._forwarder_factory = android_forwarder.AndroidForwarderFactory(
+ self._adb, self._use_rndis_forwarder)
+
+ return self._forwarder_factory
+
+ def SetRndisForwarder(self, use_rndis_forwarder):
+ assert self._forwarder_factory is None, (
+ 'Cannot switch to use rndis forwarding after forwarder is created.')
+ self._use_rndis_forwarder = use_rndis_forwarder
+
+ @property
def adb(self):
return self._adb
diff --git a/tools/telemetry/telemetry/core/platform/cros_platform_backend.py b/tools/telemetry/telemetry/core/platform/cros_platform_backend.py
index 6dfa7b5..32da60d 100644
--- a/tools/telemetry/telemetry/core/platform/cros_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/cros_platform_backend.py
@@ -4,6 +4,7 @@
from telemetry.core import platform
from telemetry.core import util
+from telemetry.core.forwarders import cros_forwarder
from telemetry.core.platform import cros_device
from telemetry.core.platform import cros_interface
from telemetry.core.platform import linux_based_platform_backend
@@ -40,6 +41,17 @@ class CrosPlatformBackend(
def cri(self):
return self._cri
+ @property
+ def forwarder_factory(self):
+ if not self._forwarder_factory:
+ self._forwarder_factory = cros_forwarder.CrOsForwarderFactory(self._cri)
+ return self._forwarder_factory
+
+ def GetRemotePort(self, port):
+ if self._cri.local:
+ return port
+ return self._cri.GetRemotePort()
+
def IsThermallyThrottled(self):
raise NotImplementedError()
diff --git a/tools/telemetry/telemetry/core/platform/network_controller_backend.py b/tools/telemetry/telemetry/core/platform/network_controller_backend.py
index d4f8aab..24b6042 100644
--- a/tools/telemetry/telemetry/core/platform/network_controller_backend.py
+++ b/tools/telemetry/telemetry/core/platform/network_controller_backend.py
@@ -75,7 +75,7 @@ class NetworkControllerBackend(object):
TODO(slamm): Update replay in SetReplayArgs once the browser_backend
dependencies move to platform. https://crbug.com/423962
browser_backend properties used:
- - Input: forwarder_factory, wpr_port_pairs
+ - Input: wpr_port_pairs
- Output: wpr_port_pairs (browser uses for --testing-fixed-* flags).
Args:
browser_backend: instance of telemetry.core.backends.browser_backend
@@ -129,12 +129,12 @@ class NetworkControllerBackend(object):
wpr_mode, netsim, extra_wpr_args, make_javascript_deterministic,
self._platform_backend.wpr_ca_cert_path)
self._wpr_server = self._ReplayServer(
- archive_path, self._browser_backend.forwarder_factory.host_ip,
+ archive_path, self._platform_backend.forwarder_factory.host_ip,
wpr_http_port, wpr_https_port, wpr_dns_port, wpr_args)
started_ports = self._wpr_server.StartServer()
if not self._forwarder:
- self._forwarder = self._browser_backend.forwarder_factory.Create(
+ self._forwarder = self._platform_backend.forwarder_factory.Create(
_ForwarderPortPairs(started_ports, wpr_port_pairs))
self._active_replay_args = self._pending_replay_args
diff --git a/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py b/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py
index 6d029ef..504ba33 100644
--- a/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py
+++ b/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py
@@ -15,6 +15,10 @@ class FakePlatformBackend(object):
def wpr_ca_cert_path(self):
return None
+ @property
+ def forwarder_factory(self):
+ return FakeForwarderFactory()
+
class FakeForwarderFactory(object):
def __init__(self):
@@ -31,7 +35,6 @@ class FakeBrowserBackend(object):
http=forwarders.PortPair(*http_ports),
https=forwarders.PortPair(*https_ports),
dns=forwarders.PortPair(*dns_ports) if dns_ports else None)
- self.forwarder_factory = FakeForwarderFactory()
class FakeReplayServer(object):
diff --git a/tools/telemetry/telemetry/core/platform/platform_backend.py b/tools/telemetry/telemetry/core/platform/platform_backend.py
index 1ffc52d..4cf7e3a 100644
--- a/tools/telemetry/telemetry/core/platform/platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/platform_backend.py
@@ -4,6 +4,7 @@
import weakref
+from telemetry.core.forwarders import do_nothing_forwarder
from telemetry.core.platform import network_controller_backend
from telemetry.core.platform import profiling_controller_backend
from telemetry.core.platform import tracing_controller_backend
@@ -66,6 +67,7 @@ class PlatformBackend(object):
tracing_controller_backend.TracingControllerBackend(self))
self._profiling_controller_backend = (
profiling_controller_backend.ProfilingControllerBackend(self))
+ self._forwarder_factory = None
@classmethod
def IsPlatformBackendForHost(cls):
@@ -111,6 +113,15 @@ class PlatformBackend(object):
def profiling_controller_backend(self):
return self._profiling_controller_backend
+ @property
+ def forwarder_factory(self):
+ if not self._forwarder_factory:
+ self._forwarder_factory = do_nothing_forwarder.DoNothingForwarderFactory()
+ return self._forwarder_factory
+
+ def GetRemotePort(self, port):
+ return port
+
def DidCreateBrowser(self, browser, browser_backend):
self.SetFullPerformanceModeEnabled(True)