Index: third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp |
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp b/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp |
index 00b41011c1a4a635e19d3bd5bc174438560672a7..a8a7b9fade170c9ebf283afda3c09a04ef8914c6 100644 |
--- a/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp |
+++ b/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp |
@@ -17,18 +17,25 @@ |
namespace blink { |
-PushMessageData* PushMessageData::create(const String& messageString) |
+PushMessageData* PushMessageData::create(const String& messageString, ExceptionState& exceptionState) |
{ |
- return PushMessageData::create(ArrayBufferOrArrayBufferViewOrUSVString::fromUSVString(messageString)); |
+ return PushMessageData::create(ArrayBufferOrArrayBufferViewOrUSVString::fromUSVString(messageString), exceptionState); |
} |
-PushMessageData* PushMessageData::create(const ArrayBufferOrArrayBufferViewOrUSVString& messageData) |
+PushMessageData* PushMessageData::create(const ArrayBufferOrArrayBufferViewOrUSVString& messageData, ExceptionState& exceptionState) |
{ |
if (messageData.isArrayBuffer() || messageData.isArrayBufferView()) { |
RefPtr<DOMArrayBuffer> buffer = messageData.isArrayBufferView() |
- ? messageData.getAsArrayBufferView()->buffer() |
+ ? messageData.getAsArrayBufferView()->bufferOrNull() |
: messageData.getAsArrayBuffer(); |
+ // TODO(junov): crbug.com/536816 |
+ // Instead of crashing when buffer allocation fails, we should consider |
+ // throwing a RangeError exception. It is what the ECMAScript spec says to do: |
+ // http://ecma-international.org/ecma-262/6.0/#sec-createbytedatablock |
+ // However the PushMessageData specification does not state that such |
+ // exceptions should be re-thrown. |
+ RELEASE_ASSERT(buffer); // This is essentially an out-of-memory crash |
return new PushMessageData(static_cast<const char*>(buffer->data()), buffer->byteLength()); |
} |
@@ -56,7 +63,14 @@ PushMessageData::~PushMessageData() |
PassRefPtr<DOMArrayBuffer> PushMessageData::arrayBuffer() const |
{ |
- return DOMArrayBuffer::create(m_data.data(), m_data.size()); |
+ // TODO(junov): crbug.com/536816 |
+ // Use createOrNull instead of deprecatedCreateOrCrash. Requires |
+ // defining behavior for when allocation fails. ECMAScript spec says |
+ // allocation failure should throw a RangeError exception, but the |
+ // spec for PushMessageData.arrayBuffer() does not state that |
+ // such exceptions should be re-thrown. So for now, we just crash. |
+ RefPtr<DOMArrayBuffer> buffer = DOMArrayBuffer::deprecatedCreateOrCrash(m_data.data(), m_data.size()); |
+ return buffer.release(); |
} |
Blob* PushMessageData::blob() const |