14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/sync/glue/session_sync_test_helper.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/sync/glue/synced_session.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sync/protocol/session_specifics.pb.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sync/protocol/sync_enums.pb.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace browser_sync {
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static const char* kClientName = "name";
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static const char* kAppId = "app_id";
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static const char* kVirtualUrl = "http://foo/1";
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static const char* kReferrer = "referrer";
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)static const char* kTitle = "title";
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// static
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SessionSyncTestHelper::BuildSessionSpecifics(
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::string& tag,
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    sync_pb::SessionSpecifics* meta) {
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  meta->set_session_tag(tag);
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  sync_pb::SessionHeader* header = meta->mutable_header();
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  header->set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  header->set_client_name(kClientName);
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// static
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SessionSyncTestHelper::AddWindowSpecifics(
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    int window_id,
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::vector<int>& tab_list,
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    sync_pb::SessionSpecifics* meta) {
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  sync_pb::SessionHeader* header = meta->mutable_header();
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  sync_pb::SessionWindow* window = header->add_window();
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  window->set_window_id(window_id);
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  window->set_selected_tab_index(0);
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  window->set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (std::vector<int>::const_iterator iter = tab_list.begin();
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)       iter != tab_list.end(); ++iter) {
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    window->add_tab(*iter);
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// static
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SessionSyncTestHelper::VerifySyncedSession(
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::string& tag,
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::vector<std::vector<SessionID::id_type> >& windows,
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const SyncedSession& session) {
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_EQ(tag, session.session_tag);
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_EQ(SyncedSession::TYPE_LINUX, session.device_type);
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_EQ(kClientName, session.session_name);
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_EQ(windows.size(), session.windows.size());
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // We assume the window id's are in increasing order.
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int i = 0;
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (std::vector<std::vector<int> >::const_iterator win_iter =
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)           windows.begin();
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)       win_iter != windows.end(); ++win_iter, ++i) {
634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    SessionWindow* win_ptr;
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    SyncedSession::SyncedWindowMap::const_iterator map_iter =
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        session.windows.find(i);
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (map_iter != session.windows.end())
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      win_ptr = map_iter->second;
684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    else
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      FAIL();
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ASSERT_EQ(win_iter->size(), win_ptr->tabs.size());
714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ASSERT_EQ(0, win_ptr->selected_tab_index);
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ASSERT_EQ(1, win_ptr->type);
734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    int j = 0;
744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    for (std::vector<int>::const_iterator tab_iter = (*win_iter).begin();
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)         tab_iter != (*win_iter).end(); ++tab_iter, ++j) {
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      SessionTab* tab = win_ptr->tabs[j];
774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(*tab_iter, tab->tab_id.id());
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(1U, tab->navigations.size());
794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(1, tab->tab_visual_index);
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(0, tab->current_navigation_index);
814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_TRUE(tab->pinned);
824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(kAppId, tab->extension_app_id);
834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(1U, tab->navigations.size());
844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(tab->navigations[0].virtual_url(), GURL(kVirtualUrl));
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(tab->navigations[0].referrer().url, GURL(kReferrer));
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      ASSERT_EQ(tab->navigations[0].title(),
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::ASCIIToUTF16(kTitle));
884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ASSERT_EQ(tab->navigations[0].transition_type(),
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                ui::PAGE_TRANSITION_TYPED);
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SessionSyncTestHelper::BuildTabSpecifics(
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::string& tag,
964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    int window_id,
974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    int tab_id,
984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    sync_pb::SessionSpecifics* tab_base) {
994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab_base->set_session_tag(tag);
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab_base->set_tab_node_id(++max_tab_node_id_);
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  sync_pb::SessionTab* tab = tab_base->mutable_tab();
1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab->set_tab_id(tab_id);
1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab->set_tab_visual_index(1);
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab->set_current_navigation_index(0);
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab->set_pinned(true);
1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tab->set_extension_app_id(kAppId);
1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  sync_pb::TabNavigation* navigation = tab->add_navigation();
1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  navigation->set_virtual_url(kVirtualUrl);
1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  navigation->set_referrer(kReferrer);
1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  navigation->set_title(kTitle);
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  navigation->set_page_transition(sync_pb::SyncEnums_PageTransition_TYPED);
1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SessionSyncTestHelper::Reset() {
1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  max_tab_node_id_ = 0;
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)sync_pb::SessionSpecifics SessionSyncTestHelper::BuildForeignSession(
1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::string& tag,
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const std::vector<SessionID::id_type>& tab_list,
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    std::vector<sync_pb::SessionSpecifics>* tabs) {
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  sync_pb::SessionSpecifics meta;
1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  BuildSessionSpecifics(tag, &meta);
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  AddWindowSpecifics(0, tab_list, &meta);
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::vector<sync_pb::SessionSpecifics> tabs1;
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  tabs1.resize(tab_list.size());
1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (size_t i = 0; i < tab_list.size(); ++i) {
1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    BuildTabSpecifics(tag, 0, tab_list[i], &tabs1[i]);
1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (tabs)
1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    tabs->swap(tabs1);
1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return meta;
1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace browser_sync
137