import os
from telemetry import decorators
-
from telemetry.core import exceptions
from telemetry.core import forwarders
from telemetry.core import util
class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
- def __init__(self, browser_type, browser_options, cri, is_guest,
+ def __init__(self, cros_platform_backend, browser_options, cri, is_guest,
extensions_to_load):
super(CrOSBrowserBackend, self).__init__(
- is_content_shell=False, supports_extensions=not is_guest,
+ cros_platform_backend, supports_tab_control=True,
+ supports_extensions=not is_guest,
browser_options=browser_options,
output_profile_path=None, extensions_to_load=extensions_to_load)
# Initialize fields so that an explosion during init doesn't break in Close.
- self._browser_type = browser_type
self._cri = cri
self._is_guest = is_guest
self._forwarder = None
self.wpr_port_pairs = forwarders.PortPairs(
http=forwarders.PortPair(self.wpr_port_pairs.http.local_port,
- self._cri.GetRemotePort()),
+ self.GetRemotePort(
+ self.wpr_port_pairs.http.local_port)),
https=forwarders.PortPair(self.wpr_port_pairs.https.local_port,
- self._cri.GetRemotePort()),
+ self.GetRemotePort(
+ self.wpr_port_pairs.http.local_port)),
dns=None)
self._remote_debugging_port = self._cri.GetRemotePort()
self._port = self._remote_debugging_port
# Note that we also perform this copy locally to ensure that
# the owner of the extensions is set to chronos.
for e in extensions_to_load:
- output = cri.RunCmdOnDevice(['mktemp', '-d', '/tmp/extension_XXXXX'])
- extension_dir = output[0].rstrip()
+ extension_dir = cri.RunCmdOnDevice(
+ ['mktemp', '-d', '/tmp/extension_XXXXX'])[0].rstrip()
cri.PushFile(e.path, extension_dir)
cri.Chown(extension_dir)
e.local_path = os.path.join(extension_dir, os.path.basename(e.path))
self.profile_directory)
cri.Chown(self.profile_directory)
- self._SetBranchNumber(self._GetChromeVersion())
-
def GetBrowserStartupArgs(self):
args = super(CrOSBrowserBackend, self).GetBrowserStartupArgs()
args.extend([
'--enable-smooth-scrolling',
'--enable-threaded-compositing',
'--enable-per-tile-painting',
- '--force-compositing-mode',
- # Disables the start page, as well as other external apps that can
- # steal focus or make measurements inconsistent.
- '--disable-default-apps',
- # Skip user image selection screen, and post login screens.
- '--oobe-skip-postlogin',
# Allow devtools to connect to chrome.
'--remote-debugging-port=%i' % self._remote_debugging_port,
# Open a maximized window.
'--start-maximized',
+ # Skip user image selection screen, and post login screens.
+ '--oobe-skip-postlogin',
# Debug logging.
'--vmodule=*/chromeos/net/*=2,*/chromeos/login/*=2'])
+ # Disables the start page, as well as other external apps that can
+ # steal focus or make measurements inconsistent.
+ if self.browser_options.disable_default_apps:
+ args.append('--disable-default-apps')
+
+ # Disable GAIA services unless we're using GAIA login, or if there's an
+ # explicit request for it.
+ if (self.browser_options.disable_gaia_services and
+ not self.browser_options.gaia_login):
+ args.append('--disable-gaia-services')
+
return args
- def _GetChromeVersion(self):
- result = util.WaitFor(self._cri.GetChromeProcess, timeout=30)
- assert result and result['path']
- (version, _) = self._cri.RunCmdOnDevice([result['path'], '--version'])
- assert version
- return version
+ @property
+ def _use_host_resolver_rules(self):
+ """Always use the --host-resolver-rules Chrome flag; even for netsim."""
+ return True
@property
def pid(self):
https=None,
dns=None), forwarding_flag='L')
- try:
- self._WaitForBrowserToComeUp(wait_for_extensions=False)
- self._PostBrowserStartupInitialization()
- except:
- import traceback
- traceback.print_exc()
- self.Close()
- raise
-
+ # Wait for oobe.
+ self._WaitForBrowserToComeUp(wait_for_extensions=False)
util.WaitFor(lambda: self.oobe_exists, 10)
if self.browser_options.auto_login:
- if self._is_guest:
- pid = self.pid
- self.oobe.NavigateGuestLogin()
- # Guest browsing shuts down the current browser and launches an
- # incognito browser in a separate process, which we need to wait for.
- util.WaitFor(lambda: pid != self.pid, 10)
- elif self.browser_options.gaia_login:
- try:
+ try:
+ if self._is_guest:
+ pid = self.pid
+ self.oobe.NavigateGuestLogin()
+ # Guest browsing shuts down the current browser and launches an
+ # incognito browser in a separate process, which we need to wait for.
+ util.WaitFor(lambda: pid != self.pid, 10)
+ elif self.browser_options.gaia_login:
self.oobe.NavigateGaiaLogin(self._username, self._password)
- except util.TimeoutException:
- self._cri.TakeScreenShot('gaia-login')
- raise
- else:
- self.oobe.NavigateFakeLogin(self._username, self._password)
- self._WaitForLogin()
+ else:
+ self.oobe.NavigateFakeLogin(self._username, self._password)
+ self._WaitForLogin()
+ except util.TimeoutException:
+ self._cri.TakeScreenShot('login-screen')
+ raise exceptions.LoginException('Timed out going through login screen')
logging.info('Browser is up!')
if self._cri:
self._cri.RestartUI(False) # Logs out.
+ self._cri.CloseConnection()
util.WaitFor(lambda: not self._IsCryptohomeMounted(), 30)
not self.oobe_exists)
def _WaitForLogin(self):
- if self._is_guest:
- self._WaitForBrowserToComeUp()
- util.WaitFor(self._IsCryptohomeMounted, 30)
- return
-
- try:
- util.WaitFor(self._IsLoggedIn, 60)
- except util.TimeoutException:
- self._cri.TakeScreenShot('login-screen')
- raise exceptions.LoginException('Timed out going through login screen')
+ # Wait for cryptohome to mount.
+ util.WaitFor(self._IsLoggedIn, 60)
# Wait for extensions to load.
- try:
- self._WaitForBrowserToComeUp()
- except util.TimeoutException:
- logging.error('Chrome args: %s' % self._cri.GetChromeProcess()['args'])
- self._cri.TakeScreenShot('extension-timeout')
- raise
-
- # Workaround for crbug.com/329271, crbug.com/334726.
- retries = 3
- while True:
- try:
- # Open a new window/tab.
- tab = self.tab_list_backend.New(timeout=30)
- tab.Navigate('about:blank', timeout=10)
- break
- except (exceptions.TabCrashException, util.TimeoutException,
- IndexError):
- retries -= 1
- logging.warn('TabCrashException/TimeoutException in '
- 'new tab creation/navigation, '
- 'remaining retries %d' % retries)
- if not retries:
- raise
+ self._WaitForBrowserToComeUp()