| Index: Source/core/xml/XMLHttpRequestUpload.cpp
|
| diff --git a/Source/core/xml/XMLHttpRequestUpload.cpp b/Source/core/xml/XMLHttpRequestUpload.cpp
|
| index c6bfde05d9f20536e017908ae72127d8e2bff0c7..b29142c6c0f094512b21922b5cfec72e798696ba 100644
|
| --- a/Source/core/xml/XMLHttpRequestUpload.cpp
|
| +++ b/Source/core/xml/XMLHttpRequestUpload.cpp
|
| @@ -60,18 +60,27 @@ void XMLHttpRequestUpload::dispatchProgressEvent(unsigned long long bytesSent, u
|
| dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNames::progress, true, bytesSent, totalBytesToBeSent));
|
| }
|
|
|
| -void XMLHttpRequestUpload::dispatchEventAndLoadEnd(PassRefPtr<Event> event)
|
| +void XMLHttpRequestUpload::dispatchEventAndLoadEnd(const AtomicString& type, bool lengthComputable, unsigned long long bytesSent, unsigned long long total)
|
| {
|
| - ASSERT(event->type() == EventTypeNames::load || event->type() == EventTypeNames::abort || event->type() == EventTypeNames::error || event->type() == EventTypeNames::timeout);
|
| + ASSERT(type == EventTypeNames::load || type == EventTypeNames::abort || type == EventTypeNames::error || type == EventTypeNames::timeout);
|
|
|
| - dispatchEvent(event);
|
| - dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNames::loadend));
|
| + if (!lengthComputable && !bytesSent)
|
| + bytesSent = m_lastBytesSent;
|
| +
|
| + if (!lengthComputable && !total) {
|
| + total = m_lastTotalBytesToBeSent;
|
| + if (total >= 0 && bytesSent <= total)
|
| + lengthComputable = true;
|
| + }
|
| +
|
| + dispatchEvent(XMLHttpRequestProgressEvent::create(type, lengthComputable, bytesSent, total));
|
| + dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNames::loadend, lengthComputable, bytesSent, total));
|
| }
|
|
|
| void XMLHttpRequestUpload::handleRequestError(const AtomicString& type)
|
| {
|
| dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNames::progress, true, m_lastBytesSent, m_lastTotalBytesToBeSent));
|
| - dispatchEventAndLoadEnd(XMLHttpRequestProgressEvent::create(type));
|
| + dispatchEventAndLoadEnd(type, true, m_lastBytesSent, m_lastTotalBytesToBeSent);
|
| }
|
|
|
| } // namespace WebCore
|
|
|