Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: android_webview/native/state_serializer_unittest.cc

Issue 2863233002: [WebView] Move files from native to browser (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "android_webview/native/state_serializer.h"
6
7 #include <memory>
8 #include <string>
9
10 #include "base/pickle.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "base/time/time.h"
13 #include "content/public/browser/content_browser_client.h"
14 #include "content/public/browser/navigation_entry.h"
15 #include "content/public/common/content_client.h"
16 #include "content/public/common/page_state.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "url/gurl.h"
19
20 using std::string;
21
22 namespace android_webview {
23
24 namespace {
25
26 std::unique_ptr<content::NavigationEntry> CreateNavigationEntry() {
27 std::unique_ptr<content::NavigationEntry> entry(
28 content::NavigationEntry::Create());
29
30 const GURL url("http://url");
31 const GURL virtual_url("http://virtual_url");
32 content::Referrer referrer;
33 referrer.url = GURL("http://referrer_url");
34 referrer.policy = blink::kWebReferrerPolicyOrigin;
35 const base::string16 title(base::UTF8ToUTF16("title"));
36 const content::PageState page_state =
37 content::PageState::CreateFromEncodedData("completely bogus state");
38 const bool has_post_data = true;
39 const GURL original_request_url("http://original_request_url");
40 const GURL base_url_for_data_url("http://base_url");
41 const string data_url_as_string("data:text/html;charset=utf-8;base64,");
42 const bool is_overriding_user_agent = true;
43 const base::Time timestamp = base::Time::FromInternalValue(12345);
44 const int http_status_code = 404;
45
46 entry->SetURL(url);
47 entry->SetVirtualURL(virtual_url);
48 entry->SetReferrer(referrer);
49 entry->SetTitle(title);
50 entry->SetPageState(page_state);
51 entry->SetHasPostData(has_post_data);
52 entry->SetOriginalRequestURL(original_request_url);
53 entry->SetBaseURLForDataURL(base_url_for_data_url);
54 {
55 scoped_refptr<base::RefCountedString> s = new base::RefCountedString();
56 s->data().assign(data_url_as_string);
57 entry->SetDataURLAsString(s);
58 }
59 entry->SetIsOverridingUserAgent(is_overriding_user_agent);
60 entry->SetTimestamp(timestamp);
61 entry->SetHttpStatusCode(http_status_code);
62 return entry;
63 }
64
65 } // namespace
66
67 TEST(AndroidWebViewStateSerializerTest, TestHeaderSerialization) {
68 base::Pickle pickle;
69 bool result = internal::WriteHeaderToPickle(&pickle);
70 EXPECT_TRUE(result);
71
72 base::PickleIterator iterator(pickle);
73 uint32_t version = internal::RestoreHeaderFromPickle(&iterator);
74 EXPECT_GT(version, 0U);
75 }
76
77 TEST(AndroidWebViewStateSerializerTest, TestLegacyVersionHeaderSerialization) {
78 base::Pickle pickle;
79 bool result = internal::WriteHeaderToPickle(
80 internal::AW_STATE_VERSION_INITIAL, &pickle);
81 EXPECT_TRUE(result);
82
83 base::PickleIterator iterator(pickle);
84 uint32_t version = internal::RestoreHeaderFromPickle(&iterator);
85 EXPECT_EQ(version, internal::AW_STATE_VERSION_INITIAL);
86 }
87
88 TEST(AndroidWebViewStateSerializerTest,
89 TestUnsupportedVersionHeaderSerialization) {
90 base::Pickle pickle;
91 bool result = internal::WriteHeaderToPickle(20000101, &pickle);
92 EXPECT_TRUE(result);
93
94 base::PickleIterator iterator(pickle);
95 uint32_t version = internal::RestoreHeaderFromPickle(&iterator);
96 EXPECT_EQ(version, 0U);
97 }
98
99 TEST(AndroidWebViewStateSerializerTest, TestNavigationEntrySerialization) {
100 // This is required for NavigationEntry::Create.
101 content::ContentClient content_client;
102 content::SetContentClient(&content_client);
103 content::ContentBrowserClient browser_client;
104 content::SetBrowserClientForTesting(&browser_client);
105
106 std::unique_ptr<content::NavigationEntry> entry(CreateNavigationEntry());
107
108 base::Pickle pickle;
109 bool result = internal::WriteNavigationEntryToPickle(*entry, &pickle);
110 EXPECT_TRUE(result);
111
112 std::unique_ptr<content::NavigationEntry> copy(
113 content::NavigationEntry::Create());
114 base::PickleIterator iterator(pickle);
115 result = internal::RestoreNavigationEntryFromPickle(&iterator, copy.get());
116 EXPECT_TRUE(result);
117
118 EXPECT_EQ(entry->GetURL(), copy->GetURL());
119 EXPECT_EQ(entry->GetVirtualURL(), copy->GetVirtualURL());
120 EXPECT_EQ(entry->GetReferrer().url, copy->GetReferrer().url);
121 EXPECT_EQ(entry->GetReferrer().policy, copy->GetReferrer().policy);
122 EXPECT_EQ(entry->GetTitle(), copy->GetTitle());
123 EXPECT_EQ(entry->GetPageState(), copy->GetPageState());
124 EXPECT_EQ(entry->GetHasPostData(), copy->GetHasPostData());
125 EXPECT_EQ(entry->GetOriginalRequestURL(), copy->GetOriginalRequestURL());
126 EXPECT_EQ(entry->GetBaseURLForDataURL(), copy->GetBaseURLForDataURL());
127 EXPECT_EQ(entry->GetDataURLAsString()->data(),
128 copy->GetDataURLAsString()->data());
129 EXPECT_EQ(entry->GetIsOverridingUserAgent(),
130 copy->GetIsOverridingUserAgent());
131 EXPECT_EQ(entry->GetTimestamp(), copy->GetTimestamp());
132 EXPECT_EQ(entry->GetHttpStatusCode(), copy->GetHttpStatusCode());
133 }
134
135 TEST(AndroidWebViewStateSerializerTest,
136 TestLegacyNavigationEntrySerialization) {
137 // This is required for NavigationEntry::Create.
138 content::ContentClient content_client;
139 content::SetContentClient(&content_client);
140 content::ContentBrowserClient browser_client;
141 content::SetBrowserClientForTesting(&browser_client);
142
143 std::unique_ptr<content::NavigationEntry> entry(CreateNavigationEntry());
144
145 base::Pickle pickle;
146 bool result = internal::WriteNavigationEntryToPickle(
147 internal::AW_STATE_VERSION_INITIAL, *entry, &pickle);
148 EXPECT_TRUE(result);
149
150 std::unique_ptr<content::NavigationEntry> copy(
151 content::NavigationEntry::Create());
152 base::PickleIterator iterator(pickle);
153 result = internal::RestoreNavigationEntryFromPickle(
154 internal::AW_STATE_VERSION_INITIAL, &iterator, copy.get());
155 EXPECT_TRUE(result);
156
157 EXPECT_EQ(entry->GetURL(), copy->GetURL());
158 EXPECT_EQ(entry->GetVirtualURL(), copy->GetVirtualURL());
159 EXPECT_EQ(entry->GetReferrer().url, copy->GetReferrer().url);
160 EXPECT_EQ(entry->GetReferrer().policy, copy->GetReferrer().policy);
161 EXPECT_EQ(entry->GetTitle(), copy->GetTitle());
162 EXPECT_EQ(entry->GetPageState(), copy->GetPageState());
163 EXPECT_EQ(entry->GetHasPostData(), copy->GetHasPostData());
164 EXPECT_EQ(entry->GetOriginalRequestURL(), copy->GetOriginalRequestURL());
165 EXPECT_EQ(entry->GetBaseURLForDataURL(), copy->GetBaseURLForDataURL());
166 // DataURL not supported by 20130814 format
167 EXPECT_FALSE(copy->GetDataURLAsString());
168 EXPECT_EQ(entry->GetIsOverridingUserAgent(),
169 copy->GetIsOverridingUserAgent());
170 EXPECT_EQ(entry->GetTimestamp(), copy->GetTimestamp());
171 EXPECT_EQ(entry->GetHttpStatusCode(), copy->GetHttpStatusCode());
172 }
173
174 TEST(AndroidWebViewStateSerializerTest, TestEmptyDataURLSerialization) {
175 // This is required for NavigationEntry::Create.
176 content::ContentClient content_client;
177 content::SetContentClient(&content_client);
178 content::ContentBrowserClient browser_client;
179 content::SetBrowserClientForTesting(&browser_client);
180
181 std::unique_ptr<content::NavigationEntry> entry(
182 content::NavigationEntry::Create());
183 EXPECT_FALSE(entry->GetDataURLAsString());
184
185 base::Pickle pickle;
186 bool result = internal::WriteNavigationEntryToPickle(*entry, &pickle);
187 EXPECT_TRUE(result);
188
189 std::unique_ptr<content::NavigationEntry> copy(
190 content::NavigationEntry::Create());
191 base::PickleIterator iterator(pickle);
192 result = internal::RestoreNavigationEntryFromPickle(&iterator, copy.get());
193 EXPECT_TRUE(result);
194 EXPECT_FALSE(entry->GetDataURLAsString());
195 }
196
197 TEST(AndroidWebViewStateSerializerTest, TestHugeDataURLSerialization) {
198 // This is required for NavigationEntry::Create.
199 content::ContentClient content_client;
200 content::SetContentClient(&content_client);
201 content::ContentBrowserClient browser_client;
202 content::SetBrowserClientForTesting(&browser_client);
203
204 std::unique_ptr<content::NavigationEntry> entry(
205 content::NavigationEntry::Create());
206 string huge_data_url(1024 * 1024 * 20 - 1, 'd');
207 huge_data_url.replace(0, strlen(url::kDataScheme), url::kDataScheme);
208 {
209 scoped_refptr<base::RefCountedString> s = new base::RefCountedString();
210 s->data().assign(huge_data_url);
211 entry->SetDataURLAsString(s);
212 }
213
214 base::Pickle pickle;
215 bool result = internal::WriteNavigationEntryToPickle(*entry, &pickle);
216 EXPECT_TRUE(result);
217
218 std::unique_ptr<content::NavigationEntry> copy(
219 content::NavigationEntry::Create());
220 base::PickleIterator iterator(pickle);
221 result = internal::RestoreNavigationEntryFromPickle(&iterator, copy.get());
222 EXPECT_TRUE(result);
223 EXPECT_EQ(huge_data_url, copy->GetDataURLAsString()->data());
224 }
225
226 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698