session_sync_test_helper.cc 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. #include "components/sync_sessions/session_sync_test_helper.h"
  5. #include <stddef.h>
  6. #include "base/strings/utf_string_conversions.h"
  7. #include "components/sync/protocol/session_specifics.pb.h"
  8. #include "components/sync/protocol/sync_enums.pb.h"
  9. #include "components/sync_sessions/synced_session.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. namespace sync_sessions {
  12. static const char* kClientName = "name";
  13. static const char* kAppId = "app_id";
  14. static const char* kVirtualUrl = "http://foo/1";
  15. static const char* kReferrer = "referrer";
  16. static const char* kTitle = "title";
  17. // static
  18. void SessionSyncTestHelper::BuildSessionSpecifics(
  19. const std::string& tag,
  20. sync_pb::SessionSpecifics* meta) {
  21. meta->set_session_tag(tag);
  22. sync_pb::SessionHeader* header = meta->mutable_header();
  23. header->set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
  24. header->set_client_name(kClientName);
  25. }
  26. // static
  27. void SessionSyncTestHelper::AddWindowSpecifics(
  28. SessionID window_id,
  29. const std::vector<SessionID>& tab_list,
  30. sync_pb::SessionSpecifics* meta) {
  31. sync_pb::SessionHeader* header = meta->mutable_header();
  32. sync_pb::SessionWindow* window = header->add_window();
  33. window->set_window_id(window_id.id());
  34. window->set_selected_tab_index(0);
  35. window->set_browser_type(sync_pb::SyncEnums_BrowserType_TYPE_TABBED);
  36. for (const SessionID& tab_id : tab_list) {
  37. window->add_tab(tab_id.id());
  38. }
  39. }
  40. // static
  41. void SessionSyncTestHelper::VerifySyncedSession(
  42. const std::string& tag,
  43. const std::vector<std::vector<SessionID>>& windows,
  44. const SyncedSession& session) {
  45. ASSERT_EQ(tag, session.session_tag);
  46. ASSERT_EQ(sync_pb::SyncEnums_DeviceType_TYPE_LINUX, session.device_type);
  47. ASSERT_EQ(kClientName, session.session_name);
  48. ASSERT_EQ(windows.size(), session.windows.size());
  49. // We assume the window id's are in increasing order.
  50. int i = 1;
  51. for (const std::vector<SessionID>& window : windows) {
  52. sessions::SessionWindow* win_ptr;
  53. auto map_iter = session.windows.find(SessionID::FromSerializedValue(i));
  54. if (map_iter != session.windows.end()) {
  55. win_ptr = &map_iter->second->wrapped_window;
  56. } else {
  57. FAIL();
  58. }
  59. ASSERT_EQ(window.size(), win_ptr->tabs.size());
  60. ASSERT_EQ(0, win_ptr->selected_tab_index);
  61. ASSERT_EQ(sessions::SessionWindow::TYPE_NORMAL, win_ptr->type);
  62. int j = 0;
  63. for (const SessionID& tab_id : window) {
  64. sessions::SessionTab* tab = win_ptr->tabs[j].get();
  65. ASSERT_EQ(tab_id, tab->tab_id);
  66. ASSERT_EQ(1U, tab->navigations.size());
  67. ASSERT_EQ(1, tab->tab_visual_index);
  68. ASSERT_EQ(0, tab->current_navigation_index);
  69. ASSERT_TRUE(tab->pinned);
  70. ASSERT_EQ(kAppId, tab->extension_app_id);
  71. ASSERT_EQ(1U, tab->navigations.size());
  72. ASSERT_EQ(tab->navigations[0].virtual_url(), GURL(kVirtualUrl));
  73. ASSERT_EQ(tab->navigations[0].referrer_url(), GURL(kReferrer));
  74. ASSERT_EQ(tab->navigations[0].title(), base::ASCIIToUTF16(kTitle));
  75. ASSERT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
  76. tab->navigations[0].transition_type(), ui::PAGE_TRANSITION_TYPED));
  77. j++;
  78. }
  79. i++;
  80. }
  81. }
  82. sync_pb::SessionSpecifics SessionSyncTestHelper::BuildTabSpecifics(
  83. const std::string& tag,
  84. SessionID window_id,
  85. SessionID tab_id) {
  86. return BuildTabSpecifics(tag, window_id, tab_id, ++max_tab_node_id_);
  87. }
  88. sync_pb::SessionSpecifics SessionSyncTestHelper::BuildTabSpecifics(
  89. const std::string& tag,
  90. SessionID window_id,
  91. SessionID tab_id,
  92. int tab_node_id) {
  93. sync_pb::SessionSpecifics specifics;
  94. specifics.set_session_tag(tag);
  95. specifics.set_tab_node_id(tab_node_id);
  96. sync_pb::SessionTab* tab = specifics.mutable_tab();
  97. tab->set_window_id(window_id.id());
  98. tab->set_tab_id(tab_id.id());
  99. tab->set_tab_visual_index(1);
  100. tab->set_current_navigation_index(0);
  101. tab->set_pinned(true);
  102. tab->set_extension_app_id(kAppId);
  103. sync_pb::TabNavigation* navigation = tab->add_navigation();
  104. navigation->set_virtual_url(kVirtualUrl);
  105. navigation->set_referrer(kReferrer);
  106. navigation->set_title(kTitle);
  107. navigation->set_page_transition(sync_pb::SyncEnums_PageTransition_TYPED);
  108. return specifics;
  109. }
  110. void SessionSyncTestHelper::Reset() {
  111. max_tab_node_id_ = 0;
  112. }
  113. sync_pb::SessionSpecifics SessionSyncTestHelper::BuildForeignSession(
  114. const std::string& tag,
  115. const std::vector<SessionID>& tab_list,
  116. std::vector<sync_pb::SessionSpecifics>* tabs) {
  117. const SessionID window_id = SessionID::FromSerializedValue(1);
  118. sync_pb::SessionSpecifics header;
  119. BuildSessionSpecifics(tag, &header);
  120. AddWindowSpecifics(window_id, tab_list, &header);
  121. if (tabs) {
  122. tabs->clear();
  123. for (SessionID tab_id : tab_list) {
  124. tabs->push_back(BuildTabSpecifics(tag, window_id, tab_id));
  125. }
  126. }
  127. return header;
  128. }
  129. } // namespace sync_sessions