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

Side by Side Diff: chrome/browser/ui/browser_list.cc

Issue 8937001: Fixes for the kWasRestarted pref. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test build fix. Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/ui/browser_list.h" 5 #include "chrome/browser/ui/browser_list.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 << "observer list modified during notification"; 295 << "observer list modified during notification";
296 } 296 }
297 297
298 // static 298 // static
299 void BrowserList::MarkAsCleanShutdown() { 299 void BrowserList::MarkAsCleanShutdown() {
300 for (const_iterator i = begin(); i != end(); ++i) { 300 for (const_iterator i = begin(); i != end(); ++i) {
301 (*i)->profile()->MarkAsCleanShutdown(); 301 (*i)->profile()->MarkAsCleanShutdown();
302 } 302 }
303 } 303 }
304 304
305 void BrowserList::AttemptExitInternal(bool restart) { 305 void BrowserList::AttemptExitInternal() {
306 PrefService* pref_service = g_browser_process->local_state();
307 pref_service->SetBoolean(prefs::kWasRestarted, restart);
308 content::NotificationService::current()->Notify( 306 content::NotificationService::current()->Notify(
309 content::NOTIFICATION_APP_EXITING, 307 content::NOTIFICATION_APP_EXITING,
310 content::NotificationService::AllSources(), 308 content::NotificationService::AllSources(),
311 content::NotificationService::NoDetails()); 309 content::NotificationService::NoDetails());
312 310
313 #if !defined(OS_MACOSX) 311 #if !defined(OS_MACOSX)
314 // On most platforms, closing all windows causes the application to exit. 312 // On most platforms, closing all windows causes the application to exit.
315 CloseAllBrowsers(); 313 CloseAllBrowsers();
316 #else 314 #else
317 // On the Mac, the application continues to run once all windows are closed. 315 // On the Mac, the application continues to run once all windows are closed.
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 472 }
475 } 473 }
476 474
477 for (BrowserVector::const_iterator i = browsers_to_close.begin(); 475 for (BrowserVector::const_iterator i = browsers_to_close.begin();
478 i != browsers_to_close.end(); ++i) { 476 i != browsers_to_close.end(); ++i) {
479 (*i)->window()->Close(); 477 (*i)->window()->Close();
480 } 478 }
481 } 479 }
482 480
483 // static 481 // static
484 void BrowserList::AttemptUserExit(bool restart) { 482 void BrowserList::AttemptUserExit() {
485 #if defined(OS_CHROMEOS) 483 #if defined(OS_CHROMEOS)
486 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutStarted", false); 484 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutStarted", false);
487 // Write /tmp/uptime-logout-started as well. 485 // Write /tmp/uptime-logout-started as well.
488 const char kLogoutStarted[] = "logout-started"; 486 const char kLogoutStarted[] = "logout-started";
489 chromeos::BootTimesLoader::Get()->RecordCurrentStats(kLogoutStarted); 487 chromeos::BootTimesLoader::Get()->RecordCurrentStats(kLogoutStarted);
490 488
491 // Login screen should show up in owner's locale. 489 // Login screen should show up in owner's locale.
492 PrefService* state = g_browser_process->local_state(); 490 PrefService* state = g_browser_process->local_state();
493 if (state) { 491 if (state) {
494 std::string owner_locale = state->GetString(prefs::kOwnerLocale); 492 std::string owner_locale = state->GetString(prefs::kOwnerLocale);
495 if (!owner_locale.empty() && 493 if (!owner_locale.empty() &&
496 state->GetString(prefs::kApplicationLocale) != owner_locale && 494 state->GetString(prefs::kApplicationLocale) != owner_locale &&
497 !state->IsManagedPreference(prefs::kApplicationLocale)) { 495 !state->IsManagedPreference(prefs::kApplicationLocale)) {
498 state->SetString(prefs::kApplicationLocale, owner_locale); 496 state->SetString(prefs::kApplicationLocale, owner_locale);
499 state->SavePersistentPrefs(); 497 state->SavePersistentPrefs();
500 } 498 }
501 } 499 }
502 g_session_manager_requested_shutdown = false; 500 g_session_manager_requested_shutdown = false;
503 if (FastShutdown()) 501 if (FastShutdown())
504 return; 502 return;
505 #else 503 #else
506 // Reset the restart bit that might have been set in cancelled restart 504 // Reset the restart bit that might have been set in cancelled restart
507 // request. 505 // request.
508 PrefService* pref_service = g_browser_process->local_state(); 506 PrefService* pref_service = g_browser_process->local_state();
509 pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, false); 507 pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, false);
510 #endif 508 #endif
511 AttemptExitInternal(restart); 509 AttemptExitInternal();
512 } 510 }
513 511
514 // static 512 // static
515 void BrowserList::AttemptRestart() { 513 void BrowserList::AttemptRestart() {
516 if (CommandLine::ForCurrentProcess()->HasSwitch( 514 if (CommandLine::ForCurrentProcess()->HasSwitch(
517 switches::kEnableRestoreSessionState)) { 515 switches::kEnableRestoreSessionState)) {
518 BrowserVector::const_iterator it; 516 BrowserVector::const_iterator it;
519 for (it = begin(); it != end(); ++it) 517 for (it = begin(); it != end(); ++it)
520 (*it)->profile()->SaveSessionState(); 518 (*it)->profile()->SaveSessionState();
521 } 519 }
522 520
521 PrefService* pref_service = g_browser_process->local_state();
522 pref_service->SetBoolean(prefs::kWasRestarted, true);
523 pref_service->ScheduleSavePersistentPrefs();
524
523 #if defined(OS_CHROMEOS) 525 #if defined(OS_CHROMEOS)
524 // For CrOS instead of browser restart (which is not supported) perform a full 526 // For CrOS instead of browser restart (which is not supported) perform a full
525 // sign out. Session will be only restored if user has that setting set. 527 // sign out. Session will be only restored if user has that setting set.
526 // Same session restore behavior happens in case of full restart after update. 528 // Same session restore behavior happens in case of full restart after update.
527 AttemptUserExit(true); 529 AttemptUserExit();
528 #else 530 #else
529 // Set the flag to restore state after the restart. 531 // Set the flag to restore state after the restart.
530 PrefService* pref_service = g_browser_process->local_state();
531 pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true); 532 pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true);
532 AttemptExit(true); 533 AttemptExit();
533 #endif 534 #endif
534 } 535 }
535 536
536 // static 537 // static
537 void BrowserList::AttemptExit(bool restart) { 538 void BrowserList::AttemptExit() {
538 // If we know that all browsers can be closed without blocking, 539 // If we know that all browsers can be closed without blocking,
539 // don't notify users of crashes beyond this point. 540 // don't notify users of crashes beyond this point.
540 // Note that MarkAsCleanShutdown does not set UMA's exit cleanly bit 541 // Note that MarkAsCleanShutdown does not set UMA's exit cleanly bit
541 // so crashes during shutdown are still reported in UMA. 542 // so crashes during shutdown are still reported in UMA.
542 if (AreAllBrowsersCloseable()) 543 if (AreAllBrowsersCloseable())
543 MarkAsCleanShutdown(); 544 MarkAsCleanShutdown();
544 AttemptExitInternal(restart); 545 AttemptExitInternal();
545 } 546 }
546 547
547 #if defined(OS_CHROMEOS) 548 #if defined(OS_CHROMEOS)
548 // A function called when SIGTERM is received. 549 // A function called when SIGTERM is received.
549 // static 550 // static
550 void BrowserList::ExitCleanly() { 551 void BrowserList::ExitCleanly() {
551 // We always mark exit cleanly because SessionManager may kill 552 // We always mark exit cleanly because SessionManager may kill
552 // chrome in 3 seconds after SIGTERM. 553 // chrome in 3 seconds after SIGTERM.
553 g_browser_process->EndSession(); 554 g_browser_process->EndSession();
554 555
555 // Don't block when SIGTERM is received. AreaAllBrowsersCloseable() 556 // Don't block when SIGTERM is received. AreaAllBrowsersCloseable()
556 // can be false in following cases. a) power-off b) signout from 557 // can be false in following cases. a) power-off b) signout from
557 // screen locker. 558 // screen locker.
558 if (!AreAllBrowsersCloseable()) 559 if (!AreAllBrowsersCloseable())
559 browser_shutdown::OnShutdownStarting(browser_shutdown::END_SESSION); 560 browser_shutdown::OnShutdownStarting(browser_shutdown::END_SESSION);
560 AttemptExitInternal(false); 561 AttemptExitInternal();
561 } 562 }
562 #endif 563 #endif
563 564
564 // static 565 // static
565 void BrowserList::SessionEnding() { 566 void BrowserList::SessionEnding() {
566 // This is a time-limited shutdown where we need to write as much to 567 // This is a time-limited shutdown where we need to write as much to
567 // disk as we can as soon as we can, and where we must kill the 568 // disk as we can as soon as we can, and where we must kill the
568 // process within a hang timeout to avoid user prompts. 569 // process within a hang timeout to avoid user prompts.
569 570
570 // Start watching for hang during shutdown, and crash it if takes too long. 571 // Start watching for hang during shutdown, and crash it if takes too long.
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 // If no more TabContents from Browsers, check the BackgroundPrintingManager. 861 // If no more TabContents from Browsers, check the BackgroundPrintingManager.
861 while (bg_printing_iterator_ != GetBackgroundPrintingManager()->end()) { 862 while (bg_printing_iterator_ != GetBackgroundPrintingManager()->end()) {
862 cur_ = *bg_printing_iterator_; 863 cur_ = *bg_printing_iterator_;
863 CHECK(cur_); 864 CHECK(cur_);
864 ++bg_printing_iterator_; 865 ++bg_printing_iterator_;
865 return; 866 return;
866 } 867 }
867 // Reached the end - no more TabContents. 868 // Reached the end - no more TabContents.
868 cur_ = NULL; 869 cur_ = NULL;
869 } 870 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698