Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/browser/background/background_mode_manager.h" | |
| 8 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/browser_shutdown.h" | 10 #include "chrome/browser/browser_shutdown.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 11 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/lifetime/application_lifetime.h" | 12 #include "chrome/browser/lifetime/application_lifetime.h" |
| 12 #include "chrome/browser/lifetime/browser_close_manager.h" | 13 #include "chrome/browser/lifetime/browser_close_manager.h" |
| 13 #include "chrome/browser/net/url_request_mock_util.h" | 14 #include "chrome/browser/net/url_request_mock_util.h" |
| 14 #include "chrome/browser/prefs/session_startup_pref.h" | 15 #include "chrome/browser/prefs/session_startup_pref.h" |
| 15 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
| 16 #include "chrome/browser/profiles/profile_manager.h" | 17 #include "chrome/browser/profiles/profile_manager.h" |
| 17 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" | 18 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" |
| 18 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" | 19 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" |
| 19 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
| 21 #include "chrome/browser/ui/browser_commands.h" | |
| 20 #include "chrome/browser/ui/browser_iterator.h" | 22 #include "chrome/browser/ui/browser_iterator.h" |
| 21 #include "chrome/browser/ui/browser_window.h" | 23 #include "chrome/browser/ui/browser_window.h" |
| 22 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 24 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 23 #include "chrome/common/chrome_switches.h" | 25 #include "chrome/common/chrome_switches.h" |
| 24 #include "chrome/common/url_constants.h" | 26 #include "chrome/common/url_constants.h" |
| 25 #include "chrome/test/base/in_process_browser_test.h" | 27 #include "chrome/test/base/in_process_browser_test.h" |
| 26 #include "chrome/test/base/ui_test_utils.h" | 28 #include "chrome/test/base/ui_test_utils.h" |
| 27 #include "content/public/browser/browser_context.h" | 29 #include "content/public/browser/browser_context.h" |
| 28 #include "content/public/browser/download_item.h" | 30 #include "content/public/browser/download_item.h" |
| 29 #include "content/public/browser/download_manager.h" | 31 #include "content/public/browser/download_manager.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 119 class TestBrowserCloseManager : public BrowserCloseManager { | 121 class TestBrowserCloseManager : public BrowserCloseManager { |
| 120 public: | 122 public: |
| 121 enum UserChoice { | 123 enum UserChoice { |
| 122 USER_CHOICE_USER_CANCELS_CLOSE, | 124 USER_CHOICE_USER_CANCELS_CLOSE, |
| 123 USER_CHOICE_USER_ALLOWS_CLOSE, | 125 USER_CHOICE_USER_ALLOWS_CLOSE, |
| 124 }; | 126 }; |
| 125 | 127 |
| 126 static void AttemptClose(UserChoice user_choice) { | 128 static void AttemptClose(UserChoice user_choice) { |
| 127 scoped_refptr<BrowserCloseManager> browser_close_manager = | 129 scoped_refptr<BrowserCloseManager> browser_close_manager = |
| 128 new TestBrowserCloseManager(user_choice); | 130 new TestBrowserCloseManager(user_choice); |
| 131 browser_shutdown::SetTryingToQuit(true); | |
| 129 browser_close_manager->StartClosingBrowsers(); | 132 browser_close_manager->StartClosingBrowsers(); |
| 130 } | 133 } |
| 131 | 134 |
| 132 protected: | 135 protected: |
| 133 virtual ~TestBrowserCloseManager() {} | 136 virtual ~TestBrowserCloseManager() {} |
| 134 | 137 |
| 135 virtual void ConfirmCloseWithPendingDownloads( | 138 virtual void ConfirmCloseWithPendingDownloads( |
| 136 int download_count, | 139 int download_count, |
| 137 const base::Callback<void(bool)>& callback) OVERRIDE { | 140 const base::Callback<void(bool)>& callback) OVERRIDE { |
| 138 switch (user_choice_) { | 141 switch (user_choice_) { |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 149 | 152 |
| 150 private: | 153 private: |
| 151 explicit TestBrowserCloseManager(UserChoice user_choice) | 154 explicit TestBrowserCloseManager(UserChoice user_choice) |
| 152 : user_choice_(user_choice) {} | 155 : user_choice_(user_choice) {} |
| 153 | 156 |
| 154 UserChoice user_choice_; | 157 UserChoice user_choice_; |
| 155 | 158 |
| 156 DISALLOW_COPY_AND_ASSIGN(TestBrowserCloseManager); | 159 DISALLOW_COPY_AND_ASSIGN(TestBrowserCloseManager); |
| 157 }; | 160 }; |
| 158 | 161 |
| 162 class FakeBackgroundModeManager : public BackgroundModeManager { | |
| 163 public: | |
| 164 FakeBackgroundModeManager() | |
| 165 : BackgroundModeManager( | |
| 166 CommandLine::ForCurrentProcess(), | |
| 167 &g_browser_process->profile_manager()->GetProfileInfoCache()), | |
| 168 suspended_(false) {} | |
| 169 | |
| 170 virtual void SuspendBackgroundMode() OVERRIDE { | |
| 171 BackgroundModeManager::SuspendBackgroundMode(); | |
| 172 suspended_ = true; | |
| 173 } | |
| 174 | |
| 175 virtual void ResumeBackgroundMode() OVERRIDE { | |
| 176 BackgroundModeManager::ResumeBackgroundMode(); | |
| 177 suspended_ = false; | |
| 178 } | |
| 179 | |
| 180 bool IsBackgroundModeSuspended() { | |
| 181 return suspended_; | |
| 182 } | |
| 183 | |
| 184 private: | |
| 185 bool suspended_; | |
| 186 }; | |
| 187 | |
| 159 } // namespace | 188 } // namespace |
| 160 | 189 |
| 161 class BrowserCloseManagerBrowserTest | 190 class BrowserCloseManagerBrowserTest |
| 162 : public InProcessBrowserTest, | 191 : public InProcessBrowserTest, |
| 163 public testing::WithParamInterface<bool> { | 192 public testing::WithParamInterface<bool> { |
| 164 protected: | 193 protected: |
| 165 virtual void SetUpOnMainThread() OVERRIDE { | 194 virtual void SetUpOnMainThread() OVERRIDE { |
| 166 InProcessBrowserTest::SetUpOnMainThread(); | 195 InProcessBrowserTest::SetUpOnMainThread(); |
| 167 SessionStartupPref::SetStartupPref( | 196 SessionStartupPref::SetStartupPref( |
| 168 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | 197 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 196 std::vector<Browser*> browsers_; | 225 std::vector<Browser*> browsers_; |
| 197 AppModalDialogObserver dialogs_; | 226 AppModalDialogObserver dialogs_; |
| 198 }; | 227 }; |
| 199 | 228 |
| 200 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 229 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
| 201 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 230 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 202 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 231 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 203 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 232 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 204 RepeatedNotificationObserver cancel_observer( | 233 RepeatedNotificationObserver cancel_observer( |
| 205 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 234 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 206 chrome::CloseAllBrowsers(); | 235 chrome::CloseAllBrowsersAndQuit(); |
| 207 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 236 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 208 cancel_observer.Wait(); | 237 cancel_observer.Wait(); |
| 209 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 238 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 210 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 239 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 211 | 240 |
| 212 RepeatedNotificationObserver close_observer( | 241 RepeatedNotificationObserver close_observer( |
| 213 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 242 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 214 chrome::CloseAllBrowsers(); | 243 chrome::CloseAllBrowsersAndQuit(); |
| 215 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 244 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 216 close_observer.Wait(); | 245 close_observer.Wait(); |
| 217 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 246 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 218 EXPECT_TRUE(chrome::BrowserIterator().done()); | 247 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 219 } | 248 } |
| 220 | 249 |
| 221 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 250 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 222 TestShutdownMoreThanOnce) { | 251 TestShutdownMoreThanOnce) { |
| 223 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 252 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 224 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 253 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 225 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 254 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 226 RepeatedNotificationObserver cancel_observer( | 255 RepeatedNotificationObserver cancel_observer( |
| 227 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 256 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 228 chrome::CloseAllBrowsers(); | 257 chrome::CloseAllBrowsersAndQuit(); |
| 229 chrome::CloseAllBrowsers(); | 258 chrome::CloseAllBrowsersAndQuit(); |
| 230 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 259 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 231 cancel_observer.Wait(); | 260 cancel_observer.Wait(); |
| 232 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 261 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 233 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 262 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 234 | 263 |
| 235 RepeatedNotificationObserver close_observer( | 264 RepeatedNotificationObserver close_observer( |
| 236 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 265 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 237 chrome::CloseAllBrowsers(); | 266 chrome::CloseAllBrowsersAndQuit(); |
| 238 chrome::CloseAllBrowsers(); | 267 chrome::CloseAllBrowsersAndQuit(); |
| 239 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 268 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 240 close_observer.Wait(); | 269 close_observer.Wait(); |
| 241 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 270 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 242 EXPECT_TRUE(chrome::BrowserIterator().done()); | 271 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 243 } | 272 } |
| 244 | 273 |
| 245 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { | 274 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { |
| 246 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 275 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 247 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 276 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 248 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 277 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 249 AddBlankTabAndShow(browser()); | 278 AddBlankTabAndShow(browser()); |
| 250 ASSERT_NO_FATAL_FAILURE( | 279 ASSERT_NO_FATAL_FAILURE( |
| 251 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 280 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
| 252 RepeatedNotificationObserver cancel_observer( | 281 RepeatedNotificationObserver cancel_observer( |
| 253 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 282 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 254 chrome::CloseAllBrowsers(); | 283 chrome::CloseAllBrowsersAndQuit(); |
| 255 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 284 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 256 cancel_observer.Wait(); | 285 cancel_observer.Wait(); |
| 257 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 286 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 258 | 287 |
| 259 browser()->tab_strip_model() | 288 browser()->tab_strip_model() |
| 260 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 289 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
| 261 content::TestNavigationObserver navigation_observer( | 290 content::TestNavigationObserver navigation_observer( |
| 262 browser()->tab_strip_model()->GetActiveWebContents(), 1); | 291 browser()->tab_strip_model()->GetActiveWebContents(), 1); |
| 263 ASSERT_NO_FATAL_FAILURE( | 292 ASSERT_NO_FATAL_FAILURE( |
| 264 NavigateToURLWithDisposition(browser(), | 293 NavigateToURLWithDisposition(browser(), |
| 265 GURL(chrome::kChromeUIVersionURL), | 294 GURL(chrome::kChromeUIVersionURL), |
| 266 CURRENT_TAB, | 295 CURRENT_TAB, |
| 267 ui_test_utils::BROWSER_TEST_NONE)); | 296 ui_test_utils::BROWSER_TEST_NONE)); |
| 268 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 297 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 269 navigation_observer.Wait(); | 298 navigation_observer.Wait(); |
| 270 | 299 |
| 271 RepeatedNotificationObserver close_observer( | 300 RepeatedNotificationObserver close_observer( |
| 272 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 301 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 273 chrome::CloseAllBrowsers(); | 302 chrome::CloseAllBrowsersAndQuit(); |
| 274 close_observer.Wait(); | 303 close_observer.Wait(); |
| 275 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 304 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 276 EXPECT_TRUE(chrome::BrowserIterator().done()); | 305 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 277 } | 306 } |
| 278 | 307 |
| 279 // Test that the tab closed after the aborted shutdown attempt is not re-opened | 308 // Test that the tab closed after the aborted shutdown attempt is not re-opened |
| 280 // when restoring the session. | 309 // when restoring the session. |
| 281 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { | 310 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { |
| 282 // The testing framework launches Chrome with about:blank as args. | 311 // The testing framework launches Chrome with about:blank as args. |
| 283 EXPECT_EQ(2, browser()->tab_strip_model()->count()); | 312 EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 294 browsers_.push_back(CreateBrowser(browser()->profile())); | 323 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 295 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 324 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 296 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 325 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 297 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 326 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 298 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 327 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 299 | 328 |
| 300 // Cancel shutdown on the first beforeunload event. | 329 // Cancel shutdown on the first beforeunload event. |
| 301 { | 330 { |
| 302 RepeatedNotificationObserver cancel_observer( | 331 RepeatedNotificationObserver cancel_observer( |
| 303 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 332 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 304 chrome::CloseAllBrowsers(); | 333 chrome::CloseAllBrowsersAndQuit(); |
| 305 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 334 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 306 cancel_observer.Wait(); | 335 cancel_observer.Wait(); |
| 307 } | 336 } |
| 308 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 337 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 309 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 338 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 310 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 339 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 311 | 340 |
| 312 // Cancel shutdown on the second beforeunload event. | 341 // Cancel shutdown on the second beforeunload event. |
| 313 { | 342 { |
| 314 RepeatedNotificationObserver cancel_observer( | 343 RepeatedNotificationObserver cancel_observer( |
| 315 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 344 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 316 chrome::CloseAllBrowsers(); | 345 chrome::CloseAllBrowsersAndQuit(); |
| 317 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 346 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 318 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 347 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 319 cancel_observer.Wait(); | 348 cancel_observer.Wait(); |
| 320 } | 349 } |
| 321 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 350 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 322 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 351 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 323 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 352 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 324 | 353 |
| 325 // Allow shutdown for both beforeunload events. | 354 // Allow shutdown for both beforeunload events. |
| 326 RepeatedNotificationObserver close_observer( | 355 RepeatedNotificationObserver close_observer( |
| 327 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 356 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 328 chrome::CloseAllBrowsers(); | 357 chrome::CloseAllBrowsersAndQuit(); |
| 329 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 358 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 330 close_observer.Wait(); | 359 close_observer.Wait(); |
| 331 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 360 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 332 EXPECT_TRUE(chrome::BrowserIterator().done()); | 361 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 333 } | 362 } |
| 334 | 363 |
| 335 // Test that tabs in the same window with a beforeunload event that hangs are | 364 // Test that tabs in the same window with a beforeunload event that hangs are |
| 336 // treated the same as the user accepting the close, but do not close the tab | 365 // treated the same as the user accepting the close, but do not close the tab |
| 337 // early. | 366 // early. |
| 338 // Test is flaky on windows, disabled. See http://crbug.com/276366 | 367 // Test is flaky on windows, disabled. See http://crbug.com/276366 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 350 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 379 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 351 AddBlankTabAndShow(browsers_[0]); | 380 AddBlankTabAndShow(browsers_[0]); |
| 352 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 381 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 353 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 382 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 354 AddBlankTabAndShow(browsers_[0]); | 383 AddBlankTabAndShow(browsers_[0]); |
| 355 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 384 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 356 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 385 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 357 | 386 |
| 358 RepeatedNotificationObserver cancel_observer( | 387 RepeatedNotificationObserver cancel_observer( |
| 359 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 388 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 360 chrome::CloseAllBrowsers(); | 389 chrome::CloseAllBrowsersAndQuit(); |
| 361 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 390 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 362 cancel_observer.Wait(); | 391 cancel_observer.Wait(); |
| 363 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 392 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 364 // All tabs should still be open. | 393 // All tabs should still be open. |
| 365 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 394 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
| 366 | 395 |
| 367 RepeatedNotificationObserver close_observer( | 396 RepeatedNotificationObserver close_observer( |
| 368 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 397 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 369 chrome::CloseAllBrowsers(); | 398 chrome::CloseAllBrowsersAndQuit(); |
| 370 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 399 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 371 close_observer.Wait(); | 400 close_observer.Wait(); |
| 372 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 401 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 373 EXPECT_TRUE(chrome::BrowserIterator().done()); | 402 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 374 } | 403 } |
| 375 | 404 |
| 376 // Test that tabs in different windows with a beforeunload event that hangs are | 405 // Test that tabs in different windows with a beforeunload event that hangs are |
| 377 // treated the same as the user accepting the close, but do not close the tab | 406 // treated the same as the user accepting the close, but do not close the tab |
| 378 // early. | 407 // early. |
| 379 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 408 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 380 TestHangInBeforeUnloadMultipleWindows) { | 409 TestHangInBeforeUnloadMultipleWindows) { |
| 381 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 410 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 382 browsers_.push_back(CreateBrowser(browser()->profile())); | 411 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 383 browsers_.push_back(CreateBrowser(browser()->profile())); | 412 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 384 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 413 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 385 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 414 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 386 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 387 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 416 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 388 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 417 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 389 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 418 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 390 | 419 |
| 391 RepeatedNotificationObserver cancel_observer( | 420 RepeatedNotificationObserver cancel_observer( |
| 392 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 421 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 393 chrome::CloseAllBrowsers(); | 422 chrome::CloseAllBrowsersAndQuit(); |
| 394 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 423 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 395 cancel_observer.Wait(); | 424 cancel_observer.Wait(); |
| 396 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 425 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 397 // All windows should still be open. | 426 // All windows should still be open. |
| 398 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 427 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 399 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 428 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 400 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); | 429 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); |
| 401 | 430 |
| 402 RepeatedNotificationObserver close_observer( | 431 RepeatedNotificationObserver close_observer( |
| 403 chrome::NOTIFICATION_BROWSER_CLOSED, 3); | 432 chrome::NOTIFICATION_BROWSER_CLOSED, 3); |
| 404 chrome::CloseAllBrowsers(); | 433 chrome::CloseAllBrowsersAndQuit(); |
| 405 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 434 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 406 close_observer.Wait(); | 435 close_observer.Wait(); |
| 407 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 436 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 408 EXPECT_TRUE(chrome::BrowserIterator().done()); | 437 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 409 } | 438 } |
| 410 | 439 |
| 411 // Test that a window created during shutdown is closed. | 440 // Test that a window created during shutdown is closed. |
| 412 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 441 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 413 TestAddWindowDuringShutdown) { | 442 TestAddWindowDuringShutdown) { |
| 414 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 443 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 444 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 416 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 445 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 417 | 446 |
| 418 RepeatedNotificationObserver close_observer( | 447 RepeatedNotificationObserver close_observer( |
| 419 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 448 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 420 chrome::CloseAllBrowsers(); | 449 chrome::CloseAllBrowsersAndQuit(); |
| 421 browsers_.push_back(CreateBrowser(browser()->profile())); | 450 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 422 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 451 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 423 close_observer.Wait(); | 452 close_observer.Wait(); |
| 424 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 453 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 425 EXPECT_TRUE(chrome::BrowserIterator().done()); | 454 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 426 } | 455 } |
| 427 | 456 |
| 428 // Test that a window created during shutdown with a beforeunload handler can | 457 // Test that a window created during shutdown with a beforeunload handler can |
| 429 // cancel the shutdown. | 458 // cancel the shutdown. |
| 430 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 459 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 431 TestAddWindowWithBeforeUnloadDuringShutdown) { | 460 TestAddWindowWithBeforeUnloadDuringShutdown) { |
| 432 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 461 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 433 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 462 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 434 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 463 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 435 | 464 |
| 436 RepeatedNotificationObserver cancel_observer( | 465 RepeatedNotificationObserver cancel_observer( |
| 437 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 466 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 438 chrome::CloseAllBrowsers(); | 467 chrome::CloseAllBrowsersAndQuit(); |
| 439 browsers_.push_back(CreateBrowser(browser()->profile())); | 468 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 440 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 469 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 441 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 470 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 442 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 471 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 443 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 472 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 444 cancel_observer.Wait(); | 473 cancel_observer.Wait(); |
| 445 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 474 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 446 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 475 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 447 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 476 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 448 | 477 |
| 449 // Allow shutdown for both beforeunload dialogs. | 478 // Allow shutdown for both beforeunload dialogs. |
| 450 RepeatedNotificationObserver close_observer( | 479 RepeatedNotificationObserver close_observer( |
| 451 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 480 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 452 chrome::CloseAllBrowsers(); | 481 chrome::CloseAllBrowsersAndQuit(); |
| 453 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 482 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 454 close_observer.Wait(); | 483 close_observer.Wait(); |
| 455 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 484 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 456 EXPECT_TRUE(chrome::BrowserIterator().done()); | 485 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 457 } | 486 } |
| 458 | 487 |
| 459 // Test that tabs added during shutdown are closed. | 488 // Test that tabs added during shutdown are closed. |
| 460 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 489 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 461 TestAddTabDuringShutdown) { | 490 TestAddTabDuringShutdown) { |
| 462 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 491 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 463 browsers_.push_back(CreateBrowser(browser()->profile())); | 492 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 464 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 493 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 465 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 494 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 466 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 495 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 467 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 496 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 468 | 497 |
| 469 RepeatedNotificationObserver close_observer( | 498 RepeatedNotificationObserver close_observer( |
| 470 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 499 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 471 chrome::CloseAllBrowsers(); | 500 chrome::CloseAllBrowsersAndQuit(); |
| 472 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 501 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 473 AddBlankTabAndShow(browsers_[0]); | 502 AddBlankTabAndShow(browsers_[0]); |
| 474 AddBlankTabAndShow(browsers_[1]); | 503 AddBlankTabAndShow(browsers_[1]); |
| 475 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 504 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 476 close_observer.Wait(); | 505 close_observer.Wait(); |
| 477 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 506 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 478 EXPECT_TRUE(chrome::BrowserIterator().done()); | 507 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 479 } | 508 } |
| 480 | 509 |
| 481 // Test that tabs created during shutdown with beforeunload handlers can cancel | 510 // Test that tabs created during shutdown with beforeunload handlers can cancel |
| 482 // the shutdown. | 511 // the shutdown. |
| 483 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 512 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 484 TestAddTabWithBeforeUnloadDuringShutdown) { | 513 TestAddTabWithBeforeUnloadDuringShutdown) { |
| 485 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 514 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 486 browsers_.push_back(CreateBrowser(browser()->profile())); | 515 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 487 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 516 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 488 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 517 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 489 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 518 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 490 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 519 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 491 RepeatedNotificationObserver cancel_observer( | 520 RepeatedNotificationObserver cancel_observer( |
| 492 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 521 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 493 chrome::CloseAllBrowsers(); | 522 chrome::CloseAllBrowsersAndQuit(); |
| 494 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 523 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 495 AddBlankTabAndShow(browsers_[0]); | 524 AddBlankTabAndShow(browsers_[0]); |
| 496 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 525 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 497 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 526 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 498 AddBlankTabAndShow(browsers_[1]); | 527 AddBlankTabAndShow(browsers_[1]); |
| 499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 528 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 500 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 529 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 501 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 530 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 502 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 531 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 503 cancel_observer.Wait(); | 532 cancel_observer.Wait(); |
| 504 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 533 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 505 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 534 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
| 506 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 535 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
| 507 | 536 |
| 508 RepeatedNotificationObserver close_observer( | 537 RepeatedNotificationObserver close_observer( |
| 509 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 538 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 510 chrome::CloseAllBrowsers(); | 539 chrome::CloseAllBrowsersAndQuit(); |
| 511 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 540 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 512 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 541 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 513 | 542 |
| 514 close_observer.Wait(); | 543 close_observer.Wait(); |
| 515 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 544 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 516 EXPECT_TRUE(chrome::BrowserIterator().done()); | 545 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 517 } | 546 } |
| 518 | 547 |
| 519 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 548 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 520 TestCloseTabDuringShutdown) { | 549 TestCloseTabDuringShutdown) { |
| 521 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 550 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 522 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 551 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 523 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 552 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 524 RepeatedNotificationObserver cancel_observer( | 553 RepeatedNotificationObserver cancel_observer( |
| 525 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 554 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 526 chrome::CloseAllBrowsers(); | 555 chrome::CloseAllBrowsersAndQuit(); |
| 527 | 556 |
| 528 browsers_.push_back(CreateBrowser(browser()->profile())); | 557 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 529 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 558 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 530 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 559 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 531 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 560 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 532 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 561 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 533 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 562 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 534 cancel_observer.Wait(); | 563 cancel_observer.Wait(); |
| 535 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 564 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 536 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 565 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 537 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 566 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 538 | 567 |
| 539 RepeatedNotificationObserver close_observer( | 568 RepeatedNotificationObserver close_observer( |
| 540 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 569 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 541 chrome::CloseAllBrowsers(); | 570 chrome::CloseAllBrowsersAndQuit(); |
| 542 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 571 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 543 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 572 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 544 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 573 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 545 | 574 |
| 546 close_observer.Wait(); | 575 close_observer.Wait(); |
| 547 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 576 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 548 EXPECT_TRUE(chrome::BrowserIterator().done()); | 577 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 549 } | 578 } |
| 550 | 579 |
| 551 // Test is flaky on windows, disabled. See http://crbug.com/276366 | 580 // Test is flaky on windows, disabled. See http://crbug.com/276366 |
| 552 #if defined(OS_WIN) | 581 #if defined(OS_WIN) |
| 553 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ | 582 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ |
| 554 DISABLED_TestOpenAndCloseWindowDuringShutdown | 583 DISABLED_TestOpenAndCloseWindowDuringShutdown |
| 555 #else | 584 #else |
| 556 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ | 585 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ |
| 557 TestOpenAndCloseWindowDuringShutdown | 586 TestOpenAndCloseWindowDuringShutdown |
| 558 #endif | 587 #endif |
| 559 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 588 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 560 MAYBE_TestOpenAndCloseWindowDuringShutdown) { | 589 MAYBE_TestOpenAndCloseWindowDuringShutdown) { |
| 561 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 590 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 562 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 591 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 563 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 592 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 564 RepeatedNotificationObserver cancel_observer( | 593 RepeatedNotificationObserver cancel_observer( |
| 565 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 594 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 566 chrome::CloseAllBrowsers(); | 595 chrome::CloseAllBrowsersAndQuit(); |
| 567 | 596 |
| 568 browsers_.push_back(CreateBrowser(browser()->profile())); | 597 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 569 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 598 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 570 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 599 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 571 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 600 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 572 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 601 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 602 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 574 cancel_observer.Wait(); | 603 cancel_observer.Wait(); |
| 575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 604 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 576 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 605 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 577 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 606 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 578 | 607 |
| 579 RepeatedNotificationObserver close_observer( | 608 RepeatedNotificationObserver close_observer( |
| 580 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 609 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 581 chrome::CloseAllBrowsers(); | 610 chrome::CloseAllBrowsersAndQuit(); |
| 582 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 611 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 612 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 584 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 613 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 585 | 614 |
| 586 close_observer.Wait(); | 615 close_observer.Wait(); |
| 587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 616 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 588 EXPECT_TRUE(chrome::BrowserIterator().done()); | 617 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 589 } | 618 } |
| 590 | 619 |
| 591 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 620 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 592 TestCloseWindowDuringShutdown) { | 621 TestCloseWindowDuringShutdown) { |
| 593 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 622 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 594 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 623 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 595 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 624 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 596 browsers_.push_back(CreateBrowser(browser()->profile())); | 625 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 597 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 626 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 598 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 627 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 599 RepeatedNotificationObserver cancel_observer( | 628 RepeatedNotificationObserver cancel_observer( |
| 600 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 629 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 601 chrome::CloseAllBrowsers(); | 630 chrome::CloseAllBrowsersAndQuit(); |
| 602 | 631 |
| 603 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 632 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 604 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); | 633 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); |
| 605 cancel_observer.Wait(); | 634 cancel_observer.Wait(); |
| 606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 635 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 607 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 636 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 608 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 637 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 609 | 638 |
| 610 RepeatedNotificationObserver close_observer( | 639 RepeatedNotificationObserver close_observer( |
| 611 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 640 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 612 chrome::CloseAllBrowsers(); | 641 chrome::CloseAllBrowsersAndQuit(); |
| 613 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 642 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 614 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 643 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 615 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); | 644 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); |
| 616 | 645 |
| 617 close_observer.Wait(); | 646 close_observer.Wait(); |
| 618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 647 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 619 EXPECT_TRUE(chrome::BrowserIterator().done()); | 648 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 620 } | 649 } |
| 621 | 650 |
| 622 // Test shutdown with a download in progress. | 651 // Test shutdown with a download in progress. |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 711 TestBrowserCloseManager::AttemptClose( | 740 TestBrowserCloseManager::AttemptClose( |
| 712 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); | 741 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); |
| 713 close_observer.Wait(); | 742 close_observer.Wait(); |
| 714 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 743 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 715 EXPECT_TRUE(chrome::BrowserIterator().done()); | 744 EXPECT_TRUE(chrome::BrowserIterator().done()); |
| 716 } | 745 } |
| 717 | 746 |
| 718 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, | 747 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, |
| 719 BrowserCloseManagerBrowserTest, | 748 BrowserCloseManagerBrowserTest, |
| 720 testing::Bool()); | 749 testing::Bool()); |
| 750 | |
| 751 class BrowserCloseManagerWithBackgroundModeBrowserTest | |
| 752 : public BrowserCloseManagerBrowserTest { | |
| 753 public: | |
| 754 virtual void SetUpOnMainThread() OVERRIDE { | |
| 755 BrowserCloseManagerBrowserTest::SetUpOnMainThread(); | |
| 756 g_browser_process->set_background_mode_manager_for_test( | |
| 757 scoped_ptr<BackgroundModeManager>(new FakeBackgroundModeManager)); | |
| 758 } | |
| 759 }; | |
| 760 | |
| 761 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | |
| 762 CloseAllBrowsersWithBackgroundMode) { | |
| 763 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 764 g_browser_process->background_mode_manager()) | |
| 765 ->IsBackgroundModeSuspended()); | |
| 766 Profile* profile = browser()->profile(); | |
| 767 { | |
| 768 RepeatedNotificationObserver close_observer( | |
| 769 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | |
| 770 chrome::StartKeepAlive(); | |
| 771 chrome::CloseAllBrowsers(); | |
| 772 close_observer.Wait(); | |
| 773 } | |
| 774 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | |
| 775 EXPECT_TRUE(chrome::BrowserIterator().done()); | |
| 776 EXPECT_TRUE(static_cast<FakeBackgroundModeManager*>( | |
|
benwells
2013/10/21 05:57:22
Nit: factor out this horribleness into IsBackgroun
Sam McNally
2013/10/21 06:45:35
Done.
benwells
2013/10/21 21:12:51
You missed this one.
Sam McNally
2013/10/22 00:16:27
Done.
| |
| 777 g_browser_process->background_mode_manager()) | |
| 778 ->IsBackgroundModeSuspended()); | |
| 779 | |
| 780 // Background mode should be resumed when a new browser window is opened. | |
| 781 ui_test_utils::BrowserAddedObserver new_browser_observer; | |
| 782 chrome::NewEmptyWindow(profile, chrome::HOST_DESKTOP_TYPE_NATIVE); | |
| 783 new_browser_observer.WaitForSingleNewBrowser(); | |
| 784 chrome::EndKeepAlive(); | |
| 785 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 786 g_browser_process->background_mode_manager()) | |
| 787 ->IsBackgroundModeSuspended()); | |
| 788 RepeatedNotificationObserver close_observer( | |
| 789 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | |
| 790 | |
| 791 // Background mode should not be suspended when quitting. | |
| 792 chrome::CloseAllBrowsersAndQuit(); | |
| 793 close_observer.Wait(); | |
| 794 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | |
| 795 EXPECT_TRUE(chrome::BrowserIterator().done()); | |
| 796 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 797 g_browser_process->background_mode_manager()) | |
| 798 ->IsBackgroundModeSuspended()); | |
| 799 | |
| 800 } | |
| 801 | |
| 802 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | |
| 803 CloseSingleBrowserWithBackgroundMode) { | |
| 804 RepeatedNotificationObserver close_observer( | |
| 805 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | |
| 806 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 807 g_browser_process->background_mode_manager()) | |
| 808 ->IsBackgroundModeSuspended()); | |
| 809 browser()->window()->Close(); | |
| 810 close_observer.Wait(); | |
| 811 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | |
| 812 EXPECT_TRUE(chrome::BrowserIterator().done()); | |
| 813 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 814 g_browser_process->background_mode_manager()) | |
| 815 ->IsBackgroundModeSuspended()); | |
| 816 } | |
| 817 | |
| 818 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | |
| 819 CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) { | |
| 820 RepeatedNotificationObserver close_observer( | |
| 821 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | |
| 822 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 823 g_browser_process->background_mode_manager()) | |
| 824 ->IsBackgroundModeSuspended()); | |
| 825 chrome::StartKeepAlive(); | |
| 826 browser()->window()->Close(); | |
| 827 close_observer.Wait(); | |
| 828 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | |
| 829 EXPECT_TRUE(chrome::BrowserIterator().done()); | |
| 830 EXPECT_FALSE(static_cast<FakeBackgroundModeManager*>( | |
| 831 g_browser_process->background_mode_manager()) | |
| 832 ->IsBackgroundModeSuspended()); | |
| 833 | |
| 834 chrome::CloseAllBrowsers(); | |
| 835 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | |
| 836 EXPECT_TRUE(chrome::BrowserIterator().done()); | |
| 837 EXPECT_TRUE(static_cast<FakeBackgroundModeManager*>( | |
| 838 g_browser_process->background_mode_manager()) | |
| 839 ->IsBackgroundModeSuspended()); | |
| 840 } | |
| 841 | |
| 842 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | |
| 843 BrowserCloseManagerWithBackgroundModeBrowserTest, | |
| 844 testing::Bool()); | |
| OLD | NEW |