1// Copyright 2013 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/bindings/gl/module.h"
6
7#include "base/logging.h"
8#include "gin/arguments.h"
9#include "gin/object_template_builder.h"
10#include "gin/per_isolate_data.h"
11#include "gin/wrappable.h"
12#include "mojo/apps/js/bindings/gl/context.h"
13#include "mojo/bindings/js/handle.h"
14
15namespace mojo {
16namespace js {
17namespace gl {
18
19const char* kModuleName = "mojo/apps/js/bindings/gl";
20
21namespace {
22
23gin::WrapperInfo kWrapperInfo = { gin::kEmbedderNativeGin };
24
25gin::Handle<Context> CreateContext(
26    const gin::Arguments& args,
27    mojo::Handle handle,
28    v8::Handle<v8::Function> context_lost_callback) {
29  return Context::Create(args.isolate(), handle, context_lost_callback);
30}
31
32}  // namespace
33
34v8::Local<v8::Value> GetModule(v8::Isolate* isolate) {
35  gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
36  v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate(&kWrapperInfo);
37
38  if (templ.IsEmpty()) {
39    templ = gin::ObjectTemplateBuilder(isolate)
40        .SetMethod("Context", CreateContext)
41        .Build();
42    data->SetObjectTemplate(&kWrapperInfo, templ);
43  }
44
45  return templ->NewInstance();
46}
47
48}  // namespace gl
49}  // namespace js
50}  // namespace mojo
51