Index: Source/modules/beacon/NavigatorBeacon.cpp |
diff --git a/Source/modules/beacon/NavigatorBeacon.cpp b/Source/modules/beacon/NavigatorBeacon.cpp |
index e5182d72afedfef7bcd3ce687fa9fca8bb6af188..e02d84f79347f86348726114c3bd9864fd9fd407 100644 |
--- a/Source/modules/beacon/NavigatorBeacon.cpp |
+++ b/Source/modules/beacon/NavigatorBeacon.cpp |
@@ -11,6 +11,7 @@ |
#include "core/fileapi/Blob.h" |
#include "core/frame/LocalFrame.h" |
#include "core/frame/Settings.h" |
+#include "core/frame/UseCounter.h" |
#include "core/frame/csp/ContentSecurityPolicy.h" |
#include "core/html/DOMFormData.h" |
#include "core/loader/BeaconLoader.h" |
@@ -76,10 +77,15 @@ int NavigatorBeacon::maxAllowance() const |
return m_transmittedBytes; |
} |
-void NavigatorBeacon::updateTransmittedBytes(int length) |
+bool NavigatorBeacon::beaconResult(ExecutionContext* context, bool allowed, int sentBytes) |
{ |
- ASSERT(length >= 0); |
- m_transmittedBytes += length; |
+ if (allowed) { |
+ ASSERT(sentBytes >= 0); |
+ m_transmittedBytes += sentBytes; |
+ } else { |
+ UseCounter::count(context, UseCounter::SendBeaconQuotaExceeded); |
+ } |
+ return allowed; |
} |
bool NavigatorBeacon::sendBeacon(ExecutionContext* context, Navigator& navigator, const String& urlstring, const String& data, ExceptionState& exceptionState) |
@@ -95,10 +101,7 @@ bool NavigatorBeacon::sendBeacon(ExecutionContext* context, const String& urlstr |
int bytes = 0; |
bool result = BeaconLoader::sendBeacon(m_navigator.frame(), maxAllowance(), url, data, bytes); |
- if (result) |
- updateTransmittedBytes(bytes); |
- |
- return result; |
+ return beaconResult(context, result, bytes); |
} |
bool NavigatorBeacon::sendBeacon(ExecutionContext* context, Navigator& navigator, const String& urlstring, PassRefPtr<ArrayBufferView> data, ExceptionState& exceptionState) |
@@ -114,10 +117,7 @@ bool NavigatorBeacon::sendBeacon(ExecutionContext* context, const String& urlstr |
int bytes = 0; |
bool result = BeaconLoader::sendBeacon(m_navigator.frame(), maxAllowance(), url, data, bytes); |
- if (result) |
- updateTransmittedBytes(bytes); |
- |
- return result; |
+ return beaconResult(context, result, bytes); |
} |
bool NavigatorBeacon::sendBeacon(ExecutionContext* context, Navigator& navigator, const String& urlstring, PassRefPtrWillBeRawPtr<Blob> data, ExceptionState& exceptionState) |
@@ -133,10 +133,7 @@ bool NavigatorBeacon::sendBeacon(ExecutionContext* context, const String& urlstr |
int bytes = 0; |
bool result = BeaconLoader::sendBeacon(m_navigator.frame(), maxAllowance(), url, data, bytes); |
- if (result) |
- updateTransmittedBytes(bytes); |
- |
- return result; |
+ return beaconResult(context, result, bytes); |
} |
bool NavigatorBeacon::sendBeacon(ExecutionContext* context, Navigator& navigator, const String& urlstring, PassRefPtrWillBeRawPtr<DOMFormData> data, ExceptionState& exceptionState) |
@@ -152,10 +149,7 @@ bool NavigatorBeacon::sendBeacon(ExecutionContext* context, const String& urlstr |
int bytes = 0; |
bool result = BeaconLoader::sendBeacon(m_navigator.frame(), maxAllowance(), url, data, bytes); |
- if (result) |
- updateTransmittedBytes(bytes); |
- |
- return result; |
+ return beaconResult(context, result, bytes); |
} |
} // namespace blink |