Index: Source/core/xml/XMLHttpRequest.cpp |
diff --git a/Source/core/xml/XMLHttpRequest.cpp b/Source/core/xml/XMLHttpRequest.cpp |
index 4b041d4ec7e998a3f5e89b9c8366a8f3dc2c5a54..64d947a8482c5d52788ae5f955b181dee4b86a36 100644 |
--- a/Source/core/xml/XMLHttpRequest.cpp |
+++ b/Source/core/xml/XMLHttpRequest.cpp |
@@ -890,36 +890,53 @@ void XMLHttpRequest::clearRequest() |
m_requestEntityBody = 0; |
} |
-void XMLHttpRequest::genericError() |
+void XMLHttpRequest::handleDidFailGeneric() |
{ |
clearResponse(); |
clearRequest(); |
- m_error = true; |
- changeState(DONE); |
+ m_error = true; |
} |
-void XMLHttpRequest::networkError() |
+void XMLHttpRequest::dispatchEventAndLoadEnd(const AtomicString& type) |
{ |
- genericError(); |
if (!m_uploadComplete) { |
m_uploadComplete = true; |
if (m_upload && m_uploadEventsAllowed) |
- m_upload->dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().errorEvent)); |
+ m_upload->dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(type)); |
+ } |
+ m_progressEventThrottle.dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(type)); |
+} |
+ |
+void XMLHttpRequest::handleNetworkError() |
+{ |
+ m_exceptionCode = NetworkError; |
+ |
+ handleDidFailGeneric(); |
+ |
+ if (m_async) { |
+ changeState(DONE); |
+ dispatchEventAndLoadEnd(eventNames().errorEvent); |
+ } else { |
+ m_state = DONE; |
} |
- m_progressEventThrottle.dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().errorEvent)); |
+ |
internalAbort(); |
} |
-void XMLHttpRequest::abortError() |
+void XMLHttpRequest::handleDidCancel() |
{ |
- genericError(); |
- if (!m_uploadComplete) { |
- m_uploadComplete = true; |
- if (m_upload && m_uploadEventsAllowed) |
- m_upload->dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().abortEvent)); |
+ m_exceptionCode = AbortError; |
+ |
+ handleDidFailGeneric(); |
+ |
+ if (!m_async) { |
+ m_state = DONE; |
+ return; |
} |
- m_progressEventThrottle.dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().abortEvent)); |
+ changeState(DONE); |
+ |
+ dispatchEventAndLoadEnd(eventNames().abortEvent); |
} |
void XMLHttpRequest::dropProtectionSoon() |
@@ -1087,19 +1104,17 @@ String XMLHttpRequest::statusText(ExceptionState& es) const |
void XMLHttpRequest::didFail(const ResourceError& error) |
{ |
- |
// If we are already in an error state, for instance we called abort(), bail out early. |
if (m_error) |
return; |
if (error.isCancellation()) { |
- m_exceptionCode = AbortError; |
- abortError(); |
+ handleDidCancel(); |
return; |
} |
if (error.isTimeout()) { |
- didTimeout(); |
+ handleDidTimeout(); |
return; |
} |
@@ -1107,13 +1122,12 @@ void XMLHttpRequest::didFail(const ResourceError& error) |
if (error.domain() == errorDomainWebKitInternal) |
logConsoleError(scriptExecutionContext(), "XMLHttpRequest cannot load " + error.failingURL() + ". " + error.localizedDescription()); |
- m_exceptionCode = NetworkError; |
- networkError(); |
+ handleNetworkError(); |
} |
void XMLHttpRequest::didFailRedirectCheck() |
{ |
- networkError(); |
+ handleNetworkError(); |
} |
void XMLHttpRequest::didFinishLoading(unsigned long identifier, double) |
@@ -1237,32 +1251,23 @@ void XMLHttpRequest::didReceiveData(const char* data, int len) |
} |
} |
-void XMLHttpRequest::didTimeout() |
+void XMLHttpRequest::handleDidTimeout() |
{ |
// internalAbort() calls dropProtection(), which may release the last reference. |
RefPtr<XMLHttpRequest> protect(this); |
internalAbort(); |
- clearResponse(); |
- clearRequest(); |
- |
- m_error = true; |
m_exceptionCode = TimeoutError; |
+ handleDidFailGeneric(); |
+ |
if (!m_async) { |
m_state = DONE; |
- m_exceptionCode = TimeoutError; |
return; |
} |
- |
changeState(DONE); |
- if (!m_uploadComplete) { |
- m_uploadComplete = true; |
- if (m_upload && m_uploadEventsAllowed) |
- m_upload->dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().timeoutEvent)); |
- } |
- m_progressEventThrottle.dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(eventNames().timeoutEvent)); |
+ dispatchEventAndLoadEnd(eventNames().timeoutEvent); |
} |
bool XMLHttpRequest::canSuspend() const |