Home | History | Annotate | Download | only in gin
      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 
     17 PerIsolateData::PerIsolateData(Isolate* isolate)
     18     : isolate_(isolate)  {
     19   isolate_->SetData(kEmbedderNativeGin, this);
     20 }
     21 
     22 PerIsolateData::~PerIsolateData() {
     23   isolate_->SetData(kEmbedderNativeGin, NULL);
     24 }
     25 
     26 PerIsolateData* PerIsolateData::From(Isolate* isolate) {
     27   return static_cast<PerIsolateData*>(isolate->GetData(kEmbedderNativeGin));
     28 }
     29 
     30 void PerIsolateData::SetObjectTemplate(WrapperInfo* info,
     31                                        Local<ObjectTemplate> templ) {
     32   object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
     33 }
     34 
     35 void PerIsolateData::SetFunctionTemplate(WrapperInfo* info,
     36                                          Local<FunctionTemplate> templ) {
     37   function_templates_[info] = Eternal<FunctionTemplate>(isolate_, templ);
     38 }
     39 
     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 
     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