| Index: telemetry/telemetry/internal/backends/chrome/cros_browser_backend.py
|
| diff --git a/telemetry/telemetry/internal/backends/chrome/cros_browser_backend.py b/telemetry/telemetry/internal/backends/chrome/cros_browser_backend.py
|
| index 07c5af041c6e3c7060b2ea0401a04803c26039f1..1f200bad0ddbc39e665dcf33c761cb949bae34d9 100644
|
| --- a/telemetry/telemetry/internal/backends/chrome/cros_browser_backend.py
|
| +++ b/telemetry/telemetry/internal/backends/chrome/cros_browser_backend.py
|
| @@ -6,11 +6,9 @@ import logging
|
| import os
|
|
|
| from telemetry.core import exceptions
|
| -from telemetry.core import util
|
| from telemetry import decorators
|
| from telemetry.internal.backends.chrome import chrome_browser_backend
|
| from telemetry.internal.backends.chrome import misc_web_contents_backend
|
| -from telemetry.internal import forwarders
|
|
|
| import py_utils
|
|
|
| @@ -25,9 +23,8 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
|
| # Initialize fields so that an explosion during init doesn't break in Close.
|
| self._cri = cri
|
| self._is_guest = is_guest
|
| - self._forwarder = None
|
| - self._remote_debugging_port = self._cri.GetRemotePort()
|
| - self._port = self._remote_debugging_port
|
| + self._port = None
|
| + self._browser_target = None
|
|
|
| extensions_to_load = browser_options.extensions_to_load
|
|
|
| @@ -53,6 +50,33 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
|
| def log_file_path(self):
|
| return None
|
|
|
| + def HasBrowserFinishedLaunching(self):
|
| + # Start DevTools on an ephemeral port and wait for the well-known file
|
| + # containing the port number to exist.
|
| + port_file = os.path.join(self.profile_directory, 'DevToolsActivePort')
|
| + if not os.path.isfile(port_file):
|
| + # File isn't ready yet. Return false. Will retry.
|
| + return False
|
| + # Attempt to avoid reading the file until it's populated.
|
| + got_port = False
|
| + try:
|
| + if os.stat(port_file).st_size > 0:
|
| + with open(port_file) as f:
|
| + port_target = f.read().split('\n')
|
| + self._port = int(port_target[0])
|
| + if len(port_target) > 1 and port_target[1]:
|
| + self._browser_target = port_target[1]
|
| + logging.info('Discovered ephemeral port %s', self._port)
|
| + logging.info('Browser target: %s', self._browser_target)
|
| + got_port = True
|
| + except Exception:
|
| + # Both stat and open can throw exceptions.
|
| + pass
|
| + if not got_port:
|
| + # File isn't ready yet. Return false. Will retry.
|
| + return False
|
| + return super(CrOSBrowserBackend, self).HasBrowserFinishedLaunching()
|
| +
|
| def GetBrowserStartupArgs(self):
|
| args = super(CrOSBrowserBackend, self).GetBrowserStartupArgs()
|
|
|
| @@ -68,7 +92,7 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
|
| '--enable-smooth-scrolling',
|
| '--enable-threaded-compositing',
|
| # Allow devtools to connect to chrome.
|
| - '--remote-debugging-port=%i' % self._remote_debugging_port,
|
| + '--remote-debugging-port=0',
|
| # Open a maximized window.
|
| '--start-maximized',
|
| # Disable system startup sound.
|
| @@ -131,18 +155,10 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
|
| logging.info(' '.join(args))
|
| self._cri.RunCmdOnDevice(args)
|
|
|
| - if not self._cri.local:
|
| - # TODO(crbug.com/404771): Move port forwarding to network_controller.
|
| - self._port = util.GetUnreservedAvailableLocalPort()
|
| - self._forwarder = self._platform_backend.forwarder_factory.Create(
|
| - forwarders.PortPair(self._port, self._remote_debugging_port),
|
| - use_remote_port_forwarding=False)
|
| -
|
| # Wait for new chrome and oobe.
|
| py_utils.WaitFor(lambda: pid != self.pid, 15)
|
| self._WaitForBrowserToComeUp()
|
| - self._InitDevtoolsClientBackend(
|
| - remote_devtools_port=self._remote_debugging_port)
|
| + self._InitDevtoolsClientBackend()
|
| py_utils.WaitFor(lambda: self.oobe_exists, 30)
|
|
|
| if self.browser_options.auto_login:
|
| @@ -186,10 +202,6 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
|
|
|
| py_utils.WaitFor(lambda: not self._IsCryptohomeMounted(), 180)
|
|
|
| - if self._forwarder:
|
| - self._forwarder.Close()
|
| - self._forwarder = None
|
| -
|
| if self._cri:
|
| for e in self._extensions_to_load:
|
| self._cri.RmRF(os.path.dirname(e.local_path))
|
|
|