[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
maxbogue | a79d99b7 | 2016-09-15 15:59:16 | [diff] [blame] | 5 | #include "components/sync_sessions/session_sync_test_helper.h" |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 6 | |
avi | 664c07b | 2015-12-26 02:18:31 | [diff] [blame] | 7 | #include <stddef.h> |
| 8 | |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 9 | #include "base/strings/utf_string_conversions.h" |
Max Bogue | fef332d | 2016-07-28 22:09:09 | [diff] [blame] | 10 | #include "components/sync/protocol/session_specifics.pb.h" |
| 11 | #include "components/sync/protocol/sync_enums.pb.h" |
maxbogue | 8ef2508 | 2015-11-16 19:09:58 | [diff] [blame] | 12 | #include "components/sync_sessions/synced_session.h" |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 13 | #include "testing/gtest/include/gtest/gtest.h" |
| 14 | |
maxbogue | a79d99b7 | 2016-09-15 15:59:16 | [diff] [blame] | 15 | namespace sync_sessions { |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 16 | |
| 17 | static const char* kClientName = "name"; |
| 18 | static const char* kAppId = "app_id"; |
| 19 | static const char* kVirtualUrl = "http://foo/1"; |
| 20 | static const char* kReferrer = "referrer"; |
| 21 | static const char* kTitle = "title"; |
| 22 | |
| 23 | // static |
| 24 | void SessionSyncTestHelper::BuildSessionSpecifics( |
| 25 | const std::string& tag, |
| 26 | sync_pb::SessionSpecifics* meta) { |
| 27 | meta->set_session_tag(tag); |
| 28 | sync_pb::SessionHeader* header = meta->mutable_header(); |
| 29 | header->set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX); |
| 30 | header->set_client_name(kClientName); |
| 31 | } |
| 32 | |
| 33 | // static |
| 34 | void SessionSyncTestHelper::AddWindowSpecifics( |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 35 | SessionID window_id, |
| 36 | const std::vector<SessionID>& tab_list, |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 37 | sync_pb::SessionSpecifics* meta) { |
| 38 | sync_pb::SessionHeader* header = meta->mutable_header(); |
| 39 | sync_pb::SessionWindow* window = header->add_window(); |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 40 | window->set_window_id(window_id.id()); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 41 | window->set_selected_tab_index(0); |
| 42 | window->set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_TABBED); |
Victor Hugo Vianna Silva | 988fe732 | 2021-09-23 18:16:56 | [diff] [blame] | 43 | for (const SessionID& tab_id : tab_list) { |
| 44 | window->add_tab(tab_id.id()); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 45 | } |
| 46 | } |
| 47 | |
| 48 | // static |
| 49 | void SessionSyncTestHelper::VerifySyncedSession( |
| 50 | const std::string& tag, |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 51 | const std::vector<std::vector<SessionID>>& windows, |
maxbogue | a79d99b7 | 2016-09-15 15:59:16 | [diff] [blame] | 52 | const SyncedSession& session) { |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 53 | ASSERT_EQ(tag, session.session_tag); |
Mikel Astiz | 35fd82bf | 2018-02-19 12:47:13 | [diff] [blame] | 54 | ASSERT_EQ(sync_pb::SyncEnums_DeviceType_TYPE_LINUX, session.device_type); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 55 | ASSERT_EQ(kClientName, session.session_name); |
| 56 | ASSERT_EQ(windows.size(), session.windows.size()); |
| 57 | |
| 58 | // We assume the window id's are in increasing order. |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 59 | int i = 1; |
| 60 | for (auto win_iter = windows.begin(); win_iter != windows.end(); |
| 61 | ++win_iter, ++i) { |
skuhne | b7409dcf | 2014-11-14 04:06:55 | [diff] [blame] | 62 | sessions::SessionWindow* win_ptr; |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 63 | auto map_iter = session.windows.find(SessionID::FromSerializedValue(i)); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 64 | if (map_iter != session.windows.end()) |
zea | 325508e | 2017-03-29 20:11:22 | [diff] [blame] | 65 | win_ptr = &map_iter->second->wrapped_window; |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 66 | else |
| 67 | FAIL(); |
| 68 | ASSERT_EQ(win_iter->size(), win_ptr->tabs.size()); |
| 69 | ASSERT_EQ(0, win_ptr->selected_tab_index); |
Joel Hockey | 2687ab5 | 2019-08-14 23:59:46 | [diff] [blame] | 70 | ASSERT_EQ(sessions::SessionWindow::TYPE_NORMAL, win_ptr->type); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 71 | int j = 0; |
avi | 498cabca | 2016-09-21 19:03:50 | [diff] [blame] | 72 | for (auto tab_iter = (*win_iter).begin(); tab_iter != (*win_iter).end(); |
| 73 | ++tab_iter, ++j) { |
| 74 | sessions::SessionTab* tab = win_ptr->tabs[j].get(); |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 75 | ASSERT_EQ(*tab_iter, tab->tab_id); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 76 | ASSERT_EQ(1U, tab->navigations.size()); |
| 77 | ASSERT_EQ(1, tab->tab_visual_index); |
| 78 | ASSERT_EQ(0, tab->current_navigation_index); |
| 79 | ASSERT_TRUE(tab->pinned); |
| 80 | ASSERT_EQ(kAppId, tab->extension_app_id); |
| 81 | ASSERT_EQ(1U, tab->navigations.size()); |
| 82 | ASSERT_EQ(tab->navigations[0].virtual_url(), GURL(kVirtualUrl)); |
rohitrao | c6d8e740 | 2014-10-20 21:52:00 | [diff] [blame] | 83 | ASSERT_EQ(tab->navigations[0].referrer_url(), GURL(kReferrer)); |
maxbogue | a79d99b7 | 2016-09-15 15:59:16 | [diff] [blame] | 84 | ASSERT_EQ(tab->navigations[0].title(), base::ASCIIToUTF16(kTitle)); |
mastiz | 7eddb5f7 | 2016-06-23 09:52:45 | [diff] [blame] | 85 | ASSERT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( |
| 86 | tab->navigations[0].transition_type(), ui::PAGE_TRANSITION_TYPED)); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 87 | } |
| 88 | } |
| 89 | } |
| 90 | |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 91 | sync_pb::SessionSpecifics SessionSyncTestHelper::BuildTabSpecifics( |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 92 | const std::string& tag, |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 93 | SessionID window_id, |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 94 | SessionID tab_id) { |
| 95 | return BuildTabSpecifics(tag, window_id, tab_id, ++max_tab_node_id_); |
skym | 199c7fd | 2016-04-14 19:26:42 | [diff] [blame] | 96 | } |
| 97 | |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 98 | sync_pb::SessionSpecifics SessionSyncTestHelper::BuildTabSpecifics( |
skym | 199c7fd | 2016-04-14 19:26:42 | [diff] [blame] | 99 | const std::string& tag, |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 100 | SessionID window_id, |
| 101 | SessionID tab_id, |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 102 | int tab_node_id) { |
| 103 | sync_pb::SessionSpecifics specifics; |
| 104 | specifics.set_session_tag(tag); |
| 105 | specifics.set_tab_node_id(tab_node_id); |
| 106 | sync_pb::SessionTab* tab = specifics.mutable_tab(); |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 107 | tab->set_tab_id(tab_id.id()); |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 108 | tab->set_tab_visual_index(1); |
| 109 | tab->set_current_navigation_index(0); |
| 110 | tab->set_pinned(true); |
| 111 | tab->set_extension_app_id(kAppId); |
| 112 | sync_pb::TabNavigation* navigation = tab->add_navigation(); |
| 113 | navigation->set_virtual_url(kVirtualUrl); |
| 114 | navigation->set_referrer(kReferrer); |
| 115 | navigation->set_title(kTitle); |
| 116 | navigation->set_page_transition(sync_pb::SyncEnums_PageTransition_TYPED); |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 117 | return specifics; |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 118 | } |
| 119 | |
| 120 | void SessionSyncTestHelper::Reset() { |
| 121 | max_tab_node_id_ = 0; |
| 122 | } |
| 123 | |
| 124 | sync_pb::SessionSpecifics SessionSyncTestHelper::BuildForeignSession( |
| 125 | const std::string& tag, |
Mikel Astiz | e023c57 | 2018-03-28 07:56:56 | [diff] [blame] | 126 | const std::vector<SessionID>& tab_list, |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 127 | std::vector<sync_pb::SessionSpecifics>* tabs) { |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 128 | const SessionID window_id = SessionID::FromSerializedValue(1); |
| 129 | sync_pb::SessionSpecifics header; |
| 130 | BuildSessionSpecifics(tag, &header); |
| 131 | AddWindowSpecifics(window_id, tab_list, &header); |
| 132 | |
| 133 | if (tabs) { |
| 134 | tabs->clear(); |
| 135 | for (SessionID tab_id : tab_list) { |
| 136 | tabs->push_back(BuildTabSpecifics(tag, window_id, tab_id)); |
| 137 | } |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 138 | } |
| 139 | |
Mikel Astiz | 8c8ca81 | 2018-12-03 13:31:05 | [diff] [blame] | 140 | return header; |
[email protected] | f545687 | 2013-09-27 17:56:42 | [diff] [blame] | 141 | } |
| 142 | |
maxbogue | a79d99b7 | 2016-09-15 15:59:16 | [diff] [blame] | 143 | } // namespace sync_sessions |