session_types_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright (c) 2012 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
5#include <cstddef>
6#include <string>
7
8#include "base/basictypes.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/pickle.h"
11#include "base/strings/string16.h"
12#include "base/strings/string_number_conversions.h"
13#include "base/strings/utf_string_conversions.h"
14#include "base/time/time.h"
15#include "chrome/browser/search/search.h"
16#include "chrome/browser/sessions/session_types.h"
17#include "components/sessions/serialized_navigation_entry_test_helper.h"
18#include "content/public/browser/favicon_status.h"
19#include "content/public/browser/navigation_entry.h"
20#include "content/public/common/page_transition_types.h"
21#include "content/public/common/referrer.h"
22#include "sync/protocol/session_specifics.pb.h"
23#include "sync/util/time.h"
24#include "testing/gtest/include/gtest/gtest.h"
25#include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
26#include "url/gurl.h"
27
28namespace {
29
30const content::Referrer kReferrer =
31    content::Referrer(GURL("http://www.referrer.com"),
32                      blink::WebReferrerPolicyAlways);
33const GURL kVirtualURL("http://www.virtual-url.com");
34const base::string16 kTitle = base::ASCIIToUTF16("title");
35const content::PageState kPageState =
36    content::PageState::CreateFromEncodedData("page state");
37const GURL kOriginalRequestURL("http://www.original-request.com");
38const base::Time kTimestamp = syncer::ProtoTimeToTime(100);
39const base::string16 kSearchTerms = base::ASCIIToUTF16("my search terms");
40const GURL kFaviconURL("http://virtual-url.com/favicon.ico");
41
42// Create a typical SessionTab protocol buffer and set an existing
43// SessionTab from it.  The data from the protocol buffer should
44// clobber the existing data.
45TEST(SessionTab, FromSyncData) {
46  sync_pb::SessionTab sync_data;
47  sync_data.set_tab_id(5);
48  sync_data.set_window_id(10);
49  sync_data.set_tab_visual_index(13);
50  sync_data.set_current_navigation_index(3);
51  sync_data.set_pinned(true);
52  sync_data.set_extension_app_id("app_id");
53  for (int i = 0; i < 5; ++i) {
54    sync_pb::TabNavigation* navigation = sync_data.add_navigation();
55    navigation->set_virtual_url("http://foo/" + base::IntToString(i));
56    navigation->set_referrer("referrer");
57    navigation->set_title("title");
58    navigation->set_page_transition(sync_pb::SyncEnums_PageTransition_TYPED);
59  }
60
61  SessionTab tab;
62  tab.window_id.set_id(100);
63  tab.tab_id.set_id(100);
64  tab.tab_visual_index = 100;
65  tab.current_navigation_index = 1000;
66  tab.pinned = false;
67  tab.extension_app_id = "fake";
68  tab.user_agent_override = "fake";
69  tab.timestamp = base::Time::FromInternalValue(100);
70  tab.navigations.resize(100);
71  tab.session_storage_persistent_id = "fake";
72
73  tab.SetFromSyncData(sync_data, base::Time::FromInternalValue(5u));
74  EXPECT_EQ(10, tab.window_id.id());
75  EXPECT_EQ(5, tab.tab_id.id());
76  EXPECT_EQ(13, tab.tab_visual_index);
77  EXPECT_EQ(3, tab.current_navigation_index);
78  EXPECT_TRUE(tab.pinned);
79  EXPECT_EQ("app_id", tab.extension_app_id);
80  EXPECT_TRUE(tab.user_agent_override.empty());
81  EXPECT_EQ(5u, tab.timestamp.ToInternalValue());
82  ASSERT_EQ(5u, tab.navigations.size());
83  for (int i = 0; i < 5; ++i) {
84    EXPECT_EQ(i, tab.navigations[i].index());
85    EXPECT_EQ(GURL("referrer"), tab.navigations[i].referrer().url);
86    EXPECT_EQ(base::ASCIIToUTF16("title"),tab.navigations[i].title());
87    EXPECT_EQ(content::PAGE_TRANSITION_TYPED,
88              tab.navigations[i].transition_type());
89    EXPECT_EQ(GURL("http://foo/" + base::IntToString(i)),
90              tab.navigations[i].virtual_url());
91  }
92  EXPECT_TRUE(tab.session_storage_persistent_id.empty());
93}
94
95TEST(SessionTab, ToSyncData) {
96  SessionTab tab;
97  tab.window_id.set_id(10);
98  tab.tab_id.set_id(5);
99  tab.tab_visual_index = 13;
100  tab.current_navigation_index = 3;
101  tab.pinned = true;
102  tab.extension_app_id = "app_id";
103  tab.user_agent_override = "fake";
104  tab.timestamp = base::Time::FromInternalValue(100);
105  for (int i = 0; i < 5; ++i) {
106    tab.navigations.push_back(
107        sessions::SerializedNavigationEntryTestHelper::CreateNavigation(
108            "http://foo/" + base::IntToString(i), "title"));
109  }
110  tab.session_storage_persistent_id = "fake";
111
112  const sync_pb::SessionTab& sync_data = tab.ToSyncData();
113  EXPECT_EQ(5, sync_data.tab_id());
114  EXPECT_EQ(10, sync_data.window_id());
115  EXPECT_EQ(13, sync_data.tab_visual_index());
116  EXPECT_EQ(3, sync_data.current_navigation_index());
117  EXPECT_TRUE(sync_data.pinned());
118  EXPECT_EQ("app_id", sync_data.extension_app_id());
119  ASSERT_EQ(5, sync_data.navigation_size());
120  for (int i = 0; i < 5; ++i) {
121    EXPECT_EQ(tab.navigations[i].virtual_url().spec(),
122              sync_data.navigation(i).virtual_url());
123    EXPECT_EQ(base::UTF16ToUTF8(tab.navigations[i].title()),
124              sync_data.navigation(i).title());
125  }
126  EXPECT_FALSE(sync_data.has_favicon());
127  EXPECT_FALSE(sync_data.has_favicon_type());
128  EXPECT_FALSE(sync_data.has_favicon_source());
129}
130
131}  // namespace
132