diff options
author | ariblue <ariblue@google.com> | 2015-01-15 18:58:36 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-16 02:59:51 +0000 |
commit | 9f3f53769cafb2be799ca20b1dd8f22bbcbe6b5c (patch) | |
tree | 1328d854980efeef5f02f4a2a2903f086d5eed6e | |
parent | 40b00af6dafc68f032fae4b2249b776eff307ead (diff) | |
download | chromium_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}
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) |