Index: Source/bindings/modules/v8/V8BindingForModules.cpp |
diff --git a/Source/bindings/modules/v8/V8BindingForModules.cpp b/Source/bindings/modules/v8/V8BindingForModules.cpp |
index f12ee1c8aca48bc9983e81e8894c6a5ab913a712..f9df8232b0e67805d3095c93c886e2dff6c10227 100644 |
--- a/Source/bindings/modules/v8/V8BindingForModules.cpp |
+++ b/Source/bindings/modules/v8/V8BindingForModules.cpp |
@@ -28,6 +28,7 @@ |
#include "bindings/core/v8/SerializedScriptValue.h" |
#include "bindings/core/v8/SerializedScriptValueFactory.h" |
+#include "bindings/core/v8/V8ArrayBuffer.h" |
#include "bindings/core/v8/V8ArrayBufferView.h" |
#include "bindings/core/v8/V8Binding.h" |
#include "bindings/core/v8/V8DOMStringList.h" |
@@ -40,6 +41,8 @@ |
#include "bindings/modules/v8/V8IDBIndex.h" |
#include "bindings/modules/v8/V8IDBKeyRange.h" |
#include "bindings/modules/v8/V8IDBObjectStore.h" |
+#include "core/dom/DOMArrayBuffer.h" |
+#include "core/dom/DOMArrayBufferView.h" |
#include "modules/indexeddb/IDBKey.h" |
#include "modules/indexeddb/IDBKeyPath.h" |
#include "modules/indexeddb/IDBKeyRange.h" |
@@ -91,7 +94,7 @@ v8::Local<v8::Value> toV8(const IDBKey* key, v8::Local<v8::Object> creationConte |
case IDBKey::StringType: |
return v8String(isolate, key->string()); |
case IDBKey::BinaryType: |
- return toV8(DOMUint8Array::create(reinterpret_cast<const unsigned char*>(key->binary()->data()), key->binary()->size()), creationContext, isolate); |
+ return toV8(DOMArrayBuffer::create(reinterpret_cast<const unsigned char*>(key->binary()->data()), key->binary()->size()), creationContext, isolate); |
case IDBKey::DateType: |
return v8::Date::New(isolate->GetCurrentContext(), key->date()).ToLocalChecked(); |
case IDBKey::ArrayType: |
@@ -189,13 +192,21 @@ static IDBKey* createIDBKeyFromValue(v8::Isolate* isolate, v8::Local<v8::Value> |
return IDBKey::createString(toCoreString(value.As<v8::String>())); |
if (value->IsDate() && !std::isnan(value.As<v8::Date>()->ValueOf())) |
return IDBKey::createDate(value.As<v8::Date>()->ValueOf()); |
- if (value->IsUint8Array() && (allowExperimentalTypes || RuntimeEnabledFeatures::indexedDBExperimentalEnabled())) { |
- // Per discussion in https://www.w3.org/Bugs/Public/show_bug.cgi?id=23332 the |
- // input type is constrained to Uint8Array to match the output type. |
- DOMArrayBufferView* view = blink::V8ArrayBufferView::toImpl(value.As<v8::Object>()); |
- const char* start = static_cast<const char*>(view->baseAddress()); |
- size_t length = view->byteLength(); |
- return IDBKey::createBinary(SharedBuffer::create(start, length)); |
+ if (allowExperimentalTypes || RuntimeEnabledFeatures::indexedDBExperimentalEnabled()) { |
+ // Experimental feature: binary keys |
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=23332 |
+ if (value->IsArrayBuffer()) { |
+ DOMArrayBuffer* buffer = blink::V8ArrayBuffer::toImpl(value.As<v8::Object>()); |
+ const char* start = static_cast<const char*>(buffer->data()); |
+ size_t length = buffer->byteLength(); |
+ return IDBKey::createBinary(SharedBuffer::create(start, length)); |
cmumford
2015/04/27 17:14:23
How much do we care about overflow? length is goin
jsbell
2015/04/27 22:39:47
Covered by the FIXME at:
https://code.google.com/
|
+ } |
+ if (value->IsArrayBufferView()) { |
+ DOMArrayBufferView* view = blink::V8ArrayBufferView::toImpl(value.As<v8::Object>()); |
+ const char* start = static_cast<const char*>(view->baseAddress()); |
+ size_t length = view->byteLength(); |
+ return IDBKey::createBinary(SharedBuffer::create(start, length)); |
+ } |
} |
if (value->IsArray()) { |
v8::Local<v8::Array> array = value.As<v8::Array>(); |