OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 #include "components/sessions/serialized_navigation_entry.h" |
| 6 |
5 #include <cstddef> | 7 #include <cstddef> |
6 #include <string> | 8 #include <string> |
7 | 9 |
8 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
9 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
10 #include "base/pickle.h" | 12 #include "base/pickle.h" |
11 #include "base/string16.h" | 13 #include "base/string16.h" |
12 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
13 #include "base/time.h" | 15 #include "base/time.h" |
14 #include "base/utf_string_conversions.h" | 16 #include "base/utf_string_conversions.h" |
15 #include "chrome/browser/search/search.h" | |
16 #include "chrome/browser/sessions/session_types.h" | |
17 #include "chrome/browser/sessions/session_types_test_helper.h" | |
18 #include "content/public/browser/favicon_status.h" | 17 #include "content/public/browser/favicon_status.h" |
19 #include "content/public/browser/navigation_entry.h" | 18 #include "content/public/browser/navigation_entry.h" |
20 #include "content/public/common/page_transition_types.h" | 19 #include "content/public/common/page_transition_types.h" |
21 #include "content/public/common/referrer.h" | 20 #include "content/public/common/referrer.h" |
22 #include "googleurl/src/gurl.h" | 21 #include "googleurl/src/gurl.h" |
23 #include "sync/protocol/session_specifics.pb.h" | 22 #include "sync/protocol/session_specifics.pb.h" |
24 #include "sync/util/time.h" | 23 #include "sync/util/time.h" |
25 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
26 #include "third_party/WebKit/Source/Platform/chromium/public/WebReferrerPolicy.h
" | 25 #include "third_party/WebKit/Source/Platform/chromium/public/WebReferrerPolicy.h
" |
27 | 26 |
| 27 namespace sessions { |
28 namespace { | 28 namespace { |
29 | 29 |
30 const int kIndex = 3; | 30 const int kIndex = 3; |
31 const int kUniqueID = 50; | 31 const int kUniqueID = 50; |
32 const content::Referrer kReferrer = | 32 const content::Referrer kReferrer = |
33 content::Referrer(GURL("http://www.referrer.com"), | 33 content::Referrer(GURL("http://www.referrer.com"), |
34 WebKit::WebReferrerPolicyAlways); | 34 WebKit::WebReferrerPolicyAlways); |
35 const GURL kVirtualURL("http://www.virtual-url.com"); | 35 const GURL kVirtualURL("http://www.virtual-url.com"); |
36 const string16 kTitle = ASCIIToUTF16("title"); | 36 const string16 kTitle = ASCIIToUTF16("title"); |
37 const std::string kContentState = "content state"; | 37 const std::string kContentState = "content state"; |
(...skipping 19 matching lines...) Expand all Loading... |
57 navigation_entry->SetReferrer(kReferrer); | 57 navigation_entry->SetReferrer(kReferrer); |
58 navigation_entry->SetVirtualURL(kVirtualURL); | 58 navigation_entry->SetVirtualURL(kVirtualURL); |
59 navigation_entry->SetTitle(kTitle); | 59 navigation_entry->SetTitle(kTitle); |
60 navigation_entry->SetContentState(kContentState); | 60 navigation_entry->SetContentState(kContentState); |
61 navigation_entry->SetTransitionType(kTransitionType); | 61 navigation_entry->SetTransitionType(kTransitionType); |
62 navigation_entry->SetHasPostData(kHasPostData); | 62 navigation_entry->SetHasPostData(kHasPostData); |
63 navigation_entry->SetPostID(kPostID); | 63 navigation_entry->SetPostID(kPostID); |
64 navigation_entry->SetOriginalRequestURL(kOriginalRequestURL); | 64 navigation_entry->SetOriginalRequestURL(kOriginalRequestURL); |
65 navigation_entry->SetIsOverridingUserAgent(kIsOverridingUserAgent); | 65 navigation_entry->SetIsOverridingUserAgent(kIsOverridingUserAgent); |
66 navigation_entry->SetTimestamp(kTimestamp); | 66 navigation_entry->SetTimestamp(kTimestamp); |
67 navigation_entry->SetExtraData( | 67 navigation_entry->SetExtraData(kSearchTermsKey, kSearchTerms); |
68 chrome::kInstantExtendedSearchTermsKey, kSearchTerms); | |
69 navigation_entry->GetFavicon().valid = true; | 68 navigation_entry->GetFavicon().valid = true; |
70 navigation_entry->GetFavicon().url = kFaviconURL; | 69 navigation_entry->GetFavicon().url = kFaviconURL; |
71 return navigation_entry.Pass(); | 70 return navigation_entry.Pass(); |
72 } | 71 } |
73 | 72 |
74 // Create a sync_pb::TabNavigation from the constants above. | 73 // Create a sync_pb::TabNavigation from the constants above. |
75 sync_pb::TabNavigation MakeSyncDataForTest() { | 74 sync_pb::TabNavigation MakeSyncDataForTest() { |
76 sync_pb::TabNavigation sync_data; | 75 sync_pb::TabNavigation sync_data; |
77 sync_data.set_virtual_url(kVirtualURL.spec()); | 76 sync_data.set_virtual_url(kVirtualURL.spec()); |
78 sync_data.set_referrer(kReferrer.url.spec()); | 77 sync_data.set_referrer(kReferrer.url.spec()); |
79 sync_data.set_title(UTF16ToUTF8(kTitle)); | 78 sync_data.set_title(UTF16ToUTF8(kTitle)); |
80 sync_data.set_state(kContentState); | 79 sync_data.set_state(kContentState); |
81 sync_data.set_page_transition( | 80 sync_data.set_page_transition( |
82 sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME); | 81 sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME); |
83 sync_data.set_unique_id(kUniqueID); | 82 sync_data.set_unique_id(kUniqueID); |
84 sync_data.set_timestamp_msec(syncer::TimeToProtoTime(kTimestamp)); | 83 sync_data.set_timestamp_msec(syncer::TimeToProtoTime(kTimestamp)); |
85 sync_data.set_redirect_type(sync_pb::SyncEnums::CLIENT_REDIRECT); | 84 sync_data.set_redirect_type(sync_pb::SyncEnums::CLIENT_REDIRECT); |
86 sync_data.set_navigation_home_page(true); | 85 sync_data.set_navigation_home_page(true); |
87 sync_data.set_search_terms(UTF16ToUTF8(kSearchTerms)); | 86 sync_data.set_search_terms(UTF16ToUTF8(kSearchTerms)); |
88 sync_data.set_favicon_url(kFaviconURL.spec()); | 87 sync_data.set_favicon_url(kFaviconURL.spec()); |
89 return sync_data; | 88 return sync_data; |
90 } | 89 } |
91 | 90 |
92 // Create a default TabNavigation. All its fields should be | 91 // Create a default SerializedNavigationEntry. All its fields should be |
93 // initialized to their respective default values. | 92 // initialized to their respective default values. |
94 TEST(TabNavigationTest, DefaultInitializer) { | 93 TEST(SerializedNavigationEntryTest, DefaultInitializer) { |
95 const TabNavigation navigation; | 94 const SerializedNavigationEntry navigation; |
96 EXPECT_EQ(-1, navigation.index()); | 95 EXPECT_EQ(-1, navigation.index()); |
97 EXPECT_EQ(0, navigation.unique_id()); | 96 EXPECT_EQ(0, navigation.unique_id()); |
98 EXPECT_EQ(GURL(), SessionTypesTestHelper::GetReferrer(navigation).url); | 97 EXPECT_EQ(GURL(), navigation.referrer().url); |
99 EXPECT_EQ(WebKit::WebReferrerPolicyDefault, | 98 EXPECT_EQ(WebKit::WebReferrerPolicyDefault, navigation.referrer().policy); |
100 SessionTypesTestHelper::GetReferrer(navigation).policy); | |
101 EXPECT_EQ(GURL(), navigation.virtual_url()); | 99 EXPECT_EQ(GURL(), navigation.virtual_url()); |
102 EXPECT_TRUE(navigation.title().empty()); | 100 EXPECT_TRUE(navigation.title().empty()); |
103 EXPECT_TRUE(navigation.content_state().empty()); | 101 EXPECT_TRUE(navigation.content_state().empty()); |
104 EXPECT_EQ(content::PAGE_TRANSITION_TYPED, | 102 EXPECT_EQ(content::PAGE_TRANSITION_TYPED, navigation.transition_type()); |
105 SessionTypesTestHelper::GetTransitionType(navigation)); | 103 EXPECT_FALSE(navigation.has_post_data()); |
106 EXPECT_FALSE(SessionTypesTestHelper::GetHasPostData(navigation)); | 104 EXPECT_EQ(-1, navigation.post_id()); |
107 EXPECT_EQ(-1, SessionTypesTestHelper::GetPostID(navigation)); | 105 EXPECT_EQ(GURL(), navigation.original_request_url()); |
108 EXPECT_EQ(GURL(), SessionTypesTestHelper::GetOriginalRequestURL(navigation)); | 106 EXPECT_FALSE(navigation.is_overriding_user_agent()); |
109 EXPECT_FALSE(SessionTypesTestHelper::GetIsOverridingUserAgent(navigation)); | 107 EXPECT_TRUE(navigation.timestamp().is_null()); |
110 EXPECT_TRUE(SessionTypesTestHelper::GetTimestamp(navigation).is_null()); | |
111 EXPECT_TRUE(navigation.search_terms().empty()); | 108 EXPECT_TRUE(navigation.search_terms().empty()); |
112 EXPECT_FALSE(navigation.favicon_url().is_valid()); | 109 EXPECT_FALSE(navigation.favicon_url().is_valid()); |
113 } | 110 } |
114 | 111 |
115 // Create a TabNavigation from a NavigationEntry. All its fields | 112 // Create a SerializedNavigationEntry from a NavigationEntry. All its fields |
116 // should match the NavigationEntry's. | 113 // should match the NavigationEntry's. |
117 TEST(TabNavigationTest, FromNavigationEntry) { | 114 TEST(SerializedNavigationEntryTest, FromNavigationEntry) { |
118 const scoped_ptr<content::NavigationEntry> navigation_entry( | 115 const scoped_ptr<content::NavigationEntry> navigation_entry( |
119 MakeNavigationEntryForTest()); | 116 MakeNavigationEntryForTest()); |
120 | 117 |
121 const TabNavigation& navigation = | 118 const SerializedNavigationEntry& navigation = |
122 TabNavigation::FromNavigationEntry(kIndex, *navigation_entry); | 119 SerializedNavigationEntry::FromNavigationEntry(kIndex, *navigation_entry); |
123 | 120 |
124 EXPECT_EQ(kIndex, navigation.index()); | 121 EXPECT_EQ(kIndex, navigation.index()); |
125 | 122 |
126 EXPECT_EQ(navigation_entry->GetUniqueID(), navigation.unique_id()); | 123 EXPECT_EQ(navigation_entry->GetUniqueID(), navigation.unique_id()); |
127 EXPECT_EQ(kReferrer.url, | 124 EXPECT_EQ(kReferrer.url, navigation.referrer().url); |
128 SessionTypesTestHelper::GetReferrer(navigation).url); | 125 EXPECT_EQ(kReferrer.policy, navigation.referrer().policy); |
129 EXPECT_EQ(kReferrer.policy, | |
130 SessionTypesTestHelper::GetReferrer(navigation).policy); | |
131 EXPECT_EQ(kVirtualURL, navigation.virtual_url()); | 126 EXPECT_EQ(kVirtualURL, navigation.virtual_url()); |
132 EXPECT_EQ(kTitle, navigation.title()); | 127 EXPECT_EQ(kTitle, navigation.title()); |
133 EXPECT_EQ(kContentState, navigation.content_state()); | 128 EXPECT_EQ(kContentState, navigation.content_state()); |
134 EXPECT_EQ(kTransitionType, | 129 EXPECT_EQ(kTransitionType, navigation.transition_type()); |
135 SessionTypesTestHelper::GetTransitionType(navigation)); | 130 EXPECT_EQ(kHasPostData, navigation.has_post_data()); |
136 EXPECT_EQ(kHasPostData, SessionTypesTestHelper::GetHasPostData(navigation)); | 131 EXPECT_EQ(kPostID, navigation.post_id()); |
137 EXPECT_EQ(kPostID, SessionTypesTestHelper::GetPostID(navigation)); | 132 EXPECT_EQ(kOriginalRequestURL, navigation.original_request_url()); |
138 EXPECT_EQ(kOriginalRequestURL, | 133 EXPECT_EQ(kIsOverridingUserAgent, navigation.is_overriding_user_agent()); |
139 SessionTypesTestHelper::GetOriginalRequestURL(navigation)); | 134 EXPECT_EQ(kTimestamp, navigation.timestamp()); |
140 EXPECT_EQ(kIsOverridingUserAgent, | |
141 SessionTypesTestHelper::GetIsOverridingUserAgent(navigation)); | |
142 EXPECT_EQ(kTimestamp, SessionTypesTestHelper::GetTimestamp(navigation)); | |
143 EXPECT_EQ(kFaviconURL, navigation.favicon_url()); | 135 EXPECT_EQ(kFaviconURL, navigation.favicon_url()); |
144 } | 136 } |
145 | 137 |
146 // Create a TabNavigation from a sync_pb::TabNavigation. All its | 138 // Create a SerializedNavigationEntry from a sync_pb::TabNavigation. All its |
147 // fields should match the protocol buffer's if it exists there, and | 139 // fields should match the protocol buffer's if it exists there, and |
148 // sbould be set to the default value otherwise. | 140 // sbould be set to the default value otherwise. |
149 TEST(TabNavigationTest, FromSyncData) { | 141 TEST(SerializedNavigationEntryTest, FromSyncData) { |
150 const sync_pb::TabNavigation sync_data = MakeSyncDataForTest(); | 142 const sync_pb::TabNavigation sync_data = MakeSyncDataForTest(); |
151 | 143 |
152 const TabNavigation& navigation = | 144 const SerializedNavigationEntry& navigation = |
153 TabNavigation::FromSyncData(kIndex, sync_data); | 145 SerializedNavigationEntry::FromSyncData(kIndex, sync_data); |
154 | 146 |
155 EXPECT_EQ(kIndex, navigation.index()); | 147 EXPECT_EQ(kIndex, navigation.index()); |
156 EXPECT_EQ(kUniqueID, navigation.unique_id()); | 148 EXPECT_EQ(kUniqueID, navigation.unique_id()); |
157 EXPECT_EQ(kReferrer.url, | 149 EXPECT_EQ(kReferrer.url, navigation.referrer().url); |
158 SessionTypesTestHelper::GetReferrer(navigation).url); | 150 EXPECT_EQ(WebKit::WebReferrerPolicyDefault, navigation.referrer().policy); |
159 EXPECT_EQ(WebKit::WebReferrerPolicyDefault, | |
160 SessionTypesTestHelper::GetReferrer(navigation).policy); | |
161 EXPECT_EQ(kVirtualURL, navigation.virtual_url()); | 151 EXPECT_EQ(kVirtualURL, navigation.virtual_url()); |
162 EXPECT_EQ(kTitle, navigation.title()); | 152 EXPECT_EQ(kTitle, navigation.title()); |
163 EXPECT_EQ(kContentState, navigation.content_state()); | 153 EXPECT_EQ(kContentState, navigation.content_state()); |
164 EXPECT_EQ(kTransitionType, | 154 EXPECT_EQ(kTransitionType, navigation.transition_type()); |
165 SessionTypesTestHelper::GetTransitionType(navigation)); | 155 EXPECT_FALSE(navigation.has_post_data()); |
166 EXPECT_FALSE(SessionTypesTestHelper::GetHasPostData(navigation)); | 156 EXPECT_EQ(-1, navigation.post_id()); |
167 EXPECT_EQ(-1, SessionTypesTestHelper::GetPostID(navigation)); | 157 EXPECT_EQ(GURL(), navigation.original_request_url()); |
168 EXPECT_EQ(GURL(), SessionTypesTestHelper::GetOriginalRequestURL(navigation)); | 158 EXPECT_FALSE(navigation.is_overriding_user_agent()); |
169 EXPECT_FALSE(SessionTypesTestHelper::GetIsOverridingUserAgent(navigation)); | 159 EXPECT_TRUE(navigation.timestamp().is_null()); |
170 EXPECT_TRUE(SessionTypesTestHelper::GetTimestamp(navigation).is_null()); | |
171 EXPECT_EQ(kSearchTerms, navigation.search_terms()); | 160 EXPECT_EQ(kSearchTerms, navigation.search_terms()); |
172 EXPECT_EQ(kFaviconURL, navigation.favicon_url()); | 161 EXPECT_EQ(kFaviconURL, navigation.favicon_url()); |
173 } | 162 } |
174 | 163 |
175 // Create a TabNavigation, pickle it, then create another one by | 164 // Create a SerializedNavigationEntry, pickle it, then create another one by |
176 // unpickling. The new one should match the old one except for fields | 165 // unpickling. The new one should match the old one except for fields |
177 // that aren't pickled, which should be set to default values. | 166 // that aren't pickled, which should be set to default values. |
178 TEST(TabNavigationTest, Pickle) { | 167 TEST(SerializedNavigationEntryTest, Pickle) { |
179 const TabNavigation& old_navigation = | 168 const SerializedNavigationEntry& old_navigation = |
180 TabNavigation::FromNavigationEntry(kIndex, *MakeNavigationEntryForTest()); | 169 SerializedNavigationEntry::FromNavigationEntry( |
| 170 kIndex, *MakeNavigationEntryForTest()); |
181 | 171 |
182 Pickle pickle; | 172 Pickle pickle; |
183 old_navigation.WriteToPickle(&pickle); | 173 old_navigation.WriteToPickle(30000, &pickle); |
184 | 174 |
185 TabNavigation new_navigation; | 175 SerializedNavigationEntry new_navigation; |
186 PickleIterator pickle_iterator(pickle); | 176 PickleIterator pickle_iterator(pickle); |
187 EXPECT_TRUE(new_navigation.ReadFromPickle(&pickle_iterator)); | 177 EXPECT_TRUE(new_navigation.ReadFromPickle(&pickle_iterator)); |
188 | 178 |
189 EXPECT_EQ(kIndex, new_navigation.index()); | 179 EXPECT_EQ(kIndex, new_navigation.index()); |
190 | 180 |
191 EXPECT_EQ(0, new_navigation.unique_id()); | 181 EXPECT_EQ(0, new_navigation.unique_id()); |
192 EXPECT_EQ(kReferrer.url, | 182 EXPECT_EQ(kReferrer.url, new_navigation.referrer().url); |
193 SessionTypesTestHelper::GetReferrer(new_navigation).url); | 183 EXPECT_EQ(kReferrer.policy, new_navigation.referrer().policy); |
194 EXPECT_EQ(kReferrer.policy, | |
195 SessionTypesTestHelper::GetReferrer(new_navigation).policy); | |
196 EXPECT_EQ(kVirtualURL, new_navigation.virtual_url()); | 184 EXPECT_EQ(kVirtualURL, new_navigation.virtual_url()); |
197 EXPECT_EQ(kTitle, new_navigation.title()); | 185 EXPECT_EQ(kTitle, new_navigation.title()); |
198 EXPECT_TRUE(new_navigation.content_state().empty()); | 186 EXPECT_TRUE(new_navigation.content_state().empty()); |
199 EXPECT_EQ(kTransitionType, | 187 EXPECT_EQ(kTransitionType, new_navigation.transition_type()); |
200 SessionTypesTestHelper::GetTransitionType(new_navigation)); | 188 EXPECT_EQ(kHasPostData, new_navigation.has_post_data()); |
201 EXPECT_EQ(kHasPostData, | 189 EXPECT_EQ(-1, new_navigation.post_id()); |
202 SessionTypesTestHelper::GetHasPostData(new_navigation)); | 190 EXPECT_EQ(kOriginalRequestURL, new_navigation.original_request_url()); |
203 EXPECT_EQ(-1, SessionTypesTestHelper::GetPostID(new_navigation)); | 191 EXPECT_EQ(kIsOverridingUserAgent, new_navigation.is_overriding_user_agent()); |
204 EXPECT_EQ(kOriginalRequestURL, | 192 EXPECT_EQ(kTimestamp, new_navigation.timestamp()); |
205 SessionTypesTestHelper::GetOriginalRequestURL(new_navigation)); | |
206 EXPECT_EQ(kIsOverridingUserAgent, | |
207 SessionTypesTestHelper::GetIsOverridingUserAgent(new_navigation)); | |
208 EXPECT_EQ(kTimestamp, SessionTypesTestHelper::GetTimestamp(new_navigation)); | |
209 EXPECT_EQ(kSearchTerms, new_navigation.search_terms()); | 193 EXPECT_EQ(kSearchTerms, new_navigation.search_terms()); |
210 } | 194 } |
211 | 195 |
212 // Create a NavigationEntry, then create another one by converting to | 196 // Create a NavigationEntry, then create another one by converting to |
213 // a TabNavigation and back. The new one should match the old one | 197 // a SerializedNavigationEntry and back. The new one should match the old one |
214 // except for fields that aren't preserved, which should be set to | 198 // except for fields that aren't preserved, which should be set to |
215 // expected values. | 199 // expected values. |
216 TEST(TabNavigationTest, ToNavigationEntry) { | 200 TEST(SerializedNavigationEntryTest, ToNavigationEntry) { |
217 const scoped_ptr<content::NavigationEntry> old_navigation_entry( | 201 const scoped_ptr<content::NavigationEntry> old_navigation_entry( |
218 MakeNavigationEntryForTest()); | 202 MakeNavigationEntryForTest()); |
219 | 203 |
220 const TabNavigation& navigation = | 204 const SerializedNavigationEntry& navigation = |
221 TabNavigation::FromNavigationEntry(kIndex, *old_navigation_entry); | 205 SerializedNavigationEntry::FromNavigationEntry(kIndex, |
| 206 *old_navigation_entry); |
222 | 207 |
223 const scoped_ptr<content::NavigationEntry> new_navigation_entry( | 208 const scoped_ptr<content::NavigationEntry> new_navigation_entry( |
224 navigation.ToNavigationEntry(kPageID, NULL)); | 209 navigation.ToNavigationEntry(kPageID, NULL)); |
225 | 210 |
226 EXPECT_EQ(kReferrer.url, new_navigation_entry->GetReferrer().url); | 211 EXPECT_EQ(kReferrer.url, new_navigation_entry->GetReferrer().url); |
227 EXPECT_EQ(kReferrer.policy, new_navigation_entry->GetReferrer().policy); | 212 EXPECT_EQ(kReferrer.policy, new_navigation_entry->GetReferrer().policy); |
228 EXPECT_EQ(kVirtualURL, new_navigation_entry->GetVirtualURL()); | 213 EXPECT_EQ(kVirtualURL, new_navigation_entry->GetVirtualURL()); |
229 EXPECT_EQ(kTitle, new_navigation_entry->GetTitle()); | 214 EXPECT_EQ(kTitle, new_navigation_entry->GetTitle()); |
230 EXPECT_EQ(kContentState, new_navigation_entry->GetContentState()); | 215 EXPECT_EQ(kContentState, new_navigation_entry->GetContentState()); |
231 EXPECT_EQ(kPageID, new_navigation_entry->GetPageID()); | 216 EXPECT_EQ(kPageID, new_navigation_entry->GetPageID()); |
232 EXPECT_EQ(content::PAGE_TRANSITION_RELOAD, | 217 EXPECT_EQ(content::PAGE_TRANSITION_RELOAD, |
233 new_navigation_entry->GetTransitionType()); | 218 new_navigation_entry->GetTransitionType()); |
234 EXPECT_EQ(kHasPostData, new_navigation_entry->GetHasPostData()); | 219 EXPECT_EQ(kHasPostData, new_navigation_entry->GetHasPostData()); |
235 EXPECT_EQ(kPostID, new_navigation_entry->GetPostID()); | 220 EXPECT_EQ(kPostID, new_navigation_entry->GetPostID()); |
236 EXPECT_EQ(kOriginalRequestURL, | 221 EXPECT_EQ(kOriginalRequestURL, |
237 new_navigation_entry->GetOriginalRequestURL()); | 222 new_navigation_entry->GetOriginalRequestURL()); |
238 EXPECT_EQ(kIsOverridingUserAgent, | 223 EXPECT_EQ(kIsOverridingUserAgent, |
239 new_navigation_entry->GetIsOverridingUserAgent()); | 224 new_navigation_entry->GetIsOverridingUserAgent()); |
240 EXPECT_EQ(kSearchTerms, | 225 string16 search_terms; |
241 chrome::GetSearchTermsFromNavigationEntry( | 226 new_navigation_entry->GetExtraData(kSearchTermsKey, &search_terms); |
242 new_navigation_entry.get())); | 227 EXPECT_EQ(kSearchTerms, search_terms); |
243 } | 228 } |
244 | 229 |
245 // Create a NavigationEntry, convert it to a TabNavigation, then | 230 // Create a NavigationEntry, convert it to a SerializedNavigationEntry, then |
246 // create a sync protocol buffer from it. The protocol buffer should | 231 // create a sync protocol buffer from it. The protocol buffer should |
247 // have matching fields to the NavigationEntry (when applicable). | 232 // have matching fields to the NavigationEntry (when applicable). |
248 TEST(TabNavigationTest, ToSyncData) { | 233 TEST(SerializedNavigationEntryTest, ToSyncData) { |
249 const scoped_ptr<content::NavigationEntry> navigation_entry( | 234 const scoped_ptr<content::NavigationEntry> navigation_entry( |
250 MakeNavigationEntryForTest()); | 235 MakeNavigationEntryForTest()); |
251 | 236 |
252 const TabNavigation& navigation = | 237 const SerializedNavigationEntry& navigation = |
253 TabNavigation::FromNavigationEntry(kIndex, *navigation_entry); | 238 SerializedNavigationEntry::FromNavigationEntry(kIndex, *navigation_entry); |
254 | 239 |
255 const sync_pb::TabNavigation sync_data = navigation.ToSyncData(); | 240 const sync_pb::TabNavigation sync_data = navigation.ToSyncData(); |
256 | 241 |
257 EXPECT_EQ(kVirtualURL.spec(), sync_data.virtual_url()); | 242 EXPECT_EQ(kVirtualURL.spec(), sync_data.virtual_url()); |
258 EXPECT_EQ(kReferrer.url.spec(), sync_data.referrer()); | 243 EXPECT_EQ(kReferrer.url.spec(), sync_data.referrer()); |
259 EXPECT_EQ(kTitle, ASCIIToUTF16(sync_data.title())); | 244 EXPECT_EQ(kTitle, ASCIIToUTF16(sync_data.title())); |
260 EXPECT_TRUE(sync_data.state().empty()); | 245 EXPECT_TRUE(sync_data.state().empty()); |
261 EXPECT_EQ(sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME, | 246 EXPECT_EQ(sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME, |
262 sync_data.page_transition()); | 247 sync_data.page_transition()); |
263 EXPECT_TRUE(sync_data.has_redirect_type()); | 248 EXPECT_TRUE(sync_data.has_redirect_type()); |
264 EXPECT_EQ(navigation_entry->GetUniqueID(), sync_data.unique_id()); | 249 EXPECT_EQ(navigation_entry->GetUniqueID(), sync_data.unique_id()); |
265 EXPECT_EQ(syncer::TimeToProtoTime(kTimestamp), sync_data.timestamp_msec()); | 250 EXPECT_EQ(syncer::TimeToProtoTime(kTimestamp), sync_data.timestamp_msec()); |
266 EXPECT_EQ(kTimestamp.ToInternalValue(), sync_data.global_id()); | 251 EXPECT_EQ(kTimestamp.ToInternalValue(), sync_data.global_id()); |
267 EXPECT_EQ(kFaviconURL.spec(), sync_data.favicon_url()); | 252 EXPECT_EQ(kFaviconURL.spec(), sync_data.favicon_url()); |
268 } | 253 } |
269 | 254 |
270 // Ensure all transition types and qualifiers are converted to/from the sync | 255 // Ensure all transition types and qualifiers are converted to/from the sync |
271 // TabNavigation representation properly. | 256 // SerializedNavigationEntry representation properly. |
272 TEST(TabNavigationTest, TransitionTypes) { | 257 TEST(SerializedNavigationEntryTest, TransitionTypes) { |
273 scoped_ptr<content::NavigationEntry> navigation_entry( | 258 scoped_ptr<content::NavigationEntry> navigation_entry( |
274 MakeNavigationEntryForTest()); | 259 MakeNavigationEntryForTest()); |
275 for (uint32 core_type = content::PAGE_TRANSITION_LINK; | 260 for (uint32 core_type = content::PAGE_TRANSITION_LINK; |
276 core_type != content::PAGE_TRANSITION_LAST_CORE; ++core_type) { | 261 core_type != content::PAGE_TRANSITION_LAST_CORE; ++core_type) { |
277 // Because qualifier is a uint32, left shifting will eventually overflow | 262 // Because qualifier is a uint32, left shifting will eventually overflow |
278 // and hit zero again. SERVER_REDIRECT, as the last qualifier and also | 263 // and hit zero again. SERVER_REDIRECT, as the last qualifier and also |
279 // in place of the sign bit, is therefore the last transition before | 264 // in place of the sign bit, is therefore the last transition before |
280 // breaking. | 265 // breaking. |
281 for (uint32 qualifier = content::PAGE_TRANSITION_FORWARD_BACK; | 266 for (uint32 qualifier = content::PAGE_TRANSITION_FORWARD_BACK; |
282 qualifier != 0; qualifier <<= 1) { | 267 qualifier != 0; qualifier <<= 1) { |
283 if (qualifier == 0x08000000) | 268 if (qualifier == 0x08000000) |
284 continue; // 0x08000000 is not a valid qualifier. | 269 continue; // 0x08000000 is not a valid qualifier. |
285 content::PageTransition transition = | 270 content::PageTransition transition = |
286 static_cast<content::PageTransition>(core_type | qualifier); | 271 static_cast<content::PageTransition>(core_type | qualifier); |
287 | 272 |
288 navigation_entry->SetTransitionType(transition); | 273 navigation_entry->SetTransitionType(transition); |
289 const TabNavigation& navigation = | 274 const SerializedNavigationEntry& navigation = |
290 TabNavigation::FromNavigationEntry(kIndex, *navigation_entry); | 275 SerializedNavigationEntry::FromNavigationEntry(kIndex, |
| 276 *navigation_entry); |
291 const sync_pb::TabNavigation& sync_data = navigation.ToSyncData(); | 277 const sync_pb::TabNavigation& sync_data = navigation.ToSyncData(); |
292 const TabNavigation& constructed_nav = | 278 const SerializedNavigationEntry& constructed_nav = |
293 TabNavigation::FromSyncData(kIndex, sync_data); | 279 SerializedNavigationEntry::FromSyncData(kIndex, sync_data); |
294 const content::PageTransition constructed_transition = | 280 const content::PageTransition constructed_transition = |
295 SessionTypesTestHelper::GetTransitionType(constructed_nav); | 281 constructed_nav.transition_type(); |
296 | 282 |
297 EXPECT_EQ(transition, constructed_transition); | 283 EXPECT_EQ(transition, constructed_transition); |
298 } | 284 } |
299 } | 285 } |
300 } | 286 } |
301 | 287 |
302 // Create a typical SessionTab protocol buffer and set an existing | |
303 // SessionTab from it. The data from the protocol buffer should | |
304 // clobber the existing data. | |
305 TEST(SessionTab, FromSyncData) { | |
306 sync_pb::SessionTab sync_data; | |
307 sync_data.set_tab_id(5); | |
308 sync_data.set_window_id(10); | |
309 sync_data.set_tab_visual_index(13); | |
310 sync_data.set_current_navigation_index(3); | |
311 sync_data.set_pinned(true); | |
312 sync_data.set_extension_app_id("app_id"); | |
313 for (int i = 0; i < 5; ++i) { | |
314 sync_pb::TabNavigation* navigation = sync_data.add_navigation(); | |
315 navigation->set_virtual_url("http://foo/" + base::IntToString(i)); | |
316 navigation->set_referrer("referrer"); | |
317 navigation->set_title("title"); | |
318 navigation->set_page_transition(sync_pb::SyncEnums_PageTransition_TYPED); | |
319 } | |
320 | |
321 SessionTab tab; | |
322 tab.window_id.set_id(100); | |
323 tab.tab_id.set_id(100); | |
324 tab.tab_visual_index = 100; | |
325 tab.current_navigation_index = 1000; | |
326 tab.pinned = false; | |
327 tab.extension_app_id = "fake"; | |
328 tab.user_agent_override = "fake"; | |
329 tab.timestamp = base::Time::FromInternalValue(100); | |
330 tab.navigations.resize(100); | |
331 tab.session_storage_persistent_id = "fake"; | |
332 | |
333 tab.SetFromSyncData(sync_data, base::Time::FromInternalValue(5u)); | |
334 EXPECT_EQ(10, tab.window_id.id()); | |
335 EXPECT_EQ(5, tab.tab_id.id()); | |
336 EXPECT_EQ(13, tab.tab_visual_index); | |
337 EXPECT_EQ(3, tab.current_navigation_index); | |
338 EXPECT_TRUE(tab.pinned); | |
339 EXPECT_EQ("app_id", tab.extension_app_id); | |
340 EXPECT_TRUE(tab.user_agent_override.empty()); | |
341 EXPECT_EQ(5u, tab.timestamp.ToInternalValue()); | |
342 ASSERT_EQ(5u, tab.navigations.size()); | |
343 for (int i = 0; i < 5; ++i) { | |
344 EXPECT_EQ(i, tab.navigations[i].index()); | |
345 EXPECT_EQ(GURL("referrer"), | |
346 SessionTypesTestHelper::GetReferrer(tab.navigations[i]).url); | |
347 EXPECT_EQ(string16(ASCIIToUTF16("title")), tab.navigations[i].title()); | |
348 EXPECT_EQ(content::PAGE_TRANSITION_TYPED, | |
349 SessionTypesTestHelper::GetTransitionType(tab.navigations[i])); | |
350 EXPECT_EQ(GURL("http://foo/" + base::IntToString(i)), | |
351 tab.navigations[i].virtual_url()); | |
352 } | |
353 EXPECT_TRUE(tab.session_storage_persistent_id.empty()); | |
354 } | |
355 | |
356 TEST(SessionTab, ToSyncData) { | |
357 SessionTab tab; | |
358 tab.window_id.set_id(10); | |
359 tab.tab_id.set_id(5); | |
360 tab.tab_visual_index = 13; | |
361 tab.current_navigation_index = 3; | |
362 tab.pinned = true; | |
363 tab.extension_app_id = "app_id"; | |
364 tab.user_agent_override = "fake"; | |
365 tab.timestamp = base::Time::FromInternalValue(100); | |
366 for (int i = 0; i < 5; ++i) { | |
367 tab.navigations.push_back( | |
368 SessionTypesTestHelper::CreateNavigation( | |
369 "http://foo/" + base::IntToString(i), "title")); | |
370 } | |
371 tab.session_storage_persistent_id = "fake"; | |
372 | |
373 const sync_pb::SessionTab& sync_data = tab.ToSyncData(); | |
374 EXPECT_EQ(5, sync_data.tab_id()); | |
375 EXPECT_EQ(10, sync_data.window_id()); | |
376 EXPECT_EQ(13, sync_data.tab_visual_index()); | |
377 EXPECT_EQ(3, sync_data.current_navigation_index()); | |
378 EXPECT_TRUE(sync_data.pinned()); | |
379 EXPECT_EQ("app_id", sync_data.extension_app_id()); | |
380 ASSERT_EQ(5, sync_data.navigation_size()); | |
381 for (int i = 0; i < 5; ++i) { | |
382 EXPECT_EQ(tab.navigations[i].virtual_url().spec(), | |
383 sync_data.navigation(i).virtual_url()); | |
384 EXPECT_EQ(UTF16ToUTF8(tab.navigations[i].title()), | |
385 sync_data.navigation(i).title()); | |
386 } | |
387 EXPECT_FALSE(sync_data.has_favicon()); | |
388 EXPECT_FALSE(sync_data.has_favicon_type()); | |
389 EXPECT_FALSE(sync_data.has_favicon_source()); | |
390 } | |
391 | |
392 } // namespace | 288 } // namespace |
| 289 } // namespace sessions |
OLD | NEW |