tab_contents_iterator_unittest.cc revision 3551c9c881056c480085172ff9840cab31610854
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/prefs/testing_pref_service.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/browser_process.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/browser_shutdown.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/lifetime/application_lifetime.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/profiles/profile_manager.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/browser.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/browser_commands.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/browser_list.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/host_desktop.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/tabs/tab_strip_model.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/pref_names.h"
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/browser_with_test_window_test.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/test_browser_window.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BrowserListTest;
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Helper function to iterate and count all the tabs.
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)size_t CountAllTabs() {
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  size_t count = 0;
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  for (TabContentsIterator iterator; !iterator.done(); iterator.Next())
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ++count;
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return count;
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(BrowserListTest, TabContentsIteratorVerifyCount) {
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Make sure we have 1 window to start with.
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(1U,
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size());
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(0U, CountAllTabs());
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Create more browsers/windows.
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Browser::CreateParams native_params(profile(),
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                      chrome::HOST_DESKTOP_TYPE_NATIVE);
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<Browser> browser2(
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&native_params));
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Create browser 3 and 4 on the Ash desktop (the TabContentsIterator
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // shouldn't see the difference).
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  Browser::CreateParams ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH);
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<Browser> browser3(
53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&ash_params));
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<Browser> browser4(
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&ash_params));
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Sanity checks.
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_CHROMEOS)
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // The ash desktop is the native desktop on Chrome OS.
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(4U,
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size());
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(2U,
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size());
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(2U,
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH)->size());
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(0, browser()->tab_strip_model()->count());
6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(0, browser2->tab_strip_model()->count());
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(0, browser3->tab_strip_model()->count());
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(0, browser4->tab_strip_model()->count());
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(0U, CountAllTabs());
744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Add some tabs.
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (size_t i = 0; i < 3; ++i)
774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    chrome::NewTab(browser2.get());
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  chrome::NewTab(browser3.get());
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(4U, CountAllTabs());
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Close some tabs.
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  browser2->tab_strip_model()->CloseAllTabs();
8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(1U, CountAllTabs());
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Add lots of tabs.
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  for (size_t i = 0; i < 41; ++i)
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    chrome::NewTab(browser());
9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(42U, CountAllTabs());
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Close all remaining tabs to keep all the destructors happy.
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  browser3->tab_strip_model()->CloseAllTabs();
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(BrowserListTest, TabContentsIteratorVerifyBrowser) {
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Make sure we have 1 window to start with.
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(1U,
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size());
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Create more browsers/windows.
102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  Browser::CreateParams native_params(profile(),
103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                      chrome::HOST_DESKTOP_TYPE_NATIVE);
104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<Browser> browser2(
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&native_params));
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Create browser 3 on the Ash desktop (the TabContentsIterator shouldn't see
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // the difference).
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Browser::CreateParams ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH);
10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<Browser> browser3(
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&ash_params));
111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Sanity checks.
11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_CHROMEOS)
11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // The ash desktop is the native desktop on Chrome OS.
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(3U,
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size());
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else
118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(2U,
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE)->size());
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(1U,
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH)->size());
12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(0, browser()->tab_strip_model()->count());
12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(0, browser2->tab_strip_model()->count());
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(0, browser3->tab_strip_model()->count());
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(0U, CountAllTabs());
1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Add some tabs.
13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  for (size_t i = 0; i < 3; ++i)
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    chrome::NewTab(browser2.get());
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < 2; ++i)
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    chrome::NewTab(browser3.get());
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  size_t count = 0;
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (TabContentsIterator iterator; !iterator.done(); iterator.Next(),
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                       ++count) {
1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (count < 3)
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      EXPECT_EQ(browser2.get(), iterator.browser());
14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    else if (count < 5)
14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      EXPECT_EQ(browser3.get(), iterator.browser());
14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    else
14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      ADD_FAILURE();
14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Close some tabs.
14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  browser2->tab_strip_model()->CloseAllTabs();
14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  browser3->tab_strip_model()->CloseWebContentsAt(1, TabStripModel::CLOSE_NONE);
14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
150d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  count = 0;
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (TabContentsIterator iterator; !iterator.done(); iterator.Next(),
15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                                       ++count) {
15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    if (count == 0)
15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      EXPECT_EQ(browser3.get(), iterator.browser());
15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    else
15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      ADD_FAILURE();
15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Now make it one tab per browser.
160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  chrome::NewTab(browser());
16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  chrome::NewTab(browser2.get());
16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  count = 0;
16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  for (TabContentsIterator iterator; !iterator.done(); iterator.Next(),
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                       ++count) {
16603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (count == 0)
16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      EXPECT_EQ(browser(), iterator.browser());
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    else if (count == 1)
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      EXPECT_EQ(browser2.get(), iterator.browser());
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    else if (count == 2)
1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      EXPECT_EQ(browser3.get(), iterator.browser());
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    else
17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      ADD_FAILURE();
17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Close all remaining tabs to keep all the destructors happy.
17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  browser2->tab_strip_model()->CloseAllTabs();
17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  browser3->tab_strip_model()->CloseAllTabs();
17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_CHROMEOS)
182d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Calling AttemptRestart on ChromeOS will exit the test.
18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MAYBE_AttemptRestart DISABLED_AttemptRestart
18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else
18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MAYBE_AttemptRestart AttemptRestart
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
18703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(BrowserListTest, MAYBE_AttemptRestart) {
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(g_browser_process);
1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  TestingPrefServiceSimple testing_pref_service;
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  testing_pref_service.registry()->RegisterBooleanPref(
1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      prefs::kWasRestarted, false);
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  testing_pref_service.registry()->RegisterBooleanPref(
19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      prefs::kRestartLastSessionOnShutdown,
19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      false);
19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TestingBrowserProcess* testing_browser_process =
198d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      TestingBrowserProcess::GetGlobal();
199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  testing_browser_process->SetLocalState(&testing_pref_service);
2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(g_browser_process->local_state());
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ProfileManager* profile_manager = new ProfileManager(base::FilePath());
2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  testing_browser_process->SetProfileManager(profile_manager);
2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  chrome::AttemptRestart();
2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Cancel the effects of us calling chrome::AttemptRestart. Otherwise tests
2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // ran after this one will fail.
2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  browser_shutdown::SetTryingToQuit(false);
2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_TRUE(testing_pref_service.GetBoolean(prefs::kWasRestarted));
2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  testing_browser_process->SetLocalState(NULL);
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)