OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "modules/fetch/FetchFormDataConsumerHandle.h" | 5 #include "modules/fetch/FetchFormDataConsumerHandle.h" |
6 | 6 |
7 #include "core/dom/DOMTypedArray.h" | 7 #include "core/dom/DOMTypedArray.h" |
8 #include "core/html/FormData.h" | 8 #include "core/html/FormData.h" |
9 #include "core/loader/MockThreadableLoader.h" | 9 #include "core/loader/MockThreadableLoader.h" |
10 #include "core/loader/ThreadableLoaderClient.h" | 10 #include "core/loader/ThreadableLoaderClient.h" |
11 #include "core/testing/DummyPageHolder.h" | 11 #include "core/testing/DummyPageHolder.h" |
12 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 12 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
13 #include "platform/network/ResourceResponse.h" | 13 #include "platform/network/ResourceResponse.h" |
14 #include "platform/testing/UnitTestHelpers.h" | 14 #include "platform/testing/UnitTestHelpers.h" |
15 #include "platform/weborigin/KURL.h" | 15 #include "platform/weborigin/KURL.h" |
16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "wtf/OwnPtr.h" | |
19 #include "wtf/PassOwnPtr.h" | |
20 #include "wtf/PassRefPtr.h" | 18 #include "wtf/PassRefPtr.h" |
21 #include "wtf/RefPtr.h" | 19 #include "wtf/RefPtr.h" |
22 #include "wtf/Vector.h" | 20 #include "wtf/Vector.h" |
23 #include "wtf/text/TextEncoding.h" | 21 #include "wtf/text/TextEncoding.h" |
24 #include "wtf/text/WTFString.h" | 22 #include "wtf/text/WTFString.h" |
| 23 #include <memory> |
25 #include <string.h> | 24 #include <string.h> |
26 | 25 |
27 namespace blink { | 26 namespace blink { |
28 namespace { | 27 namespace { |
29 | 28 |
30 using Result = WebDataConsumerHandle::Result; | 29 using Result = WebDataConsumerHandle::Result; |
31 const Result kOk = WebDataConsumerHandle::Ok; | 30 const Result kOk = WebDataConsumerHandle::Ok; |
32 const Result kDone = WebDataConsumerHandle::Done; | 31 const Result kDone = WebDataConsumerHandle::Done; |
33 const Result kShouldWait = WebDataConsumerHandle::ShouldWait; | 32 const Result kShouldWait = WebDataConsumerHandle::ShouldWait; |
34 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; | 33 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; |
35 using HandleReader = DataConsumerHandleTestUtil::HandleReader; | 34 using HandleReader = DataConsumerHandleTestUtil::HandleReader; |
36 using HandleTwoPhaseReader = DataConsumerHandleTestUtil::HandleTwoPhaseReader; | 35 using HandleTwoPhaseReader = DataConsumerHandleTestUtil::HandleTwoPhaseReader; |
37 using HandleReadResult = DataConsumerHandleTestUtil::HandleReadResult; | 36 using HandleReadResult = DataConsumerHandleTestUtil::HandleReadResult; |
38 template <typename T> | 37 template <typename T> |
39 using HandleReaderRunner = DataConsumerHandleTestUtil::HandleReaderRunner<T>; | 38 using HandleReaderRunner = DataConsumerHandleTestUtil::HandleReaderRunner<T>; |
40 using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; | 39 using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; |
41 using Command = DataConsumerHandleTestUtil::Command; | 40 using Command = DataConsumerHandleTestUtil::Command; |
42 | 41 |
43 using ::testing::_; | 42 using ::testing::_; |
44 using ::testing::InvokeWithoutArgs; | 43 using ::testing::InvokeWithoutArgs; |
45 | 44 |
46 String toString(const Vector<char>& data) | 45 String toString(const Vector<char>& data) |
47 { | 46 { |
48 return String(data.data(), data.size()); | 47 return String(data.data(), data.size()); |
49 } | 48 } |
50 | 49 |
51 class LoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { | 50 class LoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { |
52 public: | 51 public: |
53 explicit LoaderFactory(PassOwnPtr<WebDataConsumerHandle> handle) | 52 explicit LoaderFactory(std::unique_ptr<WebDataConsumerHandle> handle) |
54 : m_client(nullptr) | 53 : m_client(nullptr) |
55 , m_handle(std::move(handle)) {} | 54 , m_handle(std::move(handle)) {} |
56 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien
t* client, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) overrid
e | 55 std::unique_ptr<ThreadableLoader> create(ExecutionContext&, ThreadableLoader
Client* client, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) ov
erride |
57 { | 56 { |
58 m_client = client; | 57 m_client = client; |
59 | 58 |
60 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create(); | 59 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::cre
ate(); |
61 EXPECT_CALL(*loader, start(_)).WillOnce(InvokeWithoutArgs(this, &LoaderF
actory::handleDidReceiveResponse)); | 60 EXPECT_CALL(*loader, start(_)).WillOnce(InvokeWithoutArgs(this, &LoaderF
actory::handleDidReceiveResponse)); |
62 EXPECT_CALL(*loader, cancel()).Times(1); | 61 EXPECT_CALL(*loader, cancel()).Times(1); |
63 return std::move(loader); | 62 return std::move(loader); |
64 } | 63 } |
65 | 64 |
66 private: | 65 private: |
67 void handleDidReceiveResponse() | 66 void handleDidReceiveResponse() |
68 { | 67 { |
69 m_client->didReceiveResponse(0, ResourceResponse(), std::move(m_handle))
; | 68 m_client->didReceiveResponse(0, ResourceResponse(), std::move(m_handle))
; |
70 } | 69 } |
71 | 70 |
72 ThreadableLoaderClient* m_client; | 71 ThreadableLoaderClient* m_client; |
73 OwnPtr<WebDataConsumerHandle> m_handle; | 72 std::unique_ptr<WebDataConsumerHandle> m_handle; |
74 }; | 73 }; |
75 | 74 |
76 class FetchFormDataConsumerHandleTest : public ::testing::Test { | 75 class FetchFormDataConsumerHandleTest : public ::testing::Test { |
77 public: | 76 public: |
78 FetchFormDataConsumerHandleTest() : m_page(DummyPageHolder::create(IntSize(1
, 1))) {} | 77 FetchFormDataConsumerHandleTest() : m_page(DummyPageHolder::create(IntSize(1
, 1))) {} |
79 | 78 |
80 protected: | 79 protected: |
81 Document* getDocument() { return &m_page->document(); } | 80 Document* getDocument() { return &m_page->document(); } |
82 | 81 |
83 OwnPtr<DummyPageHolder> m_page; | 82 std::unique_ptr<DummyPageHolder> m_page; |
84 }; | 83 }; |
85 | 84 |
86 PassRefPtr<EncodedFormData> complexFormData() | 85 PassRefPtr<EncodedFormData> complexFormData() |
87 { | 86 { |
88 RefPtr<EncodedFormData> data = EncodedFormData::create(); | 87 RefPtr<EncodedFormData> data = EncodedFormData::create(); |
89 | 88 |
90 data->appendData("foo", 3); | 89 data->appendData("foo", 3); |
91 data->appendFileRange("/foo/bar/baz", 3, 4, 5); | 90 data->appendFileRange("/foo/bar/baz", 3, 4, 5); |
92 data->appendFileSystemURLRange(KURL(KURL(), "file:///foo/bar/baz"), 6, 7, 8)
; | 91 data->appendFileSystemURLRange(KURL(KURL(), "file:///foo/bar/baz"), 6, 7, 8)
; |
93 OwnPtr<BlobData> blobData = BlobData::create(); | 92 std::unique_ptr<BlobData> blobData = BlobData::create(); |
94 blobData->appendText("hello", false); | 93 blobData->appendText("hello", false); |
95 auto size = blobData->length(); | 94 auto size = blobData->length(); |
96 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(blo
bData), size); | 95 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(blo
bData), size); |
97 data->appendBlob(blobDataHandle->uuid(), blobDataHandle); | 96 data->appendBlob(blobDataHandle->uuid(), blobDataHandle); |
98 Vector<char> boundary; | 97 Vector<char> boundary; |
99 boundary.append("\0", 1); | 98 boundary.append("\0", 1); |
100 data->setBoundary(boundary); | 99 data->setBoundary(boundary); |
101 return data.release(); | 100 return data.release(); |
102 } | 101 } |
103 | 102 |
(...skipping 21 matching lines...) Expand all Loading... |
125 EXPECT_EQ(FormDataElement::encodedBlob, elements[3].m_type); | 124 EXPECT_EQ(FormDataElement::encodedBlob, elements[3].m_type); |
126 if (!elements[3].m_optionalBlobDataHandle) { | 125 if (!elements[3].m_optionalBlobDataHandle) { |
127 FAIL() << "optional BlobDataHandle must be set."; | 126 FAIL() << "optional BlobDataHandle must be set."; |
128 } | 127 } |
129 EXPECT_EQ(elements[3].m_blobUUID, elements[3].m_optionalBlobDataHandle->uuid
()); | 128 EXPECT_EQ(elements[3].m_blobUUID, elements[3].m_optionalBlobDataHandle->uuid
()); |
130 EXPECT_EQ(5u, elements[3].m_optionalBlobDataHandle->size()); | 129 EXPECT_EQ(5u, elements[3].m_optionalBlobDataHandle->size()); |
131 } | 130 } |
132 | 131 |
133 TEST_F(FetchFormDataConsumerHandleTest, ReadFromString) | 132 TEST_F(FetchFormDataConsumerHandleTest, ReadFromString) |
134 { | 133 { |
135 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 134 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
136 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 135 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
137 OwnPtr<HandleReadResult> r = runner.wait(); | 136 std::unique_ptr<HandleReadResult> r = runner.wait(); |
138 EXPECT_EQ(kDone, r->result()); | 137 EXPECT_EQ(kDone, r->result()); |
139 EXPECT_EQ("hello, world", toString(r->data())); | 138 EXPECT_EQ("hello, world", toString(r->data())); |
140 } | 139 } |
141 | 140 |
142 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromString) | 141 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromString) |
143 { | 142 { |
144 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 143 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
145 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); | 144 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); |
146 OwnPtr<HandleReadResult> r = runner.wait(); | 145 std::unique_ptr<HandleReadResult> r = runner.wait(); |
147 EXPECT_EQ(kDone, r->result()); | 146 EXPECT_EQ(kDone, r->result()); |
148 EXPECT_EQ("hello, world", toString(r->data())); | 147 EXPECT_EQ("hello, world", toString(r->data())); |
149 } | 148 } |
150 | 149 |
151 TEST_F(FetchFormDataConsumerHandleTest, ReadFromStringNonLatin) | 150 TEST_F(FetchFormDataConsumerHandleTest, ReadFromStringNonLatin) |
152 { | 151 { |
153 UChar cs[] = {0x3042, 0}; | 152 UChar cs[] = {0x3042, 0}; |
154 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String(cs)); | 153 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String(cs)); |
155 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 154 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
156 OwnPtr<HandleReadResult> r = runner.wait(); | 155 std::unique_ptr<HandleReadResult> r = runner.wait(); |
157 EXPECT_EQ(kDone, r->result()); | 156 EXPECT_EQ(kDone, r->result()); |
158 EXPECT_EQ("\xe3\x81\x82", toString(r->data())); | 157 EXPECT_EQ("\xe3\x81\x82", toString(r->data())); |
159 } | 158 } |
160 | 159 |
161 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBuffer) | 160 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBuffer) |
162 { | 161 { |
163 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; | 162 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; |
164 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); | 163 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); |
165 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(buffer); | 164 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(buffer); |
166 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 165 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
167 OwnPtr<HandleReadResult> r = runner.wait(); | 166 std::unique_ptr<HandleReadResult> r = runner.wait(); |
168 EXPECT_EQ(kDone, r->result()); | 167 EXPECT_EQ(kDone, r->result()); |
169 Vector<char> expected; | 168 Vector<char> expected; |
170 expected.append(data, WTF_ARRAY_LENGTH(data)); | 169 expected.append(data, WTF_ARRAY_LENGTH(data)); |
171 EXPECT_EQ(expected, r->data()); | 170 EXPECT_EQ(expected, r->data()); |
172 } | 171 } |
173 | 172 |
174 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBufferView) | 173 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBufferView) |
175 { | 174 { |
176 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; | 175 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; |
177 const size_t offset = 1, size = 4; | 176 const size_t offset = 1, size = 4; |
178 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); | 177 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); |
179 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(DOMUint8Array::create(buffer, offset, size)); | 178 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(DOMUint8Array::create(buffer, offset, size)); |
180 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 179 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
181 OwnPtr<HandleReadResult> r = runner.wait(); | 180 std::unique_ptr<HandleReadResult> r = runner.wait(); |
182 EXPECT_EQ(kDone, r->result()); | 181 EXPECT_EQ(kDone, r->result()); |
183 Vector<char> expected; | 182 Vector<char> expected; |
184 expected.append(data + offset, size); | 183 expected.append(data + offset, size); |
185 EXPECT_EQ(expected, r->data()); | 184 EXPECT_EQ(expected, r->data()); |
186 } | 185 } |
187 | 186 |
188 TEST_F(FetchFormDataConsumerHandleTest, ReadFromSimplFormData) | 187 TEST_F(FetchFormDataConsumerHandleTest, ReadFromSimplFormData) |
189 { | 188 { |
190 RefPtr<EncodedFormData> data = EncodedFormData::create(); | 189 RefPtr<EncodedFormData> data = EncodedFormData::create(); |
191 data->appendData("foo", 3); | 190 data->appendData("foo", 3); |
192 data->appendData("hoge", 4); | 191 data->appendData("hoge", 4); |
193 | 192 |
194 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), data); | 193 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(getDocument(), data); |
195 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 194 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
196 testing::runPendingTasks(); | 195 testing::runPendingTasks(); |
197 OwnPtr<HandleReadResult> r = runner.wait(); | 196 std::unique_ptr<HandleReadResult> r = runner.wait(); |
198 EXPECT_EQ(kDone, r->result()); | 197 EXPECT_EQ(kDone, r->result()); |
199 EXPECT_EQ("foohoge", toString(r->data())); | 198 EXPECT_EQ("foohoge", toString(r->data())); |
200 } | 199 } |
201 | 200 |
202 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData) | 201 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData) |
203 { | 202 { |
204 RefPtr<EncodedFormData> data = complexFormData(); | 203 RefPtr<EncodedFormData> data = complexFormData(); |
205 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 204 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
206 src->add(Command(Command::Data, "bar")); | 205 src->add(Command(Command::Data, "bar")); |
207 src->add(Command(Command::Done)); | 206 src->add(Command(Command::Done)); |
208 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(std::move(src))); | 207 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::createForTest(getDocument(), data, new LoaderFactory(std::move(src))); |
209 char c; | 208 char c; |
210 size_t readSize; | 209 size_t readSize; |
211 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); | 210 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); |
212 | 211 |
213 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 212 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
214 testing::runPendingTasks(); | 213 testing::runPendingTasks(); |
215 OwnPtr<HandleReadResult> r = runner.wait(); | 214 std::unique_ptr<HandleReadResult> r = runner.wait(); |
216 EXPECT_EQ(kDone, r->result()); | 215 EXPECT_EQ(kDone, r->result()); |
217 EXPECT_EQ("bar", toString(r->data())); | 216 EXPECT_EQ("bar", toString(r->data())); |
218 } | 217 } |
219 | 218 |
220 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData) | 219 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData) |
221 { | 220 { |
222 RefPtr<EncodedFormData> data = complexFormData(); | 221 RefPtr<EncodedFormData> data = complexFormData(); |
223 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 222 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
224 src->add(Command(Command::Data, "bar")); | 223 src->add(Command(Command::Data, "bar")); |
225 src->add(Command(Command::Done)); | 224 src->add(Command(Command::Done)); |
226 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(std::move(src))); | 225 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::createForTest(getDocument(), data, new LoaderFactory(std::move(src))); |
227 char c; | 226 char c; |
228 size_t readSize; | 227 size_t readSize; |
229 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); | 228 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); |
230 | 229 |
231 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); | 230 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); |
232 testing::runPendingTasks(); | 231 testing::runPendingTasks(); |
233 OwnPtr<HandleReadResult> r = runner.wait(); | 232 std::unique_ptr<HandleReadResult> r = runner.wait(); |
234 EXPECT_EQ(kDone, r->result()); | 233 EXPECT_EQ(kDone, r->result()); |
235 EXPECT_EQ("bar", toString(r->data())); | 234 EXPECT_EQ("bar", toString(r->data())); |
236 } | 235 } |
237 | 236 |
238 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromString) | 237 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromString) |
239 { | 238 { |
240 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 239 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
241 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 240 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
242 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); | 241 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); |
243 ASSERT_TRUE(blobDataHandle); | 242 ASSERT_TRUE(blobDataHandle); |
244 | 243 |
245 EXPECT_EQ(String(), blobDataHandle->type()); | 244 EXPECT_EQ(String(), blobDataHandle->type()); |
246 EXPECT_EQ(12u, blobDataHandle->size()); | 245 EXPECT_EQ(12u, blobDataHandle->size()); |
247 EXPECT_EQ(nullptr, reader->drainAsFormData()); | 246 EXPECT_EQ(nullptr, reader->drainAsFormData()); |
248 char c; | 247 char c; |
249 size_t readSize; | 248 size_t readSize; |
250 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 249 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
251 } | 250 } |
252 | 251 |
253 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromArrayBuffer) | 252 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromArrayBuffer) |
254 { | 253 { |
255 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(DOMArrayBuffer::create("foo", 3)); | 254 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(DOMArrayBuffer::create("foo", 3)); |
256 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 255 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
257 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); | 256 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); |
258 ASSERT_TRUE(blobDataHandle); | 257 ASSERT_TRUE(blobDataHandle); |
259 | 258 |
260 EXPECT_EQ(String(), blobDataHandle->type()); | 259 EXPECT_EQ(String(), blobDataHandle->type()); |
261 EXPECT_EQ(3u, blobDataHandle->size()); | 260 EXPECT_EQ(3u, blobDataHandle->size()); |
262 EXPECT_EQ(nullptr, reader->drainAsFormData()); | 261 EXPECT_EQ(nullptr, reader->drainAsFormData()); |
263 char c; | 262 char c; |
264 size_t readSize; | 263 size_t readSize; |
265 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 264 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
266 } | 265 } |
267 | 266 |
268 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromSimpleFormData) | 267 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromSimpleFormData) |
269 { | 268 { |
270 FormData* data = FormData::create(UTF8Encoding()); | 269 FormData* data = FormData::create(UTF8Encoding()); |
271 data->append("name1", "value1"); | 270 data->append("name1", "value1"); |
272 data->append("name2", "value2"); | 271 data->append("name2", "value2"); |
273 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 272 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
274 | 273 |
275 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); | 274 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(getDocument(), inputFormData); |
276 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 275 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
277 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); | 276 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); |
278 ASSERT_TRUE(blobDataHandle); | 277 ASSERT_TRUE(blobDataHandle); |
279 | 278 |
280 EXPECT_EQ(String(), blobDataHandle->type()); | 279 EXPECT_EQ(String(), blobDataHandle->type()); |
281 EXPECT_EQ(inputFormData->flattenToString().utf8().length(), blobDataHandle->
size()); | 280 EXPECT_EQ(inputFormData->flattenToString().utf8().length(), blobDataHandle->
size()); |
282 EXPECT_EQ(nullptr, reader->drainAsFormData()); | 281 EXPECT_EQ(nullptr, reader->drainAsFormData()); |
283 char c; | 282 char c; |
284 size_t readSize; | 283 size_t readSize; |
285 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 284 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
286 } | 285 } |
287 | 286 |
288 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromComplexFormData
) | 287 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromComplexFormData
) |
289 { | 288 { |
290 RefPtr<EncodedFormData> inputFormData = complexFormData(); | 289 RefPtr<EncodedFormData> inputFormData = complexFormData(); |
291 | 290 |
292 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); | 291 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(getDocument(), inputFormData); |
293 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 292 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
294 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); | 293 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); |
295 ASSERT_TRUE(blobDataHandle); | 294 ASSERT_TRUE(blobDataHandle); |
296 | 295 |
297 EXPECT_EQ(nullptr, reader->drainAsFormData()); | 296 EXPECT_EQ(nullptr, reader->drainAsFormData()); |
298 char c; | 297 char c; |
299 size_t readSize; | 298 size_t readSize; |
300 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 299 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
301 } | 300 } |
302 | 301 |
303 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromString) | 302 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromString) |
304 { | 303 { |
305 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 304 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
306 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 305 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
307 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); | 306 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); |
308 ASSERT_TRUE(formData); | 307 ASSERT_TRUE(formData); |
309 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 308 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
310 EXPECT_EQ("hello, world", formData->flattenToString()); | 309 EXPECT_EQ("hello, world", formData->flattenToString()); |
311 | 310 |
312 const void* buffer = nullptr; | 311 const void* buffer = nullptr; |
313 size_t size; | 312 size_t size; |
314 EXPECT_EQ(kDone, reader->read(nullptr, 0, kNone, &size)); | 313 EXPECT_EQ(kDone, reader->read(nullptr, 0, kNone, &size)); |
315 EXPECT_EQ(kDone, reader->beginRead(&buffer, kNone, &size)); | 314 EXPECT_EQ(kDone, reader->beginRead(&buffer, kNone, &size)); |
316 } | 315 } |
317 | 316 |
318 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromArrayBuffer) | 317 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromArrayBuffer) |
319 { | 318 { |
320 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(DOMArrayBuffer::create("foo", 3)); | 319 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(DOMArrayBuffer::create("foo", 3)); |
321 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 320 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
322 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); | 321 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); |
323 ASSERT_TRUE(formData); | 322 ASSERT_TRUE(formData); |
324 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 323 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
325 EXPECT_EQ("foo", formData->flattenToString()); | 324 EXPECT_EQ("foo", formData->flattenToString()); |
326 } | 325 } |
327 | 326 |
328 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromSimpleFormData) | 327 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromSimpleFormData) |
329 { | 328 { |
330 FormData* data = FormData::create(UTF8Encoding()); | 329 FormData* data = FormData::create(UTF8Encoding()); |
331 data->append("name1", "value1"); | 330 data->append("name1", "value1"); |
332 data->append("name2", "value2"); | 331 data->append("name2", "value2"); |
333 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 332 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
334 | 333 |
335 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); | 334 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(getDocument(), inputFormData); |
336 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 335 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
337 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); | 336 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); |
338 ASSERT_TRUE(outputFormData); | 337 ASSERT_TRUE(outputFormData); |
339 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); | 338 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); |
340 EXPECT_NE(outputFormData.get(), inputFormData.get()); | 339 EXPECT_NE(outputFormData.get(), inputFormData.get()); |
341 EXPECT_EQ(inputFormData->flattenToString(), outputFormData->flattenToString(
)); | 340 EXPECT_EQ(inputFormData->flattenToString(), outputFormData->flattenToString(
)); |
342 } | 341 } |
343 | 342 |
344 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromComplexFormData) | 343 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromComplexFormData) |
345 { | 344 { |
346 RefPtr<EncodedFormData> inputFormData = complexFormData(); | 345 RefPtr<EncodedFormData> inputFormData = complexFormData(); |
347 | 346 |
348 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); | 347 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(getDocument(), inputFormData); |
349 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 348 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
350 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); | 349 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); |
351 ASSERT_TRUE(outputFormData); | 350 ASSERT_TRUE(outputFormData); |
352 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); | 351 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); |
353 EXPECT_NE(outputFormData.get(), inputFormData.get()); | 352 EXPECT_NE(outputFormData.get(), inputFormData.get()); |
354 verifyComplexFormData(outputFormData.get()); | 353 verifyComplexFormData(outputFormData.get()); |
355 } | 354 } |
356 | 355 |
357 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) | 356 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) |
358 { | 357 { |
359 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 358 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
360 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 359 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
361 size_t readSize; | 360 size_t readSize; |
362 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); | 361 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); |
363 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); | 362 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); |
364 ASSERT_TRUE(formData); | 363 ASSERT_TRUE(formData); |
365 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 364 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
366 EXPECT_EQ("hello, world", formData->flattenToString()); | 365 EXPECT_EQ("hello, world", formData->flattenToString()); |
367 } | 366 } |
368 | 367 |
369 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDraining) | 368 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDraining) |
370 { | 369 { |
371 char c; | 370 char c; |
372 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 371 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
373 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 372 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
374 size_t readSize; | 373 size_t readSize; |
375 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); | 374 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); |
376 EXPECT_EQ(1u, readSize); | 375 EXPECT_EQ(1u, readSize); |
377 EXPECT_EQ('h', c); | 376 EXPECT_EQ('h', c); |
378 EXPECT_FALSE(reader->drainAsFormData()); | 377 EXPECT_FALSE(reader->drainAsFormData()); |
379 } | 378 } |
380 | 379 |
381 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDraining) | 380 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDraining) |
382 { | 381 { |
383 const void* buffer = nullptr; | 382 const void* buffer = nullptr; |
384 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 383 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::create(String("hello, world")); |
385 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 384 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
386 size_t available; | 385 size_t available; |
387 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); | 386 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); |
388 ASSERT_TRUE(buffer); | 387 ASSERT_TRUE(buffer); |
389 EXPECT_EQ("hello, world", String(static_cast<const char*>(buffer), available
)); | 388 EXPECT_EQ("hello, world", String(static_cast<const char*>(buffer), available
)); |
390 EXPECT_FALSE(reader->drainAsFormData()); | 389 EXPECT_FALSE(reader->drainAsFormData()); |
391 reader->endRead(0); | 390 reader->endRead(0); |
392 EXPECT_FALSE(reader->drainAsFormData()); | 391 EXPECT_FALSE(reader->drainAsFormData()); |
393 } | 392 } |
394 | 393 |
395 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComp
lexFormData) | 394 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComp
lexFormData) |
396 { | 395 { |
397 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 396 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
398 src->add(Command(Command::Data, "bar")); | 397 src->add(Command(Command::Data, "bar")); |
399 src->add(Command(Command::Done)); | 398 src->add(Command(Command::Done)); |
400 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src))); | 399 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(s
rc))); |
401 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 400 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
402 size_t readSize; | 401 size_t readSize; |
403 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); | 402 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); |
404 testing::runPendingTasks(); | 403 testing::runPendingTasks(); |
405 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); | 404 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); |
406 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); | 405 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); |
407 ASSERT_TRUE(formData); | 406 ASSERT_TRUE(formData); |
408 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 407 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
409 verifyComplexFormData(formData.get()); | 408 verifyComplexFormData(formData.get()); |
410 } | 409 } |
411 | 410 |
412 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexForm
Data) | 411 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexForm
Data) |
413 { | 412 { |
414 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 413 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
415 src->add(Command(Command::Data, "bar")); | 414 src->add(Command(Command::Data, "bar")); |
416 src->add(Command(Command::Done)); | 415 src->add(Command(Command::Done)); |
417 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src))); | 416 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(s
rc))); |
418 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 417 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
419 char c; | 418 char c; |
420 size_t readSize; | 419 size_t readSize; |
421 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); | 420 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); |
422 testing::runPendingTasks(); | 421 testing::runPendingTasks(); |
423 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); | 422 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); |
424 EXPECT_EQ(1u, readSize); | 423 EXPECT_EQ(1u, readSize); |
425 EXPECT_EQ('b', c); | 424 EXPECT_EQ('b', c); |
426 EXPECT_FALSE(reader->drainAsFormData()); | 425 EXPECT_FALSE(reader->drainAsFormData()); |
427 } | 426 } |
428 | 427 |
429 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormDa
ta) | 428 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormDa
ta) |
430 { | 429 { |
431 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 430 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
432 src->add(Command(Command::Data, "bar")); | 431 src->add(Command(Command::Data, "bar")); |
433 src->add(Command(Command::Done)); | 432 src->add(Command(Command::Done)); |
434 const void* buffer = nullptr; | 433 const void* buffer = nullptr; |
435 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src))); | 434 std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandl
e::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(s
rc))); |
436 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 435 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainRead
er(nullptr); |
437 size_t available; | 436 size_t available; |
438 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); | 437 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); |
439 testing::runPendingTasks(); | 438 testing::runPendingTasks(); |
440 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); | 439 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); |
441 EXPECT_FALSE(reader->drainAsFormData()); | 440 EXPECT_FALSE(reader->drainAsFormData()); |
442 reader->endRead(0); | 441 reader->endRead(0); |
443 EXPECT_FALSE(reader->drainAsFormData()); | 442 EXPECT_FALSE(reader->drainAsFormData()); |
444 } | 443 } |
445 | 444 |
446 } // namespace | 445 } // namespace |
447 } // namespace blink | 446 } // namespace blink |
OLD | NEW |