Index: chrome/test/functional/special_tabs.py |
=================================================================== |
--- chrome/test/functional/special_tabs.py (revision 261231) |
+++ chrome/test/functional/special_tabs.py (working copy) |
@@ -1,328 +0,0 @@ |
-#!/usr/bin/env python |
-# 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 logging |
-import os |
- |
-import pyauto_functional # Must be imported before pyauto |
-import pyauto |
-import test_utils |
- |
-class SpecialTabsTest(pyauto.PyUITest): |
- """TestCase for Special Tabs like about:version, chrome://history, etc.""" |
- |
- @staticmethod |
- def GetSpecialAcceleratorTabs(): |
- """Get a dict of accelerators and corresponding tab titles.""" |
- ret = { |
- pyauto.IDC_SHOW_HISTORY: 'History', |
- pyauto.IDC_MANAGE_EXTENSIONS: 'Extensions', |
- pyauto.IDC_SHOW_DOWNLOADS: 'Downloads', |
- } |
- return ret |
- |
- special_url_redirects = { |
- 'about:': 'chrome://version', |
- 'about:about': 'chrome://about', |
- 'about:appcache-internals': 'chrome://appcache-internals', |
- 'about:credits': 'chrome://credits', |
- 'about:dns': 'chrome://dns', |
- 'about:histograms': 'chrome://histograms', |
- 'about:plugins': 'chrome://plugins', |
- 'about:sync': 'chrome://sync-internals', |
- 'about:sync-internals': 'chrome://sync-internals', |
- 'about:version': 'chrome://version', |
- } |
- |
- special_url_tabs = { |
- 'chrome://about': { 'title': 'Chrome URLs' }, |
- 'chrome://appcache-internals': { 'title': 'AppCache Internals' }, |
- 'chrome://blob-internals': { 'title': 'Blob Storage Internals' }, |
- 'chrome://feedback': {}, |
- 'chrome://chrome-urls': { 'title': 'Chrome URLs' }, |
- 'chrome://crashes': { 'title': 'Crashes' }, |
- 'chrome://credits': { 'title': 'Credits' }, |
- 'chrome://downloads': { 'title': 'Downloads' }, |
- 'chrome://dns': { 'title': 'About DNS' }, |
- 'chrome://extensions': { 'title': 'Extensions' }, |
- 'chrome://flags': {}, |
- 'chrome://flash': {}, |
- 'chrome://gpu-internals': {}, |
- 'chrome://invalidations': { 'title': 'Invalidations' }, |
- 'chrome://histograms': { 'title': 'About Histograms' }, |
- 'chrome://history': { 'title': 'History' }, |
- 'chrome://inspect': { 'title': 'Inspect with Chrome Developer Tools' }, |
- 'chrome://media-internals': { 'title': 'Media Internals' }, |
- 'chrome://memory-redirect': { 'title': 'About Memory' }, |
- 'chrome://net-internals': {}, |
- 'chrome://net-internals/help.html': {}, |
- 'chrome://newtab': { 'title': 'New Tab', 'CSP': False }, |
- 'chrome://plugins': { 'title': 'Plug-ins' }, |
- 'chrome://settings': { 'title': 'Settings' }, |
- 'chrome://settings/autofill': { 'title': 'Settings - Autofill settings' }, |
- 'chrome://settings/clearBrowserData': |
- { 'title': 'Settings - Clear browsing data' }, |
- 'chrome://settings/content': { 'title': 'Settings - Content settings' }, |
- 'chrome://settings/languages': |
- { 'title': 'Settings - Languages' }, |
- 'chrome://settings/passwords': { 'title': 'Settings - Passwords' }, |
- 'chrome://stats': {}, |
- 'chrome://sync': { 'title': 'Sync Internals' }, |
- 'chrome://sync-internals': { 'title': 'Sync Internals' }, |
- 'chrome://terms': {}, |
- 'chrome://version': { 'title': 'About Version' }, |
- 'chrome://view-http-cache': {}, |
- 'chrome://webrtc-internals': { 'title': 'WebRTC Internals' }, |
- } |
- broken_special_url_tabs = { |
- # crashed under debug when invoked from location bar (bug 88223). |
- 'chrome://devtools': { 'CSP': False }, |
- |
- # returns "not available" despite having an URL constant. |
- 'chrome://dialog': { 'CSP': False }, |
- |
- # separate window on mac, PC untested, not implemented elsewhere. |
- 'chrome://ipc': { 'CSP': False }, |
- |
- # race against redirects via meta-refresh. |
- 'chrome://memory': { 'CSP': False }, |
- } |
- |
- chromeos_special_url_tabs = { |
- 'chrome://choose-mobile-network': { 'title': 'undefined', 'CSP': True }, |
- 'chrome://flags': { 'CSP': True }, |
- 'chrome://imageburner': { 'title':'Create a Recovery Media', 'CSP': True }, |
- 'chrome://keyboardoverlay': { 'title': 'Keyboard Overlay', 'CSP': True }, |
- 'chrome://network': { 'title': 'About Network' }, |
- 'chrome://os-credits': { 'title': 'Credits', 'CSP': False }, |
- 'chrome://proxy-settings': { 'CSP': False }, |
- 'chrome://register': { 'CSP': False }, |
- 'chrome://settings/languages': |
- { 'title': 'Settings - Languages and input' }, |
- 'chrome://sim-unlock': { 'title': 'Enter SIM card PIN', 'CSP': False }, |
- 'chrome://system': { 'title': 'About System', 'CSP': False }, |
- |
- # OVERRIDE - title and page different on CrOS |
- 'chrome://settings/accounts': { 'title': 'Settings - Users' }, |
- } |
- broken_chromeos_special_url_tabs = { |
- # returns "not available" page on chromeos=1 linux but has an URL constant. |
- 'chrome://activationmessage': { 'CSP': False }, |
- 'chrome://cloudprintresources': { 'CSP': False }, |
- 'chrome://cloudprintsetup': { 'CSP': False }, |
- 'chrome://collected-cookies': { 'CSP': False }, |
- 'chrome://constrained-test': { 'CSP': False }, |
- 'chrome://enterprise-enrollment': { 'CSP': False }, |
- 'chrome://http-auth': { 'CSP': False }, |
- 'chrome://login-container': { 'CSP': False }, |
- 'chrome://media-player': { 'CSP': False }, |
- 'chrome://screenshots': { 'CSP': False }, |
- 'chrome://slideshow': { 'CSP': False }, |
- 'chrome://syncresources': { 'CSP': False }, |
- 'chrome://theme': { 'CSP': False }, |
- 'chrome://view-http-cache': { 'CSP': False }, |
- |
- # crashes on chromeos=1 on linux, possibly missing real CrOS features. |
- 'chrome://cryptohome': { 'CSP': False}, |
- 'chrome://mobilesetup': { 'CSP': False }, |
- 'chrome://print': { 'CSP': False }, |
- } |
- |
- linux_special_url_tabs = { |
- 'chrome://linux-proxy-config': { 'title': 'Proxy Configuration Help' }, |
- 'chrome://tcmalloc': { 'title': 'tcmalloc stats' }, |
- 'chrome://sandbox': { 'title': 'Sandbox Status' }, |
- } |
- broken_linux_special_url_tabs = {} |
- |
- mac_special_url_tabs = { |
- 'chrome://settings/languages': { 'title': 'Settings - Languages' }, |
- } |
- broken_mac_special_url_tabs = {} |
- |
- win_special_url_tabs = { |
- 'chrome://conflicts': {}, |
- } |
- broken_win_special_url_tabs = { |
- # Sync on windows badly broken at the moment. |
- 'chrome://sync': {}, |
- } |
- |
- google_special_url_tabs = { |
- # OVERRIDE - different title for Google Chrome vs. Chromium. |
- 'chrome://terms': { |
- 'title': 'Google Chrome Terms of Service', |
- }, |
- } |
- broken_google_special_url_tabs = {} |
- |
- google_chromeos_special_url_tabs = { |
- # OVERRIDE - different title for Google Chrome OS vs. Chromium OS. |
- 'chrome://terms': { |
- 'title': 'Google Chrome OS Terms', |
- }, |
- } |
- broken_google_chromeos_special_url_tabs = {} |
- |
- google_win_special_url_tabs = {} |
- broken_google_win_special_url_tabs = {} |
- |
- google_mac_special_url_tabs = {} |
- broken_google_mac_special_url_tabs = {} |
- |
- google_linux_special_url_tabs = {} |
- broken_google_linux_special_url_tabs = {} |
- |
- def _VerifyAppCacheInternals(self): |
- """Confirm about:appcache-internals contains expected content for Caches. |
- Also confirms that the about page populates Application Caches.""" |
- # Navigate to html page to activate DNS prefetching. |
- self.NavigateToURL('http://futtta.be/html5/offline.php') |
- # Wait for page to load and display sucess or fail message. |
- self.WaitUntil( |
- lambda: self.GetDOMValue('document.getElementById("status").innerHTML'), |
- expect_retval='cached') |
- self.TabGoBack() |
- test_utils.StringContentCheck( |
- self, self.GetTabContents(), |
- ['Manifest', |
- 'http://futtta.be/html5/manifest.php'], |
- []) |
- |
- def _VerifyAboutDNS(self): |
- """Confirm about:dns contains expected content related to DNS info. |
- Also confirms that prefetching DNS records propogate.""" |
- # Navigate to a page to activate DNS prefetching. |
- self.NavigateToURL('http://www.google.com') |
- self.TabGoBack() |
- test_utils.StringContentCheck(self, self.GetTabContents(), |
- ['Host name', 'How long ago', 'Motivation'], |
- []) |
- |
- def _GetPlatformSpecialURLTabs(self): |
- tabs = self.special_url_tabs.copy() |
- broken_tabs = self.broken_special_url_tabs.copy() |
- if self.IsChromeOS(): |
- tabs.update(self.chromeos_special_url_tabs) |
- broken_tabs.update(self.broken_chromeos_special_url_tabs) |
- elif self.IsLinux(): |
- tabs.update(self.linux_special_url_tabs) |
- broken_tabs.update(self.broken_linux_special_url_tabs) |
- elif self.IsMac(): |
- tabs.update(self.mac_special_url_tabs) |
- broken_tabs.update(self.broken_mac_special_url_tabs) |
- elif self.IsWin(): |
- tabs.update(self.win_special_url_tabs) |
- broken_tabs.update(self.broken_win_special_url_tabs) |
- for key, value in broken_tabs.iteritems(): |
- if key in tabs: |
- del tabs[key] |
- broken_tabs = {} |
- if self.GetBrowserInfo()['properties']['branding'] == 'Google Chrome': |
- tabs.update(self.google_special_url_tabs) |
- broken_tabs.update(self.broken_google_special_url_tabs) |
- if self.IsChromeOS(): |
- tabs.update(self.google_chromeos_special_url_tabs) |
- broken_tabs.update(self.broken_google_chromeos_special_url_tabs) |
- elif self.IsLinux(): |
- tabs.update(self.google_linux_special_url_tabs) |
- broken_tabs.update(self.broken_google_linux_special_url_tabs) |
- elif self.IsMac(): |
- tabs.update(self.google_mac_special_url_tabs) |
- broken_tabs.update(self.broken_google_mac_special_url_tabs) |
- elif self.IsWin(): |
- tabs.update(self.google_win_special_url_tabs) |
- broken_tabs.update(self.broken_google_win_special_url_tabs) |
- for key, value in broken_tabs.iteritems(): |
- if key in tabs: |
- del tabs[key] |
- return tabs |
- |
- def testSpecialURLRedirects(self): |
- """Test that older about: URLs are implemented by newer chrome:// URLs. |
- The location bar may not get updated in all cases, so checking the |
- tab URL is misleading, instead check for the same contents as the |
- chrome:// page.""" |
- tabs = self._GetPlatformSpecialURLTabs() |
- for url, redirect in self.special_url_redirects.iteritems(): |
- if redirect in tabs: |
- logging.debug('Testing redirect from %s to %s.' % (url, redirect)) |
- self.NavigateToURL(url) |
- self.assertEqual(self.special_url_tabs[redirect]['title'], |
- self.GetActiveTabTitle()) |
- |
- def testSpecialURLTabs(self): |
- """Test special tabs created by URLs like chrome://downloads, |
- chrome://settings/extensionSettings, chrome://history etc. |
- Also ensures they specify content-security-policy and not inline |
- scripts for those pages that are expected to do so. Patches which |
- break this test by including new inline javascript are security |
- vulnerabilities and should be reverted.""" |
- tabs = self._GetPlatformSpecialURLTabs() |
- for url, properties in tabs.iteritems(): |
- logging.debug('Testing URL %s.' % url) |
- self.NavigateToURL(url) |
- expected_title = 'title' in properties and properties['title'] or url |
- actual_title = self.GetActiveTabTitle() |
- self.assertTrue(self.WaitUntil( |
- lambda: self.GetActiveTabTitle(), expect_retval=expected_title), |
- msg='Title did not match for %s. Expected: %s. Got %s' % ( |
- url, expected_title, self.GetActiveTabTitle())) |
- include_list = [] |
- exclude_list = [] |
- no_csp = 'CSP' in properties and not properties['CSP'] |
- if no_csp: |
- exclude_list.extend(['Content-Security-Policy']) |
- else: |
- exclude_list.extend(['<script>', 'onclick=', 'onload=', |
- 'onchange=', 'onsubmit=', 'javascript:']) |
- if 'includes' in properties: |
- include_list.extend(properties['includes']) |
- if 'excludes' in properties: |
- exclude_list.extend(properties['exlcudes']) |
- test_utils.StringContentCheck(self, self.GetTabContents(), |
- include_list, exclude_list) |
- result = self.ExecuteJavascript(""" |
- var r = 'blocked'; |
- var f = 'executed'; |
- var s = document.createElement('script'); |
- s.textContent = 'r = f'; |
- document.body.appendChild(s); |
- window.domAutomationController.send(r); |
- """) |
- logging.debug('has csp %s, result %s.' % (not no_csp, result)) |
- if no_csp: |
- self.assertEqual(result, 'executed', |
- msg='Got %s for %s' % (result, url)) |
- else: |
- self.assertEqual(result, 'blocked', |
- msg='Got %s for %s' % (result, url)) |
- |
- # Restart browser so that every URL gets a fresh instance. |
- self.RestartBrowser(clear_profile=True) |
- |
- def testAboutAppCacheTab(self): |
- """Test App Cache tab to confirm about page populates caches.""" |
- self.NavigateToURL('about:appcache-internals') |
- self._VerifyAppCacheInternals() |
- self.assertEqual('AppCache Internals', self.GetActiveTabTitle()) |
- |
- def testAboutDNSTab(self): |
- """Test DNS tab to confirm DNS about page propogates records.""" |
- self.NavigateToURL('about:dns') |
- self._VerifyAboutDNS() |
- self.assertEqual('About DNS', self.GetActiveTabTitle()) |
- |
- def testSpecialAcceratorTabs(self): |
- """Test special tabs created by accelerators.""" |
- for accel, title in self.GetSpecialAcceleratorTabs().iteritems(): |
- self.RunCommand(accel) |
- self.assertTrue(self.WaitUntil( |
- self.GetActiveTabTitle, expect_retval=title), |
- msg='Expected "%s", got "%s"' % (title, self.GetActiveTabTitle())) |
- |
- |
-if __name__ == '__main__': |
- pyauto_functional.Main() |