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

Unified Diff: mojo/edk/js/core.cc

Issue 795593004: Update mojo sdk to rev cc531b32182099a5a034a99daff35ed5d38a61c8 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More workarounds for MSVC Created 6 years 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 | « mojo/edk/embedder/embedder_unittest.cc ('k') | mojo/edk/js/tests/sample_service_tests.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/js/core.cc
diff --git a/mojo/edk/js/core.cc b/mojo/edk/js/core.cc
index e70931da529751c84952025a7408765520a9f584..c06977d6bc68e03685401106b6da0246f0152c27 100644
--- a/mojo/edk/js/core.cc
+++ b/mojo/edk/js/core.cc
@@ -31,17 +31,63 @@ MojoResult CloseHandle(gin::Handle<HandleWrapper> handle) {
return MOJO_RESULT_OK;
}
-MojoResult WaitHandle(mojo::Handle handle,
- MojoHandleSignals signals,
- MojoDeadline deadline) {
- return MojoWait(handle.value(), signals, deadline);
+gin::Dictionary WaitHandle(const gin::Arguments& args,
+ mojo::Handle handle,
+ MojoHandleSignals signals,
+ MojoDeadline deadline) {
+ v8::Isolate* isolate = args.isolate();
+ gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(isolate);
+
+ MojoHandleSignalsState signals_state;
+ MojoResult result = mojo::Wait(handle, signals, deadline, &signals_state);
+ dictionary.Set("result", result);
+
+ mojo::WaitManyResult wmv(result, 0);
+ if (!wmv.AreSignalsStatesValid()) {
+ dictionary.Set("signalsState", v8::Null(isolate).As<v8::Value>());
+ } else {
+ gin::Dictionary signalsStateDict = gin::Dictionary::CreateEmpty(isolate);
+ signalsStateDict.Set("satisfiedSignals", signals_state.satisfied_signals);
+ signalsStateDict.Set("satisfiableSignals",
+ signals_state.satisfiable_signals);
+ dictionary.Set("signalsState", signalsStateDict);
+ }
+
+ return dictionary;
}
-MojoResult WaitMany(
- const std::vector<mojo::Handle>& handles,
- const std::vector<MojoHandleSignals>& signals,
- MojoDeadline deadline) {
- return mojo::WaitMany(handles, signals, deadline);
+gin::Dictionary WaitMany(const gin::Arguments& args,
+ const std::vector<mojo::Handle>& handles,
+ const std::vector<MojoHandleSignals>& signals,
+ MojoDeadline deadline) {
+ v8::Isolate* isolate = args.isolate();
+ gin::Dictionary dictionary = gin::Dictionary::CreateEmpty(isolate);
+
+ std::vector<MojoHandleSignalsState> signals_states(signals.size());
+ mojo::WaitManyResult wmv =
+ mojo::WaitMany(handles, signals, deadline, &signals_states);
+ dictionary.Set("result", wmv.result);
+ if (wmv.IsIndexValid()) {
+ dictionary.Set("index", wmv.index);
+ } else {
+ dictionary.Set("index", v8::Null(isolate).As<v8::Value>());
+ }
+ if (wmv.AreSignalsStatesValid()) {
+ std::vector<gin::Dictionary> vec;
+ for (size_t i = 0; i < handles.size(); ++i) {
+ gin::Dictionary signalsStateDict = gin::Dictionary::CreateEmpty(isolate);
+ signalsStateDict.Set("satisfiedSignals",
+ signals_states[i].satisfied_signals);
+ signalsStateDict.Set("satisfiableSignals",
+ signals_states[i].satisfiable_signals);
+ vec.push_back(signalsStateDict);
+ }
+ dictionary.Set("signalsState", vec);
+ } else {
+ dictionary.Set("signalsState", v8::Null(isolate).As<v8::Value>());
+ }
+
+ return dictionary;
}
gin::Dictionary CreateMessagePipe(const gin::Arguments& args) {
@@ -235,6 +281,13 @@ v8::Handle<v8::Value> DoDrainData(gin::Arguments* args,
return (new DrainData(args->isolate(), handle->release()))->GetPromise();
}
+bool IsHandle(gin::Arguments* args, v8::Handle<v8::Value> val) {
+ gin::Handle<mojo::js::HandleWrapper> ignore_handle;
+ return gin::Converter<gin::Handle<mojo::js::HandleWrapper>>::FromV8(
+ args->isolate(), val, &ignore_handle);
+}
+
+
gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin };
} // namespace
@@ -261,6 +314,7 @@ v8::Local<v8::Value> Core::GetModule(v8::Isolate* isolate) {
.SetMethod("writeData", WriteData)
.SetMethod("readData", ReadData)
.SetMethod("drainData", DoDrainData)
+ .SetMethod("isHandle", IsHandle)
.SetValue("RESULT_OK", MOJO_RESULT_OK)
.SetValue("RESULT_CANCELLED", MOJO_RESULT_CANCELLED)
« no previous file with comments | « mojo/edk/embedder/embedder_unittest.cc ('k') | mojo/edk/js/tests/sample_service_tests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698