Index: mojo/bindings/js/handle.cc |
diff --git a/mojo/bindings/js/handle.cc b/mojo/bindings/js/handle.cc |
index e1d0fb04b60c063466536c04f48502c7b1423179..a25a911c573c35ecbb9545ac01bd632579d20dc4 100644 |
--- a/mojo/bindings/js/handle.cc |
+++ b/mojo/bindings/js/handle.cc |
@@ -4,6 +4,8 @@ |
#include "mojo/bindings/js/handle.h" |
+#include "mojo/bindings/js/handle_close_observer.h" |
+ |
namespace gin { |
gin::WrapperInfo HandleWrapper::kWrapperInfo = { gin::kEmbedderNativeGin }; |
@@ -13,6 +15,27 @@ HandleWrapper::HandleWrapper(MojoHandle handle) |
} |
HandleWrapper::~HandleWrapper() { |
+ NotifyCloseObservers(); |
+} |
+ |
+void HandleWrapper::Close() { |
+ NotifyCloseObservers(); |
+ handle_.reset(); |
+} |
+ |
+void HandleWrapper::AddCloseObserver(HandleCloseObserver* observer) { |
+ close_observers_.AddObserver(observer); |
+} |
+ |
+void HandleWrapper::RemoveCloseObserver(HandleCloseObserver* observer) { |
+ close_observers_.RemoveObserver(observer); |
+} |
+ |
+void HandleWrapper::NotifyCloseObservers() { |
+ if (!handle_.is_valid()) |
+ return; |
+ |
+ FOR_EACH_OBSERVER(HandleCloseObserver, close_observers_, OnWillCloseHandle()); |
} |
v8::Handle<v8::Value> Converter<mojo::Handle>::ToV8(v8::Isolate* isolate, |