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

Unified Diff: content/child/v8_value_converter_impl.cc

Issue 2685743002: V8ValueConverterImpl: Use V8 to copy from array buffers. (Closed)
Patch Set: correct dcheck, again :( Created 3 years, 10 months 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
« no previous file with comments | « no previous file | content/child/v8_value_converter_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/child/v8_value_converter_impl.cc
diff --git a/content/child/v8_value_converter_impl.cc b/content/child/v8_value_converter_impl.cc
index 5dcf63608cd31a9360fda74eb54bed1c2f0cb166..dd3678809a2f520193b172c53d17f54cb72a0e01 100644
--- a/content/child/v8_value_converter_impl.cc
+++ b/content/child/v8_value_converter_impl.cc
@@ -17,9 +17,6 @@
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/values.h"
-#include "third_party/WebKit/public/web/WebArrayBuffer.h"
-#include "third_party/WebKit/public/web/WebArrayBufferConverter.h"
-#include "third_party/WebKit/public/web/WebArrayBufferView.h"
#include "v8/include/v8.h"
namespace content {
@@ -339,11 +336,11 @@ v8::Local<v8::Value> V8ValueConverterImpl::ToArrayBuffer(
v8::Isolate* isolate,
v8::Local<v8::Object> creation_context,
const base::BinaryValue* value) const {
- blink::WebArrayBuffer buffer =
- blink::WebArrayBuffer::create(value->GetSize(), 1);
- memcpy(buffer.data(), value->GetBuffer(), value->GetSize());
- return blink::WebArrayBufferConverter::toV8Value(
- &buffer, creation_context, isolate);
+ DCHECK(creation_context->CreationContext() == isolate->GetCurrentContext());
+ v8::Local<v8::ArrayBuffer> buffer =
+ v8::ArrayBuffer::New(isolate, value->GetSize());
+ memcpy(buffer->GetContents().Data(), value->GetBuffer(), value->GetSize());
+ return buffer;
}
std::unique_ptr<base::Value> V8ValueConverterImpl::FromV8ValueImpl(
@@ -497,27 +494,20 @@ std::unique_ptr<base::Value> V8ValueConverterImpl::FromV8ArrayBuffer(
return out;
}
- char* data = NULL;
- size_t length = 0;
-
- std::unique_ptr<blink::WebArrayBuffer> array_buffer(
- blink::WebArrayBufferConverter::createFromV8Value(val, isolate));
- std::unique_ptr<blink::WebArrayBufferView> view;
- if (array_buffer) {
- data = reinterpret_cast<char*>(array_buffer->data());
- length = array_buffer->byteLength();
+ if (val->IsArrayBuffer()) {
+ auto contents = val.As<v8::ArrayBuffer>()->GetContents();
+ return base::BinaryValue::CreateWithCopiedBuffer(
+ static_cast<const char*>(contents.Data()), contents.ByteLength());
+ } else if (val->IsArrayBufferView()) {
+ v8::Local<v8::ArrayBufferView> view = val.As<v8::ArrayBufferView>();
+ size_t byte_length = view->ByteLength();
+ auto buffer = base::MakeUnique<char[]>(byte_length);
+ view->CopyContents(buffer.get(), byte_length);
+ return base::MakeUnique<base::BinaryValue>(std::move(buffer), byte_length);
} else {
- view.reset(blink::WebArrayBufferView::createFromV8Value(val));
- if (view) {
- data = reinterpret_cast<char*>(view->baseAddress()) + view->byteOffset();
- length = view->byteLength();
- }
- }
-
- if (data)
- return base::BinaryValue::CreateWithCopiedBuffer(data, length);
- else
+ NOTREACHED() << "Only ArrayBuffer and ArrayBufferView should get here.";
return nullptr;
+ }
}
std::unique_ptr<base::Value> V8ValueConverterImpl::FromV8Object(
« no previous file with comments | « no previous file | content/child/v8_value_converter_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698