| Index: Source/bindings/core/dart/V8Converter.cpp | 
| diff --git a/Source/bindings/core/dart/V8Converter.cpp b/Source/bindings/core/dart/V8Converter.cpp | 
| index 2200818f5c2df1a4bcfa81b3279b17e9d4bfa88c..d51ac57880bfc01be1a7712469bfcc821b746b16 100644 | 
| --- a/Source/bindings/core/dart/V8Converter.cpp | 
| +++ b/Source/bindings/core/dart/V8Converter.cpp | 
| @@ -513,7 +513,10 @@ Dart_Handle V8Converter::mapToDart(v8::Handle<v8::Object> object, V8ToDartMap& m | 
| v8::Handle<v8::Value> V8Converter::arrayBufferToV8(Dart_Handle value, Dart_Handle& exception) | 
| { | 
| ScriptState* state = DartUtilities::v8ScriptStateForCurrentIsolate(); | 
| -    return blink::toV8(DartUtilities::dartToExternalizedArrayBuffer(value, exception).get(), state->context()->Global(), state->isolate()); | 
| +    RefPtr<DOMArrayBuffer> arrayBuffer = DOMArrayBuffer::create(DartUtilities::dartToExternalizedArrayBuffer(value, exception)); | 
| +    v8::Handle<v8::Object> global = state->context()->Global(); | 
| +    v8::Isolate* v8Isolate = state->isolate(); | 
| +    return blink::toV8(arrayBuffer.get(), global, v8Isolate); | 
| } | 
|  | 
| Dart_Handle V8Converter::arrayBufferToDart(v8::Handle<v8::Object> object, Dart_Handle& exception) | 
| @@ -525,31 +528,71 @@ v8::Handle<v8::Value> V8Converter::arrayBufferViewToV8(Dart_Handle value, Dart_H | 
| { | 
| RefPtr<ArrayBufferView> view = DartUtilities::dartToExternalizedArrayBufferView(value, exception); | 
| ScriptState* state = DartUtilities::v8ScriptStateForCurrentIsolate(); | 
| +    unsigned byteOffset = view->byteOffset(); | 
| +    // this is copied from ScriptValueSerializer. | 
| +    int elementByteSize = 1; | 
| +    ArrayBuffer* data = view->buffer().get(); | 
|  | 
| switch (view->type()) { | 
| case ArrayBufferView::TypeInt8: | 
| -        return blink::toV8(static_cast<Int8Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMInt8Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeUint8: | 
| -        return blink::toV8(static_cast<Uint8Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMUint8Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeUint8Clamped: | 
| -        return blink::toV8(static_cast<Uint8ClampedArray*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMUint8ClampedArray::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeInt16: | 
| -        return blink::toV8(static_cast<Int16Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMInt16Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeUint16: | 
| -        return blink::toV8(static_cast<Uint16Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMUint16Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeInt32: | 
| -        return blink::toV8(static_cast<Int32Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMInt32Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeUint32: | 
| -        return blink::toV8(static_cast<Uint32Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMUint32Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeFloat32: | 
| -        return blink::toV8(static_cast<Float32Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMFloat32Array::ValueType); | 
| +        break; | 
| case ArrayBufferView::TypeFloat64: | 
| -        return blink::toV8(static_cast<Float64Array*>(view.get()), state->context()->Global(), state->isolate()); | 
| +        elementByteSize = sizeof(DOMFloat64Array::ValueType); | 
| +        break; | 
| +    case ArrayBufferView::TypeDataView: | 
| +        elementByteSize = sizeof(DOMDataView::ValueType); | 
| +        break; | 
| +    default: | 
| +        ASSERT_NOT_REACHED(); | 
| +    } | 
| +    unsigned numElements = view->byteLength() / elementByteSize; | 
| + | 
| +    switch (view->type()) { | 
| +    case ArrayBufferView::TypeInt8: | 
| +        return blink::toV8(DOMInt8Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeUint8: | 
| +        return blink::toV8(DOMUint8Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeUint8Clamped: | 
| +        return blink::toV8(DOMUint8ClampedArray::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeInt16: | 
| +        return blink::toV8(DOMInt16Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeUint16: | 
| +        return blink::toV8(DOMUint16Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeInt32: | 
| +        return blink::toV8(DOMInt32Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeUint32: | 
| +        return blink::toV8(DOMUint32Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeFloat32: | 
| +        return blink::toV8(DOMFloat32Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| +    case ArrayBufferView::TypeFloat64: | 
| +        return blink::toV8(DOMFloat64Array::create(data, byteOffset, numElements), state->context()->Global(), state->isolate()); | 
| case ArrayBufferView::TypeDataView: | 
| { | 
| +            RefPtr<DOMArrayBufferView> domArrayBuffView = adoptRef(new DOMArrayBufferView(view.get())); | 
| // TODO(terry): Had to move protected constructor to public in | 
| //              core/dom/DOMArrayBufferView.h | 
| -            RefPtr<DOMArrayBufferView> domArrayBuffView = new DOMArrayBufferView(view.get()); | 
| return blink::toV8(DOMDataView::create(domArrayBuffView->bufferBase(), | 
| domArrayBuffView->byteOffset(), | 
| domArrayBuffView->byteLength()), | 
|  |