| Index: third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| index 37bc9934dcae6ad8c2a1ac8db5c0731a631c46f4..769fc35bd6edb91f511a79dd37a88c618123d164 100644
|
| --- a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| +++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
|
| @@ -34,6 +34,7 @@ public:
|
| ~BodyStreamBufferTest() override {}
|
|
|
| protected:
|
| + ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->document().frame()); }
|
| ExecutionContext* executionContext() { return &m_page->document(); }
|
|
|
| OwnPtr<DummyPageHolder> m_page;
|
| @@ -264,6 +265,46 @@ TEST_F(BodyStreamBufferTest, LoaderShouldBeKeptAliveByBodyStreamBuffer)
|
| checkpoint.Call(2);
|
| }
|
|
|
| +// TODO(hiroshige): Merge this class into MockFetchDataConsumerHandle.
|
| +class MockFetchDataConsumerHandleWithMockDestructor : public DataConsumerHandleTestUtil::MockFetchDataConsumerHandle {
|
| +public:
|
| + static PassOwnPtr<::testing::StrictMock<MockFetchDataConsumerHandleWithMockDestructor>> create() { return adoptPtr(new ::testing::StrictMock<MockFetchDataConsumerHandleWithMockDestructor>); }
|
| +
|
| + ~MockFetchDataConsumerHandleWithMockDestructor() override
|
| + {
|
| + destruct();
|
| + }
|
| +
|
| + MOCK_METHOD0(destruct, void());
|
| +};
|
| +
|
| +TEST_F(BodyStreamBufferTest, SourceHandleAndReaderShouldBeDestructedWhenCanceled)
|
| +{
|
| + ScriptState::Scope scope(scriptState());
|
| + using MockHandle = MockFetchDataConsumerHandleWithMockDestructor;
|
| + using MockReader = DataConsumerHandleTestUtil::MockFetchDataConsumerReader;
|
| + OwnPtr<MockHandle> handle = MockHandle::create();
|
| + OwnPtr<MockReader> reader = MockReader::create();
|
| +
|
| + Checkpoint checkpoint;
|
| + InSequence s;
|
| +
|
| + EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(::testing::Return(reader.get()));
|
| + EXPECT_CALL(checkpoint, Call(1));
|
| + EXPECT_CALL(*reader, destruct());
|
| + EXPECT_CALL(*handle, destruct());
|
| + EXPECT_CALL(checkpoint, Call(2));
|
| +
|
| + // |reader| is adopted by |obtainReader|.
|
| + ASSERT_TRUE(reader.leakPtr());
|
| +
|
| + BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release());
|
| + checkpoint.Call(1);
|
| + ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason"));
|
| + buffer->cancelSource(scriptState(), reason);
|
| + checkpoint.Call(2);
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace blink
|
|
|