blob: 029b93d5f7a1724ab36fb66c8db5b782d794942c [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),
rockot7b9e6bc2017-01-11 14:47:4632 task_runner_(
33 task_runner ? task_runner : base::ThreadTaskRunnerHandle::Get()) {
[email protected]f04b0e92013-11-22 14:20:5534 isolate_->SetData(kEmbedderNativeGin, this);
[email protected]a22998a2013-11-10 05:00:5035}
36
37PerIsolateData::~PerIsolateData() {
[email protected]f04b0e92013-11-22 14:20:5538 isolate_->SetData(kEmbedderNativeGin, NULL);
[email protected]a22998a2013-11-10 05:00:5039}
40
41PerIsolateData* PerIsolateData::From(Isolate* isolate) {
[email protected]f04b0e92013-11-22 14:20:5542 return static_cast<PerIsolateData*>(isolate->GetData(kEmbedderNativeGin));
[email protected]a22998a2013-11-10 05:00:5043}
44
[email protected]e87f3122013-11-12 00:41:2745void PerIsolateData::SetObjectTemplate(WrapperInfo* info,
46 Local<ObjectTemplate> templ) {
47 object_templates_[info] = Eternal<ObjectTemplate>(isolate_, templ);
48}
49
[email protected]97f21ca2013-11-17 17:46:0750void PerIsolateData::SetFunctionTemplate(WrapperInfo* info,
51 Local<FunctionTemplate> templ) {
52 function_templates_[info] = Eternal<FunctionTemplate>(isolate_, templ);
53}
54
[email protected]e87f3122013-11-12 00:41:2755v8::Local<v8::ObjectTemplate> PerIsolateData::GetObjectTemplate(
56 WrapperInfo* info) {
57 ObjectTemplateMap::iterator it = object_templates_.find(info);
58 if (it == object_templates_.end())
59 return v8::Local<v8::ObjectTemplate>();
60 return it->second.Get(isolate_);
[email protected]a22998a2013-11-10 05:00:5061}
62
[email protected]97f21ca2013-11-17 17:46:0763v8::Local<v8::FunctionTemplate> PerIsolateData::GetFunctionTemplate(
64 WrapperInfo* info) {
65 FunctionTemplateMap::iterator it = function_templates_.find(info);
66 if (it == function_templates_.end())
67 return v8::Local<v8::FunctionTemplate>();
68 return it->second.Get(isolate_);
69}
70
[email protected]5c969b82014-03-12 04:59:0571void PerIsolateData::SetIndexedPropertyInterceptor(
72 WrappableBase* base,
73 IndexedPropertyInterceptor* interceptor) {
74 indexed_interceptors_[base] = interceptor;
75}
76
77void PerIsolateData::SetNamedPropertyInterceptor(
78 WrappableBase* base,
79 NamedPropertyInterceptor* interceptor) {
80 named_interceptors_[base] = interceptor;
81}
82
83void PerIsolateData::ClearIndexedPropertyInterceptor(
84 WrappableBase* base,
85 IndexedPropertyInterceptor* interceptor) {
86 IndexedPropertyInterceptorMap::iterator it = indexed_interceptors_.find(base);
87 if (it != indexed_interceptors_.end())
88 indexed_interceptors_.erase(it);
89 else
90 NOTREACHED();
91}
92
93void PerIsolateData::ClearNamedPropertyInterceptor(
94 WrappableBase* base,
95 NamedPropertyInterceptor* interceptor) {
96 NamedPropertyInterceptorMap::iterator it = named_interceptors_.find(base);
97 if (it != named_interceptors_.end())
98 named_interceptors_.erase(it);
99 else
100 NOTREACHED();
101}
102
103IndexedPropertyInterceptor* PerIsolateData::GetIndexedPropertyInterceptor(
104 WrappableBase* base) {
105 IndexedPropertyInterceptorMap::iterator it = indexed_interceptors_.find(base);
106 if (it != indexed_interceptors_.end())
107 return it->second;
108 else
109 return NULL;
110}
111
112NamedPropertyInterceptor* PerIsolateData::GetNamedPropertyInterceptor(
113 WrappableBase* base) {
114 NamedPropertyInterceptorMap::iterator it = named_interceptors_.find(base);
115 if (it != named_interceptors_.end())
116 return it->second;
117 else
118 return NULL;
119}
120
ulan3cbdcd02015-07-20 11:32:58121void PerIsolateData::EnableIdleTasks(
mostynbc862da82016-04-03 15:54:33122 std::unique_ptr<V8IdleTaskRunner> idle_task_runner) {
dchenge48600452015-12-28 02:24:50123 idle_task_runner_ = std::move(idle_task_runner);
ulan3cbdcd02015-07-20 11:32:58124}
125
[email protected]a22998a2013-11-10 05:00:50126} // namespace gin