11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/apps/js/mojo_module.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "gin/arguments.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "gin/converter.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "gin/object_template_builder.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "gin/per_isolate_data.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/apps/js/js_app.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/apps/js/mojo_module.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/bindings/js/handle.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/common/data_pipe_utils.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mojo {
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace apps {
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace {
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigin::WrapperInfo g_wrapper_info = {gin::kEmbedderNativeGin};
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char Mojo::kModuleName[] = "mojo";
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciv8::Local<v8::Value> Mojo::GetModule(JSApp* js_app, v8::Isolate* isolate) {
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  v8::Local<v8::ObjectTemplate> templ =
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data->GetObjectTemplate(&g_wrapper_info);
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (templ.IsEmpty()) {
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    templ = gin::ObjectTemplateBuilder(isolate)
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                .SetMethod("connectToService",
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           base::Bind(&JSApp::ConnectToService,
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      base::Unretained(js_app)))
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                .SetMethod("quit",
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           base::Bind(&JSApp::Quit, base::Unretained(js_app)))
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                .Build();
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    data->SetObjectTemplate(&g_wrapper_info, templ);
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return templ->NewInstance();
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace apps
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace mojo
48