blob: 1be4ee23a899a3c8b25ce4692406a3d59f046c1a [file] [log] [blame]
# Copyright 2015 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.
from page_sets.login_helpers import login_utils
from telemetry.core import util
from telemetry.page import action_runner as action_runner_module
def GetGaiaContext(tab):
"""Returns Gaia's login page context."""
for context in tab.GetWebviewContexts():
if context.GetUrl().startswith('https://accounts.google.com/'):
return context
return None
def LoginChromeAccount(action_runner, credential,
credentials_path=login_utils.DEFAULT_CREDENTIAL_PATH):
"""Logs in a Gaia account into Chrome.
This function navigates the tab into Chrome's login page and logs in a user
using credentials in |credential| part of the |credentials_path| file.
Args:
action_runner: Action runner responsible for running actions on the page.
credential: The credential to retrieve from the credentials file
(type string).
credentials_path: The string that specifies the path to credential file.
Raises:
exceptions.Error: See GetWebviewContexts() and ExecuteJavaScript()
for a detailed list of possible exceptions.
"""
account_name, password = login_utils.GetAccountNameAndPassword(
credential, credentials_path=credentials_path)
action_runner.Navigate('chrome://chrome-signin')
# Get the Gaia webview context within the sign in extension to create a Gaia
# action_runner. The action runner will then execute JS in the Gaia context.
gaia_context = util.WaitFor(lambda: GetGaiaContext(action_runner.tab), 5)
if not gaia_context:
raise RuntimeError('Can not find GAIA webview context for sign in.')
gaia_action_runner = action_runner_module.ActionRunner(gaia_context)
new_flow = gaia_action_runner.EvaluateJavaScript2(
'document.querySelector("#gaia_firsform") != null')
gaia_form_id = 'gaia_firstform' if new_flow else 'gaia_loginform'
login_utils.InputForm(gaia_action_runner, account_name, input_id='Email',
form_id=gaia_form_id)
if new_flow:
gaia_action_runner.ClickElement(selector='#%s #next' % gaia_form_id)
login_utils.InputForm(gaia_action_runner, password, input_id='Passwd',
form_id=gaia_form_id)
gaia_action_runner.ClickElement(selector='#signIn')
action_runner.WaitForNavigate()