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