| Index: mojo/edk/js/core.cc
|
| diff --git a/mojo/edk/js/core.cc b/mojo/edk/js/core.cc
|
| index c8ccc37c536db220ef621fa5dc51299515236f24..46cfab6342afc78674fc9a93ed34b29636f00e37 100644
|
| --- a/mojo/edk/js/core.cc
|
| +++ b/mojo/edk/js/core.cc
|
| @@ -289,6 +289,83 @@ bool IsHandle(gin::Arguments* args, v8::Handle<v8::Value> val) {
|
| args->isolate(), val, &ignore_handle);
|
| }
|
|
|
| +gin::Dictionary CreateSharedBuffer(const gin::Arguments& args,
|
| + uint64_t num_bytes,
|
| + MojoCreateSharedBufferOptionsFlags flags) {
|
| + gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
|
| + MojoHandle handle = MOJO_HANDLE_INVALID;
|
| + MojoCreateSharedBufferOptions options;
|
| + options.flags = flags;
|
| + MojoResult result = MojoCreateSharedBuffer(&options, num_bytes, &handle);
|
| + if (result != MOJO_RESULT_OK) {
|
| + dictionary.Set("result", result);
|
| + return dictionary;
|
| + }
|
| +
|
| + dictionary.Set("result", result);
|
| + dictionary.Set("handle", mojo::Handle(handle));
|
| +
|
| + return dictionary;
|
| +}
|
| +
|
| +gin::Dictionary DuplicateBufferHandle(
|
| + const gin::Arguments& args,
|
| + mojo::Handle handle,
|
| + MojoDuplicateBufferHandleOptionsFlags flags) {
|
| + gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
|
| + MojoHandle duped = MOJO_HANDLE_INVALID;
|
| + MojoDuplicateBufferHandleOptions options;
|
| + // The |flags| is mandatory parameter for DuplicateBufferHandle, and it will
|
| + // be always initialized in MojoDuplicateBufferHandleOptions struct. For now,
|
| + // since the struct has only one options field (flags), set struct_size to be
|
| + // equal to the size of MojoDuplicateBufferHandleOptions.
|
| + options.struct_size =
|
| + static_cast<uint32_t>(sizeof(MojoDuplicateBufferHandleOptions));
|
| + options.flags = flags;
|
| + MojoResult result =
|
| + MojoDuplicateBufferHandle(handle.value(), &options, &duped);
|
| + if (result != MOJO_RESULT_OK) {
|
| + dictionary.Set("result", result);
|
| + return dictionary;
|
| + }
|
| +
|
| + dictionary.Set("result", result);
|
| + dictionary.Set("handle", mojo::Handle(duped));
|
| +
|
| + return dictionary;
|
| +}
|
| +
|
| +gin::Dictionary MapBuffer(const gin::Arguments& args,
|
| + mojo::Handle handle,
|
| + uint64_t offset,
|
| + uint64_t num_bytes,
|
| + MojoMapBufferFlags flags) {
|
| + gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
|
| + void* data = nullptr;
|
| + MojoResult result =
|
| + MojoMapBuffer(handle.value(), offset, num_bytes, &data, flags);
|
| + if (result != MOJO_RESULT_OK) {
|
| + dictionary.Set("result", result);
|
| + return dictionary;
|
| + }
|
| +
|
| + v8::Handle<v8::ArrayBuffer> array_buffer =
|
| + v8::ArrayBuffer::New(args.isolate(), data, num_bytes);
|
| +
|
| + dictionary.Set("result", result);
|
| + dictionary.Set("buffer", array_buffer);
|
| +
|
| + return dictionary;
|
| +}
|
| +
|
| +MojoResult UnmapBuffer(const gin::Arguments& args,
|
| + const v8::Handle<v8::ArrayBuffer>& buffer) {
|
| + // Buffer must be external, created by MapBuffer
|
| + if (!buffer->IsExternal())
|
| + return MOJO_RESULT_INVALID_ARGUMENT;
|
| +
|
| + return MojoUnmapBuffer(buffer->GetContents().Data());
|
| +}
|
|
|
| gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin };
|
|
|
| @@ -317,6 +394,10 @@ v8::Local<v8::Value> Core::GetModule(v8::Isolate* isolate) {
|
| .SetMethod("readData", ReadData)
|
| .SetMethod("drainData", DoDrainData)
|
| .SetMethod("isHandle", IsHandle)
|
| + .SetMethod("createSharedBuffer", CreateSharedBuffer)
|
| + .SetMethod("duplicateBufferHandle", DuplicateBufferHandle)
|
| + .SetMethod("mapBuffer", MapBuffer)
|
| + .SetMethod("unmapBuffer", UnmapBuffer)
|
|
|
| .SetValue("RESULT_OK", MOJO_RESULT_OK)
|
| .SetValue("RESULT_CANCELLED", MOJO_RESULT_CANCELLED)
|
| @@ -369,6 +450,16 @@ v8::Local<v8::Value> Core::GetModule(v8::Isolate* isolate) {
|
| .SetValue("READ_DATA_FLAG_DISCARD", MOJO_READ_DATA_FLAG_DISCARD)
|
| .SetValue("READ_DATA_FLAG_QUERY", MOJO_READ_DATA_FLAG_QUERY)
|
| .SetValue("READ_DATA_FLAG_PEEK", MOJO_READ_DATA_FLAG_PEEK)
|
| + .SetValue("CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE",
|
| + MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE)
|
| +
|
| + .SetValue("DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE",
|
| + MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE)
|
| +
|
| + .SetValue("DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY",
|
| + MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY)
|
| +
|
| + .SetValue("MAP_BUFFER_FLAG_NONE", MOJO_MAP_BUFFER_FLAG_NONE)
|
| .Build();
|
|
|
| data->SetObjectTemplate(&g_wrapper_info, templ);
|
|
|