OLD | NEW |
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/sessions/session_restore.h" | 5 #include "chrome/browser/sessions/session_restore.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <list> | 8 #include <list> |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
16 #include "base/stl_util-inl.h" | 16 #include "base/stl_util-inl.h" |
17 #include "base/stringprintf.h" | 17 #include "base/stringprintf.h" |
| 18 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/extensions/extension_service.h" | 19 #include "chrome/browser/extensions/extension_service.h" |
19 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
20 #include "chrome/browser/sessions/session_service.h" | 21 #include "chrome/browser/sessions/session_service.h" |
21 #include "chrome/browser/sessions/session_service_factory.h" | 22 #include "chrome/browser/sessions/session_service_factory.h" |
22 #include "chrome/browser/sessions/session_types.h" | 23 #include "chrome/browser/sessions/session_types.h" |
23 #include "chrome/browser/tabs/tab_strip_model.h" | 24 #include "chrome/browser/tabs/tab_strip_model.h" |
24 #include "chrome/browser/ui/browser.h" | 25 #include "chrome/browser/ui/browser.h" |
25 #include "chrome/browser/ui/browser_list.h" | 26 #include "chrome/browser/ui/browser_list.h" |
26 #include "chrome/browser/ui/browser_navigator.h" | 27 #include "chrome/browser/ui/browser_navigator.h" |
27 #include "chrome/browser/ui/browser_window.h" | 28 #include "chrome/browser/ui/browser_window.h" |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 bool clobber_existing_window, | 415 bool clobber_existing_window, |
415 bool always_create_tabbed_browser, | 416 bool always_create_tabbed_browser, |
416 const std::vector<GURL>& urls_to_open) | 417 const std::vector<GURL>& urls_to_open) |
417 : profile_(profile), | 418 : profile_(profile), |
418 browser_(browser), | 419 browser_(browser), |
419 synchronous_(synchronous), | 420 synchronous_(synchronous), |
420 clobber_existing_window_(clobber_existing_window), | 421 clobber_existing_window_(clobber_existing_window), |
421 always_create_tabbed_browser_(always_create_tabbed_browser), | 422 always_create_tabbed_browser_(always_create_tabbed_browser), |
422 urls_to_open_(urls_to_open), | 423 urls_to_open_(urls_to_open), |
423 restore_started_(base::TimeTicks::Now()) { | 424 restore_started_(base::TimeTicks::Now()) { |
| 425 // When asynchronous its possible for there to be no windows. To make sure |
| 426 // Chrome doesn't prematurely exit AddRef the process. We'll release in the |
| 427 // destructor when restore is done. |
| 428 g_browser_process->AddRefModule(); |
424 } | 429 } |
425 | 430 |
426 Browser* Restore() { | 431 Browser* Restore() { |
427 SessionService* session_service = | 432 SessionService* session_service = |
428 SessionServiceFactory::GetForProfile(profile_); | 433 SessionServiceFactory::GetForProfile(profile_); |
429 DCHECK(session_service); | 434 DCHECK(session_service); |
430 SessionService::SessionCallback* callback = | 435 SessionService::SessionCallback* callback = |
431 NewCallback(this, &SessionRestoreImpl::OnGotSession); | 436 NewCallback(this, &SessionRestoreImpl::OnGotSession); |
432 session_service->GetLastSession(&request_consumer_, callback); | 437 session_service->GetLastSession(&request_consumer_, callback); |
433 | 438 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 browser_ ? browser_ : BrowserList::GetLastActiveWithProfile(profile_); | 489 browser_ ? browser_ : BrowserList::GetLastActiveWithProfile(profile_); |
485 RestoreTab(tab, current_browser->tab_count(), current_browser, true); | 490 RestoreTab(tab, current_browser->tab_count(), current_browser, true); |
486 NotifySessionServiceOfRestoredTabs(current_browser, | 491 NotifySessionServiceOfRestoredTabs(current_browser, |
487 current_browser->tab_count()); | 492 current_browser->tab_count()); |
488 FinishedTabCreation(true, true); | 493 FinishedTabCreation(true, true); |
489 } | 494 } |
490 | 495 |
491 ~SessionRestoreImpl() { | 496 ~SessionRestoreImpl() { |
492 STLDeleteElements(&windows_); | 497 STLDeleteElements(&windows_); |
493 restoring = false; | 498 restoring = false; |
| 499 g_browser_process->ReleaseModule(); |
494 } | 500 } |
495 | 501 |
496 virtual void Observe(NotificationType type, | 502 virtual void Observe(NotificationType type, |
497 const NotificationSource& source, | 503 const NotificationSource& source, |
498 const NotificationDetails& details) { | 504 const NotificationDetails& details) { |
499 switch (type.value) { | 505 switch (type.value) { |
500 case NotificationType::BROWSER_CLOSED: | 506 case NotificationType::BROWSER_CLOSED: |
501 delete this; | 507 delete this; |
502 return; | 508 return; |
503 | 509 |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 Browser* SessionRestore::RestoreSessionSynchronously( | 849 Browser* SessionRestore::RestoreSessionSynchronously( |
844 Profile* profile, | 850 Profile* profile, |
845 const std::vector<GURL>& urls_to_open) { | 851 const std::vector<GURL>& urls_to_open) { |
846 return Restore(profile, NULL, true, false, true, urls_to_open); | 852 return Restore(profile, NULL, true, false, true, urls_to_open); |
847 } | 853 } |
848 | 854 |
849 // static | 855 // static |
850 bool SessionRestore::IsRestoring() { | 856 bool SessionRestore::IsRestoring() { |
851 return restoring; | 857 return restoring; |
852 } | 858 } |
OLD | NEW |