OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/edk/js/core.h" | 5 #include "mojo/edk/js/core.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 return gin::Converter<gin::Handle<mojo::edk::js::HandleWrapper>>::FromV8( | 288 return gin::Converter<gin::Handle<mojo::edk::js::HandleWrapper>>::FromV8( |
289 args->isolate(), val, &ignore_handle); | 289 args->isolate(), val, &ignore_handle); |
290 } | 290 } |
291 | 291 |
292 gin::Dictionary CreateSharedBuffer(const gin::Arguments& args, | 292 gin::Dictionary CreateSharedBuffer(const gin::Arguments& args, |
293 uint64_t num_bytes, | 293 uint64_t num_bytes, |
294 MojoCreateSharedBufferOptionsFlags flags) { | 294 MojoCreateSharedBufferOptionsFlags flags) { |
295 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate()); | 295 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate()); |
296 MojoHandle handle = MOJO_HANDLE_INVALID; | 296 MojoHandle handle = MOJO_HANDLE_INVALID; |
297 MojoCreateSharedBufferOptions options; | 297 MojoCreateSharedBufferOptions options; |
| 298 // The |flags| is mandatory parameter for CreateSharedBuffer, and it will |
| 299 // be always initialized in MojoCreateSharedBufferOptions struct. For |
| 300 // forward compatibility, set struct_size to be 8 bytes (struct_size + flags), |
| 301 // so that validator will only check the field that is set. |
| 302 options.struct_size = 8; |
298 options.flags = flags; | 303 options.flags = flags; |
299 MojoResult result = MojoCreateSharedBuffer(&options, num_bytes, &handle); | 304 MojoResult result = MojoCreateSharedBuffer(&options, num_bytes, &handle); |
300 if (result != MOJO_RESULT_OK) { | 305 if (result != MOJO_RESULT_OK) { |
301 dictionary.Set("result", result); | 306 dictionary.Set("result", result); |
302 return dictionary; | 307 return dictionary; |
303 } | 308 } |
304 | 309 |
305 dictionary.Set("result", result); | 310 dictionary.Set("result", result); |
306 dictionary.Set("handle", mojo::Handle(handle)); | 311 dictionary.Set("handle", mojo::Handle(handle)); |
307 | 312 |
308 return dictionary; | 313 return dictionary; |
309 } | 314 } |
310 | 315 |
311 gin::Dictionary DuplicateBufferHandle( | 316 gin::Dictionary DuplicateBufferHandle( |
312 const gin::Arguments& args, | 317 const gin::Arguments& args, |
313 mojo::Handle handle, | 318 mojo::Handle handle, |
314 MojoDuplicateBufferHandleOptionsFlags flags) { | 319 MojoDuplicateBufferHandleOptionsFlags flags) { |
315 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate()); | 320 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate()); |
316 MojoHandle duped = MOJO_HANDLE_INVALID; | 321 MojoHandle duped = MOJO_HANDLE_INVALID; |
317 MojoDuplicateBufferHandleOptions options; | 322 MojoDuplicateBufferHandleOptions options; |
318 // The |flags| is mandatory parameter for DuplicateBufferHandle, and it will | 323 // The |flags| is mandatory parameter for DuplicateBufferHandle, and it will |
319 // be always initialized in MojoDuplicateBufferHandleOptions struct. For now, | 324 // be always initialized in MojoDuplicateBufferHandleOptions struct. For |
320 // since the struct has only one options field (flags), set struct_size to be | 325 // forward compatibility, set struct_size to be 8 bytes (struct_size + flags), |
321 // equal to the size of MojoDuplicateBufferHandleOptions. | 326 // so that validator will only check the field that is set. |
322 options.struct_size = | 327 options.struct_size = 8; |
323 static_cast<uint32_t>(sizeof(MojoDuplicateBufferHandleOptions)); | |
324 options.flags = flags; | 328 options.flags = flags; |
325 MojoResult result = | 329 MojoResult result = |
326 MojoDuplicateBufferHandle(handle.value(), &options, &duped); | 330 MojoDuplicateBufferHandle(handle.value(), &options, &duped); |
327 if (result != MOJO_RESULT_OK) { | 331 if (result != MOJO_RESULT_OK) { |
328 dictionary.Set("result", result); | 332 dictionary.Set("result", result); |
329 return dictionary; | 333 return dictionary; |
330 } | 334 } |
331 | 335 |
332 dictionary.Set("result", result); | 336 dictionary.Set("result", result); |
333 dictionary.Set("handle", mojo::Handle(duped)); | 337 dictionary.Set("handle", mojo::Handle(duped)); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 | 468 |
465 data->SetObjectTemplate(&g_wrapper_info, templ); | 469 data->SetObjectTemplate(&g_wrapper_info, templ); |
466 } | 470 } |
467 | 471 |
468 return templ->NewInstance(); | 472 return templ->NewInstance(); |
469 } | 473 } |
470 | 474 |
471 } // namespace js | 475 } // namespace js |
472 } // namespace edk | 476 } // namespace edk |
473 } // namespace mojo | 477 } // namespace mojo |
OLD | NEW |