1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/test/gc.h"
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/bind.h"
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/logging.h"
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/arguments.h"
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/converter.h"
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/function_template.h"
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/object_template_builder.h"
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/per_isolate_data.h"
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/public/wrapper_info.h"
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "gin/wrappable.h"
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace gin {
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace {
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochWrapperInfo g_wrapper_info = { kEmbedderNativeGin };
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst char GC::kModuleName[] = "gc";
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochv8::Local<v8::Value> GC::GetModule(v8::Isolate* isolate) {
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  PerIsolateData* data = PerIsolateData::From(isolate);
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  v8::Local<v8::ObjectTemplate> templ =
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      data->GetObjectTemplate(&g_wrapper_info);
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (templ.IsEmpty()) {
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    templ = ObjectTemplateBuilder(isolate)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        .SetMethod("collectGarbage",
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   base::Bind(&v8::Isolate::LowMemoryNotification,
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              base::Unretained(isolate)))
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        .Build();
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    data->SetObjectTemplate(&g_wrapper_info, templ);
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return templ->NewInstance();
39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace gin
42