| 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
|
|
|