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