diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-08-08 14:30:41 +0200 |
---|---|---|
committer | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-08-12 13:49:54 +0200 |
commit | ab0a50979b9eb4dfa3320eff7e187e41efedf7a9 (patch) | |
tree | 498dfb8a97ff3361a9f7486863a52bb4e26bb898 /chromium/gin/array_buffer.cc | |
parent | 4ce69f7403811819800e7c5ae1318b2647e778d1 (diff) | |
download | qtwebengine-chromium-ab0a50979b9eb4dfa3320eff7e187e41efedf7a9.tar.gz |
Update Chromium to beta version 37.0.2062.68
Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'chromium/gin/array_buffer.cc')
-rw-r--r-- | chromium/gin/array_buffer.cc | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/chromium/gin/array_buffer.cc b/chromium/gin/array_buffer.cc index ee9f2a5867b..b777402e644 100644 --- a/chromium/gin/array_buffer.cc +++ b/chromium/gin/array_buffer.cc @@ -2,17 +2,23 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "gin/array_buffer.h" - #include <stdlib.h> +#include "base/logging.h" +#include "gin/array_buffer.h" +#include "gin/per_isolate_data.h" + namespace gin { +namespace { + +gin::WrapperInfo g_array_buffer_wrapper_info = {gin::kEmbedderNativeGin}; + +} // namespace + COMPILE_ASSERT(V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT == 2, array_buffers_must_have_two_internal_fields); -static const int kBufferViewPrivateIndex = 0; - // ArrayBufferAllocator ------------------------------------------------------- void* ArrayBufferAllocator::Allocate(size_t length) { @@ -72,6 +78,7 @@ class ArrayBuffer::Private : public base::RefCounted<ArrayBuffer::Private> { v8::Persistent<v8::ArrayBuffer> array_buffer_; scoped_refptr<Private> self_reference_; + v8::Isolate* isolate_; void* buffer_; size_t length_; }; @@ -79,28 +86,34 @@ class ArrayBuffer::Private : public base::RefCounted<ArrayBuffer::Private> { scoped_refptr<ArrayBuffer::Private> ArrayBuffer::Private::From( v8::Isolate* isolate, v8::Handle<v8::ArrayBuffer> array) { if (array->IsExternal()) { + CHECK_EQ(WrapperInfo::From(v8::Handle<v8::Object>::Cast(array)), + &g_array_buffer_wrapper_info) + << "Cannot mix blink and gin ArrayBuffers"; return make_scoped_refptr(static_cast<Private*>( - array->GetAlignedPointerFromInternalField(kBufferViewPrivateIndex))); + array->GetAlignedPointerFromInternalField(kEncodedValueIndex))); } return make_scoped_refptr(new Private(isolate, array)); } ArrayBuffer::Private::Private(v8::Isolate* isolate, v8::Handle<v8::ArrayBuffer> array) - : array_buffer_(isolate, array) { + : array_buffer_(isolate, array), isolate_(isolate) { // Take ownership of the array buffer. + CHECK(!array->IsExternal()); v8::ArrayBuffer::Contents contents = array->Externalize(); buffer_ = contents.Data(); length_ = contents.ByteLength(); - array->SetAlignedPointerInInternalField(kBufferViewPrivateIndex, this); + array->SetAlignedPointerInInternalField(kWrapperInfoIndex, + &g_array_buffer_wrapper_info); + array->SetAlignedPointerInInternalField(kEncodedValueIndex, this); self_reference_ = this; // Cleared in WeakCallback. array_buffer_.SetWeak(this, WeakCallback); } ArrayBuffer::Private::~Private() { - ArrayBufferAllocator::SharedInstance()->Free(buffer_, length_); + PerIsolateData::From(isolate_)->allocator()->Free(buffer_, length_); } void ArrayBuffer::Private::WeakCallback( @@ -162,6 +175,14 @@ ArrayBufferView::ArrayBufferView(v8::Isolate* isolate, ArrayBufferView::~ArrayBufferView() { } +ArrayBufferView& ArrayBufferView::operator=(const ArrayBufferView& other) { + array_buffer_ = other.array_buffer_; + offset_ = other.offset_; + num_bytes_ = other.num_bytes_; + return *this; +} + + // Converter<ArrayBufferView> ------------------------------------------------- bool Converter<ArrayBufferView>::FromV8(v8::Isolate* isolate, |