| 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) ?
|
|
|