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