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 |