Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / sessions / sessions_sync_manager.cc
index 0becf03..06f33dd 100644 (file)
@@ -11,6 +11,7 @@
 #include "chrome/browser/sync/sessions/sessions_util.h"
 #include "chrome/browser/sync/sessions/synced_window_delegates_getter.h"
 #include "chrome/common/url_constants.h"
+#include "components/sessions/content/content_serialized_navigation_builder.h"
 #include "components/sync_driver/local_device_info_provider.h"
 #include "content/public/browser/favicon_status.h"
 #include "content/public/browser/navigation_entry.h"
@@ -24,6 +25,7 @@
 #include "sync/api/time.h"
 
 using content::NavigationEntry;
+using sessions::ContentSerializedNavigationBuilder;
 using sessions::SerializedNavigationEntry;
 using sync_driver::DeviceInfo;
 using sync_driver::LocalDeviceInfoProvider;
@@ -650,6 +652,16 @@ void SessionsSyncManager::UpdateTrackerWithForeignSession(
   } else if (specifics.has_tab()) {
     const sync_pb::SessionTab& tab_s = specifics.tab();
     SessionID::id_type tab_id = tab_s.tab_id();
+
+    const SessionTab* existing_tab;
+    if (session_tracker_.LookupSessionTab(
+            foreign_session_tag, tab_id, &existing_tab) &&
+        existing_tab->timestamp > modification_time) {
+      DVLOG(1) << "Ignoring " << foreign_session_tag << "'s session tab "
+               << tab_id << " with earlier modification time";
+      return;
+    }
+
     SessionTab* tab =
         session_tracker_.GetTab(foreign_session_tag,
                                 tab_id,
@@ -738,11 +750,13 @@ void SessionsSyncManager::BuildSyncedSessionFromSpecifics(
   if (specifics.has_selected_tab_index())
     session_window->selected_tab_index = specifics.selected_tab_index();
   if (specifics.has_browser_type()) {
+    // TODO(skuhne): Sync data writes |BrowserType| not
+    // |SessionWindow::WindowType|. This should get changed.
     if (specifics.browser_type() ==
         sync_pb::SessionWindow_BrowserType_TYPE_TABBED) {
-      session_window->type = 1;
+      session_window->type = SessionWindow::TYPE_TABBED;
     } else {
-      session_window->type = 2;
+      session_window->type = SessionWindow::TYPE_POPUP;
     }
   }
   session_window->timestamp = mtime;
@@ -975,7 +989,7 @@ void SessionsSyncManager::SetSessionTabFromDelegate(
       session_tab->current_navigation_index = session_tab->navigations.size();
 
     session_tab->navigations.push_back(
-        SerializedNavigationEntry::FromNavigationEntry(i, *entry));
+        ContentSerializedNavigationBuilder::FromNavigationEntry(i, *entry));
     if (is_supervised) {
       session_tab->navigations.back().set_blocked_state(
           SerializedNavigationEntry::STATE_ALLOWED);
@@ -995,7 +1009,7 @@ void SessionsSyncManager::SetSessionTabFromDelegate(
     int offset = session_tab->navigations.size();
     for (size_t i = 0; i < blocked_navigations.size(); ++i) {
       session_tab->navigations.push_back(
-          SerializedNavigationEntry::FromNavigationEntry(
+          ContentSerializedNavigationBuilder::FromNavigationEntry(
               i + offset, *blocked_navigations[i]));
       session_tab->navigations.back().set_blocked_state(
           SerializedNavigationEntry::STATE_BLOCKED);