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 "gin/modules/console.h"
6
7#include <iostream>
8
9#include "base/strings/string_util.h"
10#include "gin/arguments.h"
11#include "gin/converter.h"
12#include "gin/object_template_builder.h"
13#include "gin/per_isolate_data.h"
14#include "gin/public/wrapper_info.h"
15
16using v8::ObjectTemplate;
17
18namespace gin {
19
20namespace {
21
22void Log(Arguments* args) {
23  std::vector<std::string> messages;
24  if (!args->GetRemaining(&messages)) {
25    args->ThrowError();
26    return;
27  }
28  std::cout << JoinString(messages, ' ') << std::endl;
29}
30
31WrapperInfo g_wrapper_info = { kEmbedderNativeGin };
32
33}  // namespace
34
35const char Console::kModuleName[] = "console";
36
37v8::Local<v8::Value> Console::GetModule(v8::Isolate* isolate) {
38  PerIsolateData* data = PerIsolateData::From(isolate);
39  v8::Local<ObjectTemplate> templ = data->GetObjectTemplate(&g_wrapper_info);
40  if (templ.IsEmpty()) {
41    templ = ObjectTemplateBuilder(isolate)
42        .SetMethod("log", Log)
43        .Build();
44    data->SetObjectTemplate(&g_wrapper_info, templ);
45  }
46  return templ->NewInstance();
47}
48
49}  // namespace gin
50