blob: dd4ce9daab94f29b1aadacb5c697c06007d7bd55 [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
ulan3cbdcd02015-07-20 11:32:585#include "gin/per_isolate_data.h"
6
dchenge48600452015-12-28 02:24:507#include <utility>
8
[email protected]5c969b82014-03-12 04:59:059#include "base/logging.h"
skyostila3899862015-06-12 18:21:5810#include "base/single_thread_task_runner.h"
gab54909b722016-05-11 18:34:1111#include "base/threading/thread_task_runner_handle.h"
[email protected]f04b0e92013-11-22 14:20:5512#include "gin/public/gin_embedders.h"
[email protected]a22998a2013-11-10 05:00:5013
[email protected]73dcce92014-02-20 08:24:0414using v8::ArrayBuffer;
[email protected]a22998a2013-11-10 05:00:5015using v8::Eternal;
[email protected]a22998a2013-11-10 05:00:5016using v8::Isolate;
17using v8::Local;
18using v8::Object;
[email protected]97f21ca2013-11-17 17:46:0719using v8::FunctionTemplate;
[email protected]a22998a2013-11-10 05:00:5020using v8::ObjectTemplate;
21
22namespace gin {
23
altimin124814c2017-01-03 14:06:5424PerIsolateData::PerIsolateData(
25 Isolate* isolate,
26 ArrayBuffer::Allocator* allocator,
27 IsolateHolder::AccessMode access_mode,
28 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
[email protected]b64e5212014-04-04 21:09:1629 : isolate_(isolate),
30 allocator_(allocator),
jochen76acff102016-11-08 08:20:3731 access_mode_(access_mode),
altimin124814c2017-01-03 14:06:5432 task_runner_(task_runner) {
[email protected]f04b0e92013-11-22 14:20:5533 isolate_->SetData(kEmbedderNativeGin, this);
[email protected]a22998a2013-11-10 05:00:5034}
35
36PerIsolateData::~PerIsolateData() {
[email protected]f04b0e92013-11-22 14:20:5537 isolate_->SetData(kEmbedderNativeGin, NULL);
[email protected]a22998a2013-11-10 05:00:5038}
39
40PerIsolateData* PerIsolateData::From(Isolate* isolate) {
[email protected]f04b0e92013-11-22 14:20:5541 return static_cast<PerIsolateData*>(isolate->GetData(kEmbedderNativeGin));
[email protected]a22998a2013-11-10 05:00:5042}
43
[email protected]e87f3122013-11-12 00:41:2744void PerIsolateData::SetObjectTemplate(WrapperInfo* info,
45 Local<ObjectTemplate> templ) {
46 object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
47}
48
[email protected]97f21ca2013-11-17 17:46:0749void PerIsolateData::SetFunctionTemplate(WrapperInfo* info,
50 Local<FunctionTemplate> templ) {
51 function_templates_[info] = Eternal<FunctionTemplate>(isolate_, templ);
52}
53
[email protected]e87f3122013-11-12 00:41:2754v8::Local<v8::ObjectTemplate> PerIsolateData::GetObjectTemplate(
55 WrapperInfo* info) {
56 ObjectTemplateMap::iterator it = object_templates_.find(info);
57 if (it == object_templates_.end())
58 return v8::Local<v8::ObjectTemplate>();
59 return it->second.Get(isolate_);
[email protected]a22998a2013-11-10 05:00:5060}
61
[email protected]97f21ca2013-11-17 17:46:0762v8::Local<v8::FunctionTemplate> PerIsolateData::GetFunctionTemplate(
63 WrapperInfo* info) {
64 FunctionTemplateMap::iterator it = function_templates_.find(info);
65 if (it == function_templates_.end())
66 return v8::Local<v8::FunctionTemplate>();
67 return it->second.Get(isolate_);
68}
69
[email protected]5c969b82014-03-12 04:59:0570void PerIsolateData::SetIndexedPropertyInterceptor(
71 WrappableBase* base,
72 IndexedPropertyInterceptor* interceptor) {
73 indexed_interceptors_[base] = interceptor;
74}
75
76void PerIsolateData::SetNamedPropertyInterceptor(
77 WrappableBase* base,
78 NamedPropertyInterceptor* interceptor) {
79 named_interceptors_[base] = interceptor;
80}
81
82void PerIsolateData::ClearIndexedPropertyInterceptor(
83 WrappableBase* base,
84 IndexedPropertyInterceptor* interceptor) {
85 IndexedPropertyInterceptorMap::iterator it = indexed_interceptors_.find(base);
86 if (it != indexed_interceptors_.end())
87 indexed_interceptors_.erase(it);
88 else
89 NOTREACHED();
90}
91
92void PerIsolateData::ClearNamedPropertyInterceptor(
93 WrappableBase* base,
94 NamedPropertyInterceptor* interceptor) {
95 NamedPropertyInterceptorMap::iterator it = named_interceptors_.find(base);
96 if (it != named_interceptors_.end())
97 named_interceptors_.erase(it);
98 else
99 NOTREACHED();
100}
101
102IndexedPropertyInterceptor* PerIsolateData::GetIndexedPropertyInterceptor(
103 WrappableBase* base) {
104 IndexedPropertyInterceptorMap::iterator it = indexed_interceptors_.find(base);
105 if (it != indexed_interceptors_.end())
106 return it->second;
107 else
108 return NULL;
109}
110
111NamedPropertyInterceptor* PerIsolateData::GetNamedPropertyInterceptor(
112 WrappableBase* base) {
113 NamedPropertyInterceptorMap::iterator it = named_interceptors_.find(base);
114 if (it != named_interceptors_.end())
115 return it->second;
116 else
117 return NULL;
118}
119
ulan3cbdcd02015-07-20 11:32:58120void PerIsolateData::EnableIdleTasks(
mostynbc862da82016-04-03 15:54:33121 std::unique_ptr<V8IdleTaskRunner> idle_task_runner) {
dchenge48600452015-12-28 02:24:50122 idle_task_runner_ = std::move(idle_task_runner);
ulan3cbdcd02015-07-20 11:32:58123}
124
[email protected]a22998a2013-11-10 05:00:50125} // namespace gin