| Index: tools/chrome_remote_control/chrome_remote_control/cros_browser_backend.py
|
| diff --git a/tools/chrome_remote_control/chrome_remote_control/cros_browser_backend.py b/tools/chrome_remote_control/chrome_remote_control/cros_browser_backend.py
|
| deleted file mode 100644
|
| index 25f02ccd7652b076e4197cbca492f6db5d32b2c7..0000000000000000000000000000000000000000
|
| --- a/tools/chrome_remote_control/chrome_remote_control/cros_browser_backend.py
|
| +++ /dev/null
|
| @@ -1,180 +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 socket
|
| -import subprocess
|
| -import time
|
| -
|
| -from chrome_remote_control import browser_backend
|
| -from chrome_remote_control import cros_interface
|
| -
|
| -class CrOSBrowserBackend(browser_backend.BrowserBackend):
|
| - """The backend for controlling a browser instance running on CrOS.
|
| - """
|
| - def __init__(self, browser_type, options, is_content_shell, cri):
|
| - super(CrOSBrowserBackend, self).__init__(is_content_shell, options)
|
| - # Initialize fields so that an explosion during init doesn't break in Close.
|
| - self._options = options
|
| - assert not is_content_shell
|
| - self._cri = cri
|
| - self._browser_type = browser_type
|
| -
|
| - tmp = socket.socket()
|
| - tmp.bind(('', 0))
|
| - self._port = tmp.getsockname()[1]
|
| - tmp.close()
|
| -
|
| - self._remote_debugging_port = self._cri.GetRemotePort()
|
| - self._tmpdir = None
|
| -
|
| - self._X = None
|
| - self._proc = None
|
| -
|
| - # TODO(nduca): Stop ui if running.
|
| - if self._cri.IsServiceRunning('ui'):
|
| - # Note, if this hangs, its probably because they were using wifi AND they
|
| - # had a user-specific wifi password, which when you stop ui kills the wifi
|
| - # connection.
|
| - logging.debug('stopping ui')
|
| - self._cri.GetCmdOutput(['stop', 'ui'])
|
| -
|
| - # Set up user data dir.
|
| - if not is_content_shell:
|
| - logging.info('Preparing user data dir')
|
| - self._tmpdir = '/tmp/chrome_remote_control'
|
| - if options.dont_override_profile:
|
| - # TODO(nduca): Implement support for this.
|
| - logging.critical('Feature not (yet) implemented.')
|
| -
|
| - # Ensure a clean user_data_dir.
|
| - self._cri.RmRF(self._tmpdir)
|
| -
|
| - # Set startup args.
|
| - args = ['/opt/google/chrome/chrome']
|
| - args.extend(self.GetBrowserStartupArgs())
|
| -
|
| - # Final bits of command line prep.
|
| - def EscapeIfNeeded(arg):
|
| - return arg.replace(' ', '" "')
|
| - args = [EscapeIfNeeded(arg) for arg in args]
|
| - prevent_output = not options.show_stdout
|
| -
|
| - # Stop old X.
|
| - logging.info('Stoppping old X')
|
| - self._cri.KillAllMatching(
|
| - lambda name: name.startswith('/usr/bin/X '))
|
| -
|
| - # Start X.
|
| - logging.info('Starting new X')
|
| - X_args = ['/usr/bin/X',
|
| - '-noreset',
|
| - '-nolisten',
|
| - 'tcp',
|
| - 'vt01',
|
| - '-auth',
|
| - '/var/run/chromelogin.auth']
|
| - self._X = cros_interface.DeviceSideProcess(
|
| - self._cri, X_args, prevent_output=prevent_output)
|
| -
|
| - # Stop old chrome.
|
| - logging.info('Killing old chrome')
|
| - self._cri.KillAllMatching(
|
| - lambda name: name.startswith('/opt/google/chrome/chrome '))
|
| -
|
| - # Start chrome via a bootstrap.
|
| - logging.info('Starting chrome')
|
| - self._proc = cros_interface.DeviceSideProcess(
|
| - self._cri,
|
| - args,
|
| - prevent_output=prevent_output,
|
| - extra_ssh_args=['-L%i:localhost:%i' % (
|
| - self._port, self._remote_debugging_port)],
|
| - leave_ssh_alive=True,
|
| - env={'DISPLAY': ':0',
|
| - 'USER': 'chronos'},
|
| - login_shell=True)
|
| -
|
| - # You're done.
|
| - try:
|
| - self._WaitForBrowserToComeUp()
|
| - except:
|
| - import traceback
|
| - traceback.print_exc()
|
| - self.Close()
|
| - raise
|
| -
|
| - def GetBrowserStartupArgs(self):
|
| - args = super(CrOSBrowserBackend, self).GetBrowserStartupArgs()
|
| -
|
| - args.extend([
|
| - '--allow-webui-compositing',
|
| - '--aura-host-window-use-fullscreen',
|
| - '--enable-smooth-scrolling',
|
| - '--enable-threaded-compositing',
|
| - '--enable-per-tile-painting',
|
| - '--enable-gpu-sandboxing',
|
| - '--enable-accelerated-layers',
|
| - '--force-compositing-mode',
|
| - '--remote-debugging-port=%i' % self._remote_debugging_port,
|
| - '--start-maximized'])
|
| - if not self.is_content_shell:
|
| - args.append('--user-data-dir=%s' % self._tmpdir)
|
| -
|
| - return args
|
| -
|
| - def __del__(self):
|
| - self.Close()
|
| -
|
| - def Close(self):
|
| - if self._proc:
|
| - self._proc.Close()
|
| - self._proc = None
|
| -
|
| - if self._X:
|
| - self._X.Close()
|
| - self._X = None
|
| -
|
| - if self._tmpdir:
|
| - self._cri.RmRF(self._tmpdir)
|
| - self._tmpdir = None
|
| -
|
| - self._cri = None
|
| -
|
| - def IsBrowserRunning(self):
|
| - if not self._proc:
|
| - return False
|
| - return self._proc.IsAlive()
|
| -
|
| - def CreateForwarder(self, *ports):
|
| - assert self._cri
|
| - return SSHReverseForwarder(self._cri, *ports)
|
| -
|
| -
|
| -class SSHReverseForwarder(object):
|
| - def __init__(self, cri, *ports):
|
| - self._proc = None
|
| - self._host_port = ports[0]
|
| -
|
| - self._proc = subprocess.Popen(
|
| - cri.FormSSHCommandLine(['sleep', '99999999999'],
|
| - ['-R%i:localhost:%i' %
|
| - (port, port) for port in ports]),
|
| - stdout=subprocess.PIPE,
|
| - stderr=subprocess.PIPE,
|
| - stdin=subprocess.PIPE,
|
| - shell=False)
|
| -
|
| - # TODO(nduca): How do we wait for the server to come up in a
|
| - # robust way?
|
| - time.sleep(1.5)
|
| -
|
| - @property
|
| - def url(self):
|
| - assert self._proc
|
| - return 'http://localhost:%i' % self._host_port
|
| -
|
| - def Close(self):
|
| - if self._proc:
|
| - self._proc.kill()
|
| - self._proc = None
|
|
|