diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp')
-rw-r--r-- | Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp b/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp index 360000783..615e515bb 100644 --- a/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp +++ b/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp @@ -41,7 +41,7 @@ XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle(EventTa , m_loaded(0) , m_total(0) , m_deferEvents(false) - , m_dispatchDeferredEventsTimer(*this, &XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents) + , m_dispatchDeferredEventsTimer(this, &XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents) { ASSERT(target); } @@ -55,9 +55,6 @@ void XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent(bool le m_lengthComputable = lengthComputable; m_loaded = loaded; m_total = total; - - if (!m_target->hasEventListeners(eventNames().progressEvent)) - return; if (m_deferEvents) { // Only store the latest progress event while suspended. @@ -66,7 +63,8 @@ void XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent(bool le } if (!isActive()) { - // The timer is not active so the least frequent event for now is every byte. Just dispatch the event. + // The timer is not active so the least frequent event for now is every byte. + // Just go ahead and dispatch the event. // We should not have any throttled progress event. ASSERT(!m_hasThrottledProgressEvent); @@ -81,7 +79,7 @@ void XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent(bool le m_hasThrottledProgressEvent = true; } -void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(Event& event, ProgressEventAction progressEventAction) +void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(PassRefPtr<Event> event, ProgressEventAction progressEventAction) { if (progressEventAction == FlushProgressEvent) flushProgressEvent(); @@ -89,10 +87,11 @@ void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(Event& e dispatchEvent(event); } -void XMLHttpRequestProgressEventThrottle::dispatchEvent(Event& event) +void XMLHttpRequestProgressEventThrottle::dispatchEvent(PassRefPtr<Event> event) { + ASSERT(event); if (m_deferEvents) { - if (m_deferredEvents.size() > 1 && event.type() == eventNames().readystatechangeEvent && event.type() == m_deferredEvents.last()->type()) { + if (m_deferredEvents.size() > 1 && event->type() == eventNames().readystatechangeEvent && event->type() == m_deferredEvents.last()->type()) { // Readystatechange events are state-less so avoid repeating two identical events in a row on resume. return; } @@ -101,7 +100,7 @@ void XMLHttpRequestProgressEventThrottle::dispatchEvent(Event& event) m_target->dispatchEvent(event); } -void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(const AtomicString& type) +void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(const AtomicString &type) { ASSERT(type == eventNames().loadstartEvent || type == eventNames().progressEvent || type == eventNames().loadEvent || type == eventNames().loadendEvent || type == eventNames().abortEvent || type == eventNames().errorEvent || type == eventNames().timeoutEvent); @@ -111,46 +110,51 @@ void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(const AtomicStri m_total = 0; } - if (m_target->hasEventListeners(type)) - dispatchEvent(XMLHttpRequestProgressEvent::create(type, m_lengthComputable, m_loaded, m_total)); + dispatchEvent(XMLHttpRequestProgressEvent::create(type, m_lengthComputable, m_loaded, m_total)); } void XMLHttpRequestProgressEventThrottle::flushProgressEvent() { if (m_deferEvents && m_deferredProgressEvent) { // Move the progress event to the queue, to get it in the right order on resume. - m_deferredEvents.append(m_deferredProgressEvent.releaseNonNull()); + m_deferredEvents.append(m_deferredProgressEvent); + m_deferredProgressEvent = 0; return; } if (!hasEventToDispatch()) return; - Ref<Event> event = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, m_lengthComputable, m_loaded, m_total); + PassRefPtr<Event> event = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, m_lengthComputable, m_loaded, m_total); m_hasThrottledProgressEvent = false; // We stop the timer as this is called when no more events are supposed to occur. stop(); - dispatchEvent(WTFMove(event)); + dispatchEvent(event); } -void XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents() +void XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents(Timer<XMLHttpRequestProgressEventThrottle>* timer) { + ASSERT_UNUSED(timer, timer == &m_dispatchDeferredEventsTimer); ASSERT(m_deferEvents); m_deferEvents = false; // Take over the deferred events before dispatching them which can potentially add more. - auto deferredEvents = WTFMove(m_deferredEvents); + Vector<RefPtr<Event>> deferredEvents; + m_deferredEvents.swap(deferredEvents); - RefPtr<Event> deferredProgressEvent = WTFMove(m_deferredProgressEvent); + RefPtr<Event> deferredProgressEvent = m_deferredProgressEvent; + m_deferredProgressEvent = 0; - for (auto& deferredEvent : deferredEvents) - dispatchEvent(deferredEvent); + Vector<RefPtr<Event>>::const_iterator it = deferredEvents.begin(); + const Vector<RefPtr<Event>>::const_iterator end = deferredEvents.end(); + for (; it != end; ++it) + dispatchEvent(*it); // The progress event will be in the m_deferredEvents vector if the load was finished while suspended. // If not, just send the most up-to-date progress on resume. if (deferredProgressEvent) - dispatchEvent(*deferredProgressEvent); + dispatchEvent(deferredProgressEvent); } void XMLHttpRequestProgressEventThrottle::fired() |