| Index: chrome/test/functional/protector.py
|
| diff --git a/chrome/test/functional/protector.py b/chrome/test/functional/protector.py
|
| deleted file mode 100755
|
| index 65cc3945a6c2b872e27cc21482730066f0e2169d..0000000000000000000000000000000000000000
|
| --- a/chrome/test/functional/protector.py
|
| +++ /dev/null
|
| @@ -1,750 +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 pyauto_functional # Must be imported first
|
| -import pyauto
|
| -import test_utils
|
| -
|
| -import json
|
| -import logging
|
| -import os
|
| -
|
| -
|
| -class BaseProtectorTest(pyauto.PyUITest):
|
| - """Base class for Protector test cases."""
|
| -
|
| - _DEFAULT_SEARCH_ID_KEY = 'Default Search Provider ID'
|
| -
|
| - # Possible values for session.restore_on_startup pref:
|
| - _SESSION_STARTUP_HOMEPAGE = 0 # For migration testing only.
|
| - _SESSION_STARTUP_LAST = 1
|
| - _SESSION_STARTUP_URLS = 4
|
| - _SESSION_STARTUP_NTP = 5
|
| -
|
| - def setUp(self):
|
| - pyauto.PyUITest.setUp(self)
|
| - # Get the profile path of the first profile.
|
| - profiles = self.GetMultiProfileInfo()
|
| - self.assertTrue(profiles['profiles'])
|
| - self._profile_path = profiles['profiles'][0]['path']
|
| - self.assertTrue(self._profile_path)
|
| - # Set to the keyword of the new default search engine after a successful
|
| - # _GetDefaultSearchEngine call.
|
| - self._new_default_search_keyword = None
|
| -
|
| - def _IsEnabled(self):
|
| - """Whether protector should be enabled for the test suite."""
|
| - return True
|
| -
|
| - def ExtraChromeFlags(self):
|
| - """Adds required Protector-related flags.
|
| -
|
| - Returns:
|
| - A list of extra flags to pass to Chrome when it is launched.
|
| - """
|
| - return super(BaseProtectorTest, self).ExtraChromeFlags() + [
|
| - '--protector' if self._IsEnabled() else '--no-protector'
|
| - ]
|
| -
|
| - def _GetDefaultSearchEngine(self):
|
| - """Returns the default search engine, if any; None otherwise.
|
| -
|
| - Returns:
|
| - Dictionary describing the default search engine. See GetSearchEngineInfo
|
| - for an example.
|
| - """
|
| - for search_engine in self.GetSearchEngineInfo():
|
| - if search_engine['is_default']:
|
| - return search_engine
|
| - return None
|
| -
|
| - def _OpenDatabase(self, db_name):
|
| - """Opens a given SQLite database in the default profile.
|
| -
|
| - Args:
|
| - db_name: name of database file (relative to the profile directory).
|
| -
|
| - Returns:
|
| - An sqlite3.Connection instance.
|
| -
|
| - Raises:
|
| - ImportError if sqlite3 module is not found.
|
| - """
|
| - db_path = os.path.join(self._profile_path, db_name)
|
| - logging.info('Opening DB: %s' % db_path)
|
| - import sqlite3
|
| - db_conn = sqlite3.connect(db_path)
|
| - db_conn.isolation_level = None
|
| - self.assertTrue(db_conn)
|
| - return db_conn
|
| -
|
| - def _FetchSingleValue(self, conn, query, parameters=None):
|
| - """Executes an SQL query that should select a single row with a single
|
| - column and returns its value.
|
| -
|
| - Args:
|
| - conn: sqlite3.Connection instance.
|
| - query: SQL query (may contain placeholders).
|
| - parameters: parameters to substitute for query.
|
| -
|
| - Returns:
|
| - Value of the column fetched.
|
| - """
|
| - cursor = conn.cursor()
|
| - cursor.execute(query, parameters)
|
| - row = cursor.fetchone()
|
| - self.assertTrue(row)
|
| - self.assertEqual(1, len(row))
|
| - return row[0]
|
| -
|
| - def _UpdateSingleRow(self, conn, query, parameters=None):
|
| - """Executes an SQL query that should update a single row.
|
| -
|
| - Args:
|
| - conn: sqlite3.Connection instance.
|
| - query: SQL query (may contain placeholders).
|
| - parameters: parameters to substitute for query.
|
| - """
|
| - cursor = conn.cursor()
|
| - cursor.execute(query, parameters)
|
| - self.assertEqual(1, cursor.rowcount)
|
| -
|
| - def _ChangeDefaultSearchEngine(self):
|
| - """Replaces the default search engine in Web Data database with another one.
|
| -
|
| - Keywords of the new default search engine is saved to
|
| - self._new_default_search_keyword.
|
| - """
|
| - web_database = self._OpenDatabase('Web Data')
|
| - default_id = int(self._FetchSingleValue(
|
| - web_database,
|
| - 'SELECT value FROM meta WHERE key = ?',
|
| - (self._DEFAULT_SEARCH_ID_KEY,)))
|
| - self.assertTrue(default_id)
|
| - new_default_id = int(self._FetchSingleValue(
|
| - web_database,
|
| - 'SELECT id FROM keywords WHERE id != ? LIMIT 1',
|
| - (default_id,)))
|
| - self.assertTrue(new_default_id)
|
| - self.assertNotEqual(default_id, new_default_id)
|
| - self._UpdateSingleRow(web_database,
|
| - 'UPDATE meta SET value = ? WHERE key = ?',
|
| - (new_default_id, self._DEFAULT_SEARCH_ID_KEY))
|
| - self._new_default_search_keyword = self._FetchSingleValue(
|
| - web_database,
|
| - 'SELECT keyword FROM keywords WHERE id = ?',
|
| - (new_default_id,))
|
| - logging.info('Update default search ID: %d -> %d (%s)' %
|
| - (default_id, new_default_id, self._new_default_search_keyword))
|
| - web_database.close()
|
| -
|
| - def _LoadPreferences(self):
|
| - """Reads the contents of Preferences file.
|
| -
|
| - Returns: dict() with user preferences as returned by PrefsInfo.Prefs().
|
| - """
|
| - prefs_path = os.path.join(self._profile_path, 'Preferences')
|
| - logging.info('Opening prefs: %s' % prefs_path)
|
| - with open(prefs_path) as f:
|
| - return json.load(f)
|
| -
|
| - def _WritePreferences(self, prefs):
|
| - """Writes new contents to the Preferences file.
|
| -
|
| - Args:
|
| - prefs: dict() with new user preferences as returned by PrefsInfo.Prefs().
|
| - """
|
| - with open(os.path.join(self._profile_path, 'Preferences'), 'w') as f:
|
| - json.dump(prefs, f)
|
| -
|
| - def _InvalidatePreferencesBackup(self):
|
| - """Makes the Preferences backup invalid by clearing the signature."""
|
| - prefs = self._LoadPreferences()
|
| - prefs['backup']['_signature'] = 'INVALID'
|
| - self._WritePreferences(prefs)
|
| -
|
| - def _ChangeSessionStartupPrefs(self, startup_type=None, startup_urls=None,
|
| - homepage=None, delete_migrated_pref=False):
|
| - """Changes the session startup type and the list of URLs to load on startup.
|
| -
|
| - Args:
|
| - startup_type: int with one of _SESSION_STARTUP_* values. If startup_type
|
| - is None, then it deletes the preference.
|
| - startup_urls: list(str) with a list of URLs; if None, is left unchanged.
|
| - homepage: unless None, the new value for homepage.
|
| - delete_migrated_pref: Whether we should delete the preference which says
|
| - we've already migrated the startup_type preference.
|
| - """
|
| - prefs = self._LoadPreferences()
|
| - if startup_type is None:
|
| - del prefs['session']['restore_on_startup']
|
| - else:
|
| - prefs['session']['restore_on_startup'] = startup_type
|
| -
|
| - if startup_urls is not None:
|
| - prefs['session']['urls_to_restore_on_startup'] = startup_urls
|
| - if homepage is not None:
|
| - prefs['homepage'] = homepage
|
| - prefs['homepage_is_newtabpage'] = False
|
| - if delete_migrated_pref:
|
| - del prefs['session']['restore_on_startup_migrated']
|
| - self._WritePreferences(prefs)
|
| -
|
| - def _ChangePinnedTabsPrefs(self, pinned_tabs):
|
| - """Changes the list of pinned tabs.
|
| -
|
| - Args:
|
| - pinned_tabs: list(str) with a list of pinned tabs URLs.
|
| - """
|
| - prefs = self._LoadPreferences()
|
| - prefs['pinned_tabs'] = []
|
| - for tab in pinned_tabs:
|
| - prefs['pinned_tabs'].append({'url': tab})
|
| - self._WritePreferences(prefs)
|
| -
|
| - def _ChangeHomepage(self, homepage, homepage_is_ntp, show_homepage_button):
|
| - """Changes homepage settings.
|
| -
|
| - Args:
|
| - homepage: new homepage URL (str),
|
| - homepage_is_ntp: whether homepage is NTP.
|
| - show_homepage_button: whether homepage button is visible.
|
| - """
|
| - prefs = self._LoadPreferences()
|
| - prefs['homepage'] = homepage
|
| - prefs['homepage_is_newtabpage'] = homepage_is_ntp
|
| - prefs['browser']['show_home_button'] = show_homepage_button
|
| - self._WritePreferences(prefs)
|
| -
|
| - def _AssertTabsOpen(self, urls, pinned=None):
|
| - """Asserts that exactly one window with the specified URLs is open.
|
| -
|
| - Args:
|
| - urls: list of URLs of expected open tabs.
|
| - pinned: if given, list of boolean values whether the corresponding tab is
|
| - expected to be pinned or not.
|
| - """
|
| - info = self.GetBrowserInfo()
|
| - self.assertEqual(1, len(info['windows'])) # one window
|
| - self.assertEqual(urls, [tab['url'] for tab in info['windows'][0]['tabs']])
|
| - if pinned:
|
| - self.assertEqual(pinned,
|
| - [tab['pinned'] for tab in info['windows'][0]['tabs']])
|
| -
|
| - def testNoChangeOnCleanProfile(self):
|
| - """Test that no change is reported on a clean profile."""
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| -
|
| -class ProtectorSearchEngineTest(BaseProtectorTest):
|
| - """Test suite for search engine change detection with Protector enabled."""
|
| -
|
| - def testDetectSearchEngineChangeAndApply(self):
|
| - """Test for detecting and applying a default search engine change."""
|
| - # Get current search engine.
|
| - old_default_search = self._GetDefaultSearchEngine()
|
| - self.assertTrue(old_default_search)
|
| - # Close browser, change the search engine and start it again.
|
| - self.RestartBrowser(clear_profile=False,
|
| - pre_launch_hook=self._ChangeDefaultSearchEngine)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - default_search = self._GetDefaultSearchEngine()
|
| - # Protector must restore the old search engine.
|
| - self.assertEqual(old_default_search, default_search)
|
| - self.ApplyProtectorChange()
|
| - # Now the search engine must have changed to the new one.
|
| - default_search = self._GetDefaultSearchEngine()
|
| - self.assertNotEqual(old_default_search, default_search)
|
| - self.assertEqual(self._new_default_search_keyword,
|
| - default_search['keyword'])
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testDetectSearchEngineChangeAndDiscard(self):
|
| - """Test for detecting and discarding a default search engine change."""
|
| - # Get current search engine.
|
| - old_default_search = self._GetDefaultSearchEngine()
|
| - self.assertTrue(old_default_search)
|
| - # Close browser, change the search engine and start it again.
|
| - self.RestartBrowser(clear_profile=False,
|
| - pre_launch_hook=self._ChangeDefaultSearchEngine)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - default_search = self._GetDefaultSearchEngine()
|
| - # Protector must restore the old search engine.
|
| - self.assertEqual(old_default_search, default_search)
|
| - self.DiscardProtectorChange()
|
| - # Old search engine remains active.
|
| - default_search = self._GetDefaultSearchEngine()
|
| - self.assertEqual(old_default_search, default_search)
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testSearchEngineChangeDismissedOnEdit(self):
|
| - """Test that default search engine change is dismissed when default search
|
| - engine is changed by user.
|
| - """
|
| - # Get current search engine.
|
| - old_default_search = self._GetDefaultSearchEngine()
|
| - self.assertTrue(old_default_search)
|
| - # Close browser, change the search engine and start it again.
|
| - self.RestartBrowser(clear_profile=False,
|
| - pre_launch_hook=self._ChangeDefaultSearchEngine)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Change default search engine.
|
| - self.MakeSearchEngineDefault(self._new_default_search_keyword)
|
| - # Change is successful.
|
| - default_search = self._GetDefaultSearchEngine()
|
| - self.assertEqual(self._new_default_search_keyword,
|
| - default_search['keyword'])
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - search_urls = [engine['url'] for engine in self.GetSearchEngineInfo()]
|
| - # Verify there are no duplicate search engines:
|
| - self.assertEqual(len(search_urls), len(set(search_urls)))
|
| -
|
| - def testSearchEngineChangeWithMultipleWindows(self):
|
| - """Test that default search engine change is detected in multiple
|
| - browser windows.
|
| - """
|
| - # Get current search engine.
|
| - old_default_search = self._GetDefaultSearchEngine()
|
| - self.assertTrue(old_default_search)
|
| - # Close browser, change the search engine and start it again.
|
| - self.RestartBrowser(clear_profile=False,
|
| - pre_launch_hook=self._ChangeDefaultSearchEngine)
|
| - # The change must be detected by Protector in first window
|
| - self.OpenNewBrowserWindow(True)
|
| - self.assertTrue(self.GetProtectorState(window_index=0)['showing_change'])
|
| - # Open another Browser Window
|
| - self.OpenNewBrowserWindow(True)
|
| - # The change must be detected by Protector in second window
|
| - self.assertTrue(self.GetProtectorState(window_index=1)['showing_change'])
|
| -
|
| - def testSearchEngineChangeDiscardedOnRelaunchingBrowser(self):
|
| - """Verify that relaunching the browser while Protector is showing a change
|
| - discards it.
|
| - """
|
| - # Get current search engine.
|
| - old_default_search = self._GetDefaultSearchEngine()
|
| - self.assertTrue(old_default_search)
|
| - # Close browser, change the search engine and start it again.
|
| - self.RestartBrowser(clear_profile=False,
|
| - pre_launch_hook=self._ChangeDefaultSearchEngine)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - default_search = self._GetDefaultSearchEngine()
|
| - self.assertEqual(old_default_search, default_search)
|
| - # After relaunching the browser, old search engine still must be active.
|
| - self.RestartBrowser(clear_profile=False)
|
| - default_search = self._GetDefaultSearchEngine()
|
| - self.assertEqual(old_default_search, default_search)
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| -# TODO(ivankr): more hijacking cases (remove the current default search engine,
|
| -# add new search engines to the list, invalidate backup, etc).
|
| -
|
| -
|
| -class ProtectorPreferencesTest(BaseProtectorTest):
|
| - """Generic test suite for Preferences protection."""
|
| -
|
| - def testPreferencesBackupInvalid(self):
|
| - """Test for detecting invalid Preferences backup."""
|
| - # Set startup prefs to open specific URLs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_URLS)
|
| - self.SetPrefs(pyauto.kURLsToRestoreOnStartup, ['http://www.google.com/'])
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=self._InvalidatePreferencesBackup)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Startup settings are reset to default (NTP).
|
| - self.assertEqual(self._SESSION_STARTUP_NTP,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Verify that previous startup URL has not been opened.
|
| - self._AssertTabsOpen(['chrome://newtab/'])
|
| - # Click "Edit Settings...".
|
| - self.DiscardProtectorChange()
|
| - # Verify that a new tab with settings is opened.
|
| - info = self.GetBrowserInfo()
|
| - self._AssertTabsOpen(['chrome://newtab/', 'chrome://chrome/settings/'])
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - self.RestartBrowser(clear_profile=False)
|
| - # Not showing the change after a restart
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testPreferencesBackupInvalidRestoreLastSession(self):
|
| - """Test that session restore setting is not reset if backup is invalid."""
|
| - # Set startup prefs to restore the last session.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - previous_urls = ['chrome://version/', 'http://news.google.com/']
|
| - self.NavigateToURL(previous_urls[0])
|
| - for url in previous_urls[1:]:
|
| - self.AppendTab(pyauto.GURL(url))
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=self._InvalidatePreferencesBackup)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Startup settings are left unchanged.
|
| - self.assertEqual(self._SESSION_STARTUP_LAST,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Session has been restored.
|
| - self._AssertTabsOpen(previous_urls)
|
| -
|
| - def testPreferencesBackupInvalidChangeDismissedOnEdit(self):
|
| - """Test that editing protected prefs dismisses the invalid backup bubble."""
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=self._InvalidatePreferencesBackup)
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Change some protected setting manually.
|
| - self.SetPrefs(pyauto.kHomePage, 'http://example.com/')
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| -
|
| -class ProtectorSessionStartupTest(BaseProtectorTest):
|
| - """Test suite for session startup changes detection with Protector enabled.
|
| - """
|
| - def testDetectSessionStartupChangeAndApply(self):
|
| - """Test for detecting and applying a session startup pref change."""
|
| - # Set startup prefs to restoring last open tabs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - previous_urls = ['chrome://version/', 'http://news.google.com/']
|
| - self.NavigateToURL(previous_urls[0])
|
| - for url in previous_urls[1:]:
|
| - self.AppendTab(pyauto.GURL(url))
|
| - # Restart browser with startup prefs set to open google.com.
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeSessionStartupPrefs(
|
| - self._SESSION_STARTUP_URLS,
|
| - startup_urls=['http://www.google.com']))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEqual(self._SESSION_STARTUP_LAST,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Verify that open tabs are consistent with restored prefs.
|
| - self._AssertTabsOpen(previous_urls)
|
| - self.ApplyProtectorChange()
|
| - # Now the new preference values are active.
|
| - self.assertEqual(self._SESSION_STARTUP_URLS,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testDetectSessionStartupChangeAndDiscard(self):
|
| - """Test for detecting and discarding a session startup pref change."""
|
| - # Set startup prefs to restoring last open tabs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - # Restart browser with startup prefs set to open google.com.
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeSessionStartupPrefs(
|
| - self._SESSION_STARTUP_URLS,
|
| - startup_urls=['http://www.google.com']))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Old preference values restored.
|
| - self.assertEqual(self._SESSION_STARTUP_LAST,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - self.DiscardProtectorChange()
|
| - # Old preference values are still active.
|
| - self.assertEqual(self._SESSION_STARTUP_LAST,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testSessionStartupChangeDismissedOnEdit(self):
|
| - """Test for that editing startup prefs manually dismissed the change."""
|
| - # Set startup prefs to restoring last open tabs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - # Restart browser with startup prefs set to open google.com.
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeSessionStartupPrefs(
|
| - self._SESSION_STARTUP_URLS,
|
| - startup_urls=['http://www.google.com']))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Change the setting manually.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_NTP)
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testSessionStartupPrefMigrationFromHomepage(self):
|
| - """Test migration from old session.restore_on_startup values (homepage)."""
|
| - # Set startup prefs to restoring last open tabs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - self.SetPrefs(pyauto.kURLsToRestoreOnStartup, [])
|
| - new_homepage = 'http://www.google.com/'
|
| - # Restart browser with startup prefs set to open homepage (google.com).
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeSessionStartupPrefs(
|
| - self._SESSION_STARTUP_HOMEPAGE,
|
| - homepage=new_homepage,
|
| - delete_migrated_pref=True))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEqual(self._SESSION_STARTUP_LAST,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - self.assertEqual([],
|
| - self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup))
|
| - self.ApplyProtectorChange()
|
| - # Now the new preference values are active.
|
| - self.assertEqual(self._SESSION_STARTUP_URLS,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Homepage migrated to the list of startup URLs.
|
| - self.assertEqual([new_homepage],
|
| - self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup))
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testSessionStartupPrefMigrationFromBlank(self):
|
| - """Test migration from session.restore_on_startup being blank, as it would
|
| - be for a user who had m18 or lower, and never changed that preference.
|
| - """
|
| - # Set startup prefs to restoring last open tabs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - self.SetPrefs(pyauto.kURLsToRestoreOnStartup, [])
|
| - # Set the homepage.
|
| - new_homepage = 'http://www.google.com/'
|
| - self.SetPrefs(pyauto.kHomePageIsNewTabPage, False)
|
| - self.SetPrefs(pyauto.kHomePage, new_homepage)
|
| - # Restart browser, clearing the 'restore on startup' pref, to simulate a
|
| - # user coming from m18 and having left it on the default value.
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeSessionStartupPrefs(
|
| - startup_type=None,
|
| - delete_migrated_pref=True))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEqual(self._SESSION_STARTUP_LAST,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - self.assertEqual([],
|
| - self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup))
|
| - self.ApplyProtectorChange()
|
| - # Now the new preference values are active.
|
| - self.assertEqual(self._SESSION_STARTUP_URLS,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Homepage migrated to the list of startup URLs.
|
| - self.assertEqual([new_homepage],
|
| - self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup))
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testSessionStartupPrefNoMigrationOnHomepageChange(self):
|
| - """Test that when the user modifies their homepage in m19+, we don't do the
|
| - preference migration.
|
| - """
|
| - # Initially, the default value is selected for kRestoreOnStartup.
|
| - self.assertEqual(self._SESSION_STARTUP_NTP,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Set the homepage, but leave kRestoreOnStartup unchanged.
|
| - new_homepage = 'http://www.google.com/'
|
| - self.SetPrefs(pyauto.kHomePageIsNewTabPage, False)
|
| - self.SetPrefs(pyauto.kHomePage, new_homepage)
|
| - # Restart browser.
|
| - self.RestartBrowser(clear_profile=False)
|
| - # Now the new preference values are active.
|
| - self.assertEqual(self._SESSION_STARTUP_NTP,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # kURLsToRestoreOnStartup pref is unchanged.
|
| - self.assertEqual([],
|
| - self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup))
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testDetectPinnedTabsChangeAndApply(self):
|
| - """Test for detecting and applying a change to pinned tabs."""
|
| - pinned_urls = ['chrome://version/', 'chrome://credits/']
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangePinnedTabsPrefs(pinned_urls))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEqual([],
|
| - self.GetPrefsInfo().Prefs(pyauto.kPinnedTabs))
|
| - # No pinned tabs are open, only NTP.
|
| - info = self.GetBrowserInfo()
|
| - self._AssertTabsOpen(['chrome://newtab/'])
|
| - self.ApplyProtectorChange()
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - # Pinned tabs should have been opened now in the correct order.
|
| - self._AssertTabsOpen(pinned_urls + ['chrome://newtab/'],
|
| - pinned=[True, True, False])
|
| - self.RestartBrowser(clear_profile=False)
|
| - # Not showing the change after a restart
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - # Same pinned tabs are open.
|
| - self._AssertTabsOpen(pinned_urls + ['chrome://newtab/'],
|
| - pinned=[True, True, False])
|
| -
|
| - def testDetectPinnedTabsChangeAndDiscard(self):
|
| - """Test for detecting and discarding a change to pinned tabs."""
|
| - pinned_url = 'chrome://version/'
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangePinnedTabsPrefs([pinned_url]))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEqual([],
|
| - self.GetPrefsInfo().Prefs(pyauto.kPinnedTabs))
|
| - # No pinned tabs are open, only NTP.
|
| - info = self.GetBrowserInfo()
|
| - self._AssertTabsOpen(['chrome://newtab/'])
|
| - self.DiscardProtectorChange()
|
| - # No longer showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - # Pinned tabs are not opened after another restart.
|
| - self.RestartBrowser(clear_profile=False)
|
| - self._AssertTabsOpen(['chrome://newtab/'])
|
| - # Not showing the change after a restart.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| -
|
| -class ProtectorHomepageTest(BaseProtectorTest):
|
| - """Test suite for homepage changes with Protector enabled."""
|
| -
|
| - def testDetectHomepageChangeAndApply(self):
|
| - """Test that homepage change is detected and can be applied."""
|
| - previous_homepage = 'http://example.com/'
|
| - new_homepage = 'http://example.info/'
|
| - self.SetPrefs(pyauto.kHomePage, previous_homepage)
|
| - self.SetPrefs(pyauto.kHomePageIsNewTabPage, False)
|
| - self.SetPrefs(pyauto.kShowHomeButton, False)
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeHomepage(new_homepage, False, True))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEquals(previous_homepage,
|
| - self.GetPrefsInfo().Prefs(pyauto.kHomePage))
|
| - self.assertEquals(False, self.GetPrefsInfo().Prefs(pyauto.kShowHomeButton))
|
| - self.ApplyProtectorChange()
|
| - # Now new values are active.
|
| - self.assertEquals(new_homepage, self.GetPrefsInfo().Prefs(pyauto.kHomePage))
|
| - self.assertEquals(True, self.GetPrefsInfo().Prefs(pyauto.kShowHomeButton))
|
| - # No longer showing the change
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| - def testDetectHomepageChangeAndDiscard(self):
|
| - """Test that homepage change is detected and can be discarded."""
|
| - previous_homepage = 'http://example.com/'
|
| - new_homepage = 'http://example.info/'
|
| - self.SetPrefs(pyauto.kHomePage, previous_homepage)
|
| - self.SetPrefs(pyauto.kHomePageIsNewTabPage, False)
|
| - self.SetPrefs(pyauto.kShowHomeButton, False)
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeHomepage(new_homepage, False, True))
|
| - # The change must be detected by Protector.
|
| - self.assertTrue(self.GetProtectorState()['showing_change'])
|
| - # Protector must restore old preference values.
|
| - self.assertEquals(previous_homepage,
|
| - self.GetPrefsInfo().Prefs(pyauto.kHomePage))
|
| - self.assertEquals(False, self.GetPrefsInfo().Prefs(pyauto.kShowHomeButton))
|
| - self.DiscardProtectorChange()
|
| - # Nothing changed
|
| - self.assertEquals(previous_homepage,
|
| - self.GetPrefsInfo().Prefs(pyauto.kHomePage))
|
| - self.assertEquals(False, self.GetPrefsInfo().Prefs(pyauto.kShowHomeButton))
|
| - # No longer showing the change
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| -
|
| -
|
| -class ProtectorDisabledTest(BaseProtectorTest):
|
| - """Test suite for Protector in disabled state."""
|
| -
|
| - def _IsEnabled(self):
|
| - """Overriden from BaseProtectorTest to disable Protector."""
|
| - return False
|
| -
|
| - def testNoSearchEngineChangeReported(self):
|
| - """Test that the default search engine change is neither reported to user
|
| - nor reverted.
|
| - """
|
| - # Get current search engine.
|
| - old_default_search = self._GetDefaultSearchEngine()
|
| - self.assertTrue(old_default_search)
|
| - # Close browser, change the search engine and start it again.
|
| - self.RestartBrowser(clear_profile=False,
|
| - pre_launch_hook=self._ChangeDefaultSearchEngine)
|
| - # The change must not be reported by Protector.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - default_search = self._GetDefaultSearchEngine()
|
| - # The new search engine must be active.
|
| - self.assertEqual(self._new_default_search_keyword,
|
| - default_search['keyword'])
|
| -
|
| - def testNoPreferencesBackupInvalidReported(self):
|
| - """Test that invalid Preferences backup is not reported."""
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_URLS)
|
| - new_url = 'chrome://version/'
|
| - self.SetPrefs(pyauto.kURLsToRestoreOnStartup, [new_url])
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=self._InvalidatePreferencesBackup)
|
| - # The change must not be reported by Protector.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - # New preference values must be active.
|
| - self.assertEqual(self._SESSION_STARTUP_URLS,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Verify that open tabs are consistent with new prefs.
|
| - self._AssertTabsOpen([new_url])
|
| -
|
| - def testNoSessionStartupChangeReported(self):
|
| - """Test that the session startup change is neither reported nor reverted."""
|
| - # Set startup prefs to restoring last open tabs.
|
| - self.SetPrefs(pyauto.kRestoreOnStartup, self._SESSION_STARTUP_LAST)
|
| - new_url = 'chrome://version/'
|
| - self.NavigateToURL('http://www.google.com/')
|
| - # Restart browser with startup prefs set to open google.com.
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeSessionStartupPrefs(
|
| - self._SESSION_STARTUP_URLS,
|
| - startup_urls=[new_url]))
|
| - # The change must not be reported by Protector.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - # New preference values must be active.
|
| - self.assertEqual(self._SESSION_STARTUP_URLS,
|
| - self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
|
| - # Verify that open tabs are consistent with new prefs.
|
| - self._AssertTabsOpen([new_url])
|
| -
|
| - def testNoHomepageChangeReported(self):
|
| - """Test that homepage change is neither reported nor reverted."""
|
| - new_homepage = 'http://example.info/'
|
| - self.SetPrefs(pyauto.kHomePage, 'http://example.com/')
|
| - self.SetPrefs(pyauto.kHomePageIsNewTabPage, False)
|
| - self.SetPrefs(pyauto.kShowHomeButton, False)
|
| - self.RestartBrowser(
|
| - clear_profile=False,
|
| - pre_launch_hook=lambda: self._ChangeHomepage(new_homepage, False, True))
|
| - # Not showing the change.
|
| - self.assertFalse(self.GetProtectorState()['showing_change'])
|
| - # New values must be active.
|
| - self.assertEquals(new_homepage, self.GetPrefsInfo().Prefs(pyauto.kHomePage))
|
| - self.assertEquals(True, self.GetPrefsInfo().Prefs(pyauto.kShowHomeButton))
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|