Index: chrome/browser/sessions/session_service.cc |
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc |
index 0cace940b9e37c8f6268e807077df7b5a6e7a1a3..bedbb000fdb3912312406540deb2cfef24971fc9 100644 |
--- a/chrome/browser/sessions/session_service.cc |
+++ b/chrome/browser/sessions/session_service.cc |
@@ -25,6 +25,7 @@ |
#include "chrome/browser/sessions/session_restore.h" |
#include "chrome/browser/sessions/session_tab_helper.h" |
#include "chrome/browser/sessions/session_types.h" |
+#include "chrome/browser/sync/glue/synced_tab_delegate.h" |
#include "chrome/browser/ui/browser_iterator.h" |
#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/browser_tabstrip.h" |
@@ -50,6 +51,7 @@ using base::Time; |
using content::NavigationEntry; |
using content::WebContents; |
using sessions::SerializedNavigationEntry; |
+using browser_sync::SyncedTabDelegate; |
// Identifier for commands written to file. |
static const SessionCommand::id_type kCommandSetTabWindow = 0; |
@@ -79,6 +81,7 @@ static const SessionCommand::id_type kCommandWindowClosed = 17; |
static const SessionCommand::id_type kCommandSetTabUserAgentOverride = 18; |
static const SessionCommand::id_type kCommandSessionStorageAssociated = 19; |
static const SessionCommand::id_type kCommandSetActiveWindow = 20; |
+static const SessionCommand::id_type kCommandSetTabSessionSyncId = 21; |
// Every kWritesPerReset commands triggers recreating the file. |
static const int kWritesPerReset = 250; |
@@ -480,6 +483,15 @@ void SessionService::SetTabUserAgentOverride( |
kCommandSetTabUserAgentOverride, tab_id.id(), user_agent_override)); |
} |
+void SessionService::SetTabSessionSyncId(const SessionID& window_id, |
+ const SessionID& tab_id, |
+ const int64& sync_id) { |
+ if (!ShouldTrackChangesToWindow(window_id)) |
+ return; |
+ ScheduleCommand(CreateSetTabSessionSyncIdCommand( |
+ kCommandSetTabSessionSyncId, tab_id.id(), sync_id)); |
+} |
+ |
CancelableTaskTracker::TaskId SessionService::GetLastSession( |
const SessionCallback& callback, |
CancelableTaskTracker* tracker) { |
@@ -518,6 +530,9 @@ void SessionService::Init() { |
registrar_.Add( |
this, chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED, |
content::NotificationService::AllSources()); |
+ registrar_.Add(this, |
+ chrome::NOTIFICATION_SESSION_SYNC_ID_GENERATED, |
+ content::NotificationService::AllSources()); |
BrowserList::AddObserver(this); |
} |
@@ -680,6 +695,13 @@ void SessionService::Observe(int type, |
extension_tab_helper->extension_app()->id()); |
} |
break; |
+ |
+ } |
+ case chrome::NOTIFICATION_SESSION_SYNC_ID_GENERATED: { |
+ content::Details<const SyncedTabDelegate> tab(details); |
+ SetTabSessionSyncId( |
+ tab->GetWindowId(), tab->GetSessionId(), tab->GetSyncSessionId()); |
+ break; |
} |
default: |
@@ -1261,6 +1283,15 @@ bool SessionService::CreateTabsAndWindows( |
break; |
} |
+ case kCommandSetTabSessionSyncId: { |
+ SessionID::id_type tab_id; |
+ int64 sync_id = -1; |
+ if (!RestoreSetTabSessionSyncIdCommand(*command, &tab_id, &sync_id)) { |
+ } |
+ GetTab(tab_id, tabs)->sync_session_id = sync_id; |
+ break; |
+ } |
+ |
default: |
VLOG(1) << "Failed reading an unknown command " << command->id(); |
return true; |
@@ -1311,6 +1342,10 @@ void SessionService::BuildCommandsForTab(const SessionID& window_id, |
CreateSetTabUserAgentOverrideCommand( |
kCommandSetTabUserAgentOverride, session_id.id(), ua_override)); |
} |
+ const int64 sync_id = |
+ SessionTabHelper::FromWebContents(tab)->GetSessionSyncId(); |
+ commands->push_back(CreateSetTabSessionSyncIdCommand( |
+ kCommandSetTabSessionSyncId, session_id.id(), sync_id)); |
for (int i = min_index; i < max_index; ++i) { |
const NavigationEntry* entry = (i == pending_index) ? |