Index: mojo/bindings/js/waiting_callback.h |
diff --git a/mojo/bindings/js/waiting_callback.h b/mojo/bindings/js/waiting_callback.h |
index 973a500cdf0919731c60f03738b086ba7ca7473a..cdb62d53df8a31556997c8d4a6ceb78455d0f45b 100644 |
--- a/mojo/bindings/js/waiting_callback.h |
+++ b/mojo/bindings/js/waiting_callback.h |
@@ -8,13 +8,15 @@ |
#include "gin/handle.h" |
#include "gin/runner.h" |
#include "gin/wrappable.h" |
+#include "mojo/bindings/js/handle.h" |
#include "mojo/public/c/environment/async_waiter.h" |
#include "mojo/public/cpp/system/core.h" |
namespace mojo { |
namespace js { |
-class WaitingCallback : public gin::Wrappable<WaitingCallback> { |
+class WaitingCallback : public gin::Wrappable<WaitingCallback>, |
+ public gin::HandleWrapper::CloseObserver { |
public: |
static gin::WrapperInfo kWrapperInfo; |
@@ -22,7 +24,7 @@ class WaitingCallback : public gin::Wrappable<WaitingCallback> { |
static gin::Handle<WaitingCallback> Create( |
v8::Isolate* isolate, |
v8::Handle<v8::Function> callback, |
- mojo::Handle handle, |
+ gin::Handle<gin::HandleWrapper> handle_wrapper, |
MojoHandleSignals signals); |
// Cancels the callback. Does nothing if a callback is not pending. This is |
@@ -31,7 +33,9 @@ class WaitingCallback : public gin::Wrappable<WaitingCallback> { |
void Cancel(); |
private: |
- WaitingCallback(v8::Isolate* isolate, v8::Handle<v8::Function> callback); |
+ WaitingCallback(v8::Isolate* isolate, |
+ v8::Handle<v8::Function> callback, |
+ gin::Handle<gin::HandleWrapper> handle_wrapper); |
virtual ~WaitingCallback(); |
// Callback from MojoAsyncWaiter. |closure| is the WaitingCallback. |
@@ -40,9 +44,15 @@ class WaitingCallback : public gin::Wrappable<WaitingCallback> { |
// Invoked from CallOnHandleReady() (CallOnHandleReady() must be static). |
void OnHandleReady(MojoResult result); |
+ // Invoked by the HandleWrapper if the handle is closed while this wait is |
+ // still in progress. |
+ virtual void OnHandleClosed() OVERRIDE; |
+ |
base::WeakPtr<gin::Runner> runner_; |
MojoAsyncWaitID wait_id_; |
+ gin::HandleWrapper* handle_wrapper_; |
+ |
DISALLOW_COPY_AND_ASSIGN(WaitingCallback); |
}; |