Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Side by Side Diff: chrome/browser/lifetime/browser_close_manager_browsertest.cc

Issue 25603004: Leave apps running on Windows and Linux when quitting Chrome from the wrench menu. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 DISALLOW_COPY_AND_ASSIGN(FakeBackgroundModeManager);
188 };
189
159 } // namespace 190 } // namespace
160 191
161 class BrowserCloseManagerBrowserTest 192 class BrowserCloseManagerBrowserTest
162 : public InProcessBrowserTest, 193 : public InProcessBrowserTest,
163 public testing::WithParamInterface<bool> { 194 public testing::WithParamInterface<bool> {
164 protected: 195 protected:
165 virtual void SetUpOnMainThread() OVERRIDE { 196 virtual void SetUpOnMainThread() OVERRIDE {
166 InProcessBrowserTest::SetUpOnMainThread(); 197 InProcessBrowserTest::SetUpOnMainThread();
167 SessionStartupPref::SetStartupPref( 198 SessionStartupPref::SetStartupPref(
168 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); 199 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST));
(...skipping 27 matching lines...) Expand all
196 std::vector<Browser*> browsers_; 227 std::vector<Browser*> browsers_;
197 AppModalDialogObserver dialogs_; 228 AppModalDialogObserver dialogs_;
198 }; 229 };
199 230
200 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { 231 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) {
201 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 232 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
202 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 233 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
203 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 234 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
204 RepeatedNotificationObserver cancel_observer( 235 RepeatedNotificationObserver cancel_observer(
205 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 236 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
206 chrome::CloseAllBrowsers(); 237 chrome::CloseAllBrowsersAndQuit();
207 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 238 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
208 cancel_observer.Wait(); 239 cancel_observer.Wait();
209 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 240 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
210 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 241 EXPECT_EQ(1, browser()->tab_strip_model()->count());
211 242
212 RepeatedNotificationObserver close_observer( 243 RepeatedNotificationObserver close_observer(
213 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 244 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
214 chrome::CloseAllBrowsers(); 245 chrome::CloseAllBrowsersAndQuit();
215 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 246 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
216 close_observer.Wait(); 247 close_observer.Wait();
217 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 248 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
218 EXPECT_TRUE(chrome::BrowserIterator().done()); 249 EXPECT_TRUE(chrome::BrowserIterator().done());
219 } 250 }
220 251
221 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 252 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
222 TestShutdownMoreThanOnce) { 253 TestShutdownMoreThanOnce) {
223 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 254 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
224 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 255 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
225 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 256 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
226 RepeatedNotificationObserver cancel_observer( 257 RepeatedNotificationObserver cancel_observer(
227 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 258 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
228 chrome::CloseAllBrowsers(); 259 chrome::CloseAllBrowsersAndQuit();
229 chrome::CloseAllBrowsers(); 260 chrome::CloseAllBrowsersAndQuit();
230 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 261 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
231 cancel_observer.Wait(); 262 cancel_observer.Wait();
232 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 263 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
233 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 264 EXPECT_EQ(1, browser()->tab_strip_model()->count());
234 265
235 RepeatedNotificationObserver close_observer( 266 RepeatedNotificationObserver close_observer(
236 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 267 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
237 chrome::CloseAllBrowsers(); 268 chrome::CloseAllBrowsersAndQuit();
238 chrome::CloseAllBrowsers(); 269 chrome::CloseAllBrowsersAndQuit();
239 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 270 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
240 close_observer.Wait(); 271 close_observer.Wait();
241 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 272 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
242 EXPECT_TRUE(chrome::BrowserIterator().done()); 273 EXPECT_TRUE(chrome::BrowserIterator().done());
243 } 274 }
244 275
245 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { 276 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) {
246 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 277 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
247 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 278 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
248 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 279 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
249 AddBlankTabAndShow(browser()); 280 AddBlankTabAndShow(browser());
250 ASSERT_NO_FATAL_FAILURE( 281 ASSERT_NO_FATAL_FAILURE(
251 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); 282 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)));
252 RepeatedNotificationObserver cancel_observer( 283 RepeatedNotificationObserver cancel_observer(
253 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 284 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
254 chrome::CloseAllBrowsers(); 285 chrome::CloseAllBrowsersAndQuit();
255 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 286 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
256 cancel_observer.Wait(); 287 cancel_observer.Wait();
257 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 288 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
258 289
259 browser()->tab_strip_model() 290 browser()->tab_strip_model()
260 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); 291 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE);
261 content::TestNavigationObserver navigation_observer( 292 content::TestNavigationObserver navigation_observer(
262 browser()->tab_strip_model()->GetActiveWebContents(), 1); 293 browser()->tab_strip_model()->GetActiveWebContents(), 1);
263 ASSERT_NO_FATAL_FAILURE( 294 ASSERT_NO_FATAL_FAILURE(
264 NavigateToURLWithDisposition(browser(), 295 NavigateToURLWithDisposition(browser(),
265 GURL(chrome::kChromeUIVersionURL), 296 GURL(chrome::kChromeUIVersionURL),
266 CURRENT_TAB, 297 CURRENT_TAB,
267 ui_test_utils::BROWSER_TEST_NONE)); 298 ui_test_utils::BROWSER_TEST_NONE));
268 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 299 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
269 navigation_observer.Wait(); 300 navigation_observer.Wait();
270 301
271 RepeatedNotificationObserver close_observer( 302 RepeatedNotificationObserver close_observer(
272 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 303 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
273 chrome::CloseAllBrowsers(); 304 chrome::CloseAllBrowsersAndQuit();
274 close_observer.Wait(); 305 close_observer.Wait();
275 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 306 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
276 EXPECT_TRUE(chrome::BrowserIterator().done()); 307 EXPECT_TRUE(chrome::BrowserIterator().done());
277 } 308 }
278 309
279 // Test that the tab closed after the aborted shutdown attempt is not re-opened 310 // Test that the tab closed after the aborted shutdown attempt is not re-opened
280 // when restoring the session. 311 // when restoring the session.
281 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { 312 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) {
282 // The testing framework launches Chrome with about:blank as args. 313 // The testing framework launches Chrome with about:blank as args.
283 EXPECT_EQ(2, browser()->tab_strip_model()->count()); 314 EXPECT_EQ(2, browser()->tab_strip_model()->count());
(...skipping 10 matching lines...) Expand all
294 browsers_.push_back(CreateBrowser(browser()->profile())); 325 browsers_.push_back(CreateBrowser(browser()->profile()));
295 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 326 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
296 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 327 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
297 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 328 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
298 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 329 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
299 330
300 // Cancel shutdown on the first beforeunload event. 331 // Cancel shutdown on the first beforeunload event.
301 { 332 {
302 RepeatedNotificationObserver cancel_observer( 333 RepeatedNotificationObserver cancel_observer(
303 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 334 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
304 chrome::CloseAllBrowsers(); 335 chrome::CloseAllBrowsersAndQuit();
305 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 336 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
306 cancel_observer.Wait(); 337 cancel_observer.Wait();
307 } 338 }
308 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 339 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
309 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 340 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
310 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 341 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
311 342
312 // Cancel shutdown on the second beforeunload event. 343 // Cancel shutdown on the second beforeunload event.
313 { 344 {
314 RepeatedNotificationObserver cancel_observer( 345 RepeatedNotificationObserver cancel_observer(
315 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 346 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
316 chrome::CloseAllBrowsers(); 347 chrome::CloseAllBrowsersAndQuit();
317 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 348 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
318 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 349 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
319 cancel_observer.Wait(); 350 cancel_observer.Wait();
320 } 351 }
321 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 352 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
322 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 353 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
323 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 354 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
324 355
325 // Allow shutdown for both beforeunload events. 356 // Allow shutdown for both beforeunload events.
326 RepeatedNotificationObserver close_observer( 357 RepeatedNotificationObserver close_observer(
327 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 358 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
328 chrome::CloseAllBrowsers(); 359 chrome::CloseAllBrowsersAndQuit();
329 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 360 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
330 close_observer.Wait(); 361 close_observer.Wait();
331 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 362 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
332 EXPECT_TRUE(chrome::BrowserIterator().done()); 363 EXPECT_TRUE(chrome::BrowserIterator().done());
333 } 364 }
334 365
335 // Test that tabs in the same window with a beforeunload event that hangs are 366 // 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 367 // treated the same as the user accepting the close, but do not close the tab
337 // early. 368 // early.
338 // Test is flaky on windows, disabled. See http://crbug.com/276366 369 // Test is flaky on windows, disabled. See http://crbug.com/276366
(...skipping 11 matching lines...) Expand all
350 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 381 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
351 AddBlankTabAndShow(browsers_[0]); 382 AddBlankTabAndShow(browsers_[0]);
352 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 383 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
353 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 384 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
354 AddBlankTabAndShow(browsers_[0]); 385 AddBlankTabAndShow(browsers_[0]);
355 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 386 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
356 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 387 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
357 388
358 RepeatedNotificationObserver cancel_observer( 389 RepeatedNotificationObserver cancel_observer(
359 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 390 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
360 chrome::CloseAllBrowsers(); 391 chrome::CloseAllBrowsersAndQuit();
361 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 392 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
362 cancel_observer.Wait(); 393 cancel_observer.Wait();
363 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 394 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
364 // All tabs should still be open. 395 // All tabs should still be open.
365 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); 396 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count());
366 397
367 RepeatedNotificationObserver close_observer( 398 RepeatedNotificationObserver close_observer(
368 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 399 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
369 chrome::CloseAllBrowsers(); 400 chrome::CloseAllBrowsersAndQuit();
370 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 401 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
371 close_observer.Wait(); 402 close_observer.Wait();
372 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 403 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
373 EXPECT_TRUE(chrome::BrowserIterator().done()); 404 EXPECT_TRUE(chrome::BrowserIterator().done());
374 } 405 }
375 406
376 // Test that tabs in different windows with a beforeunload event that hangs are 407 // 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 408 // treated the same as the user accepting the close, but do not close the tab
378 // early. 409 // early.
379 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 410 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
380 TestHangInBeforeUnloadMultipleWindows) { 411 TestHangInBeforeUnloadMultipleWindows) {
381 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 412 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
382 browsers_.push_back(CreateBrowser(browser()->profile())); 413 browsers_.push_back(CreateBrowser(browser()->profile()));
383 browsers_.push_back(CreateBrowser(browser()->profile())); 414 browsers_.push_back(CreateBrowser(browser()->profile()));
384 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
385 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 416 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
386 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 417 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
387 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 418 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
388 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 419 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
389 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 420 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html")));
390 421
391 RepeatedNotificationObserver cancel_observer( 422 RepeatedNotificationObserver cancel_observer(
392 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 423 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
393 chrome::CloseAllBrowsers(); 424 chrome::CloseAllBrowsersAndQuit();
394 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 425 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
395 cancel_observer.Wait(); 426 cancel_observer.Wait();
396 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 427 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
397 // All windows should still be open. 428 // All windows should still be open.
398 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 429 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
399 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 430 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
400 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); 431 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count());
401 432
402 RepeatedNotificationObserver close_observer( 433 RepeatedNotificationObserver close_observer(
403 chrome::NOTIFICATION_BROWSER_CLOSED, 3); 434 chrome::NOTIFICATION_BROWSER_CLOSED, 3);
404 chrome::CloseAllBrowsers(); 435 chrome::CloseAllBrowsersAndQuit();
405 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 436 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
406 close_observer.Wait(); 437 close_observer.Wait();
407 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 438 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
408 EXPECT_TRUE(chrome::BrowserIterator().done()); 439 EXPECT_TRUE(chrome::BrowserIterator().done());
409 } 440 }
410 441
411 // Test that a window created during shutdown is closed. 442 // Test that a window created during shutdown is closed.
412 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 443 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
413 TestAddWindowDuringShutdown) { 444 TestAddWindowDuringShutdown) {
414 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 445 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 446 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
416 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 447 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
417 448
418 RepeatedNotificationObserver close_observer( 449 RepeatedNotificationObserver close_observer(
419 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 450 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
420 chrome::CloseAllBrowsers(); 451 chrome::CloseAllBrowsersAndQuit();
421 browsers_.push_back(CreateBrowser(browser()->profile())); 452 browsers_.push_back(CreateBrowser(browser()->profile()));
422 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 453 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
423 close_observer.Wait(); 454 close_observer.Wait();
424 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 455 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
425 EXPECT_TRUE(chrome::BrowserIterator().done()); 456 EXPECT_TRUE(chrome::BrowserIterator().done());
426 } 457 }
427 458
428 // Test that a window created during shutdown with a beforeunload handler can 459 // Test that a window created during shutdown with a beforeunload handler can
429 // cancel the shutdown. 460 // cancel the shutdown.
430 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 461 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
431 TestAddWindowWithBeforeUnloadDuringShutdown) { 462 TestAddWindowWithBeforeUnloadDuringShutdown) {
432 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 463 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
433 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 464 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
434 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 465 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
435 466
436 RepeatedNotificationObserver cancel_observer( 467 RepeatedNotificationObserver cancel_observer(
437 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 468 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
438 chrome::CloseAllBrowsers(); 469 chrome::CloseAllBrowsersAndQuit();
439 browsers_.push_back(CreateBrowser(browser()->profile())); 470 browsers_.push_back(CreateBrowser(browser()->profile()));
440 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 471 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
441 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 472 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
442 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 473 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
443 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 474 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
444 cancel_observer.Wait(); 475 cancel_observer.Wait();
445 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 476 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
446 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 477 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
447 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 478 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
448 479
449 // Allow shutdown for both beforeunload dialogs. 480 // Allow shutdown for both beforeunload dialogs.
450 RepeatedNotificationObserver close_observer( 481 RepeatedNotificationObserver close_observer(
451 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 482 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
452 chrome::CloseAllBrowsers(); 483 chrome::CloseAllBrowsersAndQuit();
453 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 484 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
454 close_observer.Wait(); 485 close_observer.Wait();
455 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 486 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
456 EXPECT_TRUE(chrome::BrowserIterator().done()); 487 EXPECT_TRUE(chrome::BrowserIterator().done());
457 } 488 }
458 489
459 // Test that tabs added during shutdown are closed. 490 // Test that tabs added during shutdown are closed.
460 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 491 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
461 TestAddTabDuringShutdown) { 492 TestAddTabDuringShutdown) {
462 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 493 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
463 browsers_.push_back(CreateBrowser(browser()->profile())); 494 browsers_.push_back(CreateBrowser(browser()->profile()));
464 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 495 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
465 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 496 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
466 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
467 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 498 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
468 499
469 RepeatedNotificationObserver close_observer( 500 RepeatedNotificationObserver close_observer(
470 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 501 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
471 chrome::CloseAllBrowsers(); 502 chrome::CloseAllBrowsersAndQuit();
472 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 503 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
473 AddBlankTabAndShow(browsers_[0]); 504 AddBlankTabAndShow(browsers_[0]);
474 AddBlankTabAndShow(browsers_[1]); 505 AddBlankTabAndShow(browsers_[1]);
475 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 506 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
476 close_observer.Wait(); 507 close_observer.Wait();
477 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 508 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
478 EXPECT_TRUE(chrome::BrowserIterator().done()); 509 EXPECT_TRUE(chrome::BrowserIterator().done());
479 } 510 }
480 511
481 // Test that tabs created during shutdown with beforeunload handlers can cancel 512 // Test that tabs created during shutdown with beforeunload handlers can cancel
482 // the shutdown. 513 // the shutdown.
483 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 514 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
484 TestAddTabWithBeforeUnloadDuringShutdown) { 515 TestAddTabWithBeforeUnloadDuringShutdown) {
485 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 516 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
486 browsers_.push_back(CreateBrowser(browser()->profile())); 517 browsers_.push_back(CreateBrowser(browser()->profile()));
487 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 518 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
488 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 519 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
489 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 520 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
490 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 521 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
491 RepeatedNotificationObserver cancel_observer( 522 RepeatedNotificationObserver cancel_observer(
492 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 523 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
493 chrome::CloseAllBrowsers(); 524 chrome::CloseAllBrowsersAndQuit();
494 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 525 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
495 AddBlankTabAndShow(browsers_[0]); 526 AddBlankTabAndShow(browsers_[0]);
496 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 527 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
497 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 528 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
498 AddBlankTabAndShow(browsers_[1]); 529 AddBlankTabAndShow(browsers_[1]);
499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 530 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
500 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 531 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
501 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 532 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
502 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 533 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
503 cancel_observer.Wait(); 534 cancel_observer.Wait();
504 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 535 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
505 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); 536 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count());
506 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); 537 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count());
507 538
508 RepeatedNotificationObserver close_observer( 539 RepeatedNotificationObserver close_observer(
509 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 540 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
510 chrome::CloseAllBrowsers(); 541 chrome::CloseAllBrowsersAndQuit();
511 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 542 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
512 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 543 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
513 544
514 close_observer.Wait(); 545 close_observer.Wait();
515 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 546 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
516 EXPECT_TRUE(chrome::BrowserIterator().done()); 547 EXPECT_TRUE(chrome::BrowserIterator().done());
517 } 548 }
518 549
519 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 550 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
520 TestCloseTabDuringShutdown) { 551 TestCloseTabDuringShutdown) {
521 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 552 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
522 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 553 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
523 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 554 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
524 RepeatedNotificationObserver cancel_observer( 555 RepeatedNotificationObserver cancel_observer(
525 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 556 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
526 chrome::CloseAllBrowsers(); 557 chrome::CloseAllBrowsersAndQuit();
527 558
528 browsers_.push_back(CreateBrowser(browser()->profile())); 559 browsers_.push_back(CreateBrowser(browser()->profile()));
529 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 560 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
530 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 561 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
531 browsers_[1]->tab_strip_model()->CloseAllTabs(); 562 browsers_[1]->tab_strip_model()->CloseAllTabs();
532 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 563 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
533 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 564 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
534 cancel_observer.Wait(); 565 cancel_observer.Wait();
535 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 566 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
536 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 567 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
537 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 568 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
538 569
539 RepeatedNotificationObserver close_observer( 570 RepeatedNotificationObserver close_observer(
540 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 571 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
541 chrome::CloseAllBrowsers(); 572 chrome::CloseAllBrowsersAndQuit();
542 browsers_[1]->tab_strip_model()->CloseAllTabs(); 573 browsers_[1]->tab_strip_model()->CloseAllTabs();
543 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 574 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
544 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 575 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
545 576
546 close_observer.Wait(); 577 close_observer.Wait();
547 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 578 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
548 EXPECT_TRUE(chrome::BrowserIterator().done()); 579 EXPECT_TRUE(chrome::BrowserIterator().done());
549 } 580 }
550 581
551 // Test is flaky on windows, disabled. See http://crbug.com/276366 582 // Test is flaky on windows, disabled. See http://crbug.com/276366
552 #if defined(OS_WIN) 583 #if defined(OS_WIN)
553 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ 584 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
554 DISABLED_TestOpenAndCloseWindowDuringShutdown 585 DISABLED_TestOpenAndCloseWindowDuringShutdown
555 #else 586 #else
556 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ 587 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
557 TestOpenAndCloseWindowDuringShutdown 588 TestOpenAndCloseWindowDuringShutdown
558 #endif 589 #endif
559 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 590 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
560 MAYBE_TestOpenAndCloseWindowDuringShutdown) { 591 MAYBE_TestOpenAndCloseWindowDuringShutdown) {
561 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 592 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
562 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 593 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
563 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 594 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
564 RepeatedNotificationObserver cancel_observer( 595 RepeatedNotificationObserver cancel_observer(
565 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 596 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
566 chrome::CloseAllBrowsers(); 597 chrome::CloseAllBrowsersAndQuit();
567 598
568 browsers_.push_back(CreateBrowser(browser()->profile())); 599 browsers_.push_back(CreateBrowser(browser()->profile()));
569 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 600 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
570 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 601 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
571 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 602 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
572 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 603 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 604 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
574 cancel_observer.Wait(); 605 cancel_observer.Wait();
575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
576 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 607 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
577 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 608 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
578 609
579 RepeatedNotificationObserver close_observer( 610 RepeatedNotificationObserver close_observer(
580 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 611 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
581 chrome::CloseAllBrowsers(); 612 chrome::CloseAllBrowsersAndQuit();
582 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 613 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 614 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
584 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 615 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
585 616
586 close_observer.Wait(); 617 close_observer.Wait();
587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
588 EXPECT_TRUE(chrome::BrowserIterator().done()); 619 EXPECT_TRUE(chrome::BrowserIterator().done());
589 } 620 }
590 621
591 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 622 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
592 TestCloseWindowDuringShutdown) { 623 TestCloseWindowDuringShutdown) {
593 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 624 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
594 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 625 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
595 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 626 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
596 browsers_.push_back(CreateBrowser(browser()->profile())); 627 browsers_.push_back(CreateBrowser(browser()->profile()));
597 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 628 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
598 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 629 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
599 RepeatedNotificationObserver cancel_observer( 630 RepeatedNotificationObserver cancel_observer(
600 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 631 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
601 chrome::CloseAllBrowsers(); 632 chrome::CloseAllBrowsersAndQuit();
602 633
603 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 634 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
604 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 635 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
605 cancel_observer.Wait(); 636 cancel_observer.Wait();
606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 637 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
607 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 638 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
608 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 639 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
609 640
610 RepeatedNotificationObserver close_observer( 641 RepeatedNotificationObserver close_observer(
611 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 642 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
612 chrome::CloseAllBrowsers(); 643 chrome::CloseAllBrowsersAndQuit();
613 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 644 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
614 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 645 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
615 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 646 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
616 647
617 close_observer.Wait(); 648 close_observer.Wait();
618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 649 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
619 EXPECT_TRUE(chrome::BrowserIterator().done()); 650 EXPECT_TRUE(chrome::BrowserIterator().done());
620 } 651 }
621 652
622 // Test shutdown with a download in progress. 653 // Test shutdown with a download in progress.
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 TestBrowserCloseManager::AttemptClose( 742 TestBrowserCloseManager::AttemptClose(
712 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); 743 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE);
713 close_observer.Wait(); 744 close_observer.Wait();
714 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 745 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
715 EXPECT_TRUE(chrome::BrowserIterator().done()); 746 EXPECT_TRUE(chrome::BrowserIterator().done());
716 } 747 }
717 748
718 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, 749 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest,
719 BrowserCloseManagerBrowserTest, 750 BrowserCloseManagerBrowserTest,
720 testing::Bool()); 751 testing::Bool());
752
753 class BrowserCloseManagerWithBackgroundModeBrowserTest
754 : public BrowserCloseManagerBrowserTest {
755 public:
756 BrowserCloseManagerWithBackgroundModeBrowserTest() {}
757
758 virtual void SetUpOnMainThread() OVERRIDE {
759 BrowserCloseManagerBrowserTest::SetUpOnMainThread();
760 g_browser_process->set_background_mode_manager_for_test(
761 scoped_ptr<BackgroundModeManager>(new FakeBackgroundModeManager));
762 }
763
764 bool IsBackgroundModeSuspended() {
765 return static_cast<FakeBackgroundModeManager*>(
766 g_browser_process->background_mode_manager())
767 ->IsBackgroundModeSuspended();
768 }
769
770 private:
771 DISALLOW_COPY_AND_ASSIGN(BrowserCloseManagerWithBackgroundModeBrowserTest);
772 };
773
774 // Check that background mode is suspended when closing all browsers unless we
775 // are quitting and that background mode is resumed when a new browser window is
776 // opened.
777 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
778 CloseAllBrowsersWithBackgroundMode) {
779 EXPECT_FALSE(IsBackgroundModeSuspended());
780 Profile* profile = browser()->profile();
781 {
782 RepeatedNotificationObserver close_observer(
783 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
784 chrome::StartKeepAlive();
785 chrome::CloseAllBrowsers();
786 close_observer.Wait();
787 }
788 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
789 EXPECT_TRUE(chrome::BrowserIterator().done());
790 EXPECT_TRUE(IsBackgroundModeSuspended());
791
792 // Background mode should be resumed when a new browser window is opened.
793 ui_test_utils::BrowserAddedObserver new_browser_observer;
794 chrome::NewEmptyWindow(profile, chrome::HOST_DESKTOP_TYPE_NATIVE);
795 new_browser_observer.WaitForSingleNewBrowser();
796 chrome::EndKeepAlive();
797 EXPECT_FALSE(IsBackgroundModeSuspended());
798 RepeatedNotificationObserver close_observer(
799 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
800
801 // Background mode should not be suspended when quitting.
802 chrome::CloseAllBrowsersAndQuit();
803 close_observer.Wait();
804 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
805 EXPECT_TRUE(chrome::BrowserIterator().done());
806 EXPECT_FALSE(IsBackgroundModeSuspended());
807
808 }
809
810 // Check that closing the last browser window individually does not affect
811 // background mode.
812 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
813 CloseSingleBrowserWithBackgroundMode) {
814 RepeatedNotificationObserver close_observer(
815 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
816 EXPECT_FALSE(IsBackgroundModeSuspended());
817 browser()->window()->Close();
818 close_observer.Wait();
819 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
820 EXPECT_TRUE(chrome::BrowserIterator().done());
821 EXPECT_FALSE(IsBackgroundModeSuspended());
822 }
823
824 // Check that closing all browsers with no browser windows open suspends
825 // background mode but does not cause Chrome to quit.
826 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
827 CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) {
828 RepeatedNotificationObserver close_observer(
829 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
830 EXPECT_FALSE(IsBackgroundModeSuspended());
831 chrome::StartKeepAlive();
832 browser()->window()->Close();
833 close_observer.Wait();
834 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
835 EXPECT_TRUE(chrome::BrowserIterator().done());
836 EXPECT_FALSE(IsBackgroundModeSuspended());
837
838 chrome::CloseAllBrowsers();
839 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
840 EXPECT_TRUE(chrome::BrowserIterator().done());
841 EXPECT_TRUE(IsBackgroundModeSuspended());
842 }
843
844 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
845 BrowserCloseManagerWithBackgroundModeBrowserTest,
846 testing::Bool());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698