Home | History | Annotate | Download | only in js
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "mojo/bindings/js/handle.h"
      6 
      7 #include "mojo/bindings/js/handle_close_observer.h"
      8 
      9 namespace gin {
     10 
     11 gin::WrapperInfo HandleWrapper::kWrapperInfo = { gin::kEmbedderNativeGin };
     12 
     13 HandleWrapper::HandleWrapper(MojoHandle handle)
     14     : handle_(mojo::Handle(handle)) {
     15 }
     16 
     17 HandleWrapper::~HandleWrapper() {
     18   NotifyCloseObservers();
     19 }
     20 
     21 void HandleWrapper::Close() {
     22   NotifyCloseObservers();
     23   handle_.reset();
     24 }
     25 
     26 void HandleWrapper::AddCloseObserver(HandleCloseObserver* observer) {
     27   close_observers_.AddObserver(observer);
     28 }
     29 
     30 void HandleWrapper::RemoveCloseObserver(HandleCloseObserver* observer) {
     31   close_observers_.RemoveObserver(observer);
     32 }
     33 
     34 void HandleWrapper::NotifyCloseObservers() {
     35   if (!handle_.is_valid())
     36     return;
     37 
     38   FOR_EACH_OBSERVER(HandleCloseObserver, close_observers_, OnWillCloseHandle());
     39 }
     40 
     41 v8::Handle<v8::Value> Converter<mojo::Handle>::ToV8(v8::Isolate* isolate,
     42                                                     const mojo::Handle& val) {
     43   if (!val.is_valid())
     44     return v8::Null(isolate);
     45   return HandleWrapper::Create(isolate, val.value()).ToV8();
     46 }
     47 
     48 bool Converter<mojo::Handle>::FromV8(v8::Isolate* isolate,
     49                                      v8::Handle<v8::Value> val,
     50                                      mojo::Handle* out) {
     51   if (val->IsNull()) {
     52     *out = mojo::Handle();
     53     return true;
     54   }
     55 
     56   gin::Handle<HandleWrapper> handle;
     57   if (!Converter<gin::Handle<HandleWrapper> >::FromV8(isolate, val, &handle))
     58     return false;
     59 
     60   *out = handle->get();
     61   return true;
     62 }
     63 
     64 }  // namespace gin
     65