| 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 29 matching lines...) Expand all Loading... |
| 40 #include "bindings/core/v8/ScriptState.h" | 40 #include "bindings/core/v8/ScriptState.h" |
| 41 #include "bindings/core/v8/ScriptValue.h" | 41 #include "bindings/core/v8/ScriptValue.h" |
| 42 #include "bindings/core/v8/ScriptWrappable.h" | 42 #include "bindings/core/v8/ScriptWrappable.h" |
| 43 #include "bindings/core/v8/V8BindingMacros.h" | 43 #include "bindings/core/v8/V8BindingMacros.h" |
| 44 #include "bindings/core/v8/V8PerIsolateData.h" | 44 #include "bindings/core/v8/V8PerIsolateData.h" |
| 45 #include "bindings/core/v8/V8ScriptRunner.h" | 45 #include "bindings/core/v8/V8ScriptRunner.h" |
| 46 #include "bindings/core/v8/V8StringResource.h" | 46 #include "bindings/core/v8/V8StringResource.h" |
| 47 #include "bindings/core/v8/V8ThrowException.h" | 47 #include "bindings/core/v8/V8ThrowException.h" |
| 48 #include "bindings/core/v8/V8ValueCache.h" | 48 #include "bindings/core/v8/V8ValueCache.h" |
| 49 #include "core/CoreExport.h" | 49 #include "core/CoreExport.h" |
| 50 #include "core/dom/NotShared.h" | |
| 51 #include "platform/heap/Handle.h" | 50 #include "platform/heap/Handle.h" |
| 52 #include "platform/wtf/text/AtomicString.h" | 51 #include "platform/wtf/text/AtomicString.h" |
| 53 #include "platform/wtf/text/StringView.h" | 52 #include "platform/wtf/text/StringView.h" |
| 54 #include "v8/include/v8.h" | 53 #include "v8/include/v8.h" |
| 55 | 54 |
| 56 namespace blink { | 55 namespace blink { |
| 57 | 56 |
| 58 class DOMWindow; | 57 class DOMWindow; |
| 59 class EventListener; | 58 class EventListener; |
| 60 class EventTarget; | 59 class EventTarget; |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), | 209 V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
| 211 callback_info.GetIsolate())); | 210 callback_info.GetIsolate())); |
| 212 } | 211 } |
| 213 | 212 |
| 214 template <typename CallbackInfo, typename T> | 213 template <typename CallbackInfo, typename T> |
| 215 inline void V8SetReturnValue(const CallbackInfo& callback_info, | 214 inline void V8SetReturnValue(const CallbackInfo& callback_info, |
| 216 PassRefPtr<T> impl) { | 215 PassRefPtr<T> impl) { |
| 217 V8SetReturnValue(callback_info, impl.Get()); | 216 V8SetReturnValue(callback_info, impl.Get()); |
| 218 } | 217 } |
| 219 | 218 |
| 220 template <typename CallbackInfo, typename T> | |
| 221 inline void V8SetReturnValue(const CallbackInfo& callbackInfo, | |
| 222 NotShared<T> notShared) { | |
| 223 V8SetReturnValue(callbackInfo, notShared.View()); | |
| 224 } | |
| 225 | |
| 226 template <typename CallbackInfo> | 219 template <typename CallbackInfo> |
| 227 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, | 220 inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, |
| 228 ScriptWrappable* impl) { | 221 ScriptWrappable* impl) { |
| 229 ASSERT(DOMWrapperWorld::Current(callback_info.GetIsolate()).IsMainWorld()); | 222 ASSERT(DOMWrapperWorld::Current(callback_info.GetIsolate()).IsMainWorld()); |
| 230 if (UNLIKELY(!impl)) { | 223 if (UNLIKELY(!impl)) { |
| 231 V8SetReturnValueNull(callback_info); | 224 V8SetReturnValueNull(callback_info); |
| 232 return; | 225 return; |
| 233 } | 226 } |
| 234 if (DOMDataStore::SetReturnValueForMainWorld(callback_info.GetReturnValue(), | 227 if (DOMDataStore::SetReturnValueForMainWorld(callback_info.GetReturnValue(), |
| 235 impl)) | 228 impl)) |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 V8SetReturnValueFast(callback_info, impl.Get(), wrappable); | 327 V8SetReturnValueFast(callback_info, impl.Get(), wrappable); |
| 335 } | 328 } |
| 336 | 329 |
| 337 template <typename CallbackInfo, typename T> | 330 template <typename CallbackInfo, typename T> |
| 338 inline void V8SetReturnValueFast(const CallbackInfo& callback_info, | 331 inline void V8SetReturnValueFast(const CallbackInfo& callback_info, |
| 339 const v8::Local<T> handle, | 332 const v8::Local<T> handle, |
| 340 const ScriptWrappable*) { | 333 const ScriptWrappable*) { |
| 341 V8SetReturnValue(callback_info, handle); | 334 V8SetReturnValue(callback_info, handle); |
| 342 } | 335 } |
| 343 | 336 |
| 344 template <typename CallbackInfo, typename T> | |
| 345 inline void V8SetReturnValueFast(const CallbackInfo& callbackInfo, | |
| 346 NotShared<T> notShared, | |
| 347 const ScriptWrappable* wrappable) { | |
| 348 V8SetReturnValueFast(callbackInfo, notShared.View(), wrappable); | |
| 349 } | |
| 350 | |
| 351 // Convert v8::String to a WTF::String. If the V8 string is not already | 337 // Convert v8::String to a WTF::String. If the V8 string is not already |
| 352 // an external string then it is transformed into an external string at this | 338 // an external string then it is transformed into an external string at this |
| 353 // point to avoid repeated conversions. | 339 // point to avoid repeated conversions. |
| 354 inline String ToCoreString(v8::Local<v8::String> value) { | 340 inline String ToCoreString(v8::Local<v8::String> value) { |
| 355 return V8StringToWebCoreString<String>(value, kExternalize); | 341 return V8StringToWebCoreString<String>(value, kExternalize); |
| 356 } | 342 } |
| 357 | 343 |
| 358 inline String ToCoreStringWithNullCheck(v8::Local<v8::String> value) { | 344 inline String ToCoreStringWithNullCheck(v8::Local<v8::String> value) { |
| 359 if (value.IsEmpty() || value->IsNull()) | 345 if (value.IsEmpty() || value->IsNull()) |
| 360 return String(); | 346 return String(); |
| (...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1170 | 1156 |
| 1171 // Freeze a V8 object. The type of the first parameter and the return value is | 1157 // Freeze a V8 object. The type of the first parameter and the return value is |
| 1172 // intentionally v8::Value so that this function can wrap ToV8(). | 1158 // intentionally v8::Value so that this function can wrap ToV8(). |
| 1173 // If the argument isn't an object, this will crash. | 1159 // If the argument isn't an object, this will crash. |
| 1174 CORE_EXPORT v8::Local<v8::Value> FreezeV8Object(v8::Local<v8::Value>, | 1160 CORE_EXPORT v8::Local<v8::Value> FreezeV8Object(v8::Local<v8::Value>, |
| 1175 v8::Isolate*); | 1161 v8::Isolate*); |
| 1176 | 1162 |
| 1177 CORE_EXPORT v8::Local<v8::Value> FromJSONString(v8::Isolate*, | 1163 CORE_EXPORT v8::Local<v8::Value> FromJSONString(v8::Isolate*, |
| 1178 const String& stringified_json, | 1164 const String& stringified_json, |
| 1179 ExceptionState&); | 1165 ExceptionState&); |
| 1180 | |
| 1181 // Ensure that a typed array value is not backed by a SharedArrayBuffer. If it | |
| 1182 // is, an exception will be thrown. The return value will use the NotShared | |
| 1183 // wrapper type. | |
| 1184 template <typename NotSharedType> | |
| 1185 NotSharedType ToNotShared(v8::Isolate* isolate, | |
| 1186 v8::Local<v8::Value> value, | |
| 1187 ExceptionState& exception_state) { | |
| 1188 using DOMTypedArray = typename NotSharedType::TypedArrayType; | |
| 1189 DOMTypedArray* dom_typed_array = | |
| 1190 V8TypeOf<DOMTypedArray>::Type::toImplWithTypeCheck(isolate, value); | |
| 1191 if (dom_typed_array && dom_typed_array->IsShared()) { | |
| 1192 exception_state.ThrowTypeError( | |
| 1193 "The provided ArrayBufferView value must not be shared."); | |
| 1194 return NotSharedType(); | |
| 1195 } | |
| 1196 return NotSharedType(dom_typed_array); | |
| 1197 } | |
| 1198 | |
| 1199 } // namespace blink | 1166 } // namespace blink |
| 1200 | 1167 |
| 1201 #endif // V8Binding_h | 1168 #endif // V8Binding_h |
| OLD | NEW |