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/apps/js/mojo_module.h"
6
7#include "gin/arguments.h"
8#include "gin/converter.h"
9#include "gin/object_template_builder.h"
10#include "gin/per_isolate_data.h"
11#include "mojo/apps/js/js_app.h"
12#include "mojo/apps/js/mojo_module.h"
13#include "mojo/bindings/js/handle.h"
14#include "mojo/common/data_pipe_utils.h"
15
16namespace mojo {
17namespace apps {
18
19namespace {
20
21gin::WrapperInfo g_wrapper_info = {gin::kEmbedderNativeGin};
22
23}  // namespace
24
25const char Mojo::kModuleName[] = "mojo";
26
27v8::Local<v8::Value> Mojo::GetModule(JSApp* js_app, v8::Isolate* isolate) {
28  gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
29  v8::Local<v8::ObjectTemplate> templ =
30      data->GetObjectTemplate(&g_wrapper_info);
31
32  if (templ.IsEmpty()) {
33    templ = gin::ObjectTemplateBuilder(isolate)
34                .SetMethod("connectToService",
35                           base::Bind(&JSApp::ConnectToService,
36                                      base::Unretained(js_app)))
37                .SetMethod("quit",
38                           base::Bind(&JSApp::Quit, base::Unretained(js_app)))
39                .Build();
40    data->SetObjectTemplate(&g_wrapper_info, templ);
41  }
42
43  return templ->NewInstance();
44}
45
46}  // namespace apps
47}  // namespace mojo
48