Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: tools/telemetry/telemetry/cros_browser_backend.py

Issue 12278015: [Telemetry] Reorganize everything. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-add shebangs. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/telemetry/telemetry/core/wpr_server.py ('k') | tools/telemetry/telemetry/cros_browser_finder.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/cros_browser_backend.py
diff --git a/tools/telemetry/telemetry/cros_browser_backend.py b/tools/telemetry/telemetry/cros_browser_backend.py
deleted file mode 100644
index 28b3bceef1759c55b96530e7b9adc8814790cd61..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/cros_browser_backend.py
+++ /dev/null
@@ -1,224 +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 os
-import subprocess
-
-from telemetry import browser_backend
-from telemetry import util
-
-class CrOSBrowserBackend(browser_backend.BrowserBackend):
- def __init__(self, browser_type, options, cri):
- super(CrOSBrowserBackend, self).__init__(is_content_shell=False,
- supports_extensions=True, options=options)
- # Initialize fields so that an explosion during init doesn't break in Close.
- self._options = options
- self._cri = cri
- self._browser_type = browser_type
-
- self._remote_debugging_port = self._cri.GetRemotePort()
- self._login_ext_dir = '/tmp/chromeos_login_ext'
-
- # Ensure the UI is running and logged out.
- self._RestartUI()
-
- # Delete test@test.test's cryptohome vault (user data directory).
- if not options.dont_override_profile:
- logging.info('Deleting user\'s cryptohome vault (the user data dir)')
- self._cri.GetCmdOutput(
- ['cryptohome', '--action=remove', '--force', '--user=test@test.test'])
-
- # Push a dummy login extension to the device.
- # This extension automatically logs in as test@test.test
- logging.info('Copying dummy login extension to the device')
- cri.PushFile(
- os.path.join(os.path.dirname(__file__), 'chromeos_login_ext'), '/tmp/')
- cri.GetCmdOutput(['chown', '-R', 'chronos:chronos', self._login_ext_dir])
-
- # Restart Chrome with the login extension and remote debugging.
- logging.info('Restarting Chrome with flags and login')
- args = ['dbus-send', '--system', '--type=method_call',
- '--dest=org.chromium.SessionManager',
- '/org/chromium/SessionManager',
- 'org.chromium.SessionManagerInterface.EnableChromeTesting',
- 'boolean:true',
- 'array:string:"%s"' % '","'.join(self.GetBrowserStartupArgs())]
- cri.GetCmdOutput(args)
-
- # Find a free local port.
- self._port = util.GetAvailableLocalPort()
-
- # Forward the remote debugging port.
- logging.info('Forwarding remote debugging port')
- self._forwarder = SSHForwarder(
- cri, 'L',
- util.PortPair(self._port, self._remote_debugging_port))
-
- # Wait for the browser to come up.
- logging.info('Waiting for browser to be ready')
- try:
- self._WaitForBrowserToComeUp()
- self._PostBrowserStartupInitialization()
- except:
- import traceback
- traceback.print_exc()
- self.Close()
- raise
-
-
- logging.info('Browser is up!')
-
- def GetBrowserStartupArgs(self):
- self.webpagereplay_remote_http_port = self._cri.GetRemotePort()
- self.webpagereplay_remote_https_port = self._cri.GetRemotePort()
-
- 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',
- '--force-compositing-mode',
- '--remote-debugging-port=%i' % self._remote_debugging_port,
- '--auth-ext-path=%s' % self._login_ext_dir,
- '--start-maximized'])
-
- return args
-
- def GetRemotePort(self, _):
- return self._cri.GetRemotePort()
-
- def SetBrowser(self, browser):
- super(CrOSBrowserBackend, self).SetBrowser(browser)
-
- # TODO(hartmanng): crbug.com/166886 (Remove these temporary hacks when
- # _ListTabs is fixed)
-
- # Wait for the oobe login screen to disappear. Unfortunately, once it does,
- # our TabList needs to be refreshed to point at the new non-login tab.
- tab_url = None
-
- # When tab_url is None, we have to create or refresh the TabList
- # and wait for the oobe login screen to disappear.
- while tab_url is None:
- self._tab_list_backend.Reset()
-
- # Wait for the login screen to disappear. This can cause tab_url to be
- # None or to not be 'chrome://oobe/login'.
- def IsTabNoneOrOobeLogin():
- tab = self._tab_list_backend.Get(0, None)
- if tab is not None:
- tab_url = tab.url
- else:
- return False
- return tab_url is None or tab_url != 'chrome://oobe/login'
-
- # TODO(hartmanng): find a better way to detect the getting started window
- # (crbug.com/171520)
- try:
- util.WaitFor(lambda: IsTabNoneOrOobeLogin(), 20) # pylint: disable=W0108
- except util.TimeoutException:
- break
-
- # Refresh our tab_url variable with the current tab[0].url. If it is None
- # at this point, we need to continue the loop to refresh TabController.
- tab = self._tab_list_backend.Get(0, None)
- if tab is not None:
- tab_url = tab.url
- else:
- tab_url = None
-
- # Once we're sure that the login screen is gone, we can close all open tabs
- # to make sure the first-start window doesn't interfere.
- while len(self._tab_list_backend) > 1:
- tab = self._tab_list_backend.Get(0, None)
- if tab is not None:
- tab.Close()
-
- # Finally open one regular tab. Normally page_runner takes care of this,
- # but page_runner isn't necesarily always used (for example, in some unit
- # tests).
- self._tab_list_backend.New(20)
-
- def __del__(self):
- self.Close()
-
- def Close(self):
- super(CrOSBrowserBackend, self).Close()
-
- self._RestartUI() # Logs out.
-
- if self._forwarder:
- self._forwarder.Close()
- self._forwarder = None
-
- if self._login_ext_dir:
- self._cri.RmRF(self._login_ext_dir)
- self._login_ext_dir = None
-
- self._cri = None
-
- def IsBrowserRunning(self):
- # On ChromeOS, there should always be a browser running.
- for _, process in self._cri.ListProcesses():
- if process.startswith('/opt/google/chrome/chrome'):
- return True
- return False
-
- def GetStandardOutput(self):
- return 'Cannot get standard output on CrOS'
-
- def CreateForwarder(self, *port_pairs):
- assert self._cri
- return SSHForwarder(self._cri, 'R', *port_pairs)
-
- def _RestartUI(self):
- if self._cri:
- logging.info('(Re)starting the ui (logs the user out)')
- if self._cri.IsServiceRunning('ui'):
- self._cri.GetCmdOutput(['restart', 'ui'])
- else:
- self._cri.GetCmdOutput(['start', 'ui'])
-
-
-class SSHForwarder(object):
- def __init__(self, cri, forwarding_flag, *port_pairs):
- self._proc = None
-
- if forwarding_flag == 'R':
- self._host_port = port_pairs[0].remote_port
- command_line = ['-%s%i:localhost:%i' % (forwarding_flag,
- port_pair.remote_port,
- port_pair.local_port)
- for port_pair in port_pairs]
- else:
- self._host_port = port_pairs[0].local_port
- command_line = ['-%s%i:localhost:%i' % (forwarding_flag,
- port_pair.local_port,
- port_pair.remote_port)
- for port_pair in port_pairs]
-
- self._device_port = port_pairs[0].remote_port
-
- self._proc = subprocess.Popen(
- cri.FormSSHCommandLine(['sleep', '999999999'], command_line),
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- stdin=subprocess.PIPE,
- shell=False)
-
- util.WaitFor(lambda: cri.IsHTTPServerRunningOnPort(self._device_port), 60)
-
- @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
« no previous file with comments | « tools/telemetry/telemetry/core/wpr_server.py ('k') | tools/telemetry/telemetry/cros_browser_finder.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698