summaryrefslogtreecommitdiff
path: root/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.cpp44
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()