OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/BytesConsumerForDataConsumerHandle.h" | 5 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" |
6 | 6 |
7 #include "core/testing/DummyPageHolder.h" | 7 #include "core/testing/DummyPageHolder.h" |
8 #include "modules/fetch/BytesConsumer.h" | 8 #include "modules/fetch/BytesConsumer.h" |
9 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 9 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
10 #include "modules/fetch/DataConsumerHandleUtil.h" | 10 #include "modules/fetch/DataConsumerHandleUtil.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 MOCK_METHOD0(onStateChange, void()); | 46 MOCK_METHOD0(onStateChange, void()); |
47 | 47 |
48 protected: | 48 protected: |
49 MockClient() {} | 49 MockClient() {} |
50 }; | 50 }; |
51 | 51 |
52 class MockDataConsumerHandle final : public FetchDataConsumerHandle { | 52 class MockDataConsumerHandle final : public FetchDataConsumerHandle { |
53 public: | 53 public: |
54 class MockReaderProxy : public GarbageCollectedFinalized<MockReaderProxy> { | 54 class MockReaderProxy : public GarbageCollectedFinalized<MockReaderProxy> { |
55 public: | 55 public: |
56 MOCK_METHOD4(read, WebDataConsumerHandle::Result(void*, size_t, WebDataC
onsumerHandle::Flags, size_t*)); | |
57 MOCK_METHOD3(beginRead, WebDataConsumerHandle::Result(const void**, WebD
ataConsumerHandle::Flags, size_t*)); | 56 MOCK_METHOD3(beginRead, WebDataConsumerHandle::Result(const void**, WebD
ataConsumerHandle::Flags, size_t*)); |
58 MOCK_METHOD1(endRead, WebDataConsumerHandle::Result(size_t)); | 57 MOCK_METHOD1(endRead, WebDataConsumerHandle::Result(size_t)); |
59 MOCK_METHOD1(drainAsBlobDataHandle, PassRefPtr<BlobDataHandle>(FetchData
ConsumerHandle::Reader::BlobSizePolicy)); | 58 MOCK_METHOD1(drainAsBlobDataHandle, PassRefPtr<BlobDataHandle>(FetchData
ConsumerHandle::Reader::BlobSizePolicy)); |
60 MOCK_METHOD0(drainAsFormData, PassRefPtr<EncodedFormData>()); | 59 MOCK_METHOD0(drainAsFormData, PassRefPtr<EncodedFormData>()); |
61 | 60 |
62 DEFINE_INLINE_TRACE() {} | 61 DEFINE_INLINE_TRACE() {} |
63 }; | 62 }; |
64 | 63 |
65 MockDataConsumerHandle() : m_proxy(new MockReaderProxy) {} | 64 MockDataConsumerHandle() : m_proxy(new MockReaderProxy) {} |
66 MockReaderProxy* proxy() { return m_proxy; } | 65 MockReaderProxy* proxy() { return m_proxy; } |
67 const char* debugName() const { return "MockDataConsumerHandle"; } | 66 const char* debugName() const { return "MockDataConsumerHandle"; } |
68 | 67 |
69 private: | 68 private: |
70 class Reader final : public FetchDataConsumerHandle::Reader { | 69 class Reader final : public FetchDataConsumerHandle::Reader { |
71 public: | 70 public: |
72 explicit Reader(MockReaderProxy* proxy) : m_proxy(proxy) {} | 71 explicit Reader(MockReaderProxy* proxy) : m_proxy(proxy) {} |
73 Result read(void* buffer, size_t size, WebDataConsumerHandle::Flags flag
s, size_t* read) override | |
74 { | |
75 return m_proxy->read(buffer, size, flags, read); | |
76 } | |
77 Result beginRead(const void** buffer, Flags flags, size_t* available) ov
erride | 72 Result beginRead(const void** buffer, Flags flags, size_t* available) ov
erride |
78 { | 73 { |
79 return m_proxy->beginRead(buffer, flags, available); | 74 return m_proxy->beginRead(buffer, flags, available); |
80 } | 75 } |
81 Result endRead(size_t readSize) override | 76 Result endRead(size_t readSize) override |
82 { | 77 { |
83 return m_proxy->endRead(readSize); | 78 return m_proxy->endRead(readSize); |
84 } | 79 } |
85 PassRefPtr<BlobDataHandle> drainAsBlobDataHandle(BlobSizePolicy policy)
override | 80 PassRefPtr<BlobDataHandle> drainAsBlobDataHandle(BlobSizePolicy policy)
override |
86 { | 81 { |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 handle->add(Command(Command::Error)); | 181 handle->add(Command(Command::Error)); |
187 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 182 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
188 consumer->setClient(client); | 183 consumer->setClient(client); |
189 consumer->clearClient(); | 184 consumer->clearClient(); |
190 | 185 |
191 checkpoint.Call(1); | 186 checkpoint.Call(1); |
192 testing::runPendingTasks(); | 187 testing::runPendingTasks(); |
193 checkpoint.Call(2); | 188 checkpoint.Call(2); |
194 } | 189 } |
195 | 190 |
196 TEST_F(BytesConsumerForDataConsumerHandleTest, ReadWhenReadable) | |
197 { | |
198 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | |
199 handle->add(Command(Command::Data, "hello")); | |
200 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | |
201 consumer->setClient(MockClient::create()); | |
202 | |
203 char buffer[16]; | |
204 size_t read; | |
205 Result r = consumer->read(buffer, sizeof(buffer), &read); | |
206 ASSERT_EQ(Result::Ok, r); | |
207 EXPECT_EQ("hello", String(buffer, read)); | |
208 } | |
209 | |
210 TEST_F(BytesConsumerForDataConsumerHandleTest, ReadWhenWaiting) | |
211 { | |
212 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | |
213 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | |
214 consumer->setClient(MockClient::create()); | |
215 | |
216 char buffer[16]; | |
217 size_t read = 42; | |
218 Result r = consumer->read(buffer, sizeof(buffer), &read); | |
219 ASSERT_EQ(Result::ShouldWait, r); | |
220 EXPECT_EQ(0u, read); | |
221 } | |
222 | |
223 TEST_F(BytesConsumerForDataConsumerHandleTest, ReadWhenClosed) | |
224 { | |
225 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | |
226 handle->add(Command(Command::Done)); | |
227 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | |
228 consumer->setClient(MockClient::create()); | |
229 | |
230 char buffer[16]; | |
231 size_t read = 42; | |
232 Result r = consumer->read(buffer, sizeof(buffer), &read); | |
233 ASSERT_EQ(Result::Done, r); | |
234 EXPECT_EQ(0u, read); | |
235 } | |
236 | |
237 TEST_F(BytesConsumerForDataConsumerHandleTest, ReadWhenErrored) | |
238 { | |
239 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | |
240 handle->add(Command(Command::Error)); | |
241 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | |
242 consumer->setClient(MockClient::create()); | |
243 | |
244 char buffer[16]; | |
245 size_t read; | |
246 Result r = consumer->read(buffer, sizeof(buffer), &read); | |
247 ASSERT_EQ(Result::Error, r); | |
248 EXPECT_EQ(BytesConsumer::Error("error"), consumer->getError()); | |
249 } | |
250 | |
251 TEST_F(BytesConsumerForDataConsumerHandleTest, TwoPhaseReadWhenReadable) | 191 TEST_F(BytesConsumerForDataConsumerHandleTest, TwoPhaseReadWhenReadable) |
252 { | 192 { |
253 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | 193 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); |
254 handle->add(Command(Command::Data, "hello")); | 194 handle->add(Command(Command::Data, "hello")); |
255 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 195 Persistent<BytesConsumer> consumer = new BytesConsumerForDataConsumerHandle(
document(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
256 consumer->setClient(MockClient::create()); | 196 consumer->setClient(MockClient::create()); |
257 | 197 |
258 const char* buffer = nullptr; | 198 const char* buffer = nullptr; |
259 size_t available = 0; | 199 size_t available = 0; |
260 ASSERT_EQ(Result::Ok, consumer->beginRead(&buffer, &available)); | 200 ASSERT_EQ(Result::Ok, consumer->beginRead(&buffer, &available)); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 InSequence s; | 287 InSequence s; |
348 EXPECT_CALL(*proxy, drainAsFormData()).WillOnce(Return(formData)); | 288 EXPECT_CALL(*proxy, drainAsFormData()).WillOnce(Return(formData)); |
349 | 289 |
350 EXPECT_EQ(formData, consumer->drainAsFormData()); | 290 EXPECT_EQ(formData, consumer->drainAsFormData()); |
351 EXPECT_EQ(BytesConsumer::PublicState::Closed, consumer->getPublicState()); | 291 EXPECT_EQ(BytesConsumer::PublicState::Closed, consumer->getPublicState()); |
352 } | 292 } |
353 | 293 |
354 } // namespace | 294 } // namespace |
355 | 295 |
356 } // namespace blink | 296 } // namespace blink |
OLD | NEW |