| Index: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
|
| index ff39381267a7782827829431a53b43ba753b8c95..b6823b595c521ef56115e2dde075eb5c82bd2bee 100644
|
| --- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
|
| @@ -353,9 +353,7 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques
|
| DocumentThreadableLoader::~DocumentThreadableLoader()
|
| {
|
| CHECK(!m_client);
|
| -
|
| - // TODO(oilpan): Remove this once DocumentThreadableLoader is once again a ResourceOwner.
|
| - clearResource();
|
| + DCHECK(!m_resource);
|
| }
|
|
|
| void DocumentThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds)
|
| @@ -420,10 +418,6 @@ void DocumentThreadableLoader::setDefersLoading(bool value)
|
| void DocumentThreadableLoader::clear()
|
| {
|
| m_client = nullptr;
|
| -
|
| - if (!m_async)
|
| - return;
|
| -
|
| m_timeoutTimer.stop();
|
| m_requestStartedSeconds = 0.0;
|
| clearResource();
|
| @@ -799,13 +793,10 @@ void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier,
|
| }
|
|
|
| ThreadableLoaderClient* client = m_client;
|
| - m_client = nullptr;
|
| - // Don't clear the resource as the client may need to access the downloaded
|
| - // file which will be released when the resource is destoryed.
|
| - if (m_async) {
|
| - m_timeoutTimer.stop();
|
| - m_requestStartedSeconds = 0.0;
|
| - }
|
| + // Protect the resource in |didFinishLoading| in order not to release the
|
| + // downloaded file.
|
| + Persistent<Resource> resource = m_resource;
|
| + clear();
|
| client->didFinishLoading(identifier, finishTime);
|
| // |this| may be dead here in async mode.
|
| }
|
|
|