Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
|
Jói
2013/04/26 21:55:47
2013?
| |
| 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 components { | |
| 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(components::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 components | |
| OLD | NEW |