| 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 |