Commit 39565398 authored by achuith@chromium.org's avatar achuith@chromium.org

Fix navigation of chrome://oobe/login.

* Introduce MiscWebContentsBackend for chrome://oobe/login.
* Fix navigation of chrome://oobe/login by using misc_web_contents_backend instead of tab_list_backend.

BUG=228970
TEST=unit tests.

Review URL: https://codereview.chromium.org/13836002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194992 0039d316-1c4b-4281-b951-d872f2087c98
parent 0b4959a2
...@@ -17,6 +17,7 @@ from telemetry.core import wpr_server ...@@ -17,6 +17,7 @@ from telemetry.core import wpr_server
from telemetry.core.chrome import extension_dict_backend from telemetry.core.chrome import extension_dict_backend
from telemetry.core.chrome import tab_list_backend from telemetry.core.chrome import tab_list_backend
from telemetry.core.chrome import tracing_backend from telemetry.core.chrome import tracing_backend
from telemetry.core.chrome import misc_web_contents_backend
from telemetry.test import options_for_unittests from telemetry.test import options_for_unittests
class ExtensionsNotSupportedException(Exception): class ExtensionsNotSupportedException(Exception):
...@@ -51,11 +52,13 @@ class BrowserBackend(object): ...@@ -51,11 +52,13 @@ class BrowserBackend(object):
'unexpected effects due to profile-specific settings, ' 'unexpected effects due to profile-specific settings, '
'such as about:flags settings, cookies, and ' 'such as about:flags settings, cookies, and '
'extensions.\n') 'extensions.\n')
self._misc_web_contents_backend = (
misc_web_contents_backend.MiscWebContentsBackend(self))
self._tab_list_backend = tab_list_backend.TabListBackend(self) self._tab_list_backend = tab_list_backend.TabListBackend(self)
self._extension_dict_backend = None self._extension_dict_backend = None
if supports_extensions: if supports_extensions:
self._extension_dict_backend = \ self._extension_dict_backend = (
extension_dict_backend.ExtensionDictBackend(self) extension_dict_backend.ExtensionDictBackend(self))
def SetBrowser(self, browser): def SetBrowser(self, browser):
self._browser = browser self._browser = browser
...@@ -70,6 +73,12 @@ class BrowserBackend(object): ...@@ -70,6 +73,12 @@ class BrowserBackend(object):
"""True if this browser backend supports extensions.""" """True if this browser backend supports extensions."""
return self._supports_extensions return self._supports_extensions
@property
def misc_web_contents_backend(self):
"""Access to chrome://oobe/login page which is neither a tab nor an
extension."""
return self._misc_web_contents_backend
@property @property
def tab_list_backend(self): def tab_list_backend(self):
return self._tab_list_backend return self._tab_list_backend
......
...@@ -5,14 +5,14 @@ ...@@ -5,14 +5,14 @@
from telemetry.core import exceptions from telemetry.core import exceptions
from telemetry.core import util from telemetry.core import util
def _TabNotOobeScreen(browser_backend): def _WebContentsNotOobe(browser_backend):
"""Returns true if we're still on the oobe login screen. As a side-effect, """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""" clicks the ok button on the user image selection screen."""
tab = browser_backend.tab_list_backend.Get(0, None) oobe = browser_backend.misc_web_contents_backend.GetOobe()
if not (tab and tab.url and tab.url == 'chrome://oobe/login'): if oobe is None:
return True return True
try: try:
tab.ExecuteJavaScript(""" oobe.EvaluateJavaScript("""
var ok = document.getElementById("ok-button"); var ok = document.getElementById("ok-button");
if (ok) { if (ok) {
ok.click(); ok.click();
...@@ -31,9 +31,13 @@ def _StartupWindow(browser_backend): ...@@ -31,9 +31,13 @@ def _StartupWindow(browser_backend):
else browser_backend.tab_list_backend.Get(0, None)) else browser_backend.tab_list_backend.Get(0, None))
def NavigateLogin(browser_backend): def NavigateLogin(browser_backend):
"""Navigates through login screen""" """Navigates through oobe login screen"""
# Wait for login screen to disappear. # Wait to connect to oobe.
util.WaitFor(lambda: _TabNotOobeScreen(browser_backend), 20) misc_wc = browser_backend.misc_web_contents_backend
util.WaitFor(lambda: misc_wc.GetOobe(), # pylint: disable=W0108
10)
# Dismiss the user image selection screen.
util.WaitFor(lambda: _WebContentsNotOobe(browser_backend), 15)
# Wait for the startup window, then close it. # Wait for the startup window, then close it.
util.WaitFor(lambda: _StartupWindow(browser_backend) is not None, 20) util.WaitFor(lambda: _StartupWindow(browser_backend) is not None, 20)
......
# Copyright (c) 2012 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.
import httplib
import json
import socket
import urllib2
from telemetry.core import exceptions
from telemetry.core import web_contents
from telemetry.core.chrome import inspector_backend
class MiscWebContentsBackend(object):
"""Provides acccess to chrome://oobe/login page, which is neither an extension
nor a tab."""
def __init__(self, browser_backend):
self._browser_backend = browser_backend
def GetOobe(self):
oobe_web_contents_info = self._FindWebContentsInfo('chrome://oobe/login')
if oobe_web_contents_info:
debugger_url = oobe_web_contents_info.get('webSocketDebuggerUrl')
if debugger_url:
inspector = self._CreateInspectorBackend(debugger_url)
return web_contents.WebContents(inspector)
return None
def _CreateInspectorBackend(self, debugger_url):
return inspector_backend.InspectorBackend(self._browser_backend.browser,
self._browser_backend,
debugger_url)
def _ListWebContents(self, timeout=None):
try:
data = self._browser_backend.Request('', timeout=timeout)
return json.loads(data)
except (socket.error, httplib.BadStatusLine, urllib2.URLError):
if not self._browser_backend.IsBrowserRunning():
raise exceptions.BrowserGoneException()
raise exceptions.BrowserConnectionGoneException()
def _FindWebContentsInfo(self, url):
for web_contents_info in self._ListWebContents():
if web_contents_info.get('url') == url:
return web_contents_info
return None
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment