Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: Source/core/xml/XMLHttpRequest.cpp

Issue 428473005: [XHR] Reduce 'readystatechange' event firing. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/xml/XMLHttpRequest.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/xml/XMLHttpRequest.cpp
diff --git a/Source/core/xml/XMLHttpRequest.cpp b/Source/core/xml/XMLHttpRequest.cpp
index 3e6bf6c9ed6e875d727eb210fdd20f233c178433..7baeab2712d5166c16514aeb37c8f16d42539f90 100644
--- a/Source/core/xml/XMLHttpRequest.cpp
+++ b/Source/core/xml/XMLHttpRequest.cpp
@@ -58,12 +58,19 @@
#include "wtf/ArrayBuffer.h"
#include "wtf/ArrayBufferView.h"
#include "wtf/Assertions.h"
+#include "wtf/CurrentTime.h"
#include "wtf/RefCountedLeakCounter.h"
#include "wtf/StdLibExtras.h"
#include "wtf/text/CString.h"
namespace blink {
+namespace {
tkent 2014/07/31 04:40:37 anonymous namespace is unnecessary. |const| puts t
yhirano 2014/08/01 01:45:38 Done.
+
+const double readyStateChangeFireInterval = 0.05; // 0.05s
tkent 2014/07/31 04:40:37 Why 0.05s? This needs a comment.
yhirano 2014/08/01 01:45:38 Done.
+
+} // namespace
+
DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XMLHttpRequest"));
struct XMLHttpRequestStaticData {
@@ -169,6 +176,7 @@ XMLHttpRequest::XMLHttpRequest(ExecutionContext* context, PassRefPtr<SecurityOri
, m_progressEventThrottle(this)
, m_responseTypeCode(ResponseTypeDefault)
, m_securityOrigin(securityOrigin)
+ , m_previousReadyStateChangeFireTime(0)
, m_async(true)
, m_includeCredentials(false)
, m_createdDocument(false)
@@ -420,12 +428,15 @@ void XMLHttpRequest::trackProgress(int length)
if (m_state != LOADING) {
changeState(LOADING);
} else {
- // Firefox calls readyStateChanged every time it receives data. Do
- // the same to align with Firefox.
- //
- // FIXME: Make our implementation and the spec consistent. This
- // behavior was needed when the progress event was not available.
- dispatchReadyStateChangeEvent();
+ // FIXME: Make our implementation and the spec consistent. This extra
+ // invocation of readystatechange event in LOADING state was needed
+ // when the progress event was not available.
+ double now = monotonicallyIncreasingTime();
+ bool shouldFire = now - m_previousReadyStateChangeFireTime >= readyStateChangeFireInterval;
+ if (shouldFire) {
+ m_previousReadyStateChangeFireTime = now;
+ dispatchReadyStateChangeEvent();
+ }
}
}
« no previous file with comments | « Source/core/xml/XMLHttpRequest.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698