| Index: tools/telemetry/telemetry/core/backends/form_based_credentials_backend.py
|
| diff --git a/tools/telemetry/telemetry/core/backends/form_based_credentials_backend.py b/tools/telemetry/telemetry/core/backends/form_based_credentials_backend.py
|
| index bb32f32251a3489a3053af0629642ad7fd8b00a9..93c2cc26e5872aea1131869494a5812bb8cfdeff 100644
|
| --- a/tools/telemetry/telemetry/core/backends/form_based_credentials_backend.py
|
| +++ b/tools/telemetry/telemetry/core/backends/form_based_credentials_backend.py
|
| @@ -6,32 +6,12 @@ import logging
|
| from telemetry.core import util
|
|
|
|
|
| -def _WaitForLoginFormToLoad(backend, login_form_id, tab):
|
| - def IsFormLoadedOrAlreadyLoggedIn():
|
| - return (tab.EvaluateJavaScript(
|
| - 'document.querySelector("#%s")!== null' % login_form_id) or
|
| - backend.IsAlreadyLoggedIn(tab))
|
| -
|
| - # Wait until the form is submitted and the page completes loading.
|
| - util.WaitFor(IsFormLoadedOrAlreadyLoggedIn, 60)
|
| -
|
| -def _SubmitFormAndWait(form_id, tab):
|
| - tab.ExecuteJavaScript(
|
| - 'document.getElementById("%s").submit();' % form_id)
|
| -
|
| - def FinishedLoading():
|
| - return not tab.EvaluateJavaScript(
|
| - 'document.querySelector("#%s") !== null' % form_id)
|
| -
|
| - # Wait until the form is submitted and the page completes loading.
|
| - util.WaitFor(FinishedLoading, 60)
|
| -
|
| class FormBasedCredentialsBackend(object):
|
| def __init__(self):
|
| self._logged_in = False
|
|
|
| def IsAlreadyLoggedIn(self, tab):
|
| - raise NotImplementedError()
|
| + return tab.EvaluateJavaScript(self.logged_in_javascript)
|
|
|
| @property
|
| def credentials_type(self):
|
| @@ -46,6 +26,11 @@ class FormBasedCredentialsBackend(object):
|
| raise NotImplementedError()
|
|
|
| @property
|
| + def login_button_javascript(self):
|
| + """Some sites have custom JS to log in."""
|
| + return None
|
| +
|
| + @property
|
| def login_input_id(self):
|
| raise NotImplementedError()
|
|
|
| @@ -53,6 +38,11 @@ class FormBasedCredentialsBackend(object):
|
| def password_input_id(self):
|
| raise NotImplementedError()
|
|
|
| + @property
|
| + def logged_in_javascript(self):
|
| + """Evaluates to true iff already logged in."""
|
| + raise NotImplementedError()
|
| +
|
| def IsLoggedIn(self):
|
| return self._logged_in
|
|
|
| @@ -62,7 +52,31 @@ class FormBasedCredentialsBackend(object):
|
| """
|
| self._logged_in = False
|
|
|
| - def LoginNeeded(self, tab, config):
|
| + def _WaitForLoginState(self, action_runner):
|
| + """Waits until it can detect either the login form, or already logged in."""
|
| + condition = '(document.querySelector("#%s") !== null) || (%s)' % (
|
| + self.login_form_id, self.logged_in_javascript)
|
| + action_runner.WaitForJavaScriptCondition(condition, 60)
|
| +
|
| + def _SubmitLoginFormAndWait(self, action_runner, tab, username, password):
|
| + """Submits the login form and waits for the navigation."""
|
| + tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
|
| + email_id = 'document.querySelector("#%s #%s").value = "%s"; ' % (
|
| + self.login_form_id, self.login_input_id, username)
|
| + password = 'document.querySelector("#%s #%s").value = "%s"; ' % (
|
| + self.login_form_id, self.password_input_id, password)
|
| + tab.ExecuteJavaScript(email_id)
|
| + tab.ExecuteJavaScript(password)
|
| + if self.login_button_javascript:
|
| + tab.ExecuteJavaScript(self.login_button_javascript)
|
| + else:
|
| + tab.ExecuteJavaScript(
|
| + 'document.getElementById("%s").submit();' % self.login_form_id)
|
| + # Wait for the form element to disappear as confirmation of the navigation.
|
| + action_runner.WaitForNavigate()
|
| +
|
| +
|
| + def LoginNeeded(self, tab, action_runner, config):
|
| """Logs in to a test account.
|
|
|
| Raises:
|
| @@ -86,23 +100,14 @@ class FormBasedCredentialsBackend(object):
|
| try:
|
| logging.info('Loading %s...', url)
|
| tab.Navigate(url)
|
| - _WaitForLoginFormToLoad(self, self.login_form_id, tab)
|
| + self._WaitForLoginState(action_runner)
|
|
|
| if self.IsAlreadyLoggedIn(tab):
|
| self._logged_in = True
|
| return True
|
|
|
| - tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
|
| - logging.info('Loaded page: %s', url)
|
| -
|
| - email_id = 'document.querySelector("#%s").%s.value = "%s"; ' % (
|
| - self.login_form_id, self.login_input_id, config['username'])
|
| - password = 'document.querySelector("#%s").%s.value = "%s"; ' % (
|
| - self.login_form_id, self.password_input_id, config['password'])
|
| - tab.ExecuteJavaScript(email_id)
|
| - tab.ExecuteJavaScript(password)
|
| -
|
| - _SubmitFormAndWait(self.login_form_id, tab)
|
| + self._SubmitLoginFormAndWait(
|
| + action_runner, tab, config['username'], config['password'])
|
|
|
| self._logged_in = True
|
| return True
|
|
|