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

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

Issue 2693893007: binding: Changes the association among global-proxy/global/window-instance (2nd attempt). (Closed)
Patch Set: Fixed a typo in DOMWrapperWorld::DissociateDOMWindowWrappersInAllWorlds. Created 3 years, 8 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 #include "core/dom/NotShared.h" 50 #include "core/dom/NotShared.h"
51 #include "platform/heap/Handle.h" 51 #include "platform/heap/Handle.h"
52 #include "platform/wtf/text/AtomicString.h" 52 #include "platform/wtf/text/AtomicString.h"
53 #include "platform/wtf/text/StringView.h" 53 #include "platform/wtf/text/StringView.h"
54 #include "v8/include/v8.h" 54 #include "v8/include/v8.h"
55 55
56 namespace blink { 56 namespace blink {
57 57
58 class DOMWindow; 58 class DOMWindow;
59 class EventListener; 59 class EventListener;
60 class EventTarget;
61 class ExceptionState; 60 class ExceptionState;
62 class ExecutionContext; 61 class ExecutionContext;
63 class FlexibleArrayBufferView; 62 class FlexibleArrayBufferView;
64 class Frame; 63 class Frame;
65 class LocalDOMWindow; 64 class LocalDOMWindow;
66 class LocalFrame; 65 class LocalFrame;
67 class NodeFilter; 66 class NodeFilter;
68 class XPathNSResolver; 67 class XPathNSResolver;
69 68
70 template <typename T> 69 template <typename T>
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 inline void V8SetReturnValue(const CallbackInfo& callback_info, 187 inline void V8SetReturnValue(const CallbackInfo& callback_info,
189 ScriptWrappable* impl) { 188 ScriptWrappable* impl) {
190 V8SetReturnValue(callback_info, impl, callback_info.Holder()); 189 V8SetReturnValue(callback_info, impl, callback_info.Holder());
191 } 190 }
192 191
193 template <typename CallbackInfo> 192 template <typename CallbackInfo>
194 inline void V8SetReturnValue(const CallbackInfo& callback_info, Node* impl) { 193 inline void V8SetReturnValue(const CallbackInfo& callback_info, Node* impl) {
195 V8SetReturnValue(callback_info, ScriptWrappable::FromNode(impl)); 194 V8SetReturnValue(callback_info, ScriptWrappable::FromNode(impl));
196 } 195 }
197 196
198 // Special versions for DOMWindow and EventTarget
199
200 template <typename CallbackInfo>
201 inline void V8SetReturnValue(const CallbackInfo& callback_info,
202 DOMWindow* impl) {
203 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(),
204 callback_info.GetIsolate()));
205 }
206
207 template <typename CallbackInfo>
208 inline void V8SetReturnValue(const CallbackInfo& callback_info,
209 EventTarget* impl) {
210 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(),
211 callback_info.GetIsolate()));
212 }
213
214 template <typename CallbackInfo, typename T> 197 template <typename CallbackInfo, typename T>
215 inline void V8SetReturnValue(const CallbackInfo& callback_info, 198 inline void V8SetReturnValue(const CallbackInfo& callback_info,
216 PassRefPtr<T> impl) { 199 PassRefPtr<T> impl) {
217 V8SetReturnValue(callback_info, impl.Get()); 200 V8SetReturnValue(callback_info, impl.Get());
218 } 201 }
219 202
220 template <typename CallbackInfo, typename T> 203 template <typename CallbackInfo, typename T>
221 inline void V8SetReturnValue(const CallbackInfo& callbackInfo, 204 inline void V8SetReturnValue(const CallbackInfo& callbackInfo,
222 NotShared<T> notShared) { 205 NotShared<T> notShared) {
223 V8SetReturnValue(callbackInfo, notShared.View()); 206 V8SetReturnValue(callbackInfo, notShared.View());
224 } 207 }
225 208
226 template <typename CallbackInfo> 209 template <typename CallbackInfo>
227 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, 210 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info,
228 ScriptWrappable* impl) { 211 ScriptWrappable* impl) {
229 DCHECK(DOMWrapperWorld::Current(callback_info.GetIsolate()).IsMainWorld()); 212 DCHECK(DOMWrapperWorld::Current(callback_info.GetIsolate()).IsMainWorld());
230 if (UNLIKELY(!impl)) { 213 if (UNLIKELY(!impl)) {
231 V8SetReturnValueNull(callback_info); 214 V8SetReturnValueNull(callback_info);
232 return; 215 return;
233 } 216 }
234 if (DOMDataStore::SetReturnValueForMainWorld(callback_info.GetReturnValue(), 217 if (DOMDataStore::SetReturnValueForMainWorld(callback_info.GetReturnValue(),
235 impl)) 218 impl))
236 return; 219 return;
237 v8::Local<v8::Object> wrapper = 220 v8::Local<v8::Object> wrapper =
238 impl->Wrap(callback_info.GetIsolate(), callback_info.Holder()); 221 impl->Wrap(callback_info.GetIsolate(), callback_info.Holder());
239 V8SetReturnValue(callback_info, wrapper); 222 V8SetReturnValue(callback_info, wrapper);
240 } 223 }
241 224
242 template <typename CallbackInfo>
243 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info,
244 Node* impl) {
245 // Since EventTarget has a special version of ToV8 and V8EventTarget.h
246 // defines its own v8SetReturnValue family, which are slow, we need to
247 // override them with optimized versions for Node and its subclasses.
248 // Without this overload, v8SetReturnValueForMainWorld for Node would be
249 // very slow.
250 //
251 // class hierarchy:
252 // ScriptWrappable <-- EventTarget <--+-- Node <-- ...
253 // +-- Window
254 // overloads:
255 // v8SetReturnValueForMainWorld(ScriptWrappable*)
256 // Optimized and very fast.
257 // v8SetReturnValueForMainWorld(EventTarget*)
258 // Uses custom toV8 function and slow.
259 // v8SetReturnValueForMainWorld(Node*)
260 // Optimized and very fast.
261 // v8SetReturnValueForMainWorld(Window*)
262 // Uses custom toV8 function and slow.
263 V8SetReturnValueForMainWorld(callback_info, ScriptWrappable::FromNode(impl));
264 }
265
266 // Special versions for DOMWindow and EventTarget
267
268 template <typename CallbackInfo>
269 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info,
270 DOMWindow* impl) {
271 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(),
272 callback_info.GetIsolate()));
273 }
274
275 template <typename CallbackInfo>
276 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info,
277 EventTarget* impl) {
278 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(),
279 callback_info.GetIsolate()));
280 }
281
282 template <typename CallbackInfo, typename T> 225 template <typename CallbackInfo, typename T>
283 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, 226 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info,
284 PassRefPtr<T> impl) { 227 PassRefPtr<T> impl) {
285 V8SetReturnValueForMainWorld(callback_info, impl.Get()); 228 V8SetReturnValueForMainWorld(callback_info, impl.Get());
286 } 229 }
287 230
288 template <typename CallbackInfo> 231 template <typename CallbackInfo>
289 inline void V8SetReturnValueFast(const CallbackInfo& callback_info, 232 inline void V8SetReturnValueFast(const CallbackInfo& callback_info,
290 ScriptWrappable* impl, 233 ScriptWrappable* impl,
291 const ScriptWrappable* wrappable) { 234 const ScriptWrappable* wrappable) {
(...skipping 10 matching lines...) Expand all
302 } 245 }
303 246
304 template <typename CallbackInfo> 247 template <typename CallbackInfo>
305 inline void V8SetReturnValueFast(const CallbackInfo& callback_info, 248 inline void V8SetReturnValueFast(const CallbackInfo& callback_info,
306 Node* impl, 249 Node* impl,
307 const ScriptWrappable* wrappable) { 250 const ScriptWrappable* wrappable) {
308 V8SetReturnValueFast(callback_info, ScriptWrappable::FromNode(impl), 251 V8SetReturnValueFast(callback_info, ScriptWrappable::FromNode(impl),
309 wrappable); 252 wrappable);
310 } 253 }
311 254
312 // Special versions for DOMWindow and EventTarget
313
314 template <typename CallbackInfo>
315 inline void V8SetReturnValueFast(const CallbackInfo& callback_info,
316 DOMWindow* impl,
317 const ScriptWrappable*) {
318 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(),
319 callback_info.GetIsolate()));
320 }
321
322 template <typename CallbackInfo>
323 inline void V8SetReturnValueFast(const CallbackInfo& callback_info,
324 EventTarget* impl,
325 const ScriptWrappable*) {
326 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(),
327 callback_info.GetIsolate()));
328 }
329
330 template <typename CallbackInfo, typename T, typename Wrappable> 255 template <typename CallbackInfo, typename T, typename Wrappable>
331 inline void V8SetReturnValueFast(const CallbackInfo& callback_info, 256 inline void V8SetReturnValueFast(const CallbackInfo& callback_info,
332 PassRefPtr<T> impl, 257 PassRefPtr<T> impl,
333 const Wrappable* wrappable) { 258 const Wrappable* wrappable) {
334 V8SetReturnValueFast(callback_info, impl.Get(), wrappable); 259 V8SetReturnValueFast(callback_info, impl.Get(), wrappable);
335 } 260 }
336 261
337 template <typename CallbackInfo, typename T> 262 template <typename CallbackInfo, typename T>
338 inline void V8SetReturnValueFast(const CallbackInfo& callback_info, 263 inline void V8SetReturnValueFast(const CallbackInfo& callback_info,
339 const v8::Local<T> handle, 264 const v8::Local<T> handle,
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
1192 exception_state.ThrowTypeError( 1117 exception_state.ThrowTypeError(
1193 "The provided ArrayBufferView value must not be shared."); 1118 "The provided ArrayBufferView value must not be shared.");
1194 return NotSharedType(); 1119 return NotSharedType();
1195 } 1120 }
1196 return NotSharedType(dom_typed_array); 1121 return NotSharedType(dom_typed_array);
1197 } 1122 }
1198 1123
1199 } // namespace blink 1124 } // namespace blink
1200 1125
1201 #endif // V8Binding_h 1126 #endif // V8Binding_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698