Chromium Code Reviews| Index: mojo/bindings/js/handle.cc |
| diff --git a/mojo/bindings/js/handle.cc b/mojo/bindings/js/handle.cc |
| index e1d0fb04b60c063466536c04f48502c7b1423179..5273adc9e0ff7ac13b1652777f6c036a5a34b54d 100644 |
| --- a/mojo/bindings/js/handle.cc |
| +++ b/mojo/bindings/js/handle.cc |
| @@ -4,6 +4,8 @@ |
| #include "mojo/bindings/js/handle.h" |
| +#include "base/logging.h" |
| + |
| namespace gin { |
| gin::WrapperInfo HandleWrapper::kWrapperInfo = { gin::kEmbedderNativeGin }; |
| @@ -13,6 +15,30 @@ HandleWrapper::HandleWrapper(MojoHandle handle) |
| } |
| HandleWrapper::~HandleWrapper() { |
| + NotifyCloseObservers(); |
| +} |
| + |
| +void HandleWrapper::Close() { |
| + NotifyCloseObservers(); |
| + handle_.reset(); |
| +} |
| + |
| +void HandleWrapper::AddCloseObserver(CloseObserver* observer) { |
| + bool inserted = observers_.insert(observer).second; |
| + DCHECK(inserted); |
| +} |
| + |
| +void HandleWrapper::RemoveCloseObserver(CloseObserver* observer) { |
| + size_t removed = observers_.erase(observer); |
| + DCHECK_EQ(removed, 1u); |
| +} |
| + |
| +void HandleWrapper::NotifyCloseObservers() { |
| + for (std::set<CloseObserver*>::iterator it = observers_.begin(); |
| + it != observers_.end();) { |
| + (*it++)->OnHandleClosed(); |
|
abarth-chromium
2014/09/03 05:21:55
What if observers_ is modified during this iterati
Sam McNally
2014/09/03 05:37:27
Done.
|
| + } |
| + observers_.clear(); |
| } |
| v8::Handle<v8::Value> Converter<mojo::Handle>::ToV8(v8::Isolate* isolate, |