Index: chrome/browser/sync/glue/session_model_associator.cc |
=================================================================== |
--- chrome/browser/sync/glue/session_model_associator.cc (revision 64006) |
+++ chrome/browser/sync/glue/session_model_associator.cc (working copy) |
@@ -192,7 +192,9 @@ |
// Build vector of sessions from specifics data |
for (std::vector<const sync_pb::SessionSpecifics*>::const_iterator i = |
specifics_.begin(); i != specifics_.end(); ++i) { |
- AppendForeignSessionFromSpecifics(*i, sessions); |
+ // Only include sessions with open windows. |
+ if ((*i)->session_window_size() > 0) |
+ AppendForeignSessionFromSpecifics(*i, sessions); |
} |
return true; |
@@ -202,7 +204,7 @@ |
const sync_pb::SessionSpecifics* specifics, |
std::vector<ForeignSession*>* session) { |
ForeignSession* foreign_session = new ForeignSession(); |
- foreign_session->foreign_tession_tag = specifics->session_tag(); |
+ foreign_session->foreign_session_tag = specifics->session_tag(); |
session->insert(session->end(), foreign_session); |
for (int i = 0; i < specifics->session_window_size(); i++) { |
const sync_pb::SessionWindow* window = &specifics->session_window(i); |
@@ -386,24 +388,16 @@ |
void SessionModelAssociator::OnGotSession(int handle, |
std::vector<SessionWindow*>* windows) { |
- sync_pb::SessionSpecifics session; |
+ sync_pb::SessionSpecifics specifics; |
// Set the tag, then iterate through the vector of windows, extracting the |
// window data, along with the tabs data and tab navigation data to populate |
// the session specifics. |
- session.set_session_tag(GetCurrentMachineTag()); |
- for (std::vector<SessionWindow*>::const_iterator i = windows->begin(); |
- i != windows->end(); ++i) { |
- const SessionWindow* window = *i; |
- if (WindowHasNoTabsToSync(window)) { |
- continue; |
- } |
- sync_pb::SessionWindow* session_window = session.add_session_window(); |
- PopulateSessionSpecificsWindow(window, session_window); |
- } |
+ specifics.set_session_tag(GetCurrentMachineTag()); |
+ FillSpecificsFromSessions(windows, &specifics); |
bool has_nodes = false; |
if (!SyncModelHasUserCreatedNodes(&has_nodes)) |
return; |
- if (session.session_window_size() == 0 && has_nodes) |
+ if (specifics.session_window_size() == 0 && has_nodes) |
return; |
sync_api::WriteTransaction trans( |
sync_service_->backend()->GetUserShareHandle()); |
@@ -412,9 +406,23 @@ |
LOG(ERROR) << kNoSessionsFolderError; |
return; |
} |
- UpdateSyncModel(&session, &trans, &root); |
+ UpdateSyncModel(&specifics, &trans, &root); |
} |
+void SessionModelAssociator::FillSpecificsFromSessions( |
+ std::vector<SessionWindow*>* windows, |
+ sync_pb::SessionSpecifics* session) { |
+ for (std::vector<SessionWindow*>::const_iterator i = windows->begin(); |
+ i != windows->end(); ++i) { |
+ const SessionWindow* window = *i; |
+ if (WindowHasNoTabsToSync(window)) { |
+ continue; |
+ } |
+ sync_pb::SessionWindow* session_window = session->add_session_window(); |
+ PopulateSessionSpecificsWindow(window, session_window); |
+ } |
+} |
+ |
void SessionModelAssociator::AppendSessionTabNavigation( |
std::vector<TabNavigation>* navigations, |
const sync_pb::TabNavigation* navigation) { |