summaryrefslogtreecommitdiff
path: root/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp')
-rw-r--r--Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp45
1 files changed, 21 insertions, 24 deletions
diff --git a/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp b/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
index 615e515bb..36662656b 100644
--- a/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
+++ b/Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp
@@ -27,6 +27,7 @@
#include "config.h"
#include "XMLHttpRequestProgressEventThrottle.h"
+#include "EventNames.h"
#include "EventTarget.h"
#include "XMLHttpRequestProgressEvent.h"
@@ -41,7 +42,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,6 +56,9 @@ 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.
@@ -63,8 +67,7 @@ void XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent(bool le
}
if (!isActive()) {
- // The timer is not active so the least frequent event for now is every byte.
- // Just go ahead and dispatch the event.
+ // The timer is not active so the least frequent event for now is every byte. Just dispatch the event.
// We should not have any throttled progress event.
ASSERT(!m_hasThrottledProgressEvent);
@@ -79,7 +82,7 @@ void XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent(bool le
m_hasThrottledProgressEvent = true;
}
-void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(PassRefPtr<Event> event, ProgressEventAction progressEventAction)
+void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(Event& event, ProgressEventAction progressEventAction)
{
if (progressEventAction == FlushProgressEvent)
flushProgressEvent();
@@ -87,11 +90,10 @@ void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(PassRefP
dispatchEvent(event);
}
-void XMLHttpRequestProgressEventThrottle::dispatchEvent(PassRefPtr<Event> event)
+void XMLHttpRequestProgressEventThrottle::dispatchEvent(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;
}
@@ -100,7 +102,7 @@ void XMLHttpRequestProgressEventThrottle::dispatchEvent(PassRefPtr<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);
@@ -110,51 +112,46 @@ void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(const AtomicStri
m_total = 0;
}
- dispatchEvent(XMLHttpRequestProgressEvent::create(type, m_lengthComputable, m_loaded, m_total));
+ if (m_target->hasEventListeners(type))
+ 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);
- m_deferredProgressEvent = 0;
+ m_deferredEvents.append(m_deferredProgressEvent.releaseNonNull());
return;
}
if (!hasEventToDispatch())
return;
- PassRefPtr<Event> event = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, m_lengthComputable, m_loaded, m_total);
+ Ref<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(event);
+ dispatchEvent(WTFMove(event));
}
-void XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents(Timer<XMLHttpRequestProgressEventThrottle>* timer)
+void XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents()
{
- 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.
- Vector<RefPtr<Event>> deferredEvents;
- m_deferredEvents.swap(deferredEvents);
+ auto deferredEvents = WTFMove(m_deferredEvents);
- RefPtr<Event> deferredProgressEvent = m_deferredProgressEvent;
- m_deferredProgressEvent = 0;
+ RefPtr<Event> deferredProgressEvent = WTFMove(m_deferredProgressEvent);
- Vector<RefPtr<Event>>::const_iterator it = deferredEvents.begin();
- const Vector<RefPtr<Event>>::const_iterator end = deferredEvents.end();
- for (; it != end; ++it)
- dispatchEvent(*it);
+ for (auto& deferredEvent : deferredEvents)
+ dispatchEvent(deferredEvent);
// 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()