Chromium Code Reviews| Index: Source/core/xml/XMLHttpRequest.cpp |
| diff --git a/Source/core/xml/XMLHttpRequest.cpp b/Source/core/xml/XMLHttpRequest.cpp |
| index 9dc97ee7509cd4ae2a148c472ff68bf20c0d3840..3cd6fd68b3d161fb06b2a4ccfe1e0c87c2d122a7 100644 |
| --- a/Source/core/xml/XMLHttpRequest.cpp |
| +++ b/Source/core/xml/XMLHttpRequest.cpp |
| @@ -445,7 +445,7 @@ void XMLHttpRequest::open(const String& method, const KURL& url, ExceptionState& |
| void XMLHttpRequest::open(const String& method, const KURL& url, bool async, ExceptionState& es) |
| { |
| - internalAbort(); |
| + internalAbort(DropProtectionSync); |
| State previousState = m_state; |
| m_state = UNSENT; |
| m_error = false; |
| @@ -751,11 +751,15 @@ void XMLHttpRequest::createRequest(ExceptionState& es) |
| // This is true while running onunload handlers. |
| // FIXME: Maybe we need to be able to send XMLHttpRequests from onunload, <http://bugs.webkit.org/show_bug.cgi?id=10904>. |
| // FIXME: Maybe create() can return null for other reasons too? |
| + ASSERT(!m_loader); |
| m_loader = ThreadableLoader::create(scriptExecutionContext(), this, request, options); |
| if (m_loader) { |
| // Neither this object nor the JavaScript wrapper should be deleted while |
| // a request is in progress because we need to keep the listeners alive, |
| // and they are referenced by the JavaScript wrapper. |
| + |
| + // m_loader was null, so there should be no pending activity at this point. |
| + ASSERT(!hasPendingActivity()); |
| setPendingActivity(this); |
| } |
| } else { |
| @@ -778,7 +782,7 @@ void XMLHttpRequest::abort() |
| bool sendFlag = m_loader; |
| - internalAbort(); |
| + internalAbort(DropProtectionSync); |
| clearResponseBuffers(); |
| @@ -801,7 +805,7 @@ void XMLHttpRequest::abort() |
| } |
| } |
| -void XMLHttpRequest::internalAbort() |
| +void XMLHttpRequest::internalAbort(DropProtection async) |
| { |
| bool hadLoader = m_loader; |
| @@ -819,8 +823,12 @@ void XMLHttpRequest::internalAbort() |
| InspectorInstrumentation::didFailXHRLoading(scriptExecutionContext(), this); |
| - if (hadLoader) |
| - dropProtectionSoon(); |
| + if (hadLoader) { |
| + if (async == DropProtectionAsync) |
| + dropProtectionSoon(); |
| + else |
| + dropProtection(); |
| + } |
| } |
| void XMLHttpRequest::clearResponse() |
| @@ -864,7 +872,7 @@ void XMLHttpRequest::networkError() |
| m_upload->dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().errorEvent)); |
| } |
| m_progressEventThrottle.dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().errorEvent)); |
| - internalAbort(); |
| + internalAbort(DropProtectionSync); |
| } |
| void XMLHttpRequest::abortError() |
| @@ -1181,7 +1189,7 @@ void XMLHttpRequest::didTimeout() |
| { |
| // internalAbort() calls dropProtection(), which may release the last reference. |
| RefPtr<XMLHttpRequest> protect(this); |
| - internalAbort(); |
| + internalAbort(DropProtectionSync); |
| clearResponse(); |
| clearRequest(); |
| @@ -1222,7 +1230,7 @@ void XMLHttpRequest::resume() |
| void XMLHttpRequest::stop() |
| { |
| - internalAbort(); |
| + internalAbort(DropProtectionAsync); |
|
abarth-chromium
2013/08/14 04:11:49
What I would do is make DropProtectionSync the def
kouhei (in TOK)
2013/08/14 04:58:20
Done.
|
| } |
| void XMLHttpRequest::contextDestroyed() |