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

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

Issue 1111163003: Replace v8::Handle<> with v8::Local<> in bindings/core/v8/* (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « Source/bindings/core/v8/ToV8.cpp ('k') | Source/bindings/core/v8/V8Binding.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 v8::Local<v8::Value> createMinimumArityTypeErrorForConstructor(v8::Isolate*, con st char* type, unsigned expected, unsigned provided); 82 v8::Local<v8::Value> createMinimumArityTypeErrorForConstructor(v8::Isolate*, con st char* type, unsigned expected, unsigned provided);
83 CORE_EXPORT void setMinimumArityTypeError(ExceptionState&, unsigned expected, un signed provided); 83 CORE_EXPORT void setMinimumArityTypeError(ExceptionState&, unsigned expected, un signed provided);
84 84
85 template<typename CallbackInfo, typename S> 85 template<typename CallbackInfo, typename S>
86 inline void v8SetReturnValue(const CallbackInfo& info, const v8::Persistent<S>& handle) 86 inline void v8SetReturnValue(const CallbackInfo& info, const v8::Persistent<S>& handle)
87 { 87 {
88 info.GetReturnValue().Set(handle); 88 info.GetReturnValue().Set(handle);
89 } 89 }
90 90
91 template<typename CallbackInfo, typename S> 91 template<typename CallbackInfo, typename S>
92 inline void v8SetReturnValue(const CallbackInfo& info, const v8::Handle<S> handl e) 92 inline void v8SetReturnValue(const CallbackInfo& info, const v8::Local<S> handle )
93 { 93 {
94 info.GetReturnValue().Set(handle); 94 info.GetReturnValue().Set(handle);
95 } 95 }
96 96
97 template<typename CallbackInfo, typename S> 97 template<typename CallbackInfo, typename S>
98 inline void v8SetReturnValue(const CallbackInfo& info, v8::MaybeLocal<S> maybe) 98 inline void v8SetReturnValue(const CallbackInfo& info, v8::MaybeLocal<S> maybe)
99 { 99 {
100 if (LIKELY(!maybe.IsEmpty())) 100 if (LIKELY(!maybe.IsEmpty()))
101 info.GetReturnValue().Set(maybe.ToLocalChecked()); 101 info.GetReturnValue().Set(maybe.ToLocalChecked());
102 } 102 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 193
194 template<typename CallbackInfo> 194 template<typename CallbackInfo>
195 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, ScriptWrappable* impl) 195 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, ScriptWrappable* impl)
196 { 196 {
197 if (UNLIKELY(!impl)) { 197 if (UNLIKELY(!impl)) {
198 v8SetReturnValueNull(callbackInfo); 198 v8SetReturnValueNull(callbackInfo);
199 return; 199 return;
200 } 200 }
201 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl)) 201 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl))
202 return; 202 return;
203 v8::Handle<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackI nfo.GetIsolate()); 203 v8::Local<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackIn fo.GetIsolate());
204 v8SetReturnValue(callbackInfo, wrapper); 204 v8SetReturnValue(callbackInfo, wrapper);
205 } 205 }
206 206
207 template<typename CallbackInfo> 207 template<typename CallbackInfo>
208 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, Node* impl) 208 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, Node* impl)
209 { 209 {
210 if (UNLIKELY(!impl)) { 210 if (UNLIKELY(!impl)) {
211 v8SetReturnValueNull(callbackInfo); 211 v8SetReturnValueNull(callbackInfo);
212 return; 212 return;
213 } 213 }
214 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl)) 214 if (DOMDataStore::setReturnValue(callbackInfo.GetReturnValue(), impl))
215 return; 215 return;
216 v8::Handle<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callb ackInfo.Holder(), callbackInfo.GetIsolate()); 216 v8::Local<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callba ckInfo.Holder(), callbackInfo.GetIsolate());
217 v8SetReturnValue(callbackInfo, wrapper); 217 v8SetReturnValue(callbackInfo, wrapper);
218 } 218 }
219 219
220 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget 220 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget
221 221
222 template<typename CallbackInfo> 222 template<typename CallbackInfo>
223 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, DOMWindow* impl) 223 inline void v8SetReturnValue(const CallbackInfo& callbackInfo, DOMWindow* impl)
224 { 224 {
225 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate())); 225 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
226 } 226 }
(...skipping 25 matching lines...) Expand all
252 template<typename CallbackInfo> 252 template<typename CallbackInfo>
253 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Scrip tWrappable* impl) 253 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Scrip tWrappable* impl)
254 { 254 {
255 ASSERT(DOMWrapperWorld::current(callbackInfo.GetIsolate()).isMainWorld()); 255 ASSERT(DOMWrapperWorld::current(callbackInfo.GetIsolate()).isMainWorld());
256 if (UNLIKELY(!impl)) { 256 if (UNLIKELY(!impl)) {
257 v8SetReturnValueNull(callbackInfo); 257 v8SetReturnValueNull(callbackInfo);
258 return; 258 return;
259 } 259 }
260 if (DOMDataStore::setReturnValueForMainWorld(callbackInfo.GetReturnValue(), impl)) 260 if (DOMDataStore::setReturnValueForMainWorld(callbackInfo.GetReturnValue(), impl))
261 return; 261 return;
262 v8::Handle<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackI nfo.GetIsolate()); 262 v8::Local<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackIn fo.GetIsolate());
263 v8SetReturnValue(callbackInfo, wrapper); 263 v8SetReturnValue(callbackInfo, wrapper);
264 } 264 }
265 265
266 template<typename CallbackInfo> 266 template<typename CallbackInfo>
267 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Node* impl) 267 inline void v8SetReturnValueForMainWorld(const CallbackInfo& callbackInfo, Node* impl)
268 { 268 {
269 // Since EventTarget has a special version of ToV8 and V8EventTarget.h 269 // Since EventTarget has a special version of ToV8 and V8EventTarget.h
270 // defines its own v8SetReturnValue family, which are slow, we need to 270 // defines its own v8SetReturnValue family, which are slow, we need to
271 // override them with optimized versions for Node and its subclasses. 271 // override them with optimized versions for Node and its subclasses.
272 // Without this overload, v8SetReturnValueForMainWorld for Node would be 272 // Without this overload, v8SetReturnValueForMainWorld for Node would be
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 321
322 template<typename CallbackInfo> 322 template<typename CallbackInfo>
323 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, ScriptWrappab le* impl, const ScriptWrappable* wrappable) 323 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, ScriptWrappab le* impl, const ScriptWrappable* wrappable)
324 { 324 {
325 if (UNLIKELY(!impl)) { 325 if (UNLIKELY(!impl)) {
326 v8SetReturnValueNull(callbackInfo); 326 v8SetReturnValueNull(callbackInfo);
327 return; 327 return;
328 } 328 }
329 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, ca llbackInfo.Holder(), wrappable)) 329 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, ca llbackInfo.Holder(), wrappable))
330 return; 330 return;
331 v8::Handle<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackI nfo.GetIsolate()); 331 v8::Local<v8::Object> wrapper = impl->wrap(callbackInfo.Holder(), callbackIn fo.GetIsolate());
332 v8SetReturnValue(callbackInfo, wrapper); 332 v8SetReturnValue(callbackInfo, wrapper);
333 } 333 }
334 334
335 template<typename CallbackInfo> 335 template<typename CallbackInfo>
336 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, Node* impl, c onst ScriptWrappable* wrappable) 336 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, Node* impl, c onst ScriptWrappable* wrappable)
337 { 337 {
338 if (UNLIKELY(!impl)) { 338 if (UNLIKELY(!impl)) {
339 v8SetReturnValueNull(callbackInfo); 339 v8SetReturnValueNull(callbackInfo);
340 return; 340 return;
341 } 341 }
342 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, ca llbackInfo.Holder(), wrappable)) 342 if (DOMDataStore::setReturnValueFast(callbackInfo.GetReturnValue(), impl, ca llbackInfo.Holder(), wrappable))
343 return; 343 return;
344 v8::Handle<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callb ackInfo.Holder(), callbackInfo.GetIsolate()); 344 v8::Local<v8::Object> wrapper = ScriptWrappable::fromNode(impl)->wrap(callba ckInfo.Holder(), callbackInfo.GetIsolate());
345 v8SetReturnValue(callbackInfo, wrapper); 345 v8SetReturnValue(callbackInfo, wrapper);
346 } 346 }
347 347
348 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget 348 // Special versions for DOMWindow, WorkerGlobalScope and EventTarget
349 349
350 template<typename CallbackInfo> 350 template<typename CallbackInfo>
351 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, DOMWindow* im pl, const ScriptWrappable*) 351 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, DOMWindow* im pl, const ScriptWrappable*)
352 { 352 {
353 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate())); 353 v8SetReturnValue(callbackInfo, toV8(impl, callbackInfo.Holder(), callbackInf o.GetIsolate()));
354 } 354 }
(...skipping 18 matching lines...) Expand all
373 373
374 template<typename CallbackInfo, typename T, typename Wrappable> 374 template<typename CallbackInfo, typename T, typename Wrappable>
375 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, RawPtr<T> imp l, const Wrappable* wrappable) 375 inline void v8SetReturnValueFast(const CallbackInfo& callbackInfo, RawPtr<T> imp l, const Wrappable* wrappable)
376 { 376 {
377 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable); 377 v8SetReturnValueFast(callbackInfo, impl.get(), wrappable);
378 } 378 }
379 379
380 // Convert v8::String to a WTF::String. If the V8 string is not already 380 // Convert v8::String to a WTF::String. If the V8 string is not already
381 // an external string then it is transformed into an external string at this 381 // an external string then it is transformed into an external string at this
382 // point to avoid repeated conversions. 382 // point to avoid repeated conversions.
383 inline String toCoreString(v8::Handle<v8::String> value) 383 inline String toCoreString(v8::Local<v8::String> value)
384 { 384 {
385 return v8StringToWebCoreString<String>(value, Externalize); 385 return v8StringToWebCoreString<String>(value, Externalize);
386 } 386 }
387 387
388 inline String toCoreStringWithNullCheck(v8::Handle<v8::String> value) 388 inline String toCoreStringWithNullCheck(v8::Local<v8::String> value)
389 { 389 {
390 if (value.IsEmpty() || value->IsNull()) 390 if (value.IsEmpty() || value->IsNull())
391 return String(); 391 return String();
392 return toCoreString(value); 392 return toCoreString(value);
393 } 393 }
394 394
395 inline String toCoreStringWithUndefinedOrNullCheck(v8::Handle<v8::String> value) 395 inline String toCoreStringWithUndefinedOrNullCheck(v8::Local<v8::String> value)
396 { 396 {
397 if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) 397 if (value.IsEmpty() || value->IsNull() || value->IsUndefined())
398 return String(); 398 return String();
399 return toCoreString(value); 399 return toCoreString(value);
400 } 400 }
401 401
402 inline AtomicString toCoreAtomicString(v8::Handle<v8::String> value) 402 inline AtomicString toCoreAtomicString(v8::Local<v8::String> value)
403 { 403 {
404 return v8StringToWebCoreString<AtomicString>(value, Externalize); 404 return v8StringToWebCoreString<AtomicString>(value, Externalize);
405 } 405 }
406 406
407 // This method will return a null String if the v8::Value does not contain a v8: :String. 407 // This method will return a null String if the v8::Value does not contain a v8: :String.
408 // It will not call ToString() on the v8::Value. If you want ToString() to be ca lled, 408 // It will not call ToString() on the v8::Value. If you want ToString() to be ca lled,
409 // please use the TONATIVE_FOR_V8STRINGRESOURCE_*() macros instead. 409 // please use the TONATIVE_FOR_V8STRINGRESOURCE_*() macros instead.
410 inline String toCoreStringWithUndefinedOrNullCheck(v8::Handle<v8::Value> value) 410 inline String toCoreStringWithUndefinedOrNullCheck(v8::Local<v8::Value> value)
411 { 411 {
412 if (value.IsEmpty() || !value->IsString()) 412 if (value.IsEmpty() || !value->IsString())
413 return String(); 413 return String();
414 return toCoreString(value.As<v8::String>()); 414 return toCoreString(value.As<v8::String>());
415 } 415 }
416 416
417 // Convert a string to a V8 string. 417 // Convert a string to a V8 string.
418 // Return a V8 external string that shares the underlying buffer with the given 418 // Return a V8 external string that shares the underlying buffer with the given
419 // WebCore string. The reference counting mechanism is used to keep the 419 // WebCore string. The reference counting mechanism is used to keep the
420 // underlying buffer alive while the string is still live in the V8 engine. 420 // underlying buffer alive while the string is still live in the V8 engine.
421 inline v8::Handle<v8::String> v8String(v8::Isolate* isolate, const String& strin g) 421 inline v8::Local<v8::String> v8String(v8::Isolate* isolate, const String& string )
422 { 422 {
423 if (string.isNull()) 423 if (string.isNull())
424 return v8::String::Empty(isolate); 424 return v8::String::Empty(isolate);
425 return V8PerIsolateData::from(isolate)->stringCache()->v8ExternalString(isol ate, string.impl()); 425 return V8PerIsolateData::from(isolate)->stringCache()->v8ExternalString(isol ate, string.impl());
426 } 426 }
427 427
428 inline v8::Handle<v8::String> v8AtomicString(v8::Isolate* isolate, const char* s tr, int length = -1) 428 inline v8::Local<v8::String> v8AtomicString(v8::Isolate* isolate, const char* st r, int length = -1)
429 { 429 {
430 ASSERT(isolate); 430 ASSERT(isolate);
431 v8::Local<v8::String> value; 431 v8::Local<v8::String> value;
432 if (LIKELY(v8::String::NewFromUtf8(isolate, str, v8::NewStringType::kInterna lized, length).ToLocal(&value))) 432 if (LIKELY(v8::String::NewFromUtf8(isolate, str, v8::NewStringType::kInterna lized, length).ToLocal(&value)))
433 return value; 433 return value;
434 // Immediately crashes when NewFromUtf8() fails because it only fails the 434 // Immediately crashes when NewFromUtf8() fails because it only fails the
435 // given str is too long. 435 // given str is too long.
436 RELEASE_ASSERT_NOT_REACHED(); 436 RELEASE_ASSERT_NOT_REACHED();
437 return v8::String::Empty(isolate); 437 return v8::String::Empty(isolate);
438 } 438 }
439 439
440 inline v8::Handle<v8::Value> v8Undefined() 440 inline v8::Local<v8::Value> v8Undefined()
441 { 441 {
442 return v8::Handle<v8::Value>(); 442 return v8::Local<v8::Value>();
443 } 443 }
444 444
445 // Conversion flags, used in toIntXX/toUIntXX. 445 // Conversion flags, used in toIntXX/toUIntXX.
446 enum IntegerConversionConfiguration { 446 enum IntegerConversionConfiguration {
447 NormalConversion, 447 NormalConversion,
448 EnforceRange, 448 EnforceRange,
449 Clamp 449 Clamp
450 }; 450 };
451 451
452 // Convert a value to a boolean. 452 // Convert a value to a boolean.
453 CORE_EXPORT bool toBooleanSlow(v8::Isolate*, v8::Local<v8::Value>, ExceptionStat e&); 453 CORE_EXPORT bool toBooleanSlow(v8::Isolate*, v8::Local<v8::Value>, ExceptionStat e&);
454 inline bool toBoolean(v8::Isolate* isolate, v8::Local<v8::Value> value, Exceptio nState& exceptionState) 454 inline bool toBoolean(v8::Isolate* isolate, v8::Local<v8::Value> value, Exceptio nState& exceptionState)
455 { 455 {
456 if (LIKELY(value->IsBoolean())) 456 if (LIKELY(value->IsBoolean()))
457 return value.As<v8::Boolean>()->Value(); 457 return value.As<v8::Boolean>()->Value();
458 return toBooleanSlow(isolate, value, exceptionState); 458 return toBooleanSlow(isolate, value, exceptionState);
459 } 459 }
460 460
461 // Convert a value to a 8-bit signed integer. The conversion fails if the 461 // Convert a value to a 8-bit signed integer. The conversion fails if the
462 // value cannot be converted to a number or the range violated per WebIDL: 462 // value cannot be converted to a number or the range violated per WebIDL:
463 // http://www.w3.org/TR/WebIDL/#es-byte 463 // http://www.w3.org/TR/WebIDL/#es-byte
464 CORE_EXPORT int8_t toInt8(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversion Configuration, ExceptionState&); 464 CORE_EXPORT int8_t toInt8(v8::Isolate*, v8::Local<v8::Value>, IntegerConversionC onfiguration, ExceptionState&);
465 465
466 // Convert a value to a 8-bit unsigned integer. The conversion fails if the 466 // Convert a value to a 8-bit unsigned integer. The conversion fails if the
467 // value cannot be converted to a number or the range violated per WebIDL: 467 // value cannot be converted to a number or the range violated per WebIDL:
468 // http://www.w3.org/TR/WebIDL/#es-octet 468 // http://www.w3.org/TR/WebIDL/#es-octet
469 CORE_EXPORT uint8_t toUInt8(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversi onConfiguration, ExceptionState&); 469 CORE_EXPORT uint8_t toUInt8(v8::Isolate*, v8::Local<v8::Value>, IntegerConversio nConfiguration, ExceptionState&);
470 470
471 // Convert a value to a 16-bit signed integer. The conversion fails if the 471 // Convert a value to a 16-bit signed integer. The conversion fails if the
472 // value cannot be converted to a number or the range violated per WebIDL: 472 // value cannot be converted to a number or the range violated per WebIDL:
473 // http://www.w3.org/TR/WebIDL/#es-short 473 // http://www.w3.org/TR/WebIDL/#es-short
474 CORE_EXPORT int16_t toInt16(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversi onConfiguration, ExceptionState&); 474 CORE_EXPORT int16_t toInt16(v8::Isolate*, v8::Local<v8::Value>, IntegerConversio nConfiguration, ExceptionState&);
475 475
476 // Convert a value to a 16-bit unsigned integer. The conversion fails if the 476 // Convert a value to a 16-bit unsigned integer. The conversion fails if the
477 // value cannot be converted to a number or the range violated per WebIDL: 477 // value cannot be converted to a number or the range violated per WebIDL:
478 // http://www.w3.org/TR/WebIDL/#es-unsigned-short 478 // http://www.w3.org/TR/WebIDL/#es-unsigned-short
479 CORE_EXPORT uint16_t toUInt16(v8::Isolate*, v8::Handle<v8::Value>, IntegerConver sionConfiguration, ExceptionState&); 479 CORE_EXPORT uint16_t toUInt16(v8::Isolate*, v8::Local<v8::Value>, IntegerConvers ionConfiguration, ExceptionState&);
480 480
481 // Convert a value to a 32-bit signed integer. The conversion fails if the 481 // Convert a value to a 32-bit signed integer. The conversion fails if the
482 // value cannot be converted to a number or the range violated per WebIDL: 482 // value cannot be converted to a number or the range violated per WebIDL:
483 // http://www.w3.org/TR/WebIDL/#es-long 483 // http://www.w3.org/TR/WebIDL/#es-long
484 CORE_EXPORT int32_t toInt32Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerConv ersionConfiguration, ExceptionState&); 484 CORE_EXPORT int32_t toInt32Slow(v8::Isolate*, v8::Local<v8::Value>, IntegerConve rsionConfiguration, ExceptionState&);
485 inline int32_t toInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Intege rConversionConfiguration configuration, ExceptionState& exceptionState) 485 inline int32_t toInt32(v8::Isolate* isolate, v8::Local<v8::Value> value, Integer ConversionConfiguration configuration, ExceptionState& exceptionState)
486 { 486 {
487 // Fast case. The value is already a 32-bit integer. 487 // Fast case. The value is already a 32-bit integer.
488 if (LIKELY(value->IsInt32())) 488 if (LIKELY(value->IsInt32()))
489 return value.As<v8::Int32>()->Value(); 489 return value.As<v8::Int32>()->Value();
490 return toInt32Slow(isolate, value, configuration, exceptionState); 490 return toInt32Slow(isolate, value, configuration, exceptionState);
491 } 491 }
492 492
493 // Convert a value to a 32-bit unsigned integer. The conversion fails if the 493 // Convert a value to a 32-bit unsigned integer. The conversion fails if the
494 // value cannot be converted to a number or the range violated per WebIDL: 494 // value cannot be converted to a number or the range violated per WebIDL:
495 // http://www.w3.org/TR/WebIDL/#es-unsigned-long 495 // http://www.w3.org/TR/WebIDL/#es-unsigned-long
496 CORE_EXPORT uint32_t toUInt32Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerCo nversionConfiguration, ExceptionState&); 496 CORE_EXPORT uint32_t toUInt32Slow(v8::Isolate*, v8::Local<v8::Value>, IntegerCon versionConfiguration, ExceptionState&);
497 inline uint32_t toUInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Inte gerConversionConfiguration configuration, ExceptionState& exceptionState) 497 inline uint32_t toUInt32(v8::Isolate* isolate, v8::Local<v8::Value> value, Integ erConversionConfiguration configuration, ExceptionState& exceptionState)
498 { 498 {
499 // Fast case. The value is already a 32-bit unsigned integer. 499 // Fast case. The value is already a 32-bit unsigned integer.
500 if (LIKELY(value->IsUint32())) 500 if (LIKELY(value->IsUint32()))
501 return value.As<v8::Uint32>()->Value(); 501 return value.As<v8::Uint32>()->Value();
502 502
503 // Fast case. The value is a 32-bit signed integer with NormalConversion con figuration. 503 // Fast case. The value is a 32-bit signed integer with NormalConversion con figuration.
504 if (LIKELY(value->IsInt32() && configuration == NormalConversion)) 504 if (LIKELY(value->IsInt32() && configuration == NormalConversion))
505 return value.As<v8::Int32>()->Value(); 505 return value.As<v8::Int32>()->Value();
506 506
507 return toUInt32Slow(isolate, value, configuration, exceptionState); 507 return toUInt32Slow(isolate, value, configuration, exceptionState);
508 } 508 }
509 509
510 // Convert a value to a 64-bit signed integer. The conversion fails if the 510 // Convert a value to a 64-bit signed integer. The conversion fails if the
511 // value cannot be converted to a number or the range violated per WebIDL: 511 // value cannot be converted to a number or the range violated per WebIDL:
512 // http://www.w3.org/TR/WebIDL/#es-long-long 512 // http://www.w3.org/TR/WebIDL/#es-long-long
513 CORE_EXPORT int64_t toInt64Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerConv ersionConfiguration, ExceptionState&); 513 CORE_EXPORT int64_t toInt64Slow(v8::Isolate*, v8::Local<v8::Value>, IntegerConve rsionConfiguration, ExceptionState&);
514 inline int64_t toInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Intege rConversionConfiguration configuration, ExceptionState& exceptionState) 514 inline int64_t toInt64(v8::Isolate* isolate, v8::Local<v8::Value> value, Integer ConversionConfiguration configuration, ExceptionState& exceptionState)
515 { 515 {
516 // Clamping not supported for int64_t/long long int. See Source/wtf/MathExtr as.h. 516 // Clamping not supported for int64_t/long long int. See Source/wtf/MathExtr as.h.
517 ASSERT(configuration != Clamp); 517 ASSERT(configuration != Clamp);
518 518
519 // Fast case. The value is a 32-bit integer. 519 // Fast case. The value is a 32-bit integer.
520 if (LIKELY(value->IsInt32())) 520 if (LIKELY(value->IsInt32()))
521 return value.As<v8::Int32>()->Value(); 521 return value.As<v8::Int32>()->Value();
522 522
523 return toInt64Slow(isolate, value, configuration, exceptionState); 523 return toInt64Slow(isolate, value, configuration, exceptionState);
524 } 524 }
525 525
526 // Convert a value to a 64-bit unsigned integer. The conversion fails if the 526 // Convert a value to a 64-bit unsigned integer. The conversion fails if the
527 // value cannot be converted to a number or the range violated per WebIDL: 527 // value cannot be converted to a number or the range violated per WebIDL:
528 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long 528 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long
529 CORE_EXPORT uint64_t toUInt64Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerCo nversionConfiguration, ExceptionState&); 529 CORE_EXPORT uint64_t toUInt64Slow(v8::Isolate*, v8::Local<v8::Value>, IntegerCon versionConfiguration, ExceptionState&);
530 inline uint64_t toUInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Inte gerConversionConfiguration configuration, ExceptionState& exceptionState) 530 inline uint64_t toUInt64(v8::Isolate* isolate, v8::Local<v8::Value> value, Integ erConversionConfiguration configuration, ExceptionState& exceptionState)
531 { 531 {
532 // Fast case. The value is a 32-bit unsigned integer. 532 // Fast case. The value is a 32-bit unsigned integer.
533 if (LIKELY(value->IsUint32())) 533 if (LIKELY(value->IsUint32()))
534 return value.As<v8::Uint32>()->Value(); 534 return value.As<v8::Uint32>()->Value();
535 535
536 if (LIKELY(value->IsInt32() && configuration == NormalConversion)) 536 if (LIKELY(value->IsInt32() && configuration == NormalConversion))
537 return value.As<v8::Int32>()->Value(); 537 return value.As<v8::Int32>()->Value();
538 538
539 return toUInt64Slow(isolate, value, configuration, exceptionState); 539 return toUInt64Slow(isolate, value, configuration, exceptionState);
540 } 540 }
541 541
542 // Convert a value to a double precision float, which might fail. 542 // Convert a value to a double precision float, which might fail.
543 CORE_EXPORT double toDoubleSlow(v8::Isolate*, v8::Handle<v8::Value>, ExceptionSt ate&); 543 CORE_EXPORT double toDoubleSlow(v8::Isolate*, v8::Local<v8::Value>, ExceptionSta te&);
544 inline double toDouble(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState) 544 inline double toDouble(v8::Isolate* isolate, v8::Local<v8::Value> value, Excepti onState& exceptionState)
545 { 545 {
546 if (LIKELY(value->IsNumber())) 546 if (LIKELY(value->IsNumber()))
547 return value.As<v8::Number>()->Value(); 547 return value.As<v8::Number>()->Value();
548 return toDoubleSlow(isolate, value, exceptionState); 548 return toDoubleSlow(isolate, value, exceptionState);
549 } 549 }
550 550
551 // Convert a value to a double precision float, throwing on non-finite values. 551 // Convert a value to a double precision float, throwing on non-finite values.
552 CORE_EXPORT double toRestrictedDouble(v8::Isolate*, v8::Handle<v8::Value>, Excep tionState&); 552 CORE_EXPORT double toRestrictedDouble(v8::Isolate*, v8::Local<v8::Value>, Except ionState&);
553 553
554 // Convert a value to a single precision float, which might fail. 554 // Convert a value to a single precision float, which might fail.
555 inline float toFloat(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exceptio nState& exceptionState) 555 inline float toFloat(v8::Isolate* isolate, v8::Local<v8::Value> value, Exception State& exceptionState)
556 { 556 {
557 return static_cast<float>(toDouble(isolate, value, exceptionState)); 557 return static_cast<float>(toDouble(isolate, value, exceptionState));
558 } 558 }
559 559
560 // Convert a value to a single precision float, throwing on non-finite values. 560 // Convert a value to a single precision float, throwing on non-finite values.
561 CORE_EXPORT float toRestrictedFloat(v8::Isolate*, v8::Handle<v8::Value>, Excepti onState&); 561 CORE_EXPORT float toRestrictedFloat(v8::Isolate*, v8::Local<v8::Value>, Exceptio nState&);
562 562
563 // Converts a value to a String, throwing if any code unit is outside 0-255. 563 // Converts a value to a String, throwing if any code unit is outside 0-255.
564 CORE_EXPORT String toByteString(v8::Isolate*, v8::Handle<v8::Value>, ExceptionSt ate&); 564 CORE_EXPORT String toByteString(v8::Isolate*, v8::Local<v8::Value>, ExceptionSta te&);
565 565
566 // Converts a value to a String, replacing unmatched UTF-16 surrogates with repl acement characters. 566 // Converts a value to a String, replacing unmatched UTF-16 surrogates with repl acement characters.
567 CORE_EXPORT String toUSVString(v8::Isolate*, v8::Handle<v8::Value>, ExceptionSta te&); 567 CORE_EXPORT String toUSVString(v8::Isolate*, v8::Local<v8::Value>, ExceptionStat e&);
568 568
569 inline v8::Handle<v8::Boolean> v8Boolean(bool value, v8::Isolate* isolate) 569 inline v8::Local<v8::Boolean> v8Boolean(bool value, v8::Isolate* isolate)
570 { 570 {
571 return value ? v8::True(isolate) : v8::False(isolate); 571 return value ? v8::True(isolate) : v8::False(isolate);
572 } 572 }
573 573
574 inline double toCoreDate(v8::Isolate* isolate, v8::Handle<v8::Value> object) 574 inline double toCoreDate(v8::Isolate* isolate, v8::Local<v8::Value> object)
575 { 575 {
576 if (object->IsDate()) 576 if (object->IsDate())
577 return object.As<v8::Date>()->ValueOf(); 577 return object.As<v8::Date>()->ValueOf();
578 if (object->IsNumber()) 578 if (object->IsNumber())
579 return object.As<v8::Number>()->Value(); 579 return object.As<v8::Number>()->Value();
580 return std::numeric_limits<double>::quiet_NaN(); 580 return std::numeric_limits<double>::quiet_NaN();
581 } 581 }
582 582
583 inline v8::MaybeLocal<v8::Value> v8DateOrNaN(v8::Isolate* isolate, double value) 583 inline v8::MaybeLocal<v8::Value> v8DateOrNaN(v8::Isolate* isolate, double value)
584 { 584 {
585 ASSERT(isolate); 585 ASSERT(isolate);
586 return v8::Date::New(isolate->GetCurrentContext(), std::isfinite(value) ? va lue : std::numeric_limits<double>::quiet_NaN()); 586 return v8::Date::New(isolate->GetCurrentContext(), std::isfinite(value) ? va lue : std::numeric_limits<double>::quiet_NaN());
587 } 587 }
588 588
589 // FIXME: Remove the special casing for NodeFilter and XPathNSResolver. 589 // FIXME: Remove the special casing for NodeFilter and XPathNSResolver.
590 PassRefPtrWillBeRawPtr<NodeFilter> toNodeFilter(v8::Handle<v8::Value>, v8::Handl e<v8::Object>, ScriptState*); 590 PassRefPtrWillBeRawPtr<NodeFilter> toNodeFilter(v8::Local<v8::Value>, v8::Local< v8::Object>, ScriptState*);
591 XPathNSResolver* toXPathNSResolver(ScriptState*, v8::Handle<v8::Value>); 591 XPathNSResolver* toXPathNSResolver(ScriptState*, v8::Local<v8::Value>);
592 592
593 bool toV8Sequence(v8::Handle<v8::Value>, uint32_t& length, v8::Isolate*, Excepti onState&); 593 bool toV8Sequence(v8::Local<v8::Value>, uint32_t& length, v8::Isolate*, Exceptio nState&);
594 594
595 // Converts a JavaScript value to an array as per the Web IDL specification: 595 // Converts a JavaScript value to an array as per the Web IDL specification:
596 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-array 596 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-array
597 template <class T, class V8T> 597 template <class T, class V8T>
598 Vector<RefPtr<T>> toRefPtrNativeArrayUnchecked(v8::Local<v8::Value> v8Value, uin t32_t length, v8::Isolate* isolate, ExceptionState& exceptionState) 598 Vector<RefPtr<T>> toRefPtrNativeArrayUnchecked(v8::Local<v8::Value> v8Value, uin t32_t length, v8::Isolate* isolate, ExceptionState& exceptionState)
599 { 599 {
600 Vector<RefPtr<T>> result; 600 Vector<RefPtr<T>> result;
601 result.reserveInitialCapacity(length); 601 result.reserveInitialCapacity(length);
602 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value); 602 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value);
603 v8::TryCatch block; 603 v8::TryCatch block;
604 for (uint32_t i = 0; i < length; ++i) { 604 for (uint32_t i = 0; i < length; ++i) {
605 v8::Local<v8::Value> element; 605 v8::Local<v8::Value> element;
606 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) { 606 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) {
607 exceptionState.rethrowV8Exception(block.Exception()); 607 exceptionState.rethrowV8Exception(block.Exception());
608 return Vector<RefPtr<T>>(); 608 return Vector<RefPtr<T>>();
609 } 609 }
610 if (V8T::hasInstance(element, isolate)) { 610 if (V8T::hasInstance(element, isolate)) {
611 v8::Local<v8::Object> elementObject = v8::Handle<v8::Object>::Cast(e lement); 611 v8::Local<v8::Object> elementObject = v8::Local<v8::Object>::Cast(el ement);
612 result.uncheckedAppend(V8T::toImpl(elementObject)); 612 result.uncheckedAppend(V8T::toImpl(elementObject));
613 } else { 613 } else {
614 exceptionState.throwTypeError("Invalid Array element type"); 614 exceptionState.throwTypeError("Invalid Array element type");
615 return Vector<RefPtr<T>>(); 615 return Vector<RefPtr<T>>();
616 } 616 }
617 } 617 }
618 return result; 618 return result;
619 } 619 }
620 620
621 template <class T, class V8T> 621 template <class T, class V8T>
622 Vector<RefPtr<T>> toRefPtrNativeArray(v8::Local<v8::Value> value, int argumentIn dex, v8::Isolate* isolate, ExceptionState& exceptionState) 622 Vector<RefPtr<T>> toRefPtrNativeArray(v8::Local<v8::Value> value, int argumentIn dex, v8::Isolate* isolate, ExceptionState& exceptionState)
623 { 623 {
624 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); 624 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value));
625 uint32_t length = 0; 625 uint32_t length = 0;
626 if (value->IsArray()) { 626 if (value->IsArray()) {
627 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); 627 length = v8::Local<v8::Array>::Cast(v8Value)->Length();
628 } else if (!toV8Sequence(value, length, isolate, exceptionState)) { 628 } else if (!toV8Sequence(value, length, isolate, exceptionState)) {
629 if (!exceptionState.hadException()) 629 if (!exceptionState.hadException())
630 exceptionState.throwTypeError(ExceptionMessages::notAnArrayTypeArgum entOrValue(argumentIndex)); 630 exceptionState.throwTypeError(ExceptionMessages::notAnArrayTypeArgum entOrValue(argumentIndex));
631 return Vector<RefPtr<T>>(); 631 return Vector<RefPtr<T>>();
632 } 632 }
633 return toRefPtrNativeArrayUnchecked<T, V8T>(v8Value, length, isolate, except ionState); 633 return toRefPtrNativeArrayUnchecked<T, V8T>(v8Value, length, isolate, except ionState);
634 } 634 }
635 635
636 template <class T, class V8T> 636 template <class T, class V8T>
637 Vector<RefPtr<T>> toRefPtrNativeArray(v8::Handle<v8::Value> value, const String& propertyName, v8::Isolate* isolate, ExceptionState& exceptionState) 637 Vector<RefPtr<T>> toRefPtrNativeArray(v8::Local<v8::Value> value, const String& propertyName, v8::Isolate* isolate, ExceptionState& exceptionState)
638 { 638 {
639 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value)); 639 v8::Local<v8::Value> v8Value(v8::Local<v8::Value>::New(isolate, value));
640 uint32_t length = 0; 640 uint32_t length = 0;
641 if (value->IsArray()) { 641 if (value->IsArray()) {
642 length = v8::Local<v8::Array>::Cast(v8Value)->Length(); 642 length = v8::Local<v8::Array>::Cast(v8Value)->Length();
643 } else if (!toV8Sequence(value, length, isolate, exceptionState)) { 643 } else if (!toV8Sequence(value, length, isolate, exceptionState)) {
644 if (!exceptionState.hadException()) 644 if (!exceptionState.hadException())
645 exceptionState.throwTypeError(ExceptionMessages::notASequenceTypePro perty(propertyName)); 645 exceptionState.throwTypeError(ExceptionMessages::notASequenceTypePro perty(propertyName));
646 return Vector<RefPtr<T>>(); 646 return Vector<RefPtr<T>>();
647 } 647 }
(...skipping 17 matching lines...) Expand all
665 result.reserveInitialCapacity(length); 665 result.reserveInitialCapacity(length);
666 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value); 666 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value);
667 v8::TryCatch block; 667 v8::TryCatch block;
668 for (uint32_t i = 0; i < length; ++i) { 668 for (uint32_t i = 0; i < length; ++i) {
669 v8::Local<v8::Value> element; 669 v8::Local<v8::Value> element;
670 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) { 670 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) {
671 exceptionState.rethrowV8Exception(block.Exception()); 671 exceptionState.rethrowV8Exception(block.Exception());
672 return WillBeHeapVector<RefPtrWillBeMember<T>>(); 672 return WillBeHeapVector<RefPtrWillBeMember<T>>();
673 } 673 }
674 if (V8T::hasInstance(element, isolate)) { 674 if (V8T::hasInstance(element, isolate)) {
675 v8::Local<v8::Object> elementObject = v8::Handle<v8::Object>::Cast(e lement); 675 v8::Local<v8::Object> elementObject = v8::Local<v8::Object>::Cast(el ement);
676 result.uncheckedAppend(V8T::toImpl(elementObject)); 676 result.uncheckedAppend(V8T::toImpl(elementObject));
677 } else { 677 } else {
678 exceptionState.throwTypeError("Invalid Array element type"); 678 exceptionState.throwTypeError("Invalid Array element type");
679 return WillBeHeapVector<RefPtrWillBeMember<T>>(); 679 return WillBeHeapVector<RefPtrWillBeMember<T>>();
680 } 680 }
681 } 681 }
682 return result; 682 return result;
683 } 683 }
684 684
685 template <class T, class V8T> 685 template <class T, class V8T>
(...skipping 13 matching lines...) Expand all
699 result.reserveInitialCapacity(length); 699 result.reserveInitialCapacity(length);
700 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value); 700 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value);
701 v8::TryCatch block; 701 v8::TryCatch block;
702 for (uint32_t i = 0; i < length; ++i) { 702 for (uint32_t i = 0; i < length; ++i) {
703 v8::Local<v8::Value> element; 703 v8::Local<v8::Value> element;
704 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) { 704 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) {
705 exceptionState.rethrowV8Exception(block.Exception()); 705 exceptionState.rethrowV8Exception(block.Exception());
706 return WillBeHeapVector<RefPtrWillBeMember<T>>(); 706 return WillBeHeapVector<RefPtrWillBeMember<T>>();
707 } 707 }
708 if (V8T::hasInstance(element, isolate)) { 708 if (V8T::hasInstance(element, isolate)) {
709 v8::Local<v8::Object> elementObject = v8::Handle<v8::Object>::Cast(e lement); 709 v8::Local<v8::Object> elementObject = v8::Local<v8::Object>::Cast(el ement);
710 result.uncheckedAppend(V8T::toImpl(elementObject)); 710 result.uncheckedAppend(V8T::toImpl(elementObject));
711 } else { 711 } else {
712 exceptionState.throwTypeError("Invalid Array element type"); 712 exceptionState.throwTypeError("Invalid Array element type");
713 return WillBeHeapVector<RefPtrWillBeMember<T>>(); 713 return WillBeHeapVector<RefPtrWillBeMember<T>>();
714 } 714 }
715 } 715 }
716 return result; 716 return result;
717 } 717 }
718 718
719 template <class T, class V8T> 719 template <class T, class V8T>
(...skipping 13 matching lines...) Expand all
733 result.reserveInitialCapacity(length); 733 result.reserveInitialCapacity(length);
734 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value); 734 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(v8Value);
735 v8::TryCatch block; 735 v8::TryCatch block;
736 for (uint32_t i = 0; i < length; ++i) { 736 for (uint32_t i = 0; i < length; ++i) {
737 v8::Local<v8::Value> element; 737 v8::Local<v8::Value> element;
738 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) { 738 if (!v8Call(object->Get(isolate->GetCurrentContext(), i), element, block )) {
739 exceptionState.rethrowV8Exception(block.Exception()); 739 exceptionState.rethrowV8Exception(block.Exception());
740 return HeapVector<Member<T>>(); 740 return HeapVector<Member<T>>();
741 } 741 }
742 if (V8T::hasInstance(element, isolate)) { 742 if (V8T::hasInstance(element, isolate)) {
743 v8::Handle<v8::Object> elementObject = v8::Handle<v8::Object>::Cast( element); 743 v8::Local<v8::Object> elementObject = v8::Local<v8::Object>::Cast(el ement);
744 result.uncheckedAppend(V8T::toImpl(elementObject)); 744 result.uncheckedAppend(V8T::toImpl(elementObject));
745 } else { 745 } else {
746 exceptionState.throwTypeError("Invalid Array element type"); 746 exceptionState.throwTypeError("Invalid Array element type");
747 return HeapVector<Member<T>>(); 747 return HeapVector<Member<T>>();
748 } 748 }
749 } 749 }
750 return result; 750 return result;
751 } 751 }
752 752
753 // Converts a JavaScript value to an array as per the Web IDL specification: 753 // Converts a JavaScript value to an array as per the Web IDL specification:
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 result.uncheckedAppend(TraitsType::nativeValue(info.GetIsolate(), in fo[i], exceptionState)); 813 result.uncheckedAppend(TraitsType::nativeValue(info.GetIsolate(), in fo[i], exceptionState));
814 if (exceptionState.hadException()) 814 if (exceptionState.hadException())
815 return Vector<T>(); 815 return Vector<T>();
816 } 816 }
817 } 817 }
818 return result; 818 return result;
819 } 819 }
820 820
821 // Validates that the passed object is a sequence type per WebIDL spec 821 // Validates that the passed object is a sequence type per WebIDL spec
822 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-sequence 822 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-sequence
823 inline bool toV8Sequence(v8::Handle<v8::Value> value, uint32_t& length, v8::Isol ate* isolate, ExceptionState& exceptionState) 823 inline bool toV8Sequence(v8::Local<v8::Value> value, uint32_t& length, v8::Isola te* isolate, ExceptionState& exceptionState)
824 { 824 {
825 // Attempt converting to a sequence if the value is not already an array but is 825 // Attempt converting to a sequence if the value is not already an array but is
826 // any kind of object except for a native Date object or a native RegExp obj ect. 826 // any kind of object except for a native Date object or a native RegExp obj ect.
827 ASSERT(!value->IsArray()); 827 ASSERT(!value->IsArray());
828 // FIXME: Do we really need to special case Date and RegExp object? 828 // FIXME: Do we really need to special case Date and RegExp object?
829 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22806 829 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22806
830 if (!value->IsObject() || value->IsDate() || value->IsRegExp()) { 830 if (!value->IsObject() || value->IsDate() || value->IsRegExp()) {
831 // The caller is responsible for reporting a TypeError. 831 // The caller is responsible for reporting a TypeError.
832 return false; 832 return false;
833 } 833 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 930
931 using JSONValuePtr = PassRefPtr<JSONValue>; 931 using JSONValuePtr = PassRefPtr<JSONValue>;
932 template <> 932 template <>
933 struct NativeValueTraits<JSONValuePtr> { 933 struct NativeValueTraits<JSONValuePtr> {
934 CORE_EXPORT static JSONValuePtr nativeValue(v8::Isolate*, v8::Local<v8::Valu e>, ExceptionState&, int maxDepth = JSONValue::maxDepth); 934 CORE_EXPORT static JSONValuePtr nativeValue(v8::Isolate*, v8::Local<v8::Valu e>, ExceptionState&, int maxDepth = JSONValue::maxDepth);
935 }; 935 };
936 936
937 CORE_EXPORT v8::Isolate* toIsolate(ExecutionContext*); 937 CORE_EXPORT v8::Isolate* toIsolate(ExecutionContext*);
938 CORE_EXPORT v8::Isolate* toIsolate(LocalFrame*); 938 CORE_EXPORT v8::Isolate* toIsolate(LocalFrame*);
939 939
940 DOMWindow* toDOMWindow(v8::Isolate*, v8::Handle<v8::Value>); 940 DOMWindow* toDOMWindow(v8::Isolate*, v8::Local<v8::Value>);
941 DOMWindow* toDOMWindow(v8::Handle<v8::Context>); 941 DOMWindow* toDOMWindow(v8::Local<v8::Context>);
942 LocalDOMWindow* enteredDOMWindow(v8::Isolate*); 942 LocalDOMWindow* enteredDOMWindow(v8::Isolate*);
943 CORE_EXPORT LocalDOMWindow* currentDOMWindow(v8::Isolate*); 943 CORE_EXPORT LocalDOMWindow* currentDOMWindow(v8::Isolate*);
944 LocalDOMWindow* callingDOMWindow(v8::Isolate*); 944 LocalDOMWindow* callingDOMWindow(v8::Isolate*);
945 ExecutionContext* toExecutionContext(v8::Handle<v8::Context>); 945 ExecutionContext* toExecutionContext(v8::Local<v8::Context>);
946 CORE_EXPORT ExecutionContext* currentExecutionContext(v8::Isolate*); 946 CORE_EXPORT ExecutionContext* currentExecutionContext(v8::Isolate*);
947 CORE_EXPORT ExecutionContext* callingExecutionContext(v8::Isolate*); 947 CORE_EXPORT ExecutionContext* callingExecutionContext(v8::Isolate*);
948 948
949 // Returns a V8 context associated with a ExecutionContext and a DOMWrapperWorld . 949 // Returns a V8 context associated with a ExecutionContext and a DOMWrapperWorld .
950 // This method returns an empty context if there is no frame or the frame is alr eady detached. 950 // This method returns an empty context if there is no frame or the frame is alr eady detached.
951 CORE_EXPORT v8::Local<v8::Context> toV8Context(ExecutionContext*, DOMWrapperWorl d&); 951 CORE_EXPORT v8::Local<v8::Context> toV8Context(ExecutionContext*, DOMWrapperWorl d&);
952 // Returns a V8 context associated with a Frame and a DOMWrapperWorld. 952 // Returns a V8 context associated with a Frame and a DOMWrapperWorld.
953 // This method returns an empty context if the frame is already detached. 953 // This method returns an empty context if the frame is already detached.
954 CORE_EXPORT v8::Local<v8::Context> toV8Context(Frame*, DOMWrapperWorld&); 954 CORE_EXPORT v8::Local<v8::Context> toV8Context(Frame*, DOMWrapperWorld&);
955 955
956 // Returns the frame object of the window object associated with 956 // Returns the frame object of the window object associated with
957 // a context, if the window is currently being displayed in a Frame. 957 // a context, if the window is currently being displayed in a Frame.
958 CORE_EXPORT Frame* toFrameIfNotDetached(v8::Handle<v8::Context>); 958 CORE_EXPORT Frame* toFrameIfNotDetached(v8::Local<v8::Context>);
959 959
960 CORE_EXPORT EventTarget* toEventTarget(v8::Isolate*, v8::Handle<v8::Value>); 960 CORE_EXPORT EventTarget* toEventTarget(v8::Isolate*, v8::Local<v8::Value>);
961 961
962 // If the current context causes out of memory, JavaScript setting 962 // If the current context causes out of memory, JavaScript setting
963 // is disabled and it returns true. 963 // is disabled and it returns true.
964 bool handleOutOfMemory(); 964 bool handleOutOfMemory();
965 void crashIfV8IsDead(); 965 void crashIfV8IsDead();
966 966
967 inline bool isUndefinedOrNull(v8::Handle<v8::Value> value) 967 inline bool isUndefinedOrNull(v8::Local<v8::Value> value)
968 { 968 {
969 return value.IsEmpty() || value->IsNull() || value->IsUndefined(); 969 return value.IsEmpty() || value->IsNull() || value->IsUndefined();
970 } 970 }
971 v8::Handle<v8::Function> getBoundFunction(v8::Handle<v8::Function>); 971 v8::Local<v8::Function> getBoundFunction(v8::Local<v8::Function>);
972 972
973 // Attaches |environment| to |function| and returns it. 973 // Attaches |environment| to |function| and returns it.
974 inline v8::Local<v8::Function> createClosure(v8::FunctionCallback function, v8:: Handle<v8::Value> environment, v8::Isolate* isolate) 974 inline v8::Local<v8::Function> createClosure(v8::FunctionCallback function, v8:: Local<v8::Value> environment, v8::Isolate* isolate)
975 { 975 {
976 return v8::Function::New(isolate, function, environment); 976 return v8::Function::New(isolate, function, environment);
977 } 977 }
978 978
979 // FIXME: This will be soon embedded in the generated code. 979 // FIXME: This will be soon embedded in the generated code.
980 template<class Collection> static void indexedPropertyEnumerator(const v8::Prope rtyCallbackInfo<v8::Array>& info) 980 template<class Collection> static void indexedPropertyEnumerator(const v8::Prope rtyCallbackInfo<v8::Array>& info)
981 { 981 {
982 Collection* collection = toScriptWrappable(info.Holder())->toImpl<Collection >(); 982 Collection* collection = toScriptWrappable(info.Holder())->toImpl<Collection >();
983 int length = collection->length(); 983 int length = collection->length();
984 v8::Handle<v8::Array> properties = v8::Array::New(info.GetIsolate(), length) ; 984 v8::Local<v8::Array> properties = v8::Array::New(info.GetIsolate(), length);
985 for (int i = 0; i < length; ++i) { 985 for (int i = 0; i < length; ++i) {
986 // FIXME: Do we need to check that the item function returns a non-null value for this index? 986 // FIXME: Do we need to check that the item function returns a non-null value for this index?
987 v8::Handle<v8::Integer> integer = v8::Integer::New(info.GetIsolate(), i) ; 987 v8::Local<v8::Integer> integer = v8::Integer::New(info.GetIsolate(), i);
988 properties->Set(integer, integer); 988 properties->Set(integer, integer);
989 } 989 }
990 v8SetReturnValue(info, properties); 990 v8SetReturnValue(info, properties);
991 } 991 }
992 992
993 CORE_EXPORT bool isValidEnum(const String& value, const char** validValues, size _t length, const String& enumName, ExceptionState&); 993 CORE_EXPORT bool isValidEnum(const String& value, const char** validValues, size _t length, const String& enumName, ExceptionState&);
994 CORE_EXPORT bool isValidEnum(const Vector<String>& values, const char** validVal ues, size_t length, const String& enumName, ExceptionState&); 994 CORE_EXPORT bool isValidEnum(const Vector<String>& values, const char** validVal ues, size_t length, const String& enumName, ExceptionState&);
995 995
996 // These methods store hidden values into an array that is stored in the interna l field of a DOM wrapper. 996 // These methods store hidden values into an array that is stored in the interna l field of a DOM wrapper.
997 void addHiddenValueToArray(v8::Isolate*, v8::Handle<v8::Object>, v8::Local<v8::V alue>, int cacheIndex); 997 void addHiddenValueToArray(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Va lue>, int cacheIndex);
998 void removeHiddenValueFromArray(v8::Isolate*, v8::Handle<v8::Object>, v8::Local< v8::Value>, int cacheIndex); 998 void removeHiddenValueFromArray(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v 8::Value>, int cacheIndex);
999 CORE_EXPORT void moveEventListenerToNewWrapper(v8::Isolate*, v8::Handle<v8::Obje ct>, EventListener* oldValue, v8::Local<v8::Value> newValue, int cacheIndex); 999 CORE_EXPORT void moveEventListenerToNewWrapper(v8::Isolate*, v8::Local<v8::Objec t>, EventListener* oldValue, v8::Local<v8::Value> newValue, int cacheIndex);
1000 1000
1001 // Result values for platform object 'deleter' methods, 1001 // Result values for platform object 'deleter' methods,
1002 // http://www.w3.org/TR/WebIDL/#delete 1002 // http://www.w3.org/TR/WebIDL/#delete
1003 enum DeleteResult { 1003 enum DeleteResult {
1004 DeleteSuccess, 1004 DeleteSuccess,
1005 DeleteReject, 1005 DeleteReject,
1006 DeleteUnknownProperty 1006 DeleteUnknownProperty
1007 }; 1007 };
1008 1008
1009 class V8IsolateInterruptor : public ThreadState::Interruptor { 1009 class V8IsolateInterruptor : public ThreadState::Interruptor {
(...skipping 13 matching lines...) Expand all
1023 { 1023 {
1024 m_isolate->RequestInterrupt(&onInterruptCallback, this); 1024 m_isolate->RequestInterrupt(&onInterruptCallback, this);
1025 } 1025 }
1026 1026
1027 private: 1027 private:
1028 v8::Isolate* m_isolate; 1028 v8::Isolate* m_isolate;
1029 }; 1029 };
1030 1030
1031 class DevToolsFunctionInfo final { 1031 class DevToolsFunctionInfo final {
1032 public: 1032 public:
1033 explicit DevToolsFunctionInfo(v8::Handle<v8::Function>& function) 1033 explicit DevToolsFunctionInfo(v8::Local<v8::Function>& function)
1034 : m_scriptId(0) 1034 : m_scriptId(0)
1035 , m_lineNumber(1) 1035 , m_lineNumber(1)
1036 , m_function(function) 1036 , m_function(function)
1037 { 1037 {
1038 ASSERT(!m_function.IsEmpty()); 1038 ASSERT(!m_function.IsEmpty());
1039 } 1039 }
1040 1040
1041 DevToolsFunctionInfo(int scriptId, const String& resourceName, int lineNumbe r) 1041 DevToolsFunctionInfo(int scriptId, const String& resourceName, int lineNumbe r)
1042 : m_scriptId(scriptId) 1042 : m_scriptId(scriptId)
1043 , m_lineNumber(lineNumber) 1043 , m_lineNumber(lineNumber)
1044 , m_resourceName(resourceName) 1044 , m_resourceName(resourceName)
1045 { 1045 {
1046 } 1046 }
1047 1047
1048 int scriptId() const; 1048 int scriptId() const;
1049 int lineNumber() const; 1049 int lineNumber() const;
1050 String resourceName() const; 1050 String resourceName() const;
1051 1051
1052 private: 1052 private:
1053 void ensureInitialized() const; 1053 void ensureInitialized() const;
1054 1054
1055 mutable int m_scriptId; 1055 mutable int m_scriptId;
1056 mutable int m_lineNumber; 1056 mutable int m_lineNumber;
1057 mutable String m_resourceName; 1057 mutable String m_resourceName;
1058 mutable v8::Handle<v8::Function> m_function; 1058 mutable v8::Local<v8::Function> m_function;
1059 }; 1059 };
1060 1060
1061 PassRefPtr<TraceEvent::ConvertableToTraceFormat> devToolsTraceEventData(v8::Isol ate*, ExecutionContext*, v8::Handle<v8::Function>); 1061 PassRefPtr<TraceEvent::ConvertableToTraceFormat> devToolsTraceEventData(v8::Isol ate*, ExecutionContext*, v8::Local<v8::Function>);
1062 1062
1063 // Callback functions used by generated code. 1063 // Callback functions used by generated code.
1064 CORE_EXPORT void v8ConstructorAttributeGetter(v8::Local<v8::Name> propertyName, const v8::PropertyCallbackInfo<v8::Value>&); 1064 CORE_EXPORT void v8ConstructorAttributeGetter(v8::Local<v8::Name> propertyName, const v8::PropertyCallbackInfo<v8::Value>&);
1065 1065
1066 typedef void (*InstallTemplateFunction)(v8::Local<v8::FunctionTemplate>, v8::Iso late*); 1066 typedef void (*InstallTemplateFunction)(v8::Local<v8::FunctionTemplate>, v8::Iso late*);
1067 1067
1068 } // namespace blink 1068 } // namespace blink
1069 1069
1070 #endif // V8Binding_h 1070 #endif // V8Binding_h
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/ToV8.cpp ('k') | Source/bindings/core/v8/V8Binding.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698