summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/telemetry/telemetry/core/chrome/cros_browser_backend.py2
-rw-r--r--tools/telemetry/telemetry/core/chrome/cros_interface.py11
-rw-r--r--tools/telemetry/telemetry/core/chrome/cros_util.py38
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"""