diff options
3 files changed, 43 insertions, 8 deletions
diff --git a/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py b/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py index c5adcea..93cf6cc 100644 --- a/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py +++ b/tools/telemetry/telemetry/core/chrome/cros_browser_backend.py @@ -94,7 +94,7 @@ class CrOSBrowserBackend(browser_backend.BrowserBackend): raise if self._is_guest: - cros_util.NavigateGuestLogin(self) + cros_util.NavigateGuestLogin(self, cri) # Guest browsing shuts down the current browser and launches an incognito # browser, which we need to wait for. self._WaitForBrowserToComeUp() diff --git a/tools/telemetry/telemetry/core/chrome/cros_interface.py b/tools/telemetry/telemetry/core/chrome/cros_interface.py index b74e29e..fabd433 100644 --- a/tools/telemetry/telemetry/core/chrome/cros_interface.py +++ b/tools/telemetry/telemetry/core/chrome/cros_interface.py @@ -291,3 +291,14 @@ class CrOSInterface(object): return False return True + + def FilesystemMountedAt(self, path): + """Returns the filesystem mounted at |path|""" + df_out, _ = self.RunCmdOnDevice(['/bin/df', path]) + df_ary = df_out.split('\n') + # 3 lines for title, mount info, and empty line. + if len(df_ary) == 3: + line_ary = df_ary[1].split() + if line_ary: + return line_ary[0] + return None diff --git a/tools/telemetry/telemetry/core/chrome/cros_util.py b/tools/telemetry/telemetry/core/chrome/cros_util.py index f4e1a36..357aa91 100644 --- a/tools/telemetry/telemetry/core/chrome/cros_util.py +++ b/tools/telemetry/telemetry/core/chrome/cros_util.py @@ -5,6 +5,18 @@ from telemetry.core import exceptions from telemetry.core import util +def _SigninUIState(oobe): + """Returns the signin ui state of the oobe. HIDDEN: 0, GAIA_SIGNIN: 1, + ACCOUNT_PICKER: 2, WRONG_HWID_WARNING: 3, MANAGED_USER_CREATION_FLOW: 4. + These values are in chrome/browser/resources/chromeos/login/display_manager.js + """ + return oobe.EvaluateJavaScript(''' + loginHeader = document.getElementById('login-header-bar') + if (loginHeader) { + loginHeader.signinUIState_; + } + ''') + def _WebContentsNotOobe(browser_backend): """Returns true if we're still on the oobe login screen. As a side-effect, clicks the ok button on the user image selection screen.""" @@ -22,10 +34,10 @@ def _WebContentsNotOobe(browser_backend): pass return False -def _ClickBrowseAsGuest(browser_backend): +def _ClickBrowseAsGuest(oobe): + """Click the Browse As Guest button on the account picker screen. This will + restart the browser, and we could have a tab crash or a browser crash.""" try: - oobe = browser_backend.misc_web_contents_backend.GetOobe() - assert oobe oobe.EvaluateJavaScript(""" var guest = document.getElementById("guest-user-button"); if (guest) { @@ -34,8 +46,7 @@ def _ClickBrowseAsGuest(browser_backend): """) except (exceptions.TabCrashException, exceptions.BrowserConnectionGoneException): - return True - return False + pass def _StartupWindow(browser_backend): """Closes the startup window, which is an extension on official builds, @@ -45,9 +56,22 @@ def _StartupWindow(browser_backend): if startup_window_ext_id in browser_backend.extension_dict_backend else browser_backend.tab_list_backend.Get(0, None)) -def NavigateGuestLogin(browser_backend): +def WaitForAccountPicker(oobe): + """Waits for the oobe screen to be in the account picker state.""" + util.WaitFor(lambda: _SigninUIState(oobe) == 2, 20) + +def WaitForGuestFsMounted(cri): + """Waits for /home/chronos/user to be mounted as guestfs""" + util.WaitFor(lambda: (cri.FilesystemMountedAt('/home/chronos/user') == + 'guestfs'), 20) + +def NavigateGuestLogin(browser_backend, cri): """Navigates through oobe login screen as guest""" - util.WaitFor(lambda:_ClickBrowseAsGuest(browser_backend), 25) + oobe = browser_backend.misc_web_contents_backend.GetOobe() + assert oobe + WaitForAccountPicker(oobe) + _ClickBrowseAsGuest(oobe) + WaitForGuestFsMounted(cri) def NavigateLogin(browser_backend): """Navigates through oobe login screen""" |