| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_service.h" | 5 #include "chrome/browser/sessions/session_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "chrome/browser/sessions/session_service_utils.h" | 30 #include "chrome/browser/sessions/session_service_utils.h" |
| 31 #include "chrome/browser/sessions/session_tab_helper.h" | 31 #include "chrome/browser/sessions/session_tab_helper.h" |
| 32 #include "chrome/browser/ui/browser_iterator.h" | 32 #include "chrome/browser/ui/browser_iterator.h" |
| 33 #include "chrome/browser/ui/browser_list.h" | 33 #include "chrome/browser/ui/browser_list.h" |
| 34 #include "chrome/browser/ui/browser_tabstrip.h" | 34 #include "chrome/browser/ui/browser_tabstrip.h" |
| 35 #include "chrome/browser/ui/browser_window.h" | 35 #include "chrome/browser/ui/browser_window.h" |
| 36 #include "chrome/browser/ui/host_desktop.h" | 36 #include "chrome/browser/ui/host_desktop.h" |
| 37 #include "chrome/browser/ui/startup/startup_browser_creator.h" | 37 #include "chrome/browser/ui/startup/startup_browser_creator.h" |
| 38 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 38 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 39 #include "components/sessions/content/content_serialized_navigation_builder.h" | 39 #include "components/sessions/content/content_serialized_navigation_builder.h" |
| 40 #include "components/sessions/core/session_constants.h" |
| 40 #include "components/sessions/session_command.h" | 41 #include "components/sessions/session_command.h" |
| 41 #include "components/sessions/session_types.h" | 42 #include "components/sessions/session_types.h" |
| 42 #include "content/public/browser/navigation_details.h" | 43 #include "content/public/browser/navigation_details.h" |
| 43 #include "content/public/browser/navigation_entry.h" | 44 #include "content/public/browser/navigation_entry.h" |
| 44 #include "content/public/browser/notification_details.h" | 45 #include "content/public/browser/notification_details.h" |
| 45 #include "content/public/browser/notification_service.h" | 46 #include "content/public/browser/notification_service.h" |
| 46 #include "content/public/browser/session_storage_namespace.h" | 47 #include "content/public/browser/session_storage_namespace.h" |
| 47 #include "content/public/browser/web_contents.h" | 48 #include "content/public/browser/web_contents.h" |
| 48 #include "extensions/common/extension.h" | 49 #include "extensions/common/extension.h" |
| 49 | 50 |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 const SessionID& tab_id, | 491 const SessionID& tab_id, |
| 491 base::TimeTicks last_active_time) { | 492 base::TimeTicks last_active_time) { |
| 492 if (!ShouldTrackChangesToWindow(window_id)) | 493 if (!ShouldTrackChangesToWindow(window_id)) |
| 493 return; | 494 return; |
| 494 | 495 |
| 495 ScheduleCommand( | 496 ScheduleCommand( |
| 496 sessions::CreateLastActiveTimeCommand(tab_id, last_active_time).Pass()); | 497 sessions::CreateLastActiveTimeCommand(tab_id, last_active_time).Pass()); |
| 497 } | 498 } |
| 498 | 499 |
| 499 base::CancelableTaskTracker::TaskId SessionService::GetLastSession( | 500 base::CancelableTaskTracker::TaskId SessionService::GetLastSession( |
| 500 const SessionCallback& callback, | 501 const sessions::GetLastSessionCallback& callback, |
| 501 base::CancelableTaskTracker* tracker) { | 502 base::CancelableTaskTracker* tracker) { |
| 502 // OnGotSessionCommands maps the SessionCommands to browser state, then run | 503 // OnGotSessionCommands maps the SessionCommands to browser state, then run |
| 503 // the callback. | 504 // the callback. |
| 504 return base_session_service_->ScheduleGetLastSessionCommands( | 505 return base_session_service_->ScheduleGetLastSessionCommands( |
| 505 base::Bind(&SessionService::OnGotSessionCommands, | 506 base::Bind(&SessionService::OnGotSessionCommands, |
| 506 weak_factory_.GetWeakPtr(), | 507 weak_factory_.GetWeakPtr(), |
| 507 callback), | 508 callback), |
| 508 tracker); | 509 tracker); |
| 509 } | 510 } |
| 510 | 511 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 688 } | 689 } |
| 689 } | 690 } |
| 690 | 691 |
| 691 void SessionService::OnBrowserSetLastActive(Browser* browser) { | 692 void SessionService::OnBrowserSetLastActive(Browser* browser) { |
| 692 if (ShouldTrackBrowser(browser)) | 693 if (ShouldTrackBrowser(browser)) |
| 693 ScheduleCommand(sessions::CreateSetActiveWindowCommand( | 694 ScheduleCommand(sessions::CreateSetActiveWindowCommand( |
| 694 browser->session_id()).Pass()); | 695 browser->session_id()).Pass()); |
| 695 } | 696 } |
| 696 | 697 |
| 697 void SessionService::OnGotSessionCommands( | 698 void SessionService::OnGotSessionCommands( |
| 698 const SessionCallback& callback, | 699 const sessions::GetLastSessionCallback& callback, |
| 699 ScopedVector<sessions::SessionCommand> commands) { | 700 ScopedVector<sessions::SessionCommand> commands) { |
| 700 ScopedVector<sessions::SessionWindow> valid_windows; | 701 ScopedVector<sessions::SessionWindow> valid_windows; |
| 701 SessionID::id_type active_window_id = 0; | 702 SessionID::id_type active_window_id = 0; |
| 702 | 703 |
| 703 sessions::RestoreSessionFromCommands( | 704 sessions::RestoreSessionFromCommands( |
| 704 commands, &valid_windows.get(), &active_window_id); | 705 commands, &valid_windows.get(), &active_window_id); |
| 705 RemoveUnusedRestoreWindows(&valid_windows.get()); | 706 RemoveUnusedRestoreWindows(&valid_windows.get()); |
| 706 | 707 |
| 707 callback.Run(valid_windows.Pass(), active_window_id); | 708 callback.Run(valid_windows.Pass(), active_window_id); |
| 708 } | 709 } |
| 709 | 710 |
| 710 void SessionService::BuildCommandsForTab(const SessionID& window_id, | 711 void SessionService::BuildCommandsForTab(const SessionID& window_id, |
| 711 WebContents* tab, | 712 WebContents* tab, |
| 712 int index_in_window, | 713 int index_in_window, |
| 713 bool is_pinned, | 714 bool is_pinned, |
| 714 IdToRange* tab_to_available_range) { | 715 IdToRange* tab_to_available_range) { |
| 715 DCHECK(tab && window_id.id()); | 716 DCHECK(tab && window_id.id()); |
| 716 SessionTabHelper* session_tab_helper = SessionTabHelper::FromWebContents(tab); | 717 SessionTabHelper* session_tab_helper = SessionTabHelper::FromWebContents(tab); |
| 717 const SessionID& session_id(session_tab_helper->session_id()); | 718 const SessionID& session_id(session_tab_helper->session_id()); |
| 718 base_session_service_->AppendRebuildCommand( | 719 base_session_service_->AppendRebuildCommand( |
| 719 sessions::CreateSetTabWindowCommand(window_id, session_id)); | 720 sessions::CreateSetTabWindowCommand(window_id, session_id)); |
| 720 | 721 |
| 721 const int current_index = tab->GetController().GetCurrentEntryIndex(); | 722 const int current_index = tab->GetController().GetCurrentEntryIndex(); |
| 722 const int min_index = std::max(current_index - gMaxPersistNavigationCount, 0); | 723 const int min_index = |
| 723 const int max_index = std::min(current_index + gMaxPersistNavigationCount, | 724 std::max(current_index - sessions::gMaxPersistNavigationCount, 0); |
| 724 tab->GetController().GetEntryCount()); | 725 const int max_index = |
| 726 std::min(current_index + sessions::gMaxPersistNavigationCount, |
| 727 tab->GetController().GetEntryCount()); |
| 725 const int pending_index = tab->GetController().GetPendingEntryIndex(); | 728 const int pending_index = tab->GetController().GetPendingEntryIndex(); |
| 726 if (tab_to_available_range) { | 729 if (tab_to_available_range) { |
| 727 (*tab_to_available_range)[session_id.id()] = | 730 (*tab_to_available_range)[session_id.id()] = |
| 728 std::pair<int, int>(min_index, max_index); | 731 std::pair<int, int>(min_index, max_index); |
| 729 } | 732 } |
| 730 | 733 |
| 731 if (is_pinned) { | 734 if (is_pinned) { |
| 732 base_session_service_->AppendRebuildCommand( | 735 base_session_service_->AppendRebuildCommand( |
| 733 sessions::CreatePinnedStateCommand(session_id, true)); | 736 sessions::CreatePinnedStateCommand(session_id, true)); |
| 734 } | 737 } |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1106 for (chrome::BrowserIterator it; !it.done(); it.Next()) { | 1109 for (chrome::BrowserIterator it; !it.done(); it.Next()) { |
| 1107 if ((*it)->profile() == profile()) | 1110 if ((*it)->profile() == profile()) |
| 1108 return; | 1111 return; |
| 1109 } | 1112 } |
| 1110 DeleteSessionOnlyData(profile()); | 1113 DeleteSessionOnlyData(profile()); |
| 1111 } | 1114 } |
| 1112 | 1115 |
| 1113 sessions::BaseSessionService* SessionService::GetBaseSessionServiceForTest() { | 1116 sessions::BaseSessionService* SessionService::GetBaseSessionServiceForTest() { |
| 1114 return base_session_service_.get(); | 1117 return base_session_service_.get(); |
| 1115 } | 1118 } |
| OLD | NEW |