blob: 6c2397ba50b0a67ef1bb20a516c1fc1ab6b49f34 [file] [log] [blame]
[email protected]a22998a2013-11-10 05:00:501// 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/per_isolate_data.h"
[email protected]f04b0e92013-11-22 14:20:556#include "gin/public/gin_embedders.h"
[email protected]a22998a2013-11-10 05:00:507
8using v8::Eternal;
[email protected]a22998a2013-11-10 05:00:509using v8::Isolate;
10using v8::Local;
11using v8::Object;
[email protected]97f21ca2013-11-17 17:46:0712using v8::FunctionTemplate;
[email protected]a22998a2013-11-10 05:00:5013using v8::ObjectTemplate;
14
15namespace gin {
16
17PerIsolateData::PerIsolateData(Isolate* isolate)
18 : isolate_(isolate) {
[email protected]f04b0e92013-11-22 14:20:5519 isolate_->SetData(kEmbedderNativeGin, this);
[email protected]a22998a2013-11-10 05:00:5020}
21
22PerIsolateData::~PerIsolateData() {
[email protected]f04b0e92013-11-22 14:20:5523 isolate_->SetData(kEmbedderNativeGin, NULL);
[email protected]a22998a2013-11-10 05:00:5024}
25
26PerIsolateData* PerIsolateData::From(Isolate* isolate) {
[email protected]f04b0e92013-11-22 14:20:5527 return static_cast<PerIsolateData*>(isolate->GetData(kEmbedderNativeGin));
[email protected]a22998a2013-11-10 05:00:5028}
29
[email protected]e87f3122013-11-12 00:41:2730void PerIsolateData::SetObjectTemplate(WrapperInfo* info,
31 Local<ObjectTemplate> templ) {
32 object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
33}
34
[email protected]97f21ca2013-11-17 17:46:0735void PerIsolateData::SetFunctionTemplate(WrapperInfo* info,
36 Local<FunctionTemplate> templ) {
37 function_templates_[info] = Eternal<FunctionTemplate>(isolate_, templ);
38}
39
[email protected]e87f3122013-11-12 00:41:2740v8::Local<v8::ObjectTemplate> PerIsolateData::GetObjectTemplate(
41 WrapperInfo* info) {
42 ObjectTemplateMap::iterator it = object_templates_.find(info);
43 if (it == object_templates_.end())
44 return v8::Local<v8::ObjectTemplate>();
45 return it->second.Get(isolate_);
[email protected]a22998a2013-11-10 05:00:5046}
47
[email protected]97f21ca2013-11-17 17:46:0748v8::Local<v8::FunctionTemplate> PerIsolateData::GetFunctionTemplate(
49 WrapperInfo* info) {
50 FunctionTemplateMap::iterator it = function_templates_.find(info);
51 if (it == function_templates_.end())
52 return v8::Local<v8::FunctionTemplate>();
53 return it->second.Get(isolate_);
54}
55
[email protected]a22998a2013-11-10 05:00:5056} // namespace gin