| // Copyright 2014 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "services/js/system/support.h" | 
 |  | 
 | #include "base/bind.h" | 
 | #include "gin/arguments.h" | 
 | #include "gin/converter.h" | 
 | #include "gin/function_template.h" | 
 | #include "gin/object_template_builder.h" | 
 | #include "gin/per_isolate_data.h" | 
 | #include "gin/public/wrapper_info.h" | 
 | #include "gin/wrappable.h" | 
 | #include "mojo/public/cpp/system/core.h" | 
 | #include "services/js/system/handle.h" | 
 | #include "services/js/system/waiting_callback.h" | 
 |  | 
 | namespace mojo { | 
 | namespace js { | 
 |  | 
 | namespace { | 
 |  | 
 | WaitingCallback* AsyncWait(const gin::Arguments& args, | 
 |                            gin::Handle<HandleWrapper> handle, | 
 |                            MojoHandleSignals signals, | 
 |                            v8::Handle<v8::Function> callback) { | 
 |   return WaitingCallback::Create(args.isolate(), callback, handle, signals) | 
 |              .get(); | 
 | } | 
 |  | 
 | void CancelWait(WaitingCallback* waiting_callback) { | 
 |   waiting_callback->Cancel(); | 
 | } | 
 |  | 
 | gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin }; | 
 |  | 
 | }  // namespace | 
 |  | 
 | const char Support::kModuleName[] = "mojo/public/js/support"; | 
 |  | 
 | v8::Local<v8::Value> Support::GetModule(v8::Isolate* isolate) { | 
 |   gin::PerIsolateData* data = gin::PerIsolateData::From(isolate); | 
 |   v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate( | 
 |       &g_wrapper_info); | 
 |  | 
 |   if (templ.IsEmpty()) { | 
 |     templ = gin::ObjectTemplateBuilder(isolate) | 
 |                 .SetMethod("asyncWait", AsyncWait) | 
 |                 .SetMethod("cancelWait", CancelWait) | 
 |                 .Build(); | 
 |  | 
 |     data->SetObjectTemplate(&g_wrapper_info, templ); | 
 |   } | 
 |  | 
 |   return templ->NewInstance(); | 
 | } | 
 |  | 
 | }  // namespace js | 
 | }  // namespace mojo |