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

Unified Diff: third_party/WebKit/Source/core/loader/BeaconLoader.cpp

Issue 1920213002: Remove ParamStorageTraits from BeaconLoader.cpp (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Kuroneko_5c
Patch Set: Make private |m_data| only. Created 4 years, 8 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/loader/BeaconLoader.cpp
diff --git a/third_party/WebKit/Source/core/loader/BeaconLoader.cpp b/third_party/WebKit/Source/core/loader/BeaconLoader.cpp
index 273256479025b009554a8a1c48a8ec97669cfe2f..f84f614ea371d4dba340787d5ca7e92a461e479a 100644
--- a/third_party/WebKit/Source/core/loader/BeaconLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/BeaconLoader.cpp
@@ -31,39 +31,126 @@ class Beacon {
public:
virtual bool serialize(ResourceRequest&, int, int&) const = 0;
virtual unsigned long long size() const = 0;
+};
+
+class BeaconString final : public Beacon {
+public:
+ BeaconString(const String& data)
+ : m_data(data)
+ {
+ }
-protected:
- static unsigned long long beaconSize(const String&);
- static unsigned long long beaconSize(Blob*);
- static unsigned long long beaconSize(DOMArrayBufferView*);
- static unsigned long long beaconSize(FormData*);
+ unsigned long long size() const override
+ {
+ return m_data.sizeInBytes();
+ }
- static bool serialize(const String&, ResourceRequest&, int, int&);
- static bool serialize(Blob*, ResourceRequest&, int, int&);
- static bool serialize(DOMArrayBufferView*, ResourceRequest&, int, int&);
- static bool serialize(FormData*, ResourceRequest&, int, int&);
+ bool serialize(ResourceRequest& request, int, int&) const override
+ {
+ RefPtr<EncodedFormData> entityBody = EncodedFormData::create(m_data.utf8());
+ request.setHTTPBody(entityBody);
+ request.setHTTPContentType("text/plain;charset=UTF-8");
+ return true;
+ }
+
+private:
+ const String m_data;
};
-template<typename Payload>
-class BeaconData final : public Beacon {
+class BeaconBlob final : public Beacon {
public:
- BeaconData(const Payload& data)
+ BeaconBlob(Blob* data)
: m_data(data)
{
}
- bool serialize(ResourceRequest& request, int allowance, int& payloadLength) const override
+ unsigned long long size() const override
+ {
+ return m_data->size();
+ }
+
+ bool serialize(ResourceRequest& request, int, int&) const override
+ {
+ ASSERT(m_data);
+ RefPtr<EncodedFormData> entityBody = EncodedFormData::create();
+ if (m_data->hasBackingFile())
+ entityBody->appendFile(toFile(m_data)->path());
+ else
+ entityBody->appendBlob(m_data->uuid(), m_data->blobDataHandle());
+
+ request.setHTTPBody(entityBody.release());
+
+ const String& blobType = m_data->type();
+ if (!blobType.isEmpty() && isValidContentType(blobType))
+ request.setHTTPContentType(AtomicString(blobType));
+
+ return true;
+ }
+
+private:
+ const Persistent<Blob> m_data;
+};
+
+class BeaconDOMArrayBufferView final : public Beacon {
+public:
+ BeaconDOMArrayBufferView(DOMArrayBufferView* data)
+ : m_data(data)
+ {
+ }
+
+ unsigned long long size() const override
+ {
+ return m_data->byteLength();
+ }
+
+ bool serialize(ResourceRequest& request, int, int&) const override
+ {
+ ASSERT(m_data);
+ RefPtr<EncodedFormData> entityBody = EncodedFormData::create(m_data->baseAddress(), m_data->byteLength());
+ request.setHTTPBody(entityBody.release());
+
+ // FIXME: a reasonable choice, but not in the spec; should it give a default?
+ AtomicString contentType = AtomicString("application/octet-stream");
+ request.setHTTPContentType(contentType);
+
+ return true;
+ }
+
+private:
+ const Persistent<DOMArrayBufferView> m_data;
+};
+
+class BeaconFormData final : public Beacon {
+public:
+ BeaconFormData(FormData* data)
+ : m_data(data)
{
- return Beacon::serialize(m_data, request, allowance, payloadLength);
}
unsigned long long size() const override
{
- return beaconSize(m_data);
+ // FormData's size cannot be determined until serialized.
+ return 0;
+ }
+
+ bool serialize(ResourceRequest& request, int allowance, int& payloadLength) const override
+ {
+ ASSERT(m_data);
+ RefPtr<EncodedFormData> entityBody = m_data->encodeMultiPartFormData();
+ unsigned long long entitySize = entityBody->sizeInBytes();
+ if (allowance > 0 && static_cast<unsigned long long>(allowance) < entitySize)
+ return false;
+
+ AtomicString contentType = AtomicString("multipart/form-data; boundary=") + entityBody->boundary().data();
+ request.setHTTPBody(entityBody.release());
+ request.setHTTPContentType(contentType);
+
+ payloadLength = entitySize;
+ return true;
}
private:
- const typename WTF::ParamStorageTraits<Payload>::StorageType m_data;
+ const Persistent<FormData> m_data;
};
} // namespace
@@ -106,25 +193,25 @@ public:
bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, const String& data, int& payloadLength)
{
- BeaconData<String> beacon(data);
+ BeaconString beacon(data);
return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
}
bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, DOMArrayBufferView* data, int& payloadLength)
{
- BeaconData<decltype(data)> beacon(data);
+ BeaconDOMArrayBufferView beacon(data);
return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
}
bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, FormData* data, int& payloadLength)
{
- BeaconData<decltype(data)> beacon(data);
+ BeaconFormData beacon(data);
return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
}
bool BeaconLoader::sendBeacon(LocalFrame* frame, int allowance, const KURL& beaconURL, Blob* data, int& payloadLength)
{
- BeaconData<decltype(data)> beacon(data);
+ BeaconBlob beacon(data);
return Sender::send(frame, allowance, beaconURL, beacon, payloadLength);
}
@@ -159,84 +246,4 @@ void BeaconLoader::willFollowRedirect(WebURLLoader*, WebURLRequest& passedNewReq
// updates of Origin: following this successful redirect.
}
-namespace {
-
-unsigned long long Beacon::beaconSize(const String& data)
-{
- return data.sizeInBytes();
-}
-
-bool Beacon::serialize(const String& data, ResourceRequest& request, int, int&)
-{
- RefPtr<EncodedFormData> entityBody = EncodedFormData::create(data.utf8());
- request.setHTTPBody(entityBody);
- request.setHTTPContentType("text/plain;charset=UTF-8");
- return true;
-}
-
-unsigned long long Beacon::beaconSize(Blob* data)
-{
- return data->size();
-}
-
-bool Beacon::serialize(Blob* data, ResourceRequest& request, int, int&)
-{
- ASSERT(data);
- RefPtr<EncodedFormData> entityBody = EncodedFormData::create();
- if (data->hasBackingFile())
- entityBody->appendFile(toFile(data)->path());
- else
- entityBody->appendBlob(data->uuid(), data->blobDataHandle());
-
- request.setHTTPBody(entityBody.release());
-
- const String& blobType = data->type();
- if (!blobType.isEmpty() && isValidContentType(blobType))
- request.setHTTPContentType(AtomicString(blobType));
-
- return true;
-}
-
-unsigned long long Beacon::beaconSize(DOMArrayBufferView* data)
-{
- return data->byteLength();
-}
-
-bool Beacon::serialize(DOMArrayBufferView* data, ResourceRequest& request, int, int&)
-{
- ASSERT(data);
- RefPtr<EncodedFormData> entityBody = EncodedFormData::create(data->baseAddress(), data->byteLength());
- request.setHTTPBody(entityBody.release());
-
- // FIXME: a reasonable choice, but not in the spec; should it give a default?
- AtomicString contentType = AtomicString("application/octet-stream");
- request.setHTTPContentType(contentType);
-
- return true;
-}
-
-unsigned long long Beacon::beaconSize(FormData*)
-{
- // FormData's size cannot be determined until serialized.
- return 0;
-}
-
-bool Beacon::serialize(FormData* data, ResourceRequest& request, int allowance, int& payloadLength)
-{
- ASSERT(data);
- RefPtr<EncodedFormData> entityBody = data->encodeMultiPartFormData();
- unsigned long long entitySize = entityBody->sizeInBytes();
- if (allowance > 0 && static_cast<unsigned long long>(allowance) < entitySize)
- return false;
-
- AtomicString contentType = AtomicString("multipart/form-data; boundary=") + entityBody->boundary().data();
- request.setHTTPBody(entityBody.release());
- request.setHTTPContentType(contentType);
-
- payloadLength = entitySize;
- return true;
-}
-
-} // namespace
-
} // namespace blink
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698