| Index: third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp b/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
|
| index 50b8d2411182ec175d37d118dc4f1c7589ecd02a..12c2f298ede542afb758eef971326a66d5445a1a 100644
|
| --- a/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
|
| @@ -97,6 +97,7 @@ public:
|
| virtual void createLoader(ThreadableLoaderClient*, CrossOriginRequestPolicy) = 0;
|
| virtual void startLoader(const ResourceRequest&) = 0;
|
| virtual void cancelLoader() = 0;
|
| + virtual void cancelAndClearLoader() = 0;
|
| virtual void clearLoader() = 0;
|
| virtual Checkpoint& checkpoint() = 0;
|
| virtual void callCheckpoint(int) = 0;
|
| @@ -126,7 +127,12 @@ public:
|
| }
|
|
|
| void cancelLoader() override { m_loader->cancel(); }
|
| - void clearLoader() override { m_loader.reset(); }
|
| + void cancelAndClearLoader() override
|
| + {
|
| + m_loader->cancel();
|
| + m_loader = nullptr;
|
| + }
|
| + void clearLoader() override { m_loader = nullptr; }
|
| Checkpoint& checkpoint() override { return m_checkpoint; }
|
| void callCheckpoint(int n) override { m_checkpoint.Call(n); }
|
|
|
| @@ -140,7 +146,10 @@ public:
|
|
|
| void onTearDown() override
|
| {
|
| - m_loader.reset();
|
| + if (m_loader) {
|
| + m_loader->cancel();
|
| + m_loader = nullptr;
|
| + }
|
| }
|
|
|
| private:
|
| @@ -189,6 +198,14 @@ public:
|
| m_loader->cancel();
|
| }
|
|
|
| + void cancelAndClearLoader() override
|
| + {
|
| + DCHECK(m_workerThread);
|
| + DCHECK(m_workerThread->isCurrentThread());
|
| + m_loader->cancel();
|
| + m_loader = nullptr;
|
| + }
|
| +
|
| // Must be called on the worker thread.
|
| void clearLoader() override
|
| {
|
| @@ -341,6 +358,7 @@ public:
|
| }
|
|
|
| void cancelLoader() { m_helper->cancelLoader(); }
|
| + void cancelAndClearLoader() { m_helper->cancelAndClearLoader(); }
|
| void clearLoader() { m_helper->clearLoader(); }
|
| Checkpoint& checkpoint() { return m_helper->checkpoint(); }
|
| void callCheckpoint(int n) { m_helper->callCheckpoint(n); }
|
| @@ -455,14 +473,15 @@ TEST_P(ThreadableLoaderTest, CancelAfterStart)
|
| serveRequests();
|
| }
|
|
|
| -TEST_P(ThreadableLoaderTest, ClearAfterStart)
|
| +TEST_P(ThreadableLoaderTest, CancelAndClearAfterStart)
|
| {
|
| InSequence s;
|
| EXPECT_CALL(checkpoint(), Call(1));
|
| createLoader();
|
| callCheckpoint(1);
|
|
|
| - EXPECT_CALL(checkpoint(), Call(2)).WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::clearLoader));
|
| + EXPECT_CALL(checkpoint(), Call(2)).WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::cancelAndClearLoader));
|
| + EXPECT_CALL(*client(), didFail(Truly(isCancellation)));
|
| EXPECT_CALL(checkpoint(), Call(3));
|
|
|
| startLoader(successURL());
|
| @@ -487,7 +506,7 @@ TEST_P(ThreadableLoaderTest, CancelInDidReceiveResponse)
|
| serveRequests();
|
| }
|
|
|
| -TEST_P(ThreadableLoaderTest, ClearInDidReceiveResponse)
|
| +TEST_P(ThreadableLoaderTest, CancelAndClearInDidReceiveResponse)
|
| {
|
| InSequence s;
|
| EXPECT_CALL(checkpoint(), Call(1));
|
| @@ -495,7 +514,8 @@ TEST_P(ThreadableLoaderTest, ClearInDidReceiveResponse)
|
| callCheckpoint(1);
|
|
|
| EXPECT_CALL(checkpoint(), Call(2));
|
| - EXPECT_CALL(*client(), didReceiveResponseMock(_, _, _)).WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::clearLoader));
|
| + EXPECT_CALL(*client(), didReceiveResponseMock(_, _, _)).WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::cancelAndClearLoader));
|
| + EXPECT_CALL(*client(), didFail(Truly(isCancellation)));
|
|
|
| startLoader(successURL());
|
| callCheckpoint(2);
|
| @@ -519,7 +539,7 @@ TEST_P(ThreadableLoaderTest, CancelInDidReceiveData)
|
| serveRequests();
|
| }
|
|
|
| -TEST_P(ThreadableLoaderTest, ClearInDidReceiveData)
|
| +TEST_P(ThreadableLoaderTest, CancelAndClearInDidReceiveData)
|
| {
|
| InSequence s;
|
| EXPECT_CALL(checkpoint(), Call(1));
|
| @@ -528,7 +548,8 @@ TEST_P(ThreadableLoaderTest, ClearInDidReceiveData)
|
|
|
| EXPECT_CALL(checkpoint(), Call(2));
|
| EXPECT_CALL(*client(), didReceiveResponseMock(_, _, _));
|
| - EXPECT_CALL(*client(), didReceiveData(_, _)).WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::clearLoader));
|
| + EXPECT_CALL(*client(), didReceiveData(_, _)).WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::cancelAndClearLoader));
|
| + EXPECT_CALL(*client(), didFail(Truly(isCancellation)));
|
|
|
| startLoader(successURL());
|
| callCheckpoint(2);
|
| @@ -545,6 +566,9 @@ TEST_P(ThreadableLoaderTest, DidFinishLoading)
|
| EXPECT_CALL(checkpoint(), Call(2));
|
| EXPECT_CALL(*client(), didReceiveResponseMock(_, _, _));
|
| EXPECT_CALL(*client(), didReceiveData(StrEq("fox"), 4));
|
| + // We expect didReceiveResourceTiming() calls in DocumentThreadableLoader;
|
| + // it's used to connect DocumentThreadableLoader to WorkerThreadableLoader,
|
| + // not to ThreadableLoaderClient.
|
| EXPECT_CALL(*client(), didReceiveResourceTiming(_));
|
| EXPECT_CALL(*client(), didFinishLoading(_, _));
|
|
|
|
|