2eba69ce7ff5972bb5a6b85bed8440a2de148c0a
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / chrome / oobe.py
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import logging
6
7 from telemetry.core import exceptions
8 from telemetry.core import util
9 from telemetry.core import web_contents
10
11
12 class Oobe(web_contents.WebContents):
13   def __init__(self, inspector_backend, backend_list):
14     super(Oobe, self).__init__(inspector_backend, backend_list)
15
16   def _GaiaLoginContext(self):
17     max_context_id = self.EnableAllContexts()
18     logging.debug('%d contexts in Gaia page' % max_context_id)
19     for gaia_context in range(max_context_id + 1):
20       try:
21         if self.EvaluateJavaScriptInContext(
22             "document.readyState == 'complete' && "
23             "document.getElementById('Email') != null",
24             gaia_context):
25           return gaia_context
26       except exceptions.EvaluateException:
27         pass
28     return None
29
30   def _ExecuteOobeApi(self, api, *args):
31     logging.info('Invoking %s' % api)
32     self.WaitForJavaScriptExpression("typeof Oobe == 'function'", 20)
33
34     if self.EvaluateJavaScript("typeof %s == 'undefined'" % api):
35       raise exceptions.LoginException('%s js api missing' % api)
36
37     js = api + '(' + ("'%s'," * len(args)).rstrip(',') + ');'
38     self.ExecuteJavaScript(js % args)
39
40   def NavigateGuestLogin(self):
41     """Logs in as guest."""
42     self._ExecuteOobeApi('Oobe.guestLoginForTesting')
43
44   def NavigateFakeLogin(self, username, password):
45     """Fake user login."""
46     self._ExecuteOobeApi('Oobe.loginForTesting', username, password)
47
48   def NavigateGaiaLogin(self, username, password):
49     """Logs in to GAIA with provided credentials."""
50     self._ExecuteOobeApi('Oobe.addUserForTesting')
51
52     gaia_context = util.WaitFor(self._GaiaLoginContext, timeout=30)
53
54     self.ExecuteJavaScriptInContext("""
55         document.getElementById('Email').value='%s';
56         document.getElementById('Passwd').value='%s';
57         document.getElementById('signIn').click();"""
58             % (username, password),
59         gaia_context)