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