| OLD | NEW |
| 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 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 v8::Local<v8::String> value) { | 388 v8::Local<v8::String> value) { |
| 389 if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) | 389 if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) |
| 390 return String(); | 390 return String(); |
| 391 return toCoreString(value); | 391 return toCoreString(value); |
| 392 } | 392 } |
| 393 | 393 |
| 394 inline AtomicString toCoreAtomicString(v8::Local<v8::String> value) { | 394 inline AtomicString toCoreAtomicString(v8::Local<v8::String> value) { |
| 395 return v8StringToWebCoreString<AtomicString>(value, Externalize); | 395 return v8StringToWebCoreString<AtomicString>(value, Externalize); |
| 396 } | 396 } |
| 397 | 397 |
| 398 // This method will return a null String if the v8::Value does not contain a v8:
:String. | 398 // This method will return a null String if the v8::Value does not contain a |
| 399 // It will not call ToString() on the v8::Value. If you want ToString() to be ca
lled, | 399 // v8::String. It will not call ToString() on the v8::Value. If you want |
| 400 // please use the TONATIVE_FOR_V8STRINGRESOURCE_*() macros instead. | 400 // ToString() to be called, please use the TONATIVE_FOR_V8STRINGRESOURCE_*() |
| 401 // macros instead. |
| 401 inline String toCoreStringWithUndefinedOrNullCheck(v8::Local<v8::Value> value) { | 402 inline String toCoreStringWithUndefinedOrNullCheck(v8::Local<v8::Value> value) { |
| 402 if (value.IsEmpty() || !value->IsString()) | 403 if (value.IsEmpty() || !value->IsString()) |
| 403 return String(); | 404 return String(); |
| 404 return toCoreString(value.As<v8::String>()); | 405 return toCoreString(value.As<v8::String>()); |
| 405 } | 406 } |
| 406 | 407 |
| 407 // Convert a string to a V8 string. | 408 // Convert a string to a V8 string. |
| 408 | 409 |
| 409 inline v8::Local<v8::String> v8String(v8::Isolate* isolate, | 410 inline v8::Local<v8::String> v8String(v8::Isolate* isolate, |
| 410 const StringView& string) { | 411 const StringView& string) { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 IntegerConversionConfiguration, | 535 IntegerConversionConfiguration, |
| 535 ExceptionState&); | 536 ExceptionState&); |
| 536 inline uint32_t toUInt32(v8::Isolate* isolate, | 537 inline uint32_t toUInt32(v8::Isolate* isolate, |
| 537 v8::Local<v8::Value> value, | 538 v8::Local<v8::Value> value, |
| 538 IntegerConversionConfiguration configuration, | 539 IntegerConversionConfiguration configuration, |
| 539 ExceptionState& exceptionState) { | 540 ExceptionState& exceptionState) { |
| 540 // Fast case. The value is already a 32-bit unsigned integer. | 541 // Fast case. The value is already a 32-bit unsigned integer. |
| 541 if (LIKELY(value->IsUint32())) | 542 if (LIKELY(value->IsUint32())) |
| 542 return value.As<v8::Uint32>()->Value(); | 543 return value.As<v8::Uint32>()->Value(); |
| 543 | 544 |
| 544 // Fast case. The value is a 32-bit signed integer with NormalConversion confi
guration. | 545 // Fast case. The value is a 32-bit signed integer with NormalConversion |
| 546 // configuration. |
| 545 if (LIKELY(value->IsInt32() && configuration == NormalConversion)) | 547 if (LIKELY(value->IsInt32() && configuration == NormalConversion)) |
| 546 return value.As<v8::Int32>()->Value(); | 548 return value.As<v8::Int32>()->Value(); |
| 547 | 549 |
| 548 return toUInt32Slow(isolate, value, configuration, exceptionState); | 550 return toUInt32Slow(isolate, value, configuration, exceptionState); |
| 549 } | 551 } |
| 550 | 552 |
| 551 // Convert a value to a 64-bit signed integer. The conversion fails if the | 553 // Convert a value to a 64-bit signed integer. The conversion fails if the |
| 552 // value cannot be converted to a number or the range violated per WebIDL: | 554 // value cannot be converted to a number or the range violated per WebIDL: |
| 553 // http://www.w3.org/TR/WebIDL/#es-long-long | 555 // http://www.w3.org/TR/WebIDL/#es-long-long |
| 554 CORE_EXPORT int64_t toInt64Slow(v8::Isolate*, | 556 CORE_EXPORT int64_t toInt64Slow(v8::Isolate*, |
| 555 v8::Local<v8::Value>, | 557 v8::Local<v8::Value>, |
| 556 IntegerConversionConfiguration, | 558 IntegerConversionConfiguration, |
| 557 ExceptionState&); | 559 ExceptionState&); |
| 558 inline int64_t toInt64(v8::Isolate* isolate, | 560 inline int64_t toInt64(v8::Isolate* isolate, |
| 559 v8::Local<v8::Value> value, | 561 v8::Local<v8::Value> value, |
| 560 IntegerConversionConfiguration configuration, | 562 IntegerConversionConfiguration configuration, |
| 561 ExceptionState& exceptionState) { | 563 ExceptionState& exceptionState) { |
| 562 // Clamping not supported for int64_t/long long int. See Source/wtf/MathExtras
.h. | 564 // Clamping not supported for int64_t/long long int. See |
| 565 // Source/wtf/MathExtras.h. |
| 563 ASSERT(configuration != Clamp); | 566 ASSERT(configuration != Clamp); |
| 564 | 567 |
| 565 // Fast case. The value is a 32-bit integer. | 568 // Fast case. The value is a 32-bit integer. |
| 566 if (LIKELY(value->IsInt32())) | 569 if (LIKELY(value->IsInt32())) |
| 567 return value.As<v8::Int32>()->Value(); | 570 return value.As<v8::Int32>()->Value(); |
| 568 | 571 |
| 569 return toInt64Slow(isolate, value, configuration, exceptionState); | 572 return toInt64Slow(isolate, value, configuration, exceptionState); |
| 570 } | 573 } |
| 571 | 574 |
| 572 // Convert a value to a 64-bit unsigned integer. The conversion fails if the | 575 // Convert a value to a 64-bit unsigned integer. The conversion fails if the |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 // Convert a value to a single precision float, throwing on non-finite values. | 620 // Convert a value to a single precision float, throwing on non-finite values. |
| 618 CORE_EXPORT float toRestrictedFloat(v8::Isolate*, | 621 CORE_EXPORT float toRestrictedFloat(v8::Isolate*, |
| 619 v8::Local<v8::Value>, | 622 v8::Local<v8::Value>, |
| 620 ExceptionState&); | 623 ExceptionState&); |
| 621 | 624 |
| 622 // Converts a value to a String, throwing if any code unit is outside 0-255. | 625 // Converts a value to a String, throwing if any code unit is outside 0-255. |
| 623 CORE_EXPORT String toByteString(v8::Isolate*, | 626 CORE_EXPORT String toByteString(v8::Isolate*, |
| 624 v8::Local<v8::Value>, | 627 v8::Local<v8::Value>, |
| 625 ExceptionState&); | 628 ExceptionState&); |
| 626 | 629 |
| 627 // Converts a value to a String, replacing unmatched UTF-16 surrogates with repl
acement characters. | 630 // Converts a value to a String, replacing unmatched UTF-16 surrogates with |
| 631 // replacement characters. |
| 628 CORE_EXPORT String toUSVString(v8::Isolate*, | 632 CORE_EXPORT String toUSVString(v8::Isolate*, |
| 629 v8::Local<v8::Value>, | 633 v8::Local<v8::Value>, |
| 630 ExceptionState&); | 634 ExceptionState&); |
| 631 | 635 |
| 632 inline v8::Local<v8::Boolean> v8Boolean(bool value, v8::Isolate* isolate) { | 636 inline v8::Local<v8::Boolean> v8Boolean(bool value, v8::Isolate* isolate) { |
| 633 return value ? v8::True(isolate) : v8::False(isolate); | 637 return value ? v8::True(isolate) : v8::False(isolate); |
| 634 } | 638 } |
| 635 | 639 |
| 636 inline double toCoreDate(v8::Isolate* isolate, | 640 inline double toCoreDate(v8::Isolate* isolate, |
| 637 v8::Local<v8::Value> object, | 641 v8::Local<v8::Value> object, |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 CORE_EXPORT v8::MaybeLocal<v8::Object> getEsIterator(v8::Isolate*, | 828 CORE_EXPORT v8::MaybeLocal<v8::Object> getEsIterator(v8::Isolate*, |
| 825 v8::Local<v8::Object>, | 829 v8::Local<v8::Object>, |
| 826 ExceptionState&); | 830 ExceptionState&); |
| 827 | 831 |
| 828 // Validates that the passed object is a sequence type per WebIDL spec | 832 // Validates that the passed object is a sequence type per WebIDL spec |
| 829 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-sequence | 833 // http://www.w3.org/TR/2012/CR-WebIDL-20120419/#es-sequence |
| 830 inline bool toV8Sequence(v8::Local<v8::Value> value, | 834 inline bool toV8Sequence(v8::Local<v8::Value> value, |
| 831 uint32_t& length, | 835 uint32_t& length, |
| 832 v8::Isolate* isolate, | 836 v8::Isolate* isolate, |
| 833 ExceptionState& exceptionState) { | 837 ExceptionState& exceptionState) { |
| 834 // Attempt converting to a sequence if the value is not already an array but i
s | 838 // Attempt converting to a sequence if the value is not already an array but |
| 835 // any kind of object except for a native Date object or a native RegExp objec
t. | 839 // is any kind of object except for a native Date object or a native RegExp |
| 840 // object. |
| 836 ASSERT(!value->IsArray()); | 841 ASSERT(!value->IsArray()); |
| 837 // FIXME: Do we really need to special case Date and RegExp object? | 842 // FIXME: Do we really need to special case Date and RegExp object? |
| 838 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22806 | 843 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22806 |
| 839 if (!value->IsObject() || value->IsDate() || value->IsRegExp()) { | 844 if (!value->IsObject() || value->IsDate() || value->IsRegExp()) { |
| 840 // The caller is responsible for reporting a TypeError. | 845 // The caller is responsible for reporting a TypeError. |
| 841 return false; | 846 return false; |
| 842 } | 847 } |
| 843 | 848 |
| 844 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(value); | 849 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(value); |
| 845 v8::Local<v8::String> lengthSymbol = v8AtomicString(isolate, "length"); | 850 v8::Local<v8::String> lengthSymbol = v8AtomicString(isolate, "length"); |
| 846 | 851 |
| 847 // FIXME: The specification states that the length property should be used as
fallback, if value | 852 // FIXME: The specification states that the length property should be used as |
| 848 // is not a platform object that supports indexed properties. If it supports i
ndexed properties, | 853 // fallback, if value is not a platform object that supports indexed |
| 849 // length should actually be one greater than value's maximum indexed property
index. | 854 // properties. If it supports indexed properties, length should actually be |
| 855 // one greater than value's maximum indexed property index. |
| 850 v8::TryCatch block(isolate); | 856 v8::TryCatch block(isolate); |
| 851 v8::Local<v8::Value> lengthValue; | 857 v8::Local<v8::Value> lengthValue; |
| 852 if (!v8Call(object->Get(isolate->GetCurrentContext(), lengthSymbol), | 858 if (!v8Call(object->Get(isolate->GetCurrentContext(), lengthSymbol), |
| 853 lengthValue, block)) { | 859 lengthValue, block)) { |
| 854 exceptionState.rethrowV8Exception(block.Exception()); | 860 exceptionState.rethrowV8Exception(block.Exception()); |
| 855 return false; | 861 return false; |
| 856 } | 862 } |
| 857 | 863 |
| 858 if (lengthValue->IsUndefined() || lengthValue->IsNull()) { | 864 if (lengthValue->IsUndefined() || lengthValue->IsNull()) { |
| 859 // The caller is responsible for reporting a TypeError. | 865 // The caller is responsible for reporting a TypeError. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 DOMWindow* toDOMWindow(v8::Isolate*, v8::Local<v8::Value>); | 971 DOMWindow* toDOMWindow(v8::Isolate*, v8::Local<v8::Value>); |
| 966 DOMWindow* toDOMWindow(v8::Local<v8::Context>); | 972 DOMWindow* toDOMWindow(v8::Local<v8::Context>); |
| 967 LocalDOMWindow* enteredDOMWindow(v8::Isolate*); | 973 LocalDOMWindow* enteredDOMWindow(v8::Isolate*); |
| 968 CORE_EXPORT LocalDOMWindow* currentDOMWindow(v8::Isolate*); | 974 CORE_EXPORT LocalDOMWindow* currentDOMWindow(v8::Isolate*); |
| 969 CORE_EXPORT ExecutionContext* toExecutionContext(v8::Local<v8::Context>); | 975 CORE_EXPORT ExecutionContext* toExecutionContext(v8::Local<v8::Context>); |
| 970 CORE_EXPORT void registerToExecutionContextForModules( | 976 CORE_EXPORT void registerToExecutionContextForModules( |
| 971 ExecutionContext* (*toExecutionContextForModules)(v8::Local<v8::Context>)); | 977 ExecutionContext* (*toExecutionContextForModules)(v8::Local<v8::Context>)); |
| 972 CORE_EXPORT ExecutionContext* currentExecutionContext(v8::Isolate*); | 978 CORE_EXPORT ExecutionContext* currentExecutionContext(v8::Isolate*); |
| 973 CORE_EXPORT ExecutionContext* enteredExecutionContext(v8::Isolate*); | 979 CORE_EXPORT ExecutionContext* enteredExecutionContext(v8::Isolate*); |
| 974 | 980 |
| 975 // Returns a V8 context associated with a ExecutionContext and a DOMWrapperWorld
. | 981 // Returns a V8 context associated with a ExecutionContext and a |
| 976 // This method returns an empty context if there is no frame or the frame is alr
eady detached. | 982 // DOMWrapperWorld. This method returns an empty context if there is no frame |
| 983 // or the frame is already detached. |
| 977 CORE_EXPORT v8::Local<v8::Context> toV8Context(ExecutionContext*, | 984 CORE_EXPORT v8::Local<v8::Context> toV8Context(ExecutionContext*, |
| 978 DOMWrapperWorld&); | 985 DOMWrapperWorld&); |
| 979 // Returns a V8 context associated with a Frame and a DOMWrapperWorld. | 986 // Returns a V8 context associated with a Frame and a DOMWrapperWorld. |
| 980 // This method returns an empty context if the frame is already detached. | 987 // This method returns an empty context if the frame is already detached. |
| 981 CORE_EXPORT v8::Local<v8::Context> toV8Context(Frame*, DOMWrapperWorld&); | 988 CORE_EXPORT v8::Local<v8::Context> toV8Context(Frame*, DOMWrapperWorld&); |
| 982 // Like toV8Context but also returns the context if the frame is already detache
d. | 989 // Like toV8Context but also returns the context if the frame is already |
| 990 // detached. |
| 983 CORE_EXPORT v8::Local<v8::Context> toV8ContextEvenIfDetached(Frame*, | 991 CORE_EXPORT v8::Local<v8::Context> toV8ContextEvenIfDetached(Frame*, |
| 984 DOMWrapperWorld&); | 992 DOMWrapperWorld&); |
| 985 | 993 |
| 986 // Returns the frame object of the window object associated with | 994 // Returns the frame object of the window object associated with |
| 987 // a context, if the window is currently being displayed in a Frame. | 995 // a context, if the window is currently being displayed in a Frame. |
| 988 CORE_EXPORT Frame* toFrameIfNotDetached(v8::Local<v8::Context>); | 996 CORE_EXPORT Frame* toFrameIfNotDetached(v8::Local<v8::Context>); |
| 989 | 997 |
| 990 CORE_EXPORT EventTarget* toEventTarget(v8::Isolate*, v8::Local<v8::Value>); | 998 CORE_EXPORT EventTarget* toEventTarget(v8::Isolate*, v8::Local<v8::Value>); |
| 991 | 999 |
| 992 // If 'storage' is non-null, it must be large enough to copy all bytes in the | 1000 // If 'storage' is non-null, it must be large enough to copy all bytes in the |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1089 const char** validValues, | 1097 const char** validValues, |
| 1090 size_t length, | 1098 size_t length, |
| 1091 const String& enumName, | 1099 const String& enumName, |
| 1092 ExceptionState&); | 1100 ExceptionState&); |
| 1093 CORE_EXPORT bool isValidEnum(const Vector<String>& values, | 1101 CORE_EXPORT bool isValidEnum(const Vector<String>& values, |
| 1094 const char** validValues, | 1102 const char** validValues, |
| 1095 size_t length, | 1103 size_t length, |
| 1096 const String& enumName, | 1104 const String& enumName, |
| 1097 ExceptionState&); | 1105 ExceptionState&); |
| 1098 | 1106 |
| 1099 // These methods store hidden values into an array that is stored in the interna
l field of a DOM wrapper. | 1107 // These methods store hidden values into an array that is stored in the |
| 1108 // internal field of a DOM wrapper. |
| 1100 bool addHiddenValueToArray(v8::Isolate*, | 1109 bool addHiddenValueToArray(v8::Isolate*, |
| 1101 v8::Local<v8::Object>, | 1110 v8::Local<v8::Object>, |
| 1102 v8::Local<v8::Value>, | 1111 v8::Local<v8::Value>, |
| 1103 int cacheIndex); | 1112 int cacheIndex); |
| 1104 void removeHiddenValueFromArray(v8::Isolate*, | 1113 void removeHiddenValueFromArray(v8::Isolate*, |
| 1105 v8::Local<v8::Object>, | 1114 v8::Local<v8::Object>, |
| 1106 v8::Local<v8::Value>, | 1115 v8::Local<v8::Value>, |
| 1107 int cacheIndex); | 1116 int cacheIndex); |
| 1108 CORE_EXPORT void moveEventListenerToNewWrapper(v8::Isolate*, | 1117 CORE_EXPORT void moveEventListenerToNewWrapper(v8::Isolate*, |
| 1109 v8::Local<v8::Object>, | 1118 v8::Local<v8::Object>, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1140 | 1149 |
| 1141 // Freeze a V8 object. The type of the first parameter and the return value is | 1150 // Freeze a V8 object. The type of the first parameter and the return value is |
| 1142 // intentionally v8::Value so that this function can wrap toV8(). | 1151 // intentionally v8::Value so that this function can wrap toV8(). |
| 1143 // If the argument isn't an object, this will crash. | 1152 // If the argument isn't an object, this will crash. |
| 1144 CORE_EXPORT v8::Local<v8::Value> freezeV8Object(v8::Local<v8::Value>, | 1153 CORE_EXPORT v8::Local<v8::Value> freezeV8Object(v8::Local<v8::Value>, |
| 1145 v8::Isolate*); | 1154 v8::Isolate*); |
| 1146 | 1155 |
| 1147 } // namespace blink | 1156 } // namespace blink |
| 1148 | 1157 |
| 1149 #endif // V8Binding_h | 1158 #endif // V8Binding_h |
| OLD | NEW |