| Index: chrome/test/functional/infobars.py
|
| ===================================================================
|
| --- chrome/test/functional/infobars.py (revision 261231)
|
| +++ chrome/test/functional/infobars.py (working copy)
|
| @@ -1,322 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2013 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 logging
|
| -import os
|
| -import re
|
| -
|
| -import pyauto_functional # Must be imported before pyauto
|
| -import pyauto
|
| -import test_utils
|
| -
|
| -
|
| -class InfobarTest(pyauto.PyUITest):
|
| - """TestCase for Infobars."""
|
| -
|
| - def Debug(self):
|
| - """Test method for experimentation.
|
| -
|
| - This method will not run automatically.
|
| - To run:
|
| - python chrome/test/functional/infobars.py infobars.InfobarTest.Debug
|
| - """
|
| - while True:
|
| - raw_input('Hit <enter> to dump info.. ')
|
| - info = self.GetBrowserInfo()
|
| - for window in info['windows']:
|
| - for tab in window['tabs']:
|
| - print 'Window', window['index'], 'tab', tab['index']
|
| - self.pprint(tab['infobars'])
|
| -
|
| - def setUp(self):
|
| - pyauto.PyUITest.setUp(self)
|
| - self._flash_plugin_type = 'Plug-in'
|
| - if self.GetBrowserInfo()['properties']['branding'] == 'Google Chrome':
|
| - self._flash_plugin_type = 'Pepper Plugin'
|
| - # Forcibly trigger all plugins to get registered. crbug.com/94123
|
| - # Sometimes flash files loaded too quickly after firing browser
|
| - # ends up getting downloaded, which seems to indicate that the plugin
|
| - # hasn't been registered yet.
|
| - self.GetPluginsInfo()
|
| -
|
| - def _GetTabInfo(self, windex=0, tab_index=0):
|
| - """Helper to return info for the given tab in the given window.
|
| -
|
| - Defaults to first tab in first window.
|
| - """
|
| - return self.GetBrowserInfo()['windows'][windex]['tabs'][tab_index]
|
| -
|
| - def testPluginCrashInfobar(self):
|
| - """Verify the "plugin crashed" infobar."""
|
| - flash_url = self.GetFileURLForContentDataPath('plugin', 'flash.swf')
|
| - # Trigger flash plugin
|
| - self.NavigateToURL(flash_url)
|
| - child_processes = self.GetBrowserInfo()['child_processes']
|
| - flash = [x for x in child_processes if
|
| - x['type'] == self._flash_plugin_type and
|
| - x['name'] == 'Shockwave Flash'][0]
|
| - self.assertTrue(flash)
|
| - logging.info('Killing flash plugin. pid %d' % flash['pid'])
|
| - self.Kill(flash['pid'])
|
| - self.assertTrue(self.WaitForInfobarCount(1))
|
| - crash_infobar = self._GetTabInfo()['infobars']
|
| - self.assertTrue(crash_infobar)
|
| - self.assertEqual(1, len(crash_infobar))
|
| - self.assertTrue('crashed' in crash_infobar[0]['text'])
|
| - self.assertEqual('confirm_infobar', crash_infobar[0]['type'])
|
| - # Dismiss the infobar
|
| - self.PerformActionOnInfobar('dismiss', infobar_index=0)
|
| - self.assertFalse(self._GetTabInfo()['infobars'])
|
| -
|
| - def _VerifyGeolocationInfobar(self, windex, tab_index):
|
| - """Verify geolocation infobar properties.
|
| -
|
| - Assumes that geolocation infobar is showing up in the given tab in the
|
| - given window.
|
| - """
|
| - # TODO(dyu): Remove this helper function when a function to identify
|
| - # infobar_type and index of the type is implemented.
|
| - tab_info = self._GetTabInfo(windex, tab_index)
|
| - geolocation_infobar = tab_info['infobars']
|
| - self.assertTrue(geolocation_infobar)
|
| - self.assertEqual(1, len(geolocation_infobar))
|
| - self.assertEqual('Learn more', geolocation_infobar[0]['link_text'])
|
| - self.assertEqual(2, len(geolocation_infobar[0]['buttons']))
|
| - self.assertEqual('Allow', geolocation_infobar[0]['buttons'][0])
|
| - self.assertEqual('Deny', geolocation_infobar[0]['buttons'][1])
|
| -
|
| - def testGeolocationInfobar(self):
|
| - """Verify geoLocation infobar."""
|
| - url = self.GetHttpURLForDataPath('geolocation', 'geolocation_on_load.html')
|
| - self.NavigateToURL(url)
|
| - self.assertTrue(self.WaitForInfobarCount(1))
|
| - self._VerifyGeolocationInfobar(windex=0, tab_index=0)
|
| - # Accept, and verify that the infobar went away
|
| - self.PerformActionOnInfobar('accept', infobar_index=0)
|
| - self.assertFalse(self._GetTabInfo()['infobars'])
|
| -
|
| - def testGeolocationInfobarInMultipleTabsAndWindows(self):
|
| - """Verify GeoLocation inforbar in multiple tabs."""
|
| - url = self.GetFileURLForDataPath( # triggers geolocation
|
| - 'geolocation', 'geolocation_on_load.html')
|
| - for tab_index in range(1, 2):
|
| - self.AppendTab(pyauto.GURL(url))
|
| - self.assertTrue(
|
| - self.WaitForInfobarCount(1, windex=0, tab_index=tab_index))
|
| - self._VerifyGeolocationInfobar(windex=0, tab_index=tab_index)
|
| - # Try in a new window
|
| - self.OpenNewBrowserWindow(True)
|
| - self.NavigateToURL(url, 1, 0)
|
| - self.assertTrue(self.WaitForInfobarCount(1, windex=1, tab_index=0))
|
| - self._VerifyGeolocationInfobar(windex=1, tab_index=0)
|
| - # Incognito window
|
| - self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
|
| - self.NavigateToURL(url, 2, 0)
|
| - self.assertTrue(self.WaitForInfobarCount(1, windex=2, tab_index=0))
|
| - self._VerifyGeolocationInfobar(windex=2, tab_index=0)
|
| -
|
| - def _GetFlashCrashInfobarCount(self, windex=0, tab_index=0):
|
| - """Returns the count of 'Shockwave Flash has crashed' infobars."""
|
| - browser_window = self.GetBrowserInfo()['windows'][windex]
|
| - infobars = browser_window['tabs'][tab_index]['infobars']
|
| - flash_crash_infobar_count = 0
|
| - for infobar in infobars:
|
| - if (('text' in infobar) and
|
| - infobar['text'].startswith('Shockwave Flash has crashed')):
|
| - flash_crash_infobar_count += 1
|
| - return flash_crash_infobar_count
|
| -
|
| - def testPluginCrashForMultiTabs(self):
|
| - """Verify plugin crash infobar shows up only on the tabs using plugin."""
|
| - non_flash_url = self.GetFileURLForDataPath('english_page.html')
|
| - flash_url = self.GetFileURLForContentDataPath('plugin', 'FlashSpin.swf')
|
| - # False = Non flash url, True = Flash url
|
| - # We have set of these values to compare a flash page and a non-flash page
|
| - urls_type = [False, True, False, True, False]
|
| - for _ in range(2):
|
| - self.AppendTab(pyauto.GURL(flash_url))
|
| - self.AppendTab(pyauto.GURL(non_flash_url))
|
| - # Killing flash process
|
| - child_processes = self.GetBrowserInfo()['child_processes']
|
| - flash = [x for x in child_processes if
|
| - x['type'] == self._flash_plugin_type and
|
| - x['name'] == 'Shockwave Flash'][0]
|
| - self.assertTrue(flash)
|
| - self.Kill(flash['pid'])
|
| - # Crash plugin infobar should show up in the second tab of this window
|
| - # so passing window and tab argument in the wait for an infobar.
|
| - self.assertTrue(self.WaitForInfobarCount(1, windex=0, tab_index=1))
|
| - for i in range(len(urls_type)):
|
| - # Verify that if page doesn't have flash plugin,
|
| - # it should not have infobar popped-up
|
| - self.ActivateTab(i)
|
| - if not urls_type[i]:
|
| - self.assertEqual(
|
| - self._GetFlashCrashInfobarCount(0, i), 0,
|
| - msg='Did not expect crash infobar in tab at index %d' % i)
|
| - elif urls_type[i]:
|
| - self.assertEqual(
|
| - self._GetFlashCrashInfobarCount(0, i), 1,
|
| - msg='Expected crash infobar in tab at index %d' % i)
|
| - infobar = self.GetBrowserInfo()['windows'][0]['tabs'][i]['infobars']
|
| - self.assertEqual(infobar[0]['type'], 'confirm_infobar')
|
| - self.assertEqual(len(infobar), 1)
|
| -
|
| -
|
| -class OneClickInfobarTest(pyauto.PyUITest):
|
| - """Tests for one-click sign in infobar."""
|
| -
|
| - BLOCK_COOKIE_PATTERN = {'https://accounts.google.com/': {'cookies': 2}}
|
| - OC_INFOBAR_TYPE = 'oneclicklogin_infobar'
|
| - PW_INFOBAR_TYPE = 'password_infobar'
|
| - URL = 'https://www.google.com/accounts/ServiceLogin'
|
| - URL_LOGIN = 'https://www.google.com/accounts/Login'
|
| - URL_LOGOUT = 'https://www.google.com/accounts/Logout'
|
| -
|
| - def setUp(self):
|
| - pyauto.PyUITest.setUp(self)
|
| - self._driver = self.NewWebDriver()
|
| -
|
| - def _LogIntoGoogleAccount(self, tab_index=0, windex=0):
|
| - """Log into Google account.
|
| -
|
| - Args:
|
| - tab_index: The tab index, default is 0.
|
| - windex: The window index, default is 0.
|
| - """
|
| - creds = self.GetPrivateInfo()['test_google_account']
|
| - username = creds['username']
|
| - password = creds['password']
|
| - test_utils.GoogleAccountsLogin(self, username, password, tab_index, windex)
|
| - # TODO(dyu): Use WaitUntilNavigationCompletes after investigating
|
| - # crbug.com/124877
|
| - self.WaitUntil(
|
| - lambda: self.GetDOMValue('document.readyState'),
|
| - expect_retval='complete')
|
| -
|
| - def _PerformActionOnInfobar(self, action):
|
| - """Perform an action on the infobar: accept, cancel, or dismiss.
|
| -
|
| - The one-click sign in infobar must show in the first tab of the first
|
| - window. If action is 'accept' then the account is synced. If the action is
|
| - 'cancel' then the infobar should be dismissed and never shown again. The
|
| - account will not be synced. If the action is 'dismiss' then the infobar will
|
| - shown again after the next login.
|
| -
|
| - Args:
|
| - action: The action to perform on the infobar.
|
| - """
|
| - infobar_index = test_utils.WaitForInfobarTypeAndGetIndex(
|
| - self, self.OC_INFOBAR_TYPE)
|
| - self.PerformActionOnInfobar(action, infobar_index)
|
| -
|
| - def _DisplayOneClickInfobar(self, tab_index=0, windex=0):
|
| - """One-click sign in infobar appears after logging into google account.
|
| -
|
| - Args:
|
| - tab_index: The tab index, default is 0.
|
| - windex: The window index, default is 0.
|
| - """
|
| - self._LogIntoGoogleAccount(tab_index=tab_index, windex=windex)
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: test_utils.GetInfobarIndexByType(
|
| - self, self.OC_INFOBAR_TYPE,
|
| - tab_index=tab_index, windex=windex) is not None),
|
| - msg='The one-click login infobar did not appear.')
|
| -
|
| - def testDisplayOneClickInfobar(self):
|
| - """Verify one-click infobar appears after login into google account.
|
| -
|
| - One-click infobar should appear after signing into a google account
|
| - for the first time using a clean profile.
|
| - """
|
| - self._DisplayOneClickInfobar()
|
| -
|
| - def testNoOneClickInfobarAfterCancel(self):
|
| - """Verify one-click infobar does not appear again after clicking cancel.
|
| -
|
| - The one-click infobar should not display again after logging into an
|
| - account and selecting to reject sync the first time. The test covers
|
| - restarting the browser with the same profile and verifying the one-click
|
| - infobar does not show after login.
|
| -
|
| - This test also verifies that the password infobar displays.
|
| - """
|
| - self._DisplayOneClickInfobar()
|
| - self._PerformActionOnInfobar(action='cancel') # Click 'No thanks' button.
|
| - self.NavigateToURL(self.URL_LOGOUT)
|
| - self._LogIntoGoogleAccount()
|
| - test_utils.WaitForInfobarTypeAndGetIndex(self, self.PW_INFOBAR_TYPE)
|
| - test_utils.AssertInfobarTypeDoesNotAppear(self, self.OC_INFOBAR_TYPE)
|
| - # Restart browser with the same profile.
|
| - self.RestartBrowser(clear_profile=False)
|
| - self.NavigateToURL(self.URL_LOGOUT)
|
| - self._LogIntoGoogleAccount()
|
| - test_utils.AssertInfobarTypeDoesNotAppear(self, self.OC_INFOBAR_TYPE)
|
| -
|
| - def testDisplayOneClickInfobarAfterDismiss(self):
|
| - """Verify one-click infobar appears again after clicking dismiss button.
|
| -
|
| - The one-click infobar should display again after logging into an
|
| - account and clicking to dismiss the infobar the first time.
|
| -
|
| - This test also verifies that the password infobar does not display.
|
| - The one-click infobar should supersede the password infobar.
|
| - """
|
| - self._DisplayOneClickInfobar()
|
| - self._PerformActionOnInfobar(action='dismiss') # Click 'x' button.
|
| - self.NavigateToURL(self.URL_LOGOUT)
|
| - self._LogIntoGoogleAccount()
|
| - test_utils.WaitForInfobarTypeAndGetIndex(self, self.OC_INFOBAR_TYPE)
|
| - test_utils.AssertInfobarTypeDoesNotAppear(self, self.PW_INFOBAR_TYPE)
|
| -
|
| - def _OpenSecondProfile(self):
|
| - """Create a second profile."""
|
| - self.OpenNewBrowserWindowWithNewProfile()
|
| - self.assertEqual(2, len(self.GetMultiProfileInfo()['profiles']),
|
| - msg='The second profile was not created.')
|
| -
|
| - def testDisplayOneClickInfobarPerProfile(self):
|
| - """Verify one-click infobar appears for each profile after sign-in."""
|
| - # Default profile.
|
| - self._DisplayOneClickInfobar()
|
| - self._OpenSecondProfile()
|
| - self._DisplayOneClickInfobar(windex=1)
|
| -
|
| - def testNoOneClickInfobarWhenCookiesBlocked(self):
|
| - """Verify one-click infobar does not show when cookies are blocked.
|
| -
|
| - One-click sign in should not be enabled if cookies are blocked for Google
|
| - accounts domain.
|
| -
|
| - This test verifies the following bug: crbug.com/117841
|
| - """
|
| - # Block cookies for Google accounts domain.
|
| - self.SetPrefs(pyauto.kContentSettingsPatternPairs,
|
| - self.BLOCK_COOKIE_PATTERN)
|
| - self._LogIntoGoogleAccount()
|
| - test_utils.AssertInfobarTypeDoesNotAppear(self, self.OC_INFOBAR_TYPE)
|
| -
|
| - def testOneClickInfobarShownWhenWinLoseFocus(self):
|
| - """Verify one-click infobar still shows when window loses focus.
|
| -
|
| - This test verifies the following bug: crbug.com/121739
|
| - """
|
| - self._LogIntoGoogleAccount()
|
| - test_utils.WaitForInfobarTypeAndGetIndex(self, self.OC_INFOBAR_TYPE)
|
| - # Open new window to shift focus away.
|
| - self.OpenNewBrowserWindow(True)
|
| - test_utils.GetInfobarIndexByType(self, self.OC_INFOBAR_TYPE)
|
| -
|
| - def testNoOneClickInfobarInIncognito(self):
|
| - """Verify that one-click infobar does not show up in incognito mode."""
|
| - self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
|
| - self._LogIntoGoogleAccount(windex=1)
|
| - test_utils.AssertInfobarTypeDoesNotAppear(
|
| - self, self.OC_INFOBAR_TYPE, windex=1)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|