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

Side by Side Diff: mojo/edk/js/core.cc

Issue 2744943002: Mojo: Move waiting APIs to public library (Closed)
Patch Set: . Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « mojo/edk/embedder/entrypoints.cc ('k') | mojo/edk/js/tests/js_to_cpp_tests.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "gin/arguments.h" 12 #include "gin/arguments.h"
13 #include "gin/array_buffer.h" 13 #include "gin/array_buffer.h"
14 #include "gin/converter.h" 14 #include "gin/converter.h"
15 #include "gin/dictionary.h" 15 #include "gin/dictionary.h"
16 #include "gin/function_template.h" 16 #include "gin/function_template.h"
17 #include "gin/handle.h" 17 #include "gin/handle.h"
18 #include "gin/object_template_builder.h" 18 #include "gin/object_template_builder.h"
19 #include "gin/per_isolate_data.h" 19 #include "gin/per_isolate_data.h"
20 #include "gin/public/wrapper_info.h" 20 #include "gin/public/wrapper_info.h"
21 #include "gin/wrappable.h" 21 #include "gin/wrappable.h"
22 #include "mojo/edk/js/drain_data.h" 22 #include "mojo/edk/js/drain_data.h"
23 #include "mojo/edk/js/handle.h" 23 #include "mojo/edk/js/handle.h"
24 #include "mojo/public/cpp/system/wait.h"
24 25
25 namespace mojo { 26 namespace mojo {
26 namespace edk { 27 namespace edk {
27 namespace js { 28 namespace js {
28 29
29 namespace { 30 namespace {
30 31
31 MojoResult CloseHandle(gin::Handle<HandleWrapper> handle) { 32 MojoResult CloseHandle(gin::Handle<HandleWrapper> handle) {
32 if (!handle->get().is_valid()) 33 if (!handle->get().is_valid())
33 return MOJO_RESULT_INVALID_ARGUMENT; 34 return MOJO_RESULT_INVALID_ARGUMENT;
(...skipping 10 matching lines...) Expand all
44 HandleSignalsState state = handle.QuerySignalsState(); 45 HandleSignalsState state = handle.QuerySignalsState();
45 dictionary.Set("result", MOJO_RESULT_OK); 46 dictionary.Set("result", MOJO_RESULT_OK);
46 dictionary.Set("satisfiedSignals", state.satisfied_signals); 47 dictionary.Set("satisfiedSignals", state.satisfied_signals);
47 dictionary.Set("satisfiableSignals", state.satisfiable_signals); 48 dictionary.Set("satisfiableSignals", state.satisfiable_signals);
48 } 49 }
49 return dictionary; 50 return dictionary;
50 } 51 }
51 52
52 gin::Dictionary WaitHandle(const gin::Arguments& args, 53 gin::Dictionary WaitHandle(const gin::Arguments& args,
53 mojo::Handle handle, 54 mojo::Handle handle,
54 MojoHandleSignals signals, 55 MojoHandleSignals signals) {
55 MojoDeadline deadline) {
56 v8::Isolate* isolate = args.isolate(); 56 v8::Isolate* isolate = args.isolate();
57 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(isolate); 57 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(isolate);
58 58
59 MojoHandleSignalsState signals_state; 59 MojoHandleSignalsState signals_state;
60 MojoResult result = mojo::Wait(handle, signals, deadline, &signals_state); 60 MojoResult result = Wait(handle, signals, &signals_state);
61 dictionary.Set("result", result); 61 dictionary.Set("result", result);
62 62
63 mojo::WaitManyResult wmv(result, 0); 63 if (result != MOJO_RESULT_OK && result != MOJO_RESULT_FAILED_PRECONDITION) {
64 if (!wmv.AreSignalsStatesValid()) {
65 dictionary.Set("signalsState", v8::Null(isolate).As<v8::Value>()); 64 dictionary.Set("signalsState", v8::Null(isolate).As<v8::Value>());
66 } else { 65 } else {
67 gin::Dictionary signalsStateDict = gin::Dictionary::CreateEmpty(isolate); 66 gin::Dictionary signalsStateDict = gin::Dictionary::CreateEmpty(isolate);
68 signalsStateDict.Set("satisfiedSignals", signals_state.satisfied_signals); 67 signalsStateDict.Set("satisfiedSignals", signals_state.satisfied_signals);
69 signalsStateDict.Set("satisfiableSignals", 68 signalsStateDict.Set("satisfiableSignals",
70 signals_state.satisfiable_signals); 69 signals_state.satisfiable_signals);
71 dictionary.Set("signalsState", signalsStateDict); 70 dictionary.Set("signalsState", signalsStateDict);
72 } 71 }
73 72
74 return dictionary; 73 return dictionary;
75 } 74 }
76 75
77 gin::Dictionary WaitMany(const gin::Arguments& args,
78 const std::vector<mojo::Handle>& handles,
79 const std::vector<MojoHandleSignals>& signals,
80 MojoDeadline deadline) {
81 v8::Isolate* isolate = args.isolate();
82 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(isolate);
83
84 std::vector<MojoHandleSignalsState> signals_states(signals.size());
85 mojo::WaitManyResult wmv =
86 mojo::WaitMany(handles, signals, deadline, &signals_states);
87 dictionary.Set("result", wmv.result);
88 if (wmv.IsIndexValid()) {
89 dictionary.Set("index", wmv.index);
90 } else {
91 dictionary.Set("index", v8::Null(isolate).As<v8::Value>());
92 }
93 if (wmv.AreSignalsStatesValid()) {
94 std::vector<gin::Dictionary> vec;
95 for (size_t i = 0; i < handles.size(); ++i) {
96 gin::Dictionary signalsStateDict = gin::Dictionary::CreateEmpty(isolate);
97 signalsStateDict.Set("satisfiedSignals",
98 signals_states[i].satisfied_signals);
99 signalsStateDict.Set("satisfiableSignals",
100 signals_states[i].satisfiable_signals);
101 vec.push_back(signalsStateDict);
102 }
103 dictionary.Set("signalsState", vec);
104 } else {
105 dictionary.Set("signalsState", v8::Null(isolate).As<v8::Value>());
106 }
107
108 return dictionary;
109 }
110
111 gin::Dictionary CreateMessagePipe(const gin::Arguments& args) { 76 gin::Dictionary CreateMessagePipe(const gin::Arguments& args) {
112 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate()); 77 gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(args.isolate());
113 dictionary.Set("result", MOJO_RESULT_INVALID_ARGUMENT); 78 dictionary.Set("result", MOJO_RESULT_INVALID_ARGUMENT);
114 79
115 MojoHandle handle0 = MOJO_HANDLE_INVALID; 80 MojoHandle handle0 = MOJO_HANDLE_INVALID;
116 MojoHandle handle1 = MOJO_HANDLE_INVALID; 81 MojoHandle handle1 = MOJO_HANDLE_INVALID;
117 MojoResult result = MOJO_RESULT_OK; 82 MojoResult result = MOJO_RESULT_OK;
118 83
119 v8::Handle<v8::Value> options_value = args.PeekNext(); 84 v8::Handle<v8::Value> options_value = args.PeekNext();
120 if (options_value.IsEmpty() || options_value->IsNull() || 85 if (options_value.IsEmpty() || options_value->IsNull() ||
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 &g_wrapper_info); 362 &g_wrapper_info);
398 363
399 if (templ.IsEmpty()) { 364 if (templ.IsEmpty()) {
400 templ = 365 templ =
401 gin::ObjectTemplateBuilder(isolate) 366 gin::ObjectTemplateBuilder(isolate)
402 // TODO(mpcomplete): Should these just be methods on the JS Handle 367 // TODO(mpcomplete): Should these just be methods on the JS Handle
403 // object? 368 // object?
404 .SetMethod("close", CloseHandle) 369 .SetMethod("close", CloseHandle)
405 .SetMethod("queryHandleSignalsState", QueryHandleSignalsState) 370 .SetMethod("queryHandleSignalsState", QueryHandleSignalsState)
406 .SetMethod("wait", WaitHandle) 371 .SetMethod("wait", WaitHandle)
407 .SetMethod("waitMany", WaitMany)
408 .SetMethod("createMessagePipe", CreateMessagePipe) 372 .SetMethod("createMessagePipe", CreateMessagePipe)
409 .SetMethod("writeMessage", WriteMessage) 373 .SetMethod("writeMessage", WriteMessage)
410 .SetMethod("readMessage", ReadMessage) 374 .SetMethod("readMessage", ReadMessage)
411 .SetMethod("createDataPipe", CreateDataPipe) 375 .SetMethod("createDataPipe", CreateDataPipe)
412 .SetMethod("writeData", WriteData) 376 .SetMethod("writeData", WriteData)
413 .SetMethod("readData", ReadData) 377 .SetMethod("readData", ReadData)
414 .SetMethod("drainData", DoDrainData) 378 .SetMethod("drainData", DoDrainData)
415 .SetMethod("isHandle", IsHandle) 379 .SetMethod("isHandle", IsHandle)
416 .SetMethod("createSharedBuffer", CreateSharedBuffer) 380 .SetMethod("createSharedBuffer", CreateSharedBuffer)
417 .SetMethod("duplicateBufferHandle", DuplicateBufferHandle) 381 .SetMethod("duplicateBufferHandle", DuplicateBufferHandle)
(...skipping 14 matching lines...) Expand all
432 MOJO_RESULT_FAILED_PRECONDITION) 396 MOJO_RESULT_FAILED_PRECONDITION)
433 .SetValue("RESULT_ABORTED", MOJO_RESULT_ABORTED) 397 .SetValue("RESULT_ABORTED", MOJO_RESULT_ABORTED)
434 .SetValue("RESULT_OUT_OF_RANGE", MOJO_RESULT_OUT_OF_RANGE) 398 .SetValue("RESULT_OUT_OF_RANGE", MOJO_RESULT_OUT_OF_RANGE)
435 .SetValue("RESULT_UNIMPLEMENTED", MOJO_RESULT_UNIMPLEMENTED) 399 .SetValue("RESULT_UNIMPLEMENTED", MOJO_RESULT_UNIMPLEMENTED)
436 .SetValue("RESULT_INTERNAL", MOJO_RESULT_INTERNAL) 400 .SetValue("RESULT_INTERNAL", MOJO_RESULT_INTERNAL)
437 .SetValue("RESULT_UNAVAILABLE", MOJO_RESULT_UNAVAILABLE) 401 .SetValue("RESULT_UNAVAILABLE", MOJO_RESULT_UNAVAILABLE)
438 .SetValue("RESULT_DATA_LOSS", MOJO_RESULT_DATA_LOSS) 402 .SetValue("RESULT_DATA_LOSS", MOJO_RESULT_DATA_LOSS)
439 .SetValue("RESULT_BUSY", MOJO_RESULT_BUSY) 403 .SetValue("RESULT_BUSY", MOJO_RESULT_BUSY)
440 .SetValue("RESULT_SHOULD_WAIT", MOJO_RESULT_SHOULD_WAIT) 404 .SetValue("RESULT_SHOULD_WAIT", MOJO_RESULT_SHOULD_WAIT)
441 405
442 .SetValue("DEADLINE_INDEFINITE", MOJO_DEADLINE_INDEFINITE)
443
444 .SetValue("HANDLE_SIGNAL_NONE", MOJO_HANDLE_SIGNAL_NONE) 406 .SetValue("HANDLE_SIGNAL_NONE", MOJO_HANDLE_SIGNAL_NONE)
445 .SetValue("HANDLE_SIGNAL_READABLE", MOJO_HANDLE_SIGNAL_READABLE) 407 .SetValue("HANDLE_SIGNAL_READABLE", MOJO_HANDLE_SIGNAL_READABLE)
446 .SetValue("HANDLE_SIGNAL_WRITABLE", MOJO_HANDLE_SIGNAL_WRITABLE) 408 .SetValue("HANDLE_SIGNAL_WRITABLE", MOJO_HANDLE_SIGNAL_WRITABLE)
447 .SetValue("HANDLE_SIGNAL_PEER_CLOSED", 409 .SetValue("HANDLE_SIGNAL_PEER_CLOSED",
448 MOJO_HANDLE_SIGNAL_PEER_CLOSED) 410 MOJO_HANDLE_SIGNAL_PEER_CLOSED)
449 411
450 .SetValue("CREATE_MESSAGE_PIPE_OPTIONS_FLAG_NONE", 412 .SetValue("CREATE_MESSAGE_PIPE_OPTIONS_FLAG_NONE",
451 MOJO_CREATE_MESSAGE_PIPE_OPTIONS_FLAG_NONE) 413 MOJO_CREATE_MESSAGE_PIPE_OPTIONS_FLAG_NONE)
452 414
453 .SetValue("WRITE_MESSAGE_FLAG_NONE", MOJO_WRITE_MESSAGE_FLAG_NONE) 415 .SetValue("WRITE_MESSAGE_FLAG_NONE", MOJO_WRITE_MESSAGE_FLAG_NONE)
(...skipping 29 matching lines...) Expand all
483 445
484 data->SetObjectTemplate(&g_wrapper_info, templ); 446 data->SetObjectTemplate(&g_wrapper_info, templ);
485 } 447 }
486 448
487 return templ->NewInstance(); 449 return templ->NewInstance();
488 } 450 }
489 451
490 } // namespace js 452 } // namespace js
491 } // namespace edk 453 } // namespace edk
492 } // namespace mojo 454 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/embedder/entrypoints.cc ('k') | mojo/edk/js/tests/js_to_cpp_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698