| Index: Source/modules/push_messaging/PushMessageData.cpp
|
| diff --git a/Source/modules/push_messaging/PushMessageData.cpp b/Source/modules/push_messaging/PushMessageData.cpp
|
| index c7f323ae68a2078295819a46fec5a4737cd62d88..f870943c2f7a4d7eee536ddc6a1d3e488f95a59d 100644
|
| --- a/Source/modules/push_messaging/PushMessageData.cpp
|
| +++ b/Source/modules/push_messaging/PushMessageData.cpp
|
| @@ -8,20 +8,46 @@
|
| #include "bindings/core/v8/ExceptionState.h"
|
| #include "bindings/core/v8/ScriptState.h"
|
| #include "bindings/core/v8/V8Binding.h"
|
| +#include "bindings/modules/v8/UnionTypesModules.h"
|
| #include "core/dom/DOMArrayBuffer.h"
|
| #include "core/fileapi/Blob.h"
|
| #include "platform/blob/BlobData.h"
|
| +#include "wtf/text/TextEncoding.h"
|
| #include <v8.h>
|
|
|
| namespace blink {
|
|
|
| +PushMessageData* PushMessageData::create(const String& messageString)
|
| +{
|
| + return PushMessageData::create(ArrayBufferOrArrayBufferViewOrUSVString::fromUSVString(messageString));
|
| +}
|
| +
|
| +PushMessageData* PushMessageData::create(const ArrayBufferOrArrayBufferViewOrUSVString& messageData)
|
| +{
|
| + if (messageData.isArrayBuffer() || messageData.isArrayBufferView()) {
|
| + RefPtr<DOMArrayBuffer> buffer = messageData.isArrayBufferView()
|
| + ? messageData.getAsArrayBufferView()->buffer()
|
| + : messageData.getAsArrayBuffer();
|
| +
|
| + return new PushMessageData(static_cast<const char*>(buffer->data()), buffer->byteLength());
|
| + }
|
| +
|
| + if (messageData.isUSVString()) {
|
| + CString encodedString = UTF8Encoding().normalizeAndEncode(messageData.getAsUSVString(), WTF::EntitiesForUnencodables);
|
| + return new PushMessageData(encodedString.data(), encodedString.length());
|
| + }
|
| +
|
| + ASSERT(messageData.isNull());
|
| + return new PushMessageData();
|
| +}
|
| +
|
| PushMessageData::PushMessageData()
|
| {
|
| }
|
|
|
| -PushMessageData::PushMessageData(const String& messageData)
|
| - : m_messageData(messageData)
|
| +PushMessageData::PushMessageData(const char* data, unsigned bytesSize)
|
| {
|
| + m_data.append(data, bytesSize);
|
| }
|
|
|
| PushMessageData::~PushMessageData()
|
| @@ -30,19 +56,19 @@ PushMessageData::~PushMessageData()
|
|
|
| PassRefPtr<DOMArrayBuffer> PushMessageData::arrayBuffer() const
|
| {
|
| - return DOMArrayBuffer::create(m_messageData.characters8(), m_messageData.length());
|
| + return DOMArrayBuffer::create(m_data.data(), m_data.size());
|
| }
|
|
|
| Blob* PushMessageData::blob() const
|
| {
|
| OwnPtr<BlobData> blobData = BlobData::create();
|
| - blobData->appendText(m_messageData, false);
|
| + blobData->appendBytes(m_data.data(), m_data.size());
|
|
|
| // Note that the content type of the Blob object is deliberately not being
|
| // provided, following the specification.
|
|
|
| - const long long blobSize = blobData->length();
|
| - return Blob::create(BlobDataHandle::create(blobData.release(), blobSize));
|
| + const long long byteLength = blobData->length();
|
| + return Blob::create(BlobDataHandle::create(blobData.release(), byteLength));
|
| }
|
|
|
| ScriptValue PushMessageData::json(ScriptState* scriptState, ExceptionState& exceptionState) const
|
| @@ -50,7 +76,7 @@ ScriptValue PushMessageData::json(ScriptState* scriptState, ExceptionState& exce
|
| v8::Isolate* isolate = scriptState->isolate();
|
|
|
| ScriptState::Scope scope(scriptState);
|
| - v8::Local<v8::String> dataString = v8String(isolate, m_messageData);
|
| + v8::Local<v8::String> dataString = v8String(isolate, text());
|
|
|
| v8::TryCatch block;
|
| v8::Local<v8::Value> parsed;
|
| @@ -62,9 +88,9 @@ ScriptValue PushMessageData::json(ScriptState* scriptState, ExceptionState& exce
|
| return ScriptValue(scriptState, parsed);
|
| }
|
|
|
| -const String& PushMessageData::text() const
|
| +String PushMessageData::text() const
|
| {
|
| - return m_messageData;
|
| + return UTF8Encoding().decode(m_data.data(), m_data.size());
|
| }
|
|
|
| DEFINE_TRACE(PushMessageData)
|
|
|