Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / dom / DOMArrayBuffer.cpp
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "core/dom/DOMArrayBuffer.h"
7
8 #include "bindings/core/v8/DOMDataStore.h"
9 #include "bindings/core/v8/V8DOMWrapper.h"
10 #include "core/dom/DOMArrayBufferDeallocationObserver.h"
11
12 namespace blink {
13
14 v8::Handle<v8::Object> DOMArrayBuffer::wrap(v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
15 {
16     // It's possible that no one except for the new wrapper owns this object at
17     // this moment, so we have to prevent GC to collect this object until the
18     // object gets associated with the wrapper.
19     RefPtr<DOMArrayBuffer> protect(this);
20
21     ASSERT(!DOMDataStore::containsWrapper(this, isolate));
22
23     const WrapperTypeInfo* wrapperTypeInfo = this->wrapperTypeInfo();
24     v8::Handle<v8::Object> wrapper = v8::ArrayBuffer::New(isolate, data(), byteLength());
25
26     // Only when we create a new wrapper, let V8 know that we allocated and
27     // associated a new memory block with the wrapper. Note that
28     // setDeallocationObserver implicitly calls
29     // DOMArrayBufferDeallocationObserver::blinkAllocatedMemory.
30     buffer()->setDeallocationObserver(DOMArrayBufferDeallocationObserver::instance());
31
32     return associateWithWrapper(wrapperTypeInfo, wrapper, isolate);
33 }
34
35 v8::Handle<v8::Object> DOMArrayBuffer::associateWithWrapper(const WrapperTypeInfo* wrapperTypeInfo, v8::Handle<v8::Object> wrapper, v8::Isolate* isolate)
36 {
37     // This function does not set a deallocation observer to the underlying
38     // array buffer.  It's a caller's duty.
39
40     return V8DOMWrapper::associateObjectWithWrapper(isolate, this, wrapperTypeInfo, wrapper);
41 }
42
43 } // namespace blink