15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_shutdown.h" 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/test_browser_window.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef BrowserWithTestWindowTest BrowserListTest; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper function to iterate and count all the tabs. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t CountAllTabs() { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count = 0; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (TabContentsIterator iterator; !iterator.done(); iterator.Next()) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++count; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return count; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowserListTest, TabContentsIteratorVerifyCount) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we have 1 window to start with. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, CountAllTabs()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create more browsers/windows. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams native_params(profile(), 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create browser 3 and 4 on the Ash desktop (the TabContentsIterator 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // shouldn't see the difference). 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser3( 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&ash_params)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser4( 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&ash_params)); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sanity checks. 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The ash desktop is the native desktop on Chrome OS. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(4U, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size()); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size()); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH)->size()); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->count()); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser2->tab_strip_model()->count()); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser3->tab_strip_model()->count()); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser4->tab_strip_model()->count()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, CountAllTabs()); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some tabs. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < 3; ++i) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser2.get()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser3.get()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, CountAllTabs()); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close some tabs. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser2->tab_strip_model()->CloseAllTabs(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, CountAllTabs()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add lots of tabs. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < 41; ++i) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(42U, CountAllTabs()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close all remaining tabs to keep all the destructors happy. 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser3->tab_strip_model()->CloseAllTabs(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowserListTest, TabContentsIteratorVerifyBrowser) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we have 1 window to start with. 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create more browsers/windows. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams native_params(profile(), 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create browser 3 on the Ash desktop (the TabContentsIterator shouldn't see 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the difference). 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser3( 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&ash_params)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sanity checks. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The ash desktop is the native desktop on Chrome OS. 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(3U, 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size()); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size()); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH)->size()); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->count()); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser2->tab_strip_model()->count()); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser3->tab_strip_model()->count()); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, CountAllTabs()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some tabs. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < 3; ++i) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser2.get()); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < 2; ++i) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NewTab(browser3.get()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count = 0; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (TabContentsIterator iterator; !iterator.done(); iterator.Next(), 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++count) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count < 3) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser2.get(), iterator.browser()); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (count < 5) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser3.get(), iterator.browser()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADD_FAILURE(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close some tabs. 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser2->tab_strip_model()->CloseAllTabs(); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser3->tab_strip_model()->CloseWebContentsAt(1, TabStripModel::CLOSE_NONE); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) count = 0; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (TabContentsIterator iterator; !iterator.done(); iterator.Next(), 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++count) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count == 0) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser3.get(), iterator.browser()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADD_FAILURE(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now make it one tab per browser. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser2.get()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) count = 0; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (TabContentsIterator iterator; !iterator.done(); iterator.Next(), 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++count) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count == 0) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser(), iterator.browser()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (count == 1) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser2.get(), iterator.browser()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (count == 2) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(browser3.get(), iterator.browser()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADD_FAILURE(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close all remaining tabs to keep all the destructors happy. 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser2->tab_strip_model()->CloseAllTabs(); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser3->tab_strip_model()->CloseAllTabs(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Calling AttemptRestart on ChromeOS will exit the test. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_AttemptRestart DISABLED_AttemptRestart 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_AttemptRestart AttemptRestart 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowserListTest, MAYBE_AttemptRestart) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(g_browser_process); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple testing_pref_service; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing_pref_service.registry()->RegisterBooleanPref( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kWasRestarted, false); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing_pref_service.registry()->RegisterBooleanPref( 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kRestartLastSessionOnShutdown, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false); 1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) testing_pref_service.registry()->RegisterListPref( 1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs::kProfilesLastActive); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingBrowserProcess* testing_browser_process = 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_browser_process->SetLocalState(&testing_pref_service); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(g_browser_process->local_state()); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileManager* profile_manager = new ProfileManager(base::FilePath()); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_browser_process->SetProfileManager(profile_manager); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::AttemptRestart(); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cancel the effects of us calling chrome::AttemptRestart. Otherwise tests 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ran after this one will fail. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_shutdown::SetTryingToQuit(false); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(testing_pref_service.GetBoolean(prefs::kWasRestarted)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_browser_process->SetLocalState(NULL); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 214