diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-14 20:20:09 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-14 20:20:09 +0000 |
commit | 5c0e648d6f4ea988be36e74cae045ba5f041e5cb (patch) | |
tree | f0fb62cf06be0ef7afa2b74babb0fe0ee7c1bc02 /chrome/browser/sessions/session_service.cc | |
parent | 2e7054c0c76fe1c9a12de5925b7ad1a7aff94e45 (diff) | |
download | chromium_src-5c0e648d6f4ea988be36e74cae045ba5f041e5cb.zip chromium_src-5c0e648d6f4ea988be36e74cae045ba5f041e5cb.tar.gz chromium_src-5c0e648d6f4ea988be36e74cae045ba5f041e5cb.tar.bz2 |
Wires up restoring pinned tabs for session and tab restore
services. And turns on pinned tabs by default on linux.
BUG=16634
TEST=Currently this linux only. Try tab pinning and make sure it works.
Review URL: http://codereview.chromium.org/149621
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20650 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sessions/session_service.cc')
-rw-r--r-- | chrome/browser/sessions/session_service.cc | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index 33a5e6f..0a9c630 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc @@ -48,6 +48,7 @@ static const SessionCommand::id_type kCommandSetWindowType = 9; static const SessionCommand::id_type kCommandSetWindowBounds2 = 10; static const SessionCommand::id_type kCommandTabNavigationPathPrunedFromFront = 11; +static const SessionCommand::id_type kCommandSetPinnedState = 12; // Every kWritesPerReset commands triggers recreating the file. static const int kWritesPerReset = 250; @@ -107,6 +108,11 @@ typedef IDAndIndexPayload WindowTypePayload; typedef IDAndIndexPayload TabNavigationPathPrunedFromFrontPayload; +struct PinnedStatePayload { + SessionID::id_type tab_id; + bool pinned_state; +}; + } // namespace // SessionService ------------------------------------------------------------- @@ -175,6 +181,15 @@ void SessionService::SetTabIndexInWindow(const SessionID& window_id, ScheduleCommand(CreateSetTabIndexInWindowCommand(tab_id, new_index)); } +void SessionService::SetPinnedState(const SessionID& window_id, + const SessionID& tab_id, + bool is_pinned) { + if (!ShouldTrackChangesToWindow(window_id)) + return; + + ScheduleCommand(CreatePinnedStateCommand(tab_id, is_pinned)); +} + void SessionService::TabClosed(const SessionID& window_id, const SessionID& tab_id) { if (!ShouldTrackChangesToWindow(window_id)) @@ -320,12 +335,13 @@ void SessionService::UpdateTabNavigation(const SessionID& window_id, tab_id.id(), index, entry)); } -void SessionService::TabRestored(NavigationController* controller) { +void SessionService::TabRestored(NavigationController* controller, + bool pinned) { if (!ShouldTrackChangesToWindow(controller->window_id())) return; BuildCommandsForTab(controller->window_id(), controller, -1, - &pending_commands(), NULL); + pinned, &pending_commands(), NULL); StartSaveTimer(); } @@ -562,7 +578,7 @@ SessionCommand* SessionService::CreateSetSelectedNavigationIndexCommand( SessionCommand* SessionService::CreateSetWindowTypeCommand( const SessionID& window_id, Browser::Type type) { - WindowTypePayload payload = { 0 }; + WindowTypePayload payload = { 0 }; payload.id = window_id.id(); payload.index = static_cast<int32>(type); SessionCommand* command = new SessionCommand( @@ -571,6 +587,18 @@ SessionCommand* SessionService::CreateSetWindowTypeCommand( return command; } +SessionCommand* SessionService::CreatePinnedStateCommand( + const SessionID& tab_id, + bool is_pinned) { + PinnedStatePayload payload = { 0 }; + payload.tab_id = tab_id.id(); + payload.pinned_state = is_pinned; + SessionCommand* command = + new SessionCommand(kCommandSetPinnedState, sizeof(payload)); + memcpy(command->contents(), &payload, sizeof(payload)); + return command; +} + void SessionService::OnGotLastSessionCommands( Handle handle, scoped_refptr<InternalGetCommandsRequest> request) { @@ -863,6 +891,14 @@ bool SessionService::CreateTabsAndWindows( break; } + case kCommandSetPinnedState: { + PinnedStatePayload payload; + if (!command->GetPayload(&payload, sizeof(payload))) + return true; + GetTab(payload.tab_id, tabs)->pinned = payload.pinned_state; + break; + } + default: return true; } @@ -874,6 +910,7 @@ void SessionService::BuildCommandsForTab( const SessionID& window_id, NavigationController* controller, int index_in_window, + bool is_pinned, std::vector<SessionCommand*>* commands, IdToRange* tab_to_available_range) { DCHECK(controller && commands && window_id.id()); @@ -889,6 +926,10 @@ void SessionService::BuildCommandsForTab( (*tab_to_available_range)[controller->session_id().id()] = std::pair<int, int>(min_index, max_index); } + if (is_pinned) { + commands->push_back( + CreatePinnedStateCommand(controller->session_id(), true)); + } for (int i = min_index; i < max_index; ++i) { const NavigationEntry* entry = (i == pending_index) ? controller->pending_entry() : controller->GetEntryAtIndex(i); @@ -934,6 +975,7 @@ void SessionService::BuildCommandsForBrowser( DCHECK(tab); if (tab->profile() == profile()) { BuildCommandsForTab(browser->session_id(), &tab->controller(), i, + browser->tabstrip_model()->IsTabPinned(i), commands, tab_to_available_range); if (windows_to_track && !added_to_windows_to_track) { windows_to_track->insert(browser->session_id().id()); |