Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Unified Diff: gin/array_buffer.cc

Issue 59153005: Begin implementing V8 bindings for Mojo (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix skipped comment Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« gin/arguments.cc ('K') | « gin/array_buffer.h ('k') | gin/converter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gin/array_buffer.cc
diff --git a/gin/array_buffer.cc b/gin/array_buffer.cc
index e8236fc520511e0cc0e700b7260374fbefbddcaa..43dd8da348fa6a3a1125523339f7fd2a9c5ebfd3 100644
--- a/gin/array_buffer.cc
+++ b/gin/array_buffer.cc
@@ -32,7 +32,7 @@ ArrayBufferAllocator* ArrayBufferAllocator::SharedInstance() {
return instance;
}
-// BufferView::Private --------------------------------------------------------
+// ArrayBuffer::Private -------------------------------------------------------
// This class exists to solve a tricky lifetime problem. The V8 API doesn't
// want to expose a direct view into the memory behind an array buffer because
@@ -42,18 +42,18 @@ ArrayBufferAllocator* ArrayBufferAllocator::SharedInstance() {
// we're done with it and when V8 is done with it.
//
// To determine whether we're done with the memory, every view we have into
-// the array buffer takes a reference to the BufferView::Private object that
+// the array buffer takes a reference to the ArrayBuffer::Private object that
// actually owns the memory. To determine when V8 is done with the memory, we
// open a weak handle to the ArrayBuffer object. When we receive the weak
// callback, we know the object is about to be garbage collected and we can
// drop V8's implied reference to the memory.
//
-// The final subtlety is that we need every BufferView into the same array
-// buffer to AddRef the same BufferView::Private. To make that work, we store a
-// pointer to the BufferView::Private object in an internal field of the
+// The final subtlety is that we need every ArrayBuffer into the same array
+// buffer to AddRef the same ArrayBuffer::Private. To make that work, we store
+// a pointer to the ArrayBuffer::Private object in an internal field of the
// ArrayBuffer object.
//
-class BufferView::Private {
+class ArrayBuffer::Private {
public:
static scoped_refptr<Private> From(v8::Isolate* isolate,
v8::Handle<v8::ArrayBuffer> array);
@@ -77,7 +77,7 @@ class BufferView::Private {
size_t length_;
};
-scoped_refptr<BufferView::Private> BufferView::Private::From(
+scoped_refptr<ArrayBuffer::Private> ArrayBuffer::Private::From(
v8::Isolate* isolate, v8::Handle<v8::ArrayBuffer> array) {
if (array->IsExternal()) {
return make_scoped_refptr(static_cast<Private*>(
@@ -86,18 +86,18 @@ scoped_refptr<BufferView::Private> BufferView::Private::From(
return make_scoped_refptr(new Private(isolate, array));
}
-void BufferView::Private::AddRef() {
+void ArrayBuffer::Private::AddRef() {
++ref_count_;
}
-void BufferView::Private::Release() {
+void ArrayBuffer::Private::Release() {
if (--ref_count_)
return;
delete this;
}
-BufferView::Private::Private(v8::Isolate* isolate,
- v8::Handle<v8::ArrayBuffer> array)
+ArrayBuffer::Private::Private(v8::Isolate* isolate,
+ v8::Handle<v8::ArrayBuffer> array)
: ref_count_(0),
array_buffer_(isolate, array) {
// Take ownership of the array buffer.
@@ -111,40 +111,73 @@ BufferView::Private::Private(v8::Isolate* isolate,
array_buffer_.SetWeak(this, WeakCallback);
}
-BufferView::Private::~Private() {
+ArrayBuffer::Private::~Private() {
ArrayBufferAllocator::SharedInstance()->Free(buffer_, length_);
}
-void BufferView::Private::WeakCallback(
+void ArrayBuffer::Private::WeakCallback(
const v8::WeakCallbackData<v8::ArrayBuffer, Private>& data) {
Private* parameter = data.GetParameter();
parameter->array_buffer_.Reset();
- parameter->Release(); // Balanced in BufferView::Private::Private.
+ parameter->Release(); // Balanced in ArrayBuffer::Private::Private.
}
-// BufferView -----------------------------------------------------------------
+// ArrayBuffer ----------------------------------------------------------------
-BufferView::BufferView(v8::Isolate* isolate,
- v8::Handle<v8::ArrayBufferView> view) {
- Initialize(isolate, view->Buffer());
- uint8_t* ptr = static_cast<uint8_t*>(bytes_);
- bytes_ = static_cast<void*>(ptr + view->ByteOffset());
- num_bytes_ = view->ByteLength();
+ArrayBuffer::ArrayBuffer(v8::Isolate* isolate)
+ : isolate_(isolate),
+ bytes_(0),
+ num_bytes_(0) {
}
-BufferView::BufferView(v8::Isolate* isolate,
- v8::Handle<v8::ArrayBuffer> array) {
- Initialize(isolate, array);
+ArrayBuffer::ArrayBuffer(v8::Isolate* isolate,
+ v8::Handle<v8::ArrayBuffer> array)
+ : isolate_(isolate) {
+ private_ = ArrayBuffer::Private::From(isolate_, array);
+ bytes_ = private_->buffer();
+ num_bytes_ = private_->length();
}
-BufferView::~BufferView() {
+ArrayBuffer::~ArrayBuffer() {
}
-void BufferView::Initialize(v8::Isolate* isolate,
- v8::Handle<v8::ArrayBuffer> array) {
- private_ = BufferView::Private::From(isolate, array);
- bytes_ = private_->buffer();
- num_bytes_ = private_->length();
+// Converter<ArrayBuffer> -----------------------------------------------------
+
+bool Converter<ArrayBuffer>::FromV8(v8::Handle<v8::Value> val,
+ ArrayBuffer* out) {
+ if (!val->IsArrayBuffer())
+ return false;
+ *out = ArrayBuffer(out->isolate(), v8::Handle<v8::ArrayBuffer>::Cast(val));
+ return true;
+}
+
+// ArrayBufferView ------------------------------------------------------------
+
+ArrayBufferView::ArrayBufferView(v8::Isolate* isolate)
+ : array_buffer_(isolate),
+ offset_(0),
+ num_bytes_(0) {
+}
+
+ArrayBufferView::ArrayBufferView(v8::Isolate* isolate,
+ v8::Handle<v8::ArrayBufferView> view)
+ : array_buffer_(isolate, view->Buffer()),
+ offset_(view->ByteOffset()),
+ num_bytes_(view->ByteLength()) {
+}
+
+ArrayBufferView::~ArrayBufferView() {
+}
+
+// Converter<ArrayBufferView> -------------------------------------------------
+
+bool Converter<ArrayBufferView>::FromV8(v8::Handle<v8::Value> val,
+ ArrayBufferView* out) {
+ if (!val->IsArrayBufferView())
+ return false;
+ *out = ArrayBufferView(out->isolate(),
+ v8::Handle<v8::ArrayBufferView>::Cast(val));
+ return true;
}
} // namespace gin
« gin/arguments.cc ('K') | « gin/array_buffer.h ('k') | gin/converter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698