12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/rand_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync/glue/session_model_associator.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/session_specifics.pb.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kBaseSessionTag[] = "session_tag"; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kBaseSessionName[] = "session_name"; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kBaseTabUrl[] = "http://foo/?"; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTabTitleFormat[] = "session=%d;window=%d;tab=%d"; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct TitleTimestampPair { 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time timestamp; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SortTabTimesByRecency(const TitleTimestampPair& t1, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TitleTimestampPair& t2) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return t1.timestamp > t2.timestamp; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int CreateUniqueID() { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int s_id = 0; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++s_id; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return s_id; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ToSessionTag(SessionID::id_type session_id) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return std::string(kBaseSessionTag + base::IntToString(session_id)); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ToSessionName(SessionID::id_type session_id) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return std::string(kBaseSessionName + base::IntToString(session_id)); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ToTabTitle(SessionID::id_type session_id, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type window_id, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type tab_id) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::StringPrintf(kTabTitleFormat, session_id, window_id, tab_id); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ToTabUrl(SessionID::id_type session_id, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type window_id, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type tab_id) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return std::string(kBaseTabUrl + ToTabTitle(session_id, window_id, tab_id)); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct RecentTabsBuilderTestHelper::TabInfo { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabInfo() : id(0) {} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type id; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time timestamp; 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct RecentTabsBuilderTestHelper::WindowInfo { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WindowInfo() : id(0) {} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~WindowInfo() {} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type id; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<TabInfo> tabs; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct RecentTabsBuilderTestHelper::SessionInfo { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionInfo() : id(0) {} 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~SessionInfo() {} 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type id; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WindowInfo> windows; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)RecentTabsBuilderTestHelper::RecentTabsBuilderTestHelper() 80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : max_tab_node_id_(0) { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) start_time_ = base::Time::Now(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RecentTabsBuilderTestHelper::~RecentTabsBuilderTestHelper() { 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::AddSession() { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionInfo info; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info.id = CreateUniqueID(); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sessions_.push_back(info); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int RecentTabsBuilderTestHelper::GetSessionCount() { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_.size(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SessionID::id_type RecentTabsBuilderTestHelper::GetSessionID( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int session_index) { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_[session_index].id; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Time RecentTabsBuilderTestHelper::GetSessionTimestamp(int session_index) { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<base::Time> timestamps; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int w = 0; w < GetWindowCount(session_index); ++w) { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int t = 0; t < GetTabCount(session_index, w); ++t) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) timestamps.push_back(GetTabTimestamp(session_index, w, t)); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (timestamps.empty()) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::Time::Now(); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sort(timestamps.begin(), timestamps.end()); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return timestamps[0]; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::AddWindow(int session_index) { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WindowInfo window_info; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_info.id = CreateUniqueID(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sessions_[session_index].windows.push_back(window_info); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int RecentTabsBuilderTestHelper::GetWindowCount(int session_index) { 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_[session_index].windows.size(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SessionID::id_type RecentTabsBuilderTestHelper::GetWindowID(int session_index, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index) { 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_[session_index].windows[window_index].id; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::AddTab(int session_index, int window_index) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time timestamp = 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) start_time_ + base::TimeDelta::FromMinutes(base::RandUint64()); 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddTabWithInfo(session_index, window_index, timestamp, base::string16()); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::AddTabWithInfo(int session_index, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index, 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time timestamp, 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title) { 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabInfo tab_info; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_info.id = CreateUniqueID(); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_info.timestamp = timestamp; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_info.title = title; 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sessions_[session_index].windows[window_index].tabs.push_back(tab_info); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int RecentTabsBuilderTestHelper::GetTabCount(int session_index, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index) { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_[session_index].windows[window_index].tabs.size(); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SessionID::id_type RecentTabsBuilderTestHelper::GetTabID(int session_index, 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index, 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_index) { 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_[session_index].windows[window_index].tabs[tab_index].id; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Time RecentTabsBuilderTestHelper::GetTabTimestamp(int session_index, 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index, 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_index) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sessions_[session_index].windows[window_index] 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .tabs[tab_index].timestamp; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 166d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 RecentTabsBuilderTestHelper::GetTabTitle(int session_index, 167d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) int window_index, 168d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) int tab_index) { 169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title = 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sessions_[session_index].windows[window_index].tabs[tab_index].title; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (title.empty()) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title = UTF8ToUTF16(ToTabTitle( 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSessionID(session_index), 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowID(session_index, window_index), 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetTabID(session_index, window_index, tab_index))); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return title; 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::RegisterRecentTabs( 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_sync::SessionModelAssociator* associator) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int s = 0; s < GetSessionCount(); ++s) { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionSpecifics meta; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BuildSessionSpecifics(s, &meta); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int w = 0; w < GetWindowCount(s); ++w) { 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BuildWindowSpecifics(s, w, &meta); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int t = 0; t < GetTabCount(s, w); ++t) { 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionSpecifics tab_base; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BuildTabSpecifics(s, w, t, &tab_base); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) associator->AssociateForeignSpecifics(tab_base, 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetTabTimestamp(s, w, t)); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) associator->AssociateForeignSpecifics(meta, GetSessionTimestamp(s)); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure data is populated correctly in SessionModelAssociator. 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<const browser_sync::SyncedSession*> sessions; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(associator->GetAllForeignSessions(&sessions)); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(GetSessionCount(), static_cast<int>(sessions.size())); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int s = 0; s < GetSessionCount(); ++s) { 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<const SessionWindow*> windows; 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(associator->GetForeignSession(ToSessionTag(GetSessionID(s)), 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &windows)); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(GetWindowCount(s), static_cast<int>(windows.size())); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int w = 0; w < GetWindowCount(s); ++w) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(GetTabCount(s, w), static_cast<int>(windows[w]->tabs.size())); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 211d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)std::vector<base::string16> 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RecentTabsBuilderTestHelper::GetTabTitlesSortedByRecency() { 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<TitleTimestampPair> tabs; 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int s = 0; s < GetSessionCount(); ++s) { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int w = 0; w < GetWindowCount(s); ++w) { 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int t = 0; t < GetTabCount(s, w); ++t) { 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TitleTimestampPair pair; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pair.title = GetTabTitle(s, w, t); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pair.timestamp = GetTabTimestamp(s, w, t); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tabs.push_back(pair); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sort(tabs.begin(), tabs.end(), SortTabTimesByRecency); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 226d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) std::vector<base::string16> titles; 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < tabs.size(); ++i) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) titles.push_back(tabs[i].title); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return titles; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::BuildSessionSpecifics( 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int session_index, 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionSpecifics* meta) { 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type session_id = GetSessionID(session_index); 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) meta->set_session_tag(ToSessionTag(session_id)); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionHeader* header = meta->mutable_header(); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) header->set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_CROS); 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) header->set_client_name(ToSessionName(session_id)); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::BuildWindowSpecifics( 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int session_index, 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index, 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionSpecifics* meta) { 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionHeader* header = meta->mutable_header(); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionWindow* window = header->add_window(); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type window_id = GetWindowID(session_index, window_index); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->set_window_id(window_id); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->set_selected_tab_index(0); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_TABBED); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < GetTabCount(session_index, window_index); ++i) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->add_tab(GetTabID(session_index, window_index, i)); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecentTabsBuilderTestHelper::BuildTabSpecifics( 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int session_index, 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_index, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_index, 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionSpecifics* tab_base) { 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type session_id = GetSessionID(session_index); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type window_id = GetWindowID(session_index, window_index); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type tab_id = GetTabID(session_index, window_index, tab_index); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab_base->set_session_tag(ToSessionTag(session_id)); 266a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) tab_base->set_tab_node_id(++max_tab_node_id_); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::SessionTab* tab = tab_base->mutable_tab(); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab->set_window_id(window_id); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab->set_tab_id(tab_id); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab->set_tab_visual_index(1); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab->set_current_navigation_index(0); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab->set_pinned(true); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab->set_extension_app_id("app_id"); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::TabNavigation* navigation = tab->add_navigation(); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation->set_virtual_url(ToTabUrl(session_id, window_id, tab_id)); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation->set_referrer("referrer"); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation->set_title(UTF16ToUTF8(GetTabTitle( 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) session_index, window_index, tab_index))); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigation->set_page_transition(sync_pb::SyncEnums_PageTransition_TYPED); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 281