| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/content/content_serialized_navigation_builder.h" | 5 #include "components/sessions/content/content_serialized_navigation_builder.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/strings/utf_string_conversions.h" |
| 7 #include "components/sessions/content/content_record_password_state.h" | 9 #include "components/sessions/content/content_record_password_state.h" |
| 10 #include "components/sessions/content/content_serialized_navigation_driver.h" |
| 11 #include "components/sessions/content/extended_info_handler.h" |
| 8 #include "components/sessions/core/serialized_navigation_entry.h" | 12 #include "components/sessions/core/serialized_navigation_entry.h" |
| 9 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" | 13 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" |
| 10 #include "content/public/browser/favicon_status.h" | 14 #include "content/public/browser/favicon_status.h" |
| 11 #include "content/public/browser/navigation_entry.h" | 15 #include "content/public/browser/navigation_entry.h" |
| 12 #include "content/public/common/page_state.h" | 16 #include "content/public/common/page_state.h" |
| 13 #include "content/public/common/referrer.h" | 17 #include "content/public/common/referrer.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 19 |
| 16 namespace sessions { | 20 namespace sessions { |
| 17 | 21 |
| 18 namespace { | 22 namespace { |
| 23 |
| 24 const char kExtendedInfoKey1[] = "Key 1"; |
| 25 const char kExtendedInfoValue1[] = "Value 1"; |
| 26 const char kExtendedInfoKey2[] = "Key 2"; |
| 27 const char kExtendedInfoValue2[] = "Value 2"; |
| 28 |
| 29 class TestExtendedInfoHandler : public ExtendedInfoHandler { |
| 30 public: |
| 31 explicit TestExtendedInfoHandler(const std::string& key) : key_(key) {} |
| 32 ~TestExtendedInfoHandler() override {} |
| 33 |
| 34 std::string GetExtendedInfo( |
| 35 const content::NavigationEntry& entry) const override { |
| 36 base::string16 data; |
| 37 entry.GetExtraData(key_, &data); |
| 38 return base::UTF16ToASCII(data); |
| 39 } |
| 40 |
| 41 void RestoreExtendedInfo(const std::string& info, |
| 42 content::NavigationEntry* entry) override { |
| 43 entry->SetExtraData(key_, base::ASCIIToUTF16(info)); |
| 44 } |
| 45 |
| 46 private: |
| 47 std::string key_; |
| 48 |
| 49 DISALLOW_COPY_AND_ASSIGN(TestExtendedInfoHandler); |
| 50 }; |
| 51 |
| 19 // Create a NavigationEntry from the test_data constants in | 52 // Create a NavigationEntry from the test_data constants in |
| 20 // serialized_navigation_entry_test_helper.h. | 53 // serialized_navigation_entry_test_helper.h. |
| 21 std::unique_ptr<content::NavigationEntry> MakeNavigationEntryForTest() { | 54 std::unique_ptr<content::NavigationEntry> MakeNavigationEntryForTest() { |
| 22 std::unique_ptr<content::NavigationEntry> navigation_entry( | 55 std::unique_ptr<content::NavigationEntry> navigation_entry( |
| 23 content::NavigationEntry::Create()); | 56 content::NavigationEntry::Create()); |
| 24 navigation_entry->SetReferrer(content::Referrer( | 57 navigation_entry->SetReferrer(content::Referrer( |
| 25 test_data::kReferrerURL, | 58 test_data::kReferrerURL, |
| 26 static_cast<blink::WebReferrerPolicy>(test_data::kReferrerPolicy))); | 59 static_cast<blink::WebReferrerPolicy>(test_data::kReferrerPolicy))); |
| 27 navigation_entry->SetVirtualURL(test_data::kVirtualURL); | 60 navigation_entry->SetVirtualURL(test_data::kVirtualURL); |
| 28 navigation_entry->SetTitle(test_data::kTitle); | 61 navigation_entry->SetTitle(test_data::kTitle); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 42 navigation_entry->GetFavicon().url = test_data::kFaviconURL; | 75 navigation_entry->GetFavicon().url = test_data::kFaviconURL; |
| 43 navigation_entry->SetHttpStatusCode(test_data::kHttpStatusCode); | 76 navigation_entry->SetHttpStatusCode(test_data::kHttpStatusCode); |
| 44 std::vector<GURL> redirect_chain; | 77 std::vector<GURL> redirect_chain; |
| 45 redirect_chain.push_back(test_data::kRedirectURL0); | 78 redirect_chain.push_back(test_data::kRedirectURL0); |
| 46 redirect_chain.push_back(test_data::kRedirectURL1); | 79 redirect_chain.push_back(test_data::kRedirectURL1); |
| 47 redirect_chain.push_back(test_data::kVirtualURL); | 80 redirect_chain.push_back(test_data::kVirtualURL); |
| 48 navigation_entry->SetRedirectChain(redirect_chain); | 81 navigation_entry->SetRedirectChain(redirect_chain); |
| 49 return navigation_entry; | 82 return navigation_entry; |
| 50 } | 83 } |
| 51 | 84 |
| 85 void SetExtendedInfoForTest(content::NavigationEntry* entry) { |
| 86 entry->SetExtraData(kExtendedInfoKey1, |
| 87 base::ASCIIToUTF16(kExtendedInfoValue1)); |
| 88 entry->SetExtraData(kExtendedInfoKey2, |
| 89 base::ASCIIToUTF16(kExtendedInfoValue2)); |
| 90 ContentSerializedNavigationDriver::GetInstance()->RegisterExtendedInfoHandler( |
| 91 kExtendedInfoKey1, base::WrapUnique<ExtendedInfoHandler>( |
| 92 new TestExtendedInfoHandler(kExtendedInfoKey1))); |
| 93 ContentSerializedNavigationDriver::GetInstance()->RegisterExtendedInfoHandler( |
| 94 kExtendedInfoKey2, base::WrapUnique<ExtendedInfoHandler>( |
| 95 new TestExtendedInfoHandler(kExtendedInfoKey2))); |
| 96 } |
| 97 |
| 52 } // namespace | 98 } // namespace |
| 53 | 99 |
| 54 | 100 |
| 55 // Create a SerializedNavigationEntry from a NavigationEntry. All its fields | 101 // Create a SerializedNavigationEntry from a NavigationEntry. All its fields |
| 56 // should match the NavigationEntry's. | 102 // should match the NavigationEntry's. |
| 57 TEST(ContentSerializedNavigationBuilderTest, FromNavigationEntry) { | 103 TEST(ContentSerializedNavigationBuilderTest, FromNavigationEntry) { |
| 58 const std::unique_ptr<content::NavigationEntry> navigation_entry( | 104 const std::unique_ptr<content::NavigationEntry> navigation_entry( |
| 59 MakeNavigationEntryForTest()); | 105 MakeNavigationEntryForTest()); |
| 106 SetExtendedInfoForTest(navigation_entry.get()); |
| 60 | 107 |
| 61 const SerializedNavigationEntry& navigation = | 108 const SerializedNavigationEntry& navigation = |
| 62 ContentSerializedNavigationBuilder::FromNavigationEntry( | 109 ContentSerializedNavigationBuilder::FromNavigationEntry( |
| 63 test_data::kIndex, *navigation_entry); | 110 test_data::kIndex, *navigation_entry); |
| 64 | 111 |
| 65 EXPECT_EQ(test_data::kIndex, navigation.index()); | 112 EXPECT_EQ(test_data::kIndex, navigation.index()); |
| 66 | 113 |
| 67 EXPECT_EQ(navigation_entry->GetUniqueID(), navigation.unique_id()); | 114 EXPECT_EQ(navigation_entry->GetUniqueID(), navigation.unique_id()); |
| 68 EXPECT_EQ(test_data::kReferrerURL, navigation.referrer_url()); | 115 EXPECT_EQ(test_data::kReferrerURL, navigation.referrer_url()); |
| 69 EXPECT_EQ(test_data::kReferrerPolicy, navigation.referrer_policy()); | 116 EXPECT_EQ(test_data::kReferrerPolicy, navigation.referrer_policy()); |
| 70 EXPECT_EQ(test_data::kVirtualURL, navigation.virtual_url()); | 117 EXPECT_EQ(test_data::kVirtualURL, navigation.virtual_url()); |
| 71 EXPECT_EQ(test_data::kTitle, navigation.title()); | 118 EXPECT_EQ(test_data::kTitle, navigation.title()); |
| 72 EXPECT_EQ(test_data::kEncodedPageState, navigation.encoded_page_state()); | 119 EXPECT_EQ(test_data::kEncodedPageState, navigation.encoded_page_state()); |
| 73 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( | 120 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( |
| 74 navigation.transition_type(), test_data::kTransitionType)); | 121 navigation.transition_type(), test_data::kTransitionType)); |
| 75 EXPECT_EQ(test_data::kHasPostData, navigation.has_post_data()); | 122 EXPECT_EQ(test_data::kHasPostData, navigation.has_post_data()); |
| 76 EXPECT_EQ(test_data::kPostID, navigation.post_id()); | 123 EXPECT_EQ(test_data::kPostID, navigation.post_id()); |
| 77 EXPECT_EQ(test_data::kOriginalRequestURL, navigation.original_request_url()); | 124 EXPECT_EQ(test_data::kOriginalRequestURL, navigation.original_request_url()); |
| 78 EXPECT_EQ(test_data::kIsOverridingUserAgent, | 125 EXPECT_EQ(test_data::kIsOverridingUserAgent, |
| 79 navigation.is_overriding_user_agent()); | 126 navigation.is_overriding_user_agent()); |
| 80 EXPECT_EQ(test_data::kTimestamp, navigation.timestamp()); | 127 EXPECT_EQ(test_data::kTimestamp, navigation.timestamp()); |
| 81 EXPECT_EQ(test_data::kFaviconURL, navigation.favicon_url()); | 128 EXPECT_EQ(test_data::kFaviconURL, navigation.favicon_url()); |
| 82 EXPECT_EQ(test_data::kHttpStatusCode, navigation.http_status_code()); | 129 EXPECT_EQ(test_data::kHttpStatusCode, navigation.http_status_code()); |
| 83 ASSERT_EQ(3U, navigation.redirect_chain().size()); | 130 ASSERT_EQ(3U, navigation.redirect_chain().size()); |
| 84 EXPECT_EQ(test_data::kRedirectURL0, navigation.redirect_chain()[0]); | 131 EXPECT_EQ(test_data::kRedirectURL0, navigation.redirect_chain()[0]); |
| 85 EXPECT_EQ(test_data::kRedirectURL1, navigation.redirect_chain()[1]); | 132 EXPECT_EQ(test_data::kRedirectURL1, navigation.redirect_chain()[1]); |
| 86 EXPECT_EQ(test_data::kVirtualURL, navigation.redirect_chain()[2]); | 133 EXPECT_EQ(test_data::kVirtualURL, navigation.redirect_chain()[2]); |
| 87 EXPECT_EQ(test_data::kPasswordState, navigation.password_state()); | 134 EXPECT_EQ(test_data::kPasswordState, navigation.password_state()); |
| 135 |
| 136 ASSERT_EQ(2U, navigation.extended_info_map().size()); |
| 137 ASSERT_EQ(1U, navigation.extended_info_map().count(kExtendedInfoKey1)); |
| 138 EXPECT_EQ(kExtendedInfoValue1, |
| 139 navigation.extended_info_map().at(kExtendedInfoKey1)); |
| 140 ASSERT_EQ(1U, navigation.extended_info_map().count(kExtendedInfoKey2)); |
| 141 EXPECT_EQ(kExtendedInfoValue2, |
| 142 navigation.extended_info_map().at(kExtendedInfoKey2)); |
| 88 } | 143 } |
| 89 | 144 |
| 90 // Create a NavigationEntry, then create another one by converting to | 145 // Create a NavigationEntry, then create another one by converting to |
| 91 // a SerializedNavigationEntry and back. The new one should match the old one | 146 // a SerializedNavigationEntry and back. The new one should match the old one |
| 92 // except for fields that aren't preserved, which should be set to | 147 // except for fields that aren't preserved, which should be set to |
| 93 // expected values. | 148 // expected values. |
| 94 TEST(ContentSerializedNavigationBuilderTest, ToNavigationEntry) { | 149 TEST(ContentSerializedNavigationBuilderTest, ToNavigationEntry) { |
| 95 const std::unique_ptr<content::NavigationEntry> old_navigation_entry( | 150 const std::unique_ptr<content::NavigationEntry> old_navigation_entry( |
| 96 MakeNavigationEntryForTest()); | 151 MakeNavigationEntryForTest()); |
| 152 SetExtendedInfoForTest(old_navigation_entry.get()); |
| 97 | 153 |
| 98 const SerializedNavigationEntry& navigation = | 154 const SerializedNavigationEntry& navigation = |
| 99 ContentSerializedNavigationBuilder::FromNavigationEntry( | 155 ContentSerializedNavigationBuilder::FromNavigationEntry( |
| 100 test_data::kIndex, *old_navigation_entry); | 156 test_data::kIndex, *old_navigation_entry); |
| 101 | 157 |
| 102 const std::unique_ptr<content::NavigationEntry> new_navigation_entry( | 158 const std::unique_ptr<content::NavigationEntry> new_navigation_entry( |
| 103 ContentSerializedNavigationBuilder::ToNavigationEntry( | 159 ContentSerializedNavigationBuilder::ToNavigationEntry( |
| 104 &navigation, test_data::kPageID, NULL)); | 160 &navigation, test_data::kPageID, NULL)); |
| 105 | 161 |
| 106 EXPECT_EQ(test_data::kReferrerURL, new_navigation_entry->GetReferrer().url); | 162 EXPECT_EQ(test_data::kReferrerURL, new_navigation_entry->GetReferrer().url); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 124 EXPECT_EQ(test_data::kSearchTerms, search_terms); | 180 EXPECT_EQ(test_data::kSearchTerms, search_terms); |
| 125 EXPECT_EQ(test_data::kHttpStatusCode, | 181 EXPECT_EQ(test_data::kHttpStatusCode, |
| 126 new_navigation_entry->GetHttpStatusCode()); | 182 new_navigation_entry->GetHttpStatusCode()); |
| 127 ASSERT_EQ(3U, new_navigation_entry->GetRedirectChain().size()); | 183 ASSERT_EQ(3U, new_navigation_entry->GetRedirectChain().size()); |
| 128 EXPECT_EQ(test_data::kRedirectURL0, | 184 EXPECT_EQ(test_data::kRedirectURL0, |
| 129 new_navigation_entry->GetRedirectChain()[0]); | 185 new_navigation_entry->GetRedirectChain()[0]); |
| 130 EXPECT_EQ(test_data::kRedirectURL1, | 186 EXPECT_EQ(test_data::kRedirectURL1, |
| 131 new_navigation_entry->GetRedirectChain()[1]); | 187 new_navigation_entry->GetRedirectChain()[1]); |
| 132 EXPECT_EQ(test_data::kVirtualURL, | 188 EXPECT_EQ(test_data::kVirtualURL, |
| 133 new_navigation_entry->GetRedirectChain()[2]); | 189 new_navigation_entry->GetRedirectChain()[2]); |
| 190 |
| 191 base::string16 extra_data; |
| 192 EXPECT_TRUE( |
| 193 new_navigation_entry->GetExtraData(kExtendedInfoKey1, &extra_data)); |
| 194 EXPECT_EQ(kExtendedInfoValue1, base::UTF16ToASCII(extra_data)); |
| 195 EXPECT_TRUE( |
| 196 new_navigation_entry->GetExtraData(kExtendedInfoKey2, &extra_data)); |
| 197 EXPECT_EQ(kExtendedInfoValue2, base::UTF16ToASCII(extra_data)); |
| 134 } | 198 } |
| 135 | 199 |
| 136 TEST(ContentSerializedNavigationBuilderTest, SetPasswordState) { | 200 TEST(ContentSerializedNavigationBuilderTest, SetPasswordState) { |
| 137 std::unique_ptr<content::NavigationEntry> entry( | 201 std::unique_ptr<content::NavigationEntry> entry( |
| 138 content::NavigationEntry::Create()); | 202 content::NavigationEntry::Create()); |
| 139 | 203 |
| 140 EXPECT_EQ(SerializedNavigationEntry::PASSWORD_STATE_UNKNOWN, | 204 EXPECT_EQ(SerializedNavigationEntry::PASSWORD_STATE_UNKNOWN, |
| 141 GetPasswordStateFromNavigation(*entry)); | 205 GetPasswordStateFromNavigation(*entry)); |
| 142 SetPasswordStateInNavigation(SerializedNavigationEntry::NO_PASSWORD_FIELD, | 206 SetPasswordStateInNavigation(SerializedNavigationEntry::NO_PASSWORD_FIELD, |
| 143 entry.get()); | 207 entry.get()); |
| 144 EXPECT_EQ(SerializedNavigationEntry::NO_PASSWORD_FIELD, | 208 EXPECT_EQ(SerializedNavigationEntry::NO_PASSWORD_FIELD, |
| 145 GetPasswordStateFromNavigation(*entry)); | 209 GetPasswordStateFromNavigation(*entry)); |
| 146 } | 210 } |
| 147 | 211 |
| 148 } // namespace sessions | 212 } // namespace sessions |
| OLD | NEW |