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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/V8Binding.h

Issue 2617733004: binding: Changes the association among global-proxy/global/window-instance. (Closed)
Patch Set: Fixed Document.defaultView Created 3 years, 10 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Ericsson AB. All rights reserved. 3 * Copyright (C) 2012 Ericsson AB. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 v8SetReturnValueNull(callbackInfo); 195 v8SetReturnValueNull(callbackInfo);
196 return; 196 return;
197 } 197 }
198 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl)) 198 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl))
199 return; 199 return;
200 v8::Local<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap( 200 v8::Local<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(
201 callbackInfo.GetIsolate(), callbackInfo.Holder()); 201 callbackInfo.GetIsolate(), callbackInfo.Holder());
202 v8SetReturnValue(callbackInfo, wrapper); 202 v8SetReturnValue(callbackInfo, wrapper);
203 } 203 }
204 204
205 // Special versions for DOMWindow and EventTarget
206
207 template <typename CallbackInfo>
208 inline void v8SetReturnValue(const CallbackInfo& callbackInfo,
209 DOMWindow* impl) {
210 v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
211 callbackInfo.GetIsolate()));
212 }
213
214 template <typename CallbackInfo>
215 inline void v8SetReturnValue(const CallbackInfo& callbackInfo,
216 EventTarget* impl) {
217 v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
218 callbackInfo.GetIsolate()));
219 }
220
221 template <typename CallbackInfo, typename T> 205 template <typename CallbackInfo, typename T>
222 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, 206 inline void v8SetReturnValue(const CallbackInfo& callbackInfo,
223 PassRefPtr<T> impl) { 207 PassRefPtr<T> impl) {
224 v8SetReturnValue(callbackInfo, impl.get()); 208 v8SetReturnValue(callbackInfo, impl.get());
225 } 209 }
226 210
227 template <typename CallbackInfo> 211 template <typename CallbackInfo>
228 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, 212 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
229 ScriptWrappable* impl) { 213 ScriptWrappable* impl) {
230 ASSERT(DOMWrapperWorld::current(callbackInfo.GetIsolate()).isMainWorld()); 214 ASSERT(DOMWrapperWorld::current(callbackInfo.GetIsolate()).isMainWorld());
231 if (UNLIKELY(!impl)) { 215 if (UNLIKELY(!impl)) {
232 v8SetReturnValueNull(callbackInfo); 216 v8SetReturnValueNull(callbackInfo);
233 return; 217 return;
234 } 218 }
235 if (DOMDataStore::setReturnValueForMainWorld(callbackInfo.GetReturnValue(), 219 if (DOMDataStore::setReturnValueForMainWorld(callbackInfo.GetReturnValue(),
236 impl)) 220 impl))
237 return; 221 return;
238 v8::Local<v8::Object> wrapper = 222 v8::Local<v8::Object> wrapper =
239 impl->wrap(callbackInfo.GetIsolate(), callbackInfo.Holder()); 223 impl->wrap(callbackInfo.GetIsolate(), callbackInfo.Holder());
240 v8SetReturnValue(callbackInfo, wrapper); 224 v8SetReturnValue(callbackInfo, wrapper);
241 } 225 }
242 226
243 template <typename CallbackInfo>
244 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
245 Node* impl) {
246 // Since EventTarget has a special version of ToV8 and V8EventTarget.h
247 // defines its own v8SetReturnValue family, which are slow, we need to
248 // override them with optimized versions for Node and its subclasses.
249 // Without this overload, v8SetReturnValueForMainWorld for Node would be
250 // very slow.
251 //
252 // class hierarchy:
253 // ScriptWrappable <-- EventTarget <--+-- Node <-- ...
254 // +-- Window
255 // overloads:
256 // v8SetReturnValueForMainWorld(ScriptWrappable*)
257 // Optimized and very fast.
258 // v8SetReturnValueForMainWorld(EventTarget*)
259 // Uses custom toV8 function and slow.
260 // v8SetReturnValueForMainWorld(Node*)
261 // Optimized and very fast.
262 // v8SetReturnValueForMainWorld(Window*)
263 // Uses custom toV8 function and slow.
264 v8SetReturnValueForMainWorld(callbackInfo, ScriptWrappable::fromNode(impl));
265 }
266
267 // Special versions for DOMWindow and EventTarget
268
269 template <typename CallbackInfo>
270 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
271 DOMWindow* impl) {
272 v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
273 callbackInfo.GetIsolate()));
274 }
275
276 template <typename CallbackInfo>
277 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
278 EventTarget* impl) {
279 v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
280 callbackInfo.GetIsolate()));
281 }
282
283 template <typename CallbackInfo, typename T> 227 template <typename CallbackInfo, typename T>
284 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, 228 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo,
285 PassRefPtr<T> impl) { 229 PassRefPtr<T> impl) {
286 v8SetReturnValueForMainWorld(callbackInfo, impl.get()); 230 v8SetReturnValueForMainWorld(callbackInfo, impl.get());
287 } 231 }
288 232
289 template <typename CallbackInfo> 233 template <typename CallbackInfo>
290 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, 234 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
291 ScriptWrappable* impl, 235 ScriptWrappable* impl,
292 const ScriptWrappable* wrappable) { 236 const ScriptWrappable* wrappable) {
(...skipping 18 matching lines...) Expand all
311 return; 255 return;
312 } 256 }
313 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, 257 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl,
314 callbackInfo.Holder(), wrappable)) 258 callbackInfo.Holder(), wrappable))
315 return; 259 return;
316 v8::Local<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap( 260 v8::Local<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(
317 callbackInfo.GetIsolate(), callbackInfo.Holder()); 261 callbackInfo.GetIsolate(), callbackInfo.Holder());
318 v8SetReturnValue(callbackInfo, wrapper); 262 v8SetReturnValue(callbackInfo, wrapper);
319 } 263 }
320 264
321 // Special versions for DOMWindow and EventTarget
322
323 template <typename CallbackInfo>
324 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
325 DOMWindow* impl,
326 const ScriptWrappable*) {
327 v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
328 callbackInfo.GetIsolate()));
329 }
330
331 template <typename CallbackInfo>
332 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
333 EventTarget* impl,
334 const ScriptWrappable*) {
335 v8SetReturnValue(callbackInfo, ToV8(impl, callbackInfo.Holder(),
336 callbackInfo.GetIsolate()));
337 }
338
339 template <typename CallbackInfo, typename T, typename Wrappable> 265 template <typename CallbackInfo, typename T, typename Wrappable>
340 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, 266 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
341 PassRefPtr<T> impl, 267 PassRefPtr<T> impl,
342 const Wrappable* wrappable) { 268 const Wrappable* wrappable) {
343 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable); 269 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable);
344 } 270 }
345 271
346 template <typename CallbackInfo, typename T> 272 template <typename CallbackInfo, typename T>
347 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, 273 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo,
348 const v8::Local<T> handle, 274 const v8::Local<T> handle,
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 // If the argument isn't an object, this will crash. 1064 // If the argument isn't an object, this will crash.
1139 CORE_EXPORT v8::Local<v8::Value> freezeV8Object(v8::Local<v8::Value>, 1065 CORE_EXPORT v8::Local<v8::Value> freezeV8Object(v8::Local<v8::Value>,
1140 v8::Isolate*); 1066 v8::Isolate*);
1141 1067
1142 CORE_EXPORT v8::Local<v8::Value> fromJSONString(v8::Isolate*, 1068 CORE_EXPORT v8::Local<v8::Value> fromJSONString(v8::Isolate*,
1143 const String& stringifiedJSON, 1069 const String& stringifiedJSON,
1144 ExceptionState&); 1070 ExceptionState&);
1145 } // namespace blink 1071 } // namespace blink
1146 1072
1147 #endif // V8Binding_h 1073 #endif // V8Binding_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698