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