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

Unified Diff: mojo/bindings/js/waiting_callback.cc

Issue 276093002: Two fixes for mojo JS bindings (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: alias Created 6 years, 7 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 | « mojo/bindings/js/waiting_callback.h ('k') | mojo/common/message_pump_mojo.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/bindings/js/waiting_callback.cc
diff --git a/mojo/bindings/js/waiting_callback.cc b/mojo/bindings/js/waiting_callback.cc
index 21f52c40f19ed1382a5a15e722ff82f7ccd64310..ace0a7621070536ba9c4c5f9eab2392e94e11697 100644
--- a/mojo/bindings/js/waiting_callback.cc
+++ b/mojo/bindings/js/waiting_callback.cc
@@ -5,6 +5,7 @@
#include "mojo/bindings/js/waiting_callback.h"
#include "gin/per_context_data.h"
+#include "mojo/public/cpp/environment/default_async_waiter.h"
namespace mojo {
namespace js {
@@ -19,6 +20,34 @@ v8::Handle<v8::String> GetHiddenPropertyName(v8::Isolate* isolate) {
gin::WrapperInfo WaitingCallback::kWrapperInfo = { gin::kEmbedderNativeGin };
+// static
+gin::Handle<WaitingCallback> WaitingCallback::Create(
+ v8::Isolate* isolate,
+ v8::Handle<v8::Function> callback,
+ mojo::Handle handle,
+ MojoWaitFlags flags) {
+ gin::Handle<WaitingCallback> waiting_callback =
+ gin::CreateHandle(isolate, new WaitingCallback(isolate, callback));
+ MojoAsyncWaiter* waiter = GetDefaultAsyncWaiter();
+ waiting_callback->wait_id_ = waiter->AsyncWait(
+ waiter,
+ handle.value(),
+ flags,
+ MOJO_DEADLINE_INDEFINITE,
+ &WaitingCallback::CallOnHandleReady,
+ waiting_callback.get());
+ return waiting_callback;
+}
+
+void WaitingCallback::Cancel() {
+ if (!wait_id_)
+ return;
+
+ MojoAsyncWaiter* waiter = GetDefaultAsyncWaiter();
+ waiter->CancelWait(waiter, wait_id_);
+ wait_id_ = 0;
+}
+
WaitingCallback::WaitingCallback(v8::Isolate* isolate,
v8::Handle<v8::Function> callback)
: wait_id_() {
@@ -28,12 +57,7 @@ WaitingCallback::WaitingCallback(v8::Isolate* isolate,
}
WaitingCallback::~WaitingCallback() {
- DCHECK(!wait_id_) << "Waiting callback was destroyed before being cancelled.";
-}
-
-gin::Handle<WaitingCallback> WaitingCallback::Create(
- v8::Isolate* isolate, v8::Handle<v8::Function> callback) {
- return gin::CreateHandle(isolate, new WaitingCallback(isolate, callback));
+ Cancel();
}
// static
« no previous file with comments | « mojo/bindings/js/waiting_callback.h ('k') | mojo/common/message_pump_mojo.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698