15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_functional 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MultiprofileTest(pyauto.PyUITest): 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Tests for Multi-Profile / Multi-users""" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _RESTORE_STARTUP_URL_VALUE = 4 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _RESTORE_LASTOPEN_URL_VALUE = 1 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _RESTORE_DEFAULT_URL_VALUE = 0 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def Debug(self): 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test method for experimentation. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This method will not run automatically. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while True: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raw_input('Hit <enter> to dump info.. ') 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.pprint(self.GetMultiProfileInfo()) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _GetSearchEngineWithKeyword(self, keyword, windex=0): 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Get search engine info and return an element that matches keyword. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword: Search engine keyword field. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windex: The window index, default is 0. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Returns: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A search engine info dict or None. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_list = ([x for x in self.GetSearchEngineInfo(windex=windex) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if x['keyword'] == keyword]) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if match_list: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return match_list[0] 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _SetPreferences(self, dict, windex=0): 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Sets preferences settings. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _dict: Dictionary of key preferences and its value to be set. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windex: The window index, defaults to 0 (the first window). 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for key in dict.iterkeys(): 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetPrefs(key, dict[key], windex=windex) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _SetStartUpPage(self, url, windex=0): 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Set start up page. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url: URL of the page to be set as start up page. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windex: The window index, default is 0. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _dict = {pyauto.kURLsToRestoreOnStartup: [url], 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto.kRestoreOnStartup: self._RESTORE_STARTUP_URL_VALUE} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetPreferences(_dict, windex=windex) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_info = self.GetPrefsInfo(windex=windex).Prefs( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto.kURLsToRestoreOnStartup) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(url in prefs_info) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _SetHomePage(self, url, windex=0): 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Create new profile and set home page. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url: URL of the page to be set as home page 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windex: The window index, default is 0. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _dict = {pyauto.kHomePage: url, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto.kHomePageIsNewTabPage: False, pyauto.kShowHomeButton: True, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto.kRestoreOnStartup: self._RESTORE_DEFAULT_URL_VALUE} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetPreferences(_dict, windex=windex) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(url in 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.GetPrefsInfo(windex=windex).Prefs(pyauto.kHomePage)) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _SetSessionRestoreURLs(self, set_restore, windex=0): 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Create new profile and set home page. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_restore: Value of action of start up. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windex: The window index, default is 0. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.NavigateToURL('http://www.google.com/', windex) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendTab(pyauto.GURL('http://news.google.com/'), windex) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_tabs = self.GetTabCount(windex) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict = {pyauto.kRestoreOnStartup: set_restore} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetPreferences(dict, windex=windex) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _AddSearchEngine(self, title, keyword, url, windex=0): 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Add search engine. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title: Name for search engine. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword: Keyword, used to initiate a custom search from omnibox. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url: URL template for this search engine's query. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windex: The window index, default is 0. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AddSearchEngine(title, keyword, url, windex=windex) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = self._GetSearchEngineWithKeyword(keyword, windex=windex) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(name) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _AssertStartUpPage(self, url, profile='Default'): 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Asserts start up page for given profile. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url: URL of the page to be set as start up page 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile: The profile name, defaults to 'Default'. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendBrowserLaunchSwitch('--profile-directory=' + profile) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RestartBrowser(clear_profile=False) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = self.GetBrowserInfo() 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(url, info['windows'][0]['tabs'][0]['url'].rstrip('/')) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(url in 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _AssertHomePage(self, url, profile='Default'): 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Asserts home page for given profile. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url: URL of the page to be set as home page 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile: The profile name, defaults to 'Dafault'. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendBrowserLaunchSwitch('--profile-directory=' + profile) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RestartBrowser(clear_profile=False) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(url in self.GetPrefsInfo().Prefs(pyauto.kHomePage)) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _AssertDefaultSearchEngine(self, search_engine, profile='Default'): 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Asserts default search engine for given profile. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_engine: Name of default search engine. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile: The profile name, defaults to 'Default'. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendBrowserLaunchSwitch('--profile-directory=' + profile) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RestartBrowser(clear_profile=False) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = self._GetSearchEngineWithKeyword(search_engine) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(name['is_default']) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetOmniboxText('test search') 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OmniboxAcceptInput() 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(re.search(search_engine, self.GetActiveTabURL().spec())) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _AssertSessionRestore(self, url_list, set_restore, num_tabs=1, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile='Default'): 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Asserts urls when session is set to restored or set default. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list: List of URL to be restored. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_restore: Value of action of start up. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_tabs: Number of tabs to be restored, default is 1. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile: The profile name, defaults to 'Default'. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendBrowserLaunchSwitch('--profile-directory=' + profile) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RestartBrowser(clear_profile=False) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(num_tabs, self.GetTabCount()) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup), 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_restore) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_index = 0 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (tab_index < num_tabs): 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.ActivateTab(tab_index) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(url_list[tab_index], self.GetActiveTabURL().spec()) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_index += 1 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testBasic(self): 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Multi-profile windows can open.""" 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(1, self.GetBrowserWindowCount()) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.GetMultiProfileInfo()['enabled'], 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Multi-profile is not enabled') 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Verify multi-profile info. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_profile = self.GetMultiProfileInfo() 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(2, len(multi_profile['profiles'])) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_profile = multi_profile['profiles'][1] 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(new_profile['name']) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Verify browser windows. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(2, self.GetBrowserWindowCount(), 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='New browser window did not open') 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = self.GetBrowserInfo() 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_profile_window = info['windows'][1] 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual('Profile 1', new_profile_window['profile_path']) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(1, len(new_profile_window['tabs'])) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual('chrome://newtab/', new_profile_window['tabs'][0]['url']) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def test20NewProfiles(self): 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Verify we can create 20 new profiles.""" 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for index in range(1, 21): 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_profile = self.GetMultiProfileInfo() 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(index + 1, len(multi_profile['profiles']), 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Expected %d profiles after adding %d new users. Got %d' % ( 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) index + 1, index, len(multi_profile['profiles']))) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testStartUpPageOptionInMultiProfile(self): 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test startup page for Multi-profile windows.""" 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.GetMultiProfileInfo()['enabled'], 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Multi-profile is not enabled') 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 1, set startup page to 'www.google.com'. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetStartUpPage('http://www.google.com', windex=1) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 2, set startup page to 'www.yahoo.com'. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Verify start up page for Profile 2 is still newtab page. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = self.GetBrowserInfo() 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual('chrome://newtab/', info['windows'][2]['tabs'][0]['url']) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetStartUpPage('http://www.yahoo.com', windex=2) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Exit Profile 1 / Profile 2 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(2) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(1) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 2, verify startup page. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertStartUpPage('http://www.yahoo.com', profile='Profile 2') 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 1, verify startup page. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertStartUpPage('http://www.google.com', profile='Profile 1') 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testHomePageOptionMultiProfile(self): 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test Home page for Multi-profile windows.""" 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.GetMultiProfileInfo()['enabled'], 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Multi-profile is not enabled') 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 1, set homepage to 'www.google.com'. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetHomePage('http://www.google.com', windex=1) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 2, set homepage to 'www.yahoo.com'. 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetHomePage('http://www.yahoo.com', windex=2) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Exit Profile 1 / Profile 2 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(2) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(1) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 2, verify startup page. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertHomePage('http://www.yahoo.com', profile='Profile 2') 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 1, verify startup page. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertHomePage('http://www.google.com', profile='Profile 1') 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testSessionRestoreInMultiProfile(self): 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test session restore preference for Multi-profile windows.""" 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.GetMultiProfileInfo()['enabled'], 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Multi-profile is not enabled') 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 1, set pref to restore session on 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # startup. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetSessionRestoreURLs(self._RESTORE_LASTOPEN_URL_VALUE, windex=1) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 2, do not set session restore pref. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetSessionRestoreURLs(self._RESTORE_DEFAULT_URL_VALUE, windex=2) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Exit Profile 1 / Profile 2 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(2) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(1) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 1, verify session restores on startup. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list = ['http://www.google.com/', 'http://news.google.com/'] 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertSessionRestore(url_list, self._RESTORE_LASTOPEN_URL_VALUE, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_tabs=2, profile='Profile 1') 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 2, verify session does not get restored. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list = ['chrome://newtab/'] 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertSessionRestore(url_list, self._RESTORE_DEFAULT_URL_VALUE, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_tabs=1, profile='Profile 2') 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMakeSearchEngineDefaultInMultiprofile(self): 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test adding and making a search engine default for Multi-profiles.""" 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.GetMultiProfileInfo()['enabled'], 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Multi-profile is not enabled') 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 1, add search engine to 'Hulu'. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AddSearchEngine('Hulu', 'hulu.com', 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.hulu.com/search?query=%s&ref=os&src={referrer:source?}', 1) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.MakeSearchEngineDefault('hulu.com', windex=1) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 2, add search engine to 'Youtube'. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AddSearchEngine('YouTube Video Search', 'youtube.com', 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.youtube.com/results?search_query=%s&page={startPage?}'+ 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '&utm_source=opensearch', 2) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.MakeSearchEngineDefault('youtube.com', windex=2) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Exit Profile 1 / Profile 2 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(2) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(1) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 1, verify default search engine as 'Hulu'. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertDefaultSearchEngine('hulu.com', profile='Profile 1') 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 2, verify default search engine as 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # 'Youtube'. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AssertDefaultSearchEngine('youtube.com', profile='Profile 2') 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testDeleteSearchEngineInMultiprofile(self): 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test adding then deleting a search engine for Multi-profiles.""" 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.GetMultiProfileInfo()['enabled'], 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg='Multi-profile is not enabled') 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 1, add 'foo.com' as new search engine. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AddSearchEngine('foo', 'foo.com', 'http://foo/?q=%s', windex=1) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Launch browser with new Profile 2, add 'foo.com' as new search engine. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindowWithNewProfile() 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._AddSearchEngine('foo', 'foo.com', 'http://foo/?q=%s', windex=2) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Delete search engine 'foo.com' from Profile 1 and exit. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.DeleteSearchEngine('foo.com', windex=1) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(2) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(1) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 1, verify search engine 'foo.com' 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # is deleted. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendBrowserLaunchSwitch('--profile-directory=Profile 1') 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RestartBrowser(clear_profile=False) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) foo = self._GetSearchEngineWithKeyword('foo.com') 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(foo) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Relaunch Browser with Profile 2, verify search engine 'foo.com' 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # is not deleted. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendBrowserLaunchSwitch('--profile-directory=Profile 2') 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RestartBrowser(clear_profile=False) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) foo = self._GetSearchEngineWithKeyword('foo.com') 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(foo) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto_functional.Main() 315