Chromium Code Reviews| Index: chrome/test/base/browser_with_test_window_test.cc |
| diff --git a/chrome/test/base/browser_with_test_window_test.cc b/chrome/test/base/browser_with_test_window_test.cc |
| index 08a9dd7ab2e11003e9966c62b718e8181912b179..dbdc14b1c3f0905a8005d1ae1465cf5c3a9e0850 100644 |
| --- a/chrome/test/base/browser_with_test_window_test.cc |
| +++ b/chrome/test/base/browser_with_test_window_test.cc |
| @@ -87,9 +87,11 @@ void BrowserWithTestWindowTest::TearDown() { |
| // before the profile can be destroyed and the test safely shut down. |
| base::RunLoop().RunUntilIdle(); |
| - // Reset the profile here because some profile keyed services (like the |
| - // audio service) depend on test stubs that the helpers below will remove. |
| - DestroyBrowserAndProfile(); |
| + // Close the browser tabs and destroy the browser and window instances. |
| + if (browser_.get()) |
|
sky
2017/04/07 14:51:39
if (browser_)?
msw
2017/04/07 15:38:41
Done.
|
| + browser()->tab_strip_model()->CloseAllTabs(); |
| + browser_.reset(); |
| + window_.reset(); |
| if (content::IsBrowserSideNavigationEnabled()) |
| content::BrowserSideNavigationTearDown(); |
| @@ -99,15 +101,23 @@ void BrowserWithTestWindowTest::TearDown() { |
| #endif |
| #if defined(OS_CHROMEOS) |
| + // Destroy the shell before the profile to match production shutdown ordering. |
| ash_test_helper_->TearDown(); |
| #elif defined(TOOLKIT_VIEWS) |
| views_test_helper_.reset(); |
| #endif |
| + // Destroy the profile here - otherwise, if the profile is freed in the |
| + // destructor, and a test subclass owns a resource that the profile depends |
| + // on (such as g_browser_process()->local_state()) there's no way for the |
| + // subclass to free it after the profile. |
| + if (profile_) |
| + DestroyProfile(profile_); |
| + profile_ = nullptr; |
| + |
| testing::Test::TearDown(); |
| - // A Task is leaked if we don't destroy everything, then run the message |
| - // loop. |
| + // A Task is leaked if we don't destroy everything, then run the message loop. |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); |
| base::RunLoop().Run(); |
| @@ -164,23 +174,6 @@ void BrowserWithTestWindowTest::NavigateAndCommitActiveTabWithTitle( |
| contents->UpdateTitleForEntry(controller->GetActiveEntry(), title); |
| } |
| -void BrowserWithTestWindowTest::DestroyBrowserAndProfile() { |
| - if (browser_.get()) { |
| - // Make sure we close all tabs, otherwise Browser isn't happy in its |
| - // destructor. |
| - browser()->tab_strip_model()->CloseAllTabs(); |
| - browser_.reset(NULL); |
| - } |
| - window_.reset(NULL); |
| - // Destroy the profile here - otherwise, if the profile is freed in the |
| - // destructor, and a test subclass owns a resource that the profile depends |
| - // on (such as g_browser_process()->local_state()) there's no way for the |
| - // subclass to free it after the profile. |
| - if (profile_) |
| - DestroyProfile(profile_); |
| - profile_ = NULL; |
| -} |
| - |
| TestingProfile* BrowserWithTestWindowTest::CreateProfile() { |
| return new TestingProfile(); |
| } |