Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Side by Side Diff: Source/bindings/core/v8/DOMDataStore.h

Issue 721383003: bindings: Retires ScriptWrappableBase mostly. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 // We never actually destruct the main world's DOMDataStore. 54 // We never actually destruct the main world's DOMDataStore.
55 ASSERT(!m_isMainWorld); 55 ASSERT(!m_isMainWorld);
56 m_wrapperMap.clear(); 56 m_wrapperMap.clear();
57 } 57 }
58 58
59 static DOMDataStore& current(v8::Isolate* isolate) 59 static DOMDataStore& current(v8::Isolate* isolate)
60 { 60 {
61 return DOMWrapperWorld::current(isolate).domDataStore(); 61 return DOMWrapperWorld::current(isolate).domDataStore();
62 } 62 }
63 63
64 static bool setReturnValueFast(v8::ReturnValue<v8::Value> returnValue, Scrip tWrappable* object, v8::Local<v8::Object> holder, const ScriptWrappable* wrappab le)
65 {
66 // The second fastest way to check if we're in the main world is to chec k if
67 // the wrappable's wrapper is the same as the holder.
68 if (holderContainsWrapper(holder, wrappable))
69 return object->setReturnValue(returnValue);
70 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, object);
71 }
72
73 static bool setReturnValueFast(v8::ReturnValue<v8::Value> returnValue, Node* node, v8::Local<v8::Object> holder, const ScriptWrappable* wrappable)
74 {
75 if (canUseScriptWrappable(node)
76 // The second fastest way to check if we're in the main world is to
77 // check if the wrappable's wrapper is the same as the holder.
78 || holderContainsWrapper(holder, wrappable))
79 return ScriptWrappable::fromNode(node)->setReturnValue(returnValue);
80 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, ScriptWrappable::fromNode(node));
81 }
82
83 static bool setReturnValue(v8::ReturnValue<v8::Value> returnValue, ScriptWra ppableBase* object)
84 {
85 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, object);
86 }
87
88 static bool setReturnValue(v8::ReturnValue<v8::Value> returnValue, ScriptWra ppable* object) 64 static bool setReturnValue(v8::ReturnValue<v8::Value> returnValue, ScriptWra ppable* object)
89 { 65 {
90 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, object); 66 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, object);
91 } 67 }
92 68
93 static bool setReturnValue(v8::ReturnValue<v8::Value> returnValue, Node* obj ect) 69 static bool setReturnValue(v8::ReturnValue<v8::Value> returnValue, Node* obj ect)
94 { 70 {
95 if (canUseScriptWrappable(object)) 71 if (canUseScriptWrappable(object))
96 return ScriptWrappable::fromNode(object)->setReturnValue(returnValue ); 72 return ScriptWrappable::fromNode(object)->setReturnValue(returnValue );
97 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, ScriptWrappable::fromNode(object)); 73 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, ScriptWrappable::fromNode(object));
98 } 74 }
99 75
100 static bool setReturnValueForMainWorld(v8::ReturnValue<v8::Value> returnValu e, ScriptWrappable* object) 76 static bool setReturnValueForMainWorld(v8::ReturnValue<v8::Value> returnValu e, ScriptWrappable* object)
101 { 77 {
102 return object->setReturnValue(returnValue); 78 return object->setReturnValue(returnValue);
103 } 79 }
104 80
105 static v8::Handle<v8::Object> getWrapper(ScriptWrappableBase* object, v8::Is olate* isolate) 81 static bool setReturnValueFast(v8::ReturnValue<v8::Value> returnValue, Scrip tWrappable* object, v8::Local<v8::Object> holder, const ScriptWrappable* wrappab le)
106 { 82 {
107 return current(isolate).get(object, isolate); 83 // The second fastest way to check if we're in the main world is to chec k if
84 // the wrappable's wrapper is the same as the holder.
85 if (holderContainsWrapper(holder, wrappable))
86 return object->setReturnValue(returnValue);
87 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, object);
88 }
89
90 static bool setReturnValueFast(v8::ReturnValue<v8::Value> returnValue, Node* node, v8::Local<v8::Object> holder, const ScriptWrappable* wrappable)
91 {
92 if (canUseScriptWrappable(node)
93 // The second fastest way to check if we're in the main world is to
94 // check if the wrappable's wrapper is the same as the holder.
95 || holderContainsWrapper(holder, wrappable))
96 return ScriptWrappable::fromNode(node)->setReturnValue(returnValue);
97 return current(returnValue.GetIsolate()).setReturnValueFrom(returnValue, ScriptWrappable::fromNode(node));
108 } 98 }
109 99
110 static v8::Handle<v8::Object> getWrapper(ScriptWrappable* object, v8::Isolat e* isolate) 100 static v8::Handle<v8::Object> getWrapper(ScriptWrappable* object, v8::Isolat e* isolate)
111 { 101 {
112 return current(isolate).get(object, isolate); 102 return current(isolate).get(object, isolate);
113 } 103 }
114 104
115 static v8::Handle<v8::Object> getWrapper(Node* node, v8::Isolate* isolate) 105 static v8::Handle<v8::Object> getWrapper(Node* node, v8::Isolate* isolate)
116 { 106 {
117 if (canUseScriptWrappable(node)) { 107 if (canUseScriptWrappable(node)) {
118 v8::Handle<v8::Object> result = ScriptWrappable::fromNode(node)->new LocalWrapper(isolate); 108 v8::Handle<v8::Object> result = ScriptWrappable::fromNode(node)->new LocalWrapper(isolate);
119 // Security: always guard against malicious tampering. 109 // Security: always guard against malicious tampering.
120 ScriptWrappable::fromNode(node)->assertWrapperSanity(result); 110 ScriptWrappable::fromNode(node)->assertWrapperSanity(result);
121 return result; 111 return result;
122 } 112 }
123 return current(isolate).get(ScriptWrappable::fromNode(node), isolate); 113 return current(isolate).get(ScriptWrappable::fromNode(node), isolate);
124 } 114 }
125 115
126 static void setWrapperReference(const v8::Persistent<v8::Object>& parent, Sc riptWrappableBase* child, v8::Isolate* isolate)
127 {
128 current(isolate).setReference(parent, child, isolate);
129 }
130
131 static void setWrapperReference(const v8::Persistent<v8::Object>& parent, Sc riptWrappable* child, v8::Isolate* isolate) 116 static void setWrapperReference(const v8::Persistent<v8::Object>& parent, Sc riptWrappable* child, v8::Isolate* isolate)
132 { 117 {
133 current(isolate).setReference(parent, child, isolate); 118 current(isolate).setReference(parent, child, isolate);
134 } 119 }
135 120
136 static void setWrapperReference(const v8::Persistent<v8::Object>& parent, No de* child, v8::Isolate* isolate) 121 static void setWrapperReference(const v8::Persistent<v8::Object>& parent, No de* child, v8::Isolate* isolate)
137 { 122 {
138 if (canUseScriptWrappable(child)) { 123 if (canUseScriptWrappable(child)) {
139 ScriptWrappable::fromNode(child)->setReference(parent, isolate); 124 ScriptWrappable::fromNode(child)->setReference(parent, isolate);
140 return; 125 return;
141 } 126 }
142 current(isolate).setReference(parent, ScriptWrappable::fromNode(child), isolate); 127 current(isolate).setReference(parent, ScriptWrappable::fromNode(child), isolate);
143 } 128 }
144 129
145 static void setWrapper(ScriptWrappableBase* object, v8::Handle<v8::Object> w rapper, v8::Isolate* isolate, const WrapperTypeInfo* wrapperTypeInfo)
146 {
147 return current(isolate).set(object, wrapper, isolate, wrapperTypeInfo);
148 }
149
150 static void setWrapper(ScriptWrappable* object, v8::Handle<v8::Object> wrapp er, v8::Isolate* isolate, const WrapperTypeInfo* wrapperTypeInfo) 130 static void setWrapper(ScriptWrappable* object, v8::Handle<v8::Object> wrapp er, v8::Isolate* isolate, const WrapperTypeInfo* wrapperTypeInfo)
151 { 131 {
152 return current(isolate).set(object, wrapper, isolate, wrapperTypeInfo); 132 return current(isolate).set(object, wrapper, isolate, wrapperTypeInfo);
153 } 133 }
154 134
155 static void setWrapper(Node* node, v8::Handle<v8::Object> wrapper, v8::Isola te* isolate, const WrapperTypeInfo* wrapperTypeInfo) 135 static void setWrapper(Node* node, v8::Handle<v8::Object> wrapper, v8::Isola te* isolate, const WrapperTypeInfo* wrapperTypeInfo)
156 { 136 {
157 if (canUseScriptWrappable(node)) { 137 if (canUseScriptWrappable(node)) {
158 ScriptWrappable::fromNode(node)->setWrapper(wrapper, isolate, wrappe rTypeInfo); 138 ScriptWrappable::fromNode(node)->setWrapper(wrapper, isolate, wrappe rTypeInfo);
159 return; 139 return;
160 } 140 }
161 return current(isolate).set(ScriptWrappable::fromNode(node), wrapper, is olate, wrapperTypeInfo); 141 return current(isolate).set(ScriptWrappable::fromNode(node), wrapper, is olate, wrapperTypeInfo);
162 } 142 }
163 143
164 static bool containsWrapper(ScriptWrappableBase* object, v8::Isolate* isolat e)
165 {
166 return current(isolate).containsWrapper(object);
167 }
168
169 static bool containsWrapper(ScriptWrappable* object, v8::Isolate* isolate) 144 static bool containsWrapper(ScriptWrappable* object, v8::Isolate* isolate)
170 { 145 {
171 return current(isolate).containsWrapper(object); 146 return current(isolate).containsWrapper(object);
172 } 147 }
173 148
174 v8::Handle<v8::Object> get(ScriptWrappableBase* object, v8::Isolate* isolate )
175 {
176 return m_wrapperMap.newLocal(object->toScriptWrappableBase(), isolate);
177 }
178
179 v8::Handle<v8::Object> get(ScriptWrappable* object, v8::Isolate* isolate) 149 v8::Handle<v8::Object> get(ScriptWrappable* object, v8::Isolate* isolate)
180 { 150 {
181 if (m_isMainWorld) 151 if (m_isMainWorld)
182 return object->newLocalWrapper(isolate); 152 return object->newLocalWrapper(isolate);
183 return m_wrapperMap.newLocal(object->toScriptWrappableBase(), isolate); 153 return m_wrapperMap.newLocal(object->toScriptWrappableBase(), isolate);
184 } 154 }
185 155
186 void setReference(const v8::Persistent<v8::Object>& parent, ScriptWrappableB ase* child, v8::Isolate* isolate)
187 {
188 m_wrapperMap.setReference(parent, child, isolate);
189 }
190
191 void setReference(const v8::Persistent<v8::Object>& parent, ScriptWrappable* child, v8::Isolate* isolate) 156 void setReference(const v8::Persistent<v8::Object>& parent, ScriptWrappable* child, v8::Isolate* isolate)
192 { 157 {
193 if (m_isMainWorld) { 158 if (m_isMainWorld) {
194 child->setReference(parent, isolate); 159 child->setReference(parent, isolate);
195 return; 160 return;
196 } 161 }
197 m_wrapperMap.setReference(parent, child->toScriptWrappableBase(), isolat e); 162 m_wrapperMap.setReference(parent, child->toScriptWrappableBase(), isolat e);
198 } 163 }
199 164
200 bool setReturnValueFrom(v8::ReturnValue<v8::Value> returnValue, ScriptWrappa bleBase* object)
201 {
202 return m_wrapperMap.setReturnValueFrom(returnValue, object);
203 }
204
205 bool setReturnValueFrom(v8::ReturnValue<v8::Value> returnValue, ScriptWrappa ble* object) 165 bool setReturnValueFrom(v8::ReturnValue<v8::Value> returnValue, ScriptWrappa ble* object)
206 { 166 {
207 if (m_isMainWorld) 167 if (m_isMainWorld)
208 return object->setReturnValue(returnValue); 168 return object->setReturnValue(returnValue);
209 return m_wrapperMap.setReturnValueFrom(returnValue, object->toScriptWrap pableBase()); 169 return m_wrapperMap.setReturnValueFrom(returnValue, object->toScriptWrap pableBase());
210 } 170 }
211 171
212 bool containsWrapper(ScriptWrappableBase* object)
213 {
214 return m_wrapperMap.containsKey(object->toScriptWrappableBase());
215 }
216
217 bool containsWrapper(ScriptWrappable* object) 172 bool containsWrapper(ScriptWrappable* object)
218 { 173 {
219 if (m_isMainWorld) 174 if (m_isMainWorld)
220 return object->containsWrapper(); 175 return object->containsWrapper();
221 return m_wrapperMap.containsKey(object->toScriptWrappableBase()); 176 return m_wrapperMap.containsKey(object->toScriptWrappableBase());
222 } 177 }
223 178
224 private: 179 private:
225 void set(ScriptWrappableBase* object, v8::Handle<v8::Object> wrapper, v8::Is olate* isolate, const WrapperTypeInfo* wrapperTypeInfo)
226 {
227 ASSERT(object);
228 ASSERT(!wrapper.IsEmpty());
229 m_wrapperMap.set(object->toScriptWrappableBase(), wrapper, wrapperTypeIn fo);
230 }
231
232 void set(ScriptWrappable* object, v8::Handle<v8::Object> wrapper, v8::Isolat e* isolate, const WrapperTypeInfo* wrapperTypeInfo) 180 void set(ScriptWrappable* object, v8::Handle<v8::Object> wrapper, v8::Isolat e* isolate, const WrapperTypeInfo* wrapperTypeInfo)
233 { 181 {
234 ASSERT(object); 182 ASSERT(object);
235 ASSERT(!wrapper.IsEmpty()); 183 ASSERT(!wrapper.IsEmpty());
236 if (m_isMainWorld) { 184 if (m_isMainWorld) {
237 object->setWrapper(wrapper, isolate, wrapperTypeInfo); 185 object->setWrapper(wrapper, isolate, wrapperTypeInfo);
238 return; 186 return;
239 } 187 }
240 m_wrapperMap.set(object->toScriptWrappableBase(), wrapper, wrapperTypeIn fo); 188 m_wrapperMap.set(object->toScriptWrappableBase(), wrapper, wrapperTypeIn fo);
241 } 189 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 v8::UniquePersistent<v8::Object> value, 222 v8::UniquePersistent<v8::Object> value,
275 ScriptWrappableBase* key) 223 ScriptWrappableBase* key)
276 { 224 {
277 RELEASE_ASSERT(!value.IsEmpty()); // See crbug.com/368095. 225 RELEASE_ASSERT(!value.IsEmpty()); // See crbug.com/368095.
278 releaseObject(v8::Local<v8::Object>::New(isolate, value)); 226 releaseObject(v8::Local<v8::Object>::New(isolate, value));
279 } 227 }
280 228
281 } // namespace blink 229 } // namespace blink
282 230
283 #endif // DOMDataStore_h 231 #endif // DOMDataStore_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698