• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/per_isolate_data.h"
6 #include "gin/public/gin_embedders.h"
7 
8 using v8::Eternal;
9 using v8::Isolate;
10 using v8::Local;
11 using v8::Object;
12 using v8::FunctionTemplate;
13 using v8::ObjectTemplate;
14 
15 namespace gin {
16 
PerIsolateData(Isolate * isolate)17 PerIsolateData::PerIsolateData(Isolate* isolate)
18     : isolate_(isolate)  {
19   isolate_->SetData(kEmbedderNativeGin, this);
20 }
21 
~PerIsolateData()22 PerIsolateData::~PerIsolateData() {
23   isolate_->SetData(kEmbedderNativeGin, NULL);
24 }
25 
From(Isolate * isolate)26 PerIsolateData* PerIsolateData::From(Isolate* isolate) {
27   return static_cast<PerIsolateData*>(isolate->GetData(kEmbedderNativeGin));
28 }
29 
SetObjectTemplate(WrapperInfo * info,Local<ObjectTemplate> templ)30 void PerIsolateData::SetObjectTemplate(WrapperInfo* info,
31                                        Local<ObjectTemplate> templ) {
32   object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
33 }
34 
SetFunctionTemplate(WrapperInfo * info,Local<FunctionTemplate> templ)35 void PerIsolateData::SetFunctionTemplate(WrapperInfo* info,
36                                          Local<FunctionTemplate> templ) {
37   function_templates_[info] = Eternal<FunctionTemplate>(isolate_, templ);
38 }
39 
GetObjectTemplate(WrapperInfo * info)40 v8::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_);
46 }
47 
GetFunctionTemplate(WrapperInfo * info)48 v8::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 
56 }  // namespace gin
57