| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 return TypedArrayTraits<TypedArray>::IsInstance(value); | 52 return TypedArrayTraits<TypedArray>::IsInstance(value); |
| 53 } | 53 } |
| 54 | 54 |
| 55 static bool HasInstanceInAnyWorld(v8::Handle<v8::Value> value, v8::Isolate*) | 55 static bool HasInstanceInAnyWorld(v8::Handle<v8::Value> value, v8::Isolate*) |
| 56 { | 56 { |
| 57 return TypedArrayTraits<TypedArray>::IsInstance(value); | 57 return TypedArrayTraits<TypedArray>::IsInstance(value); |
| 58 } | 58 } |
| 59 | 59 |
| 60 static TypedArray* toNative(v8::Handle<v8::Object>); | 60 static TypedArray* toNative(v8::Handle<v8::Object>); |
| 61 static void derefObject(void*); | 61 static void derefObject(void*); |
| 62 static WrapperTypeInfo info; | 62 static WrapperTypeInfo wrapperTypeInfo; |
| 63 static const int internalFieldCount = v8DefaultWrapperInternalFieldCount; | 63 static const int internalFieldCount = v8DefaultWrapperInternalFieldCount; |
| 64 | 64 |
| 65 static v8::Handle<v8::Object> wrap(TypedArray* impl, v8::Handle<v8::Object>
creationContext, v8::Isolate* isolate) | 65 static v8::Handle<v8::Object> wrap(TypedArray* impl, v8::Handle<v8::Object>
creationContext, v8::Isolate* isolate) |
| 66 { | 66 { |
| 67 ASSERT(impl); | 67 ASSERT(impl); |
| 68 ASSERT(!DOMDataStore::containsWrapper<Binding>(impl, isolate)); | 68 ASSERT(!DOMDataStore::containsWrapper<Binding>(impl, isolate)); |
| 69 return V8TypedArray<TypedArray>::createWrapper(impl, creationContext, is
olate); | 69 return V8TypedArray<TypedArray>::createWrapper(impl, creationContext, is
olate); |
| 70 } | 70 } |
| 71 | 71 |
| 72 static v8::Handle<v8::Value> toV8(TypedArray* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) | 72 static v8::Handle<v8::Value> toV8(TypedArray* impl, v8::Handle<v8::Object> c
reationContext, v8::Isolate* isolate) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 typedef TypedArrayTraits<TypedArray> Traits; | 127 typedef TypedArrayTraits<TypedArray> Traits; |
| 128 typedef typename Traits::V8Type V8Type; | 128 typedef typename Traits::V8Type V8Type; |
| 129 typedef V8TypedArray<TypedArray> Binding; | 129 typedef V8TypedArray<TypedArray> Binding; |
| 130 | 130 |
| 131 static v8::Handle<v8::Object> createWrapper(PassRefPtr<TypedArray>, v8::Hand
le<v8::Object> creationContext, v8::Isolate*); | 131 static v8::Handle<v8::Object> createWrapper(PassRefPtr<TypedArray>, v8::Hand
le<v8::Object> creationContext, v8::Isolate*); |
| 132 }; | 132 }; |
| 133 | 133 |
| 134 template<typename TypedArray> | 134 template<typename TypedArray> |
| 135 class TypedArrayWrapperTraits { | 135 class TypedArrayWrapperTraits { |
| 136 public: | 136 public: |
| 137 static WrapperTypeInfo* info() { return &V8TypedArray<TypedArray>::info; } | 137 static WrapperTypeInfo* info() { return &V8TypedArray<TypedArray>::wrapperTy
peInfo; } |
| 138 }; | 138 }; |
| 139 | 139 |
| 140 | 140 |
| 141 template <typename TypedArray> | 141 template <typename TypedArray> |
| 142 v8::Handle<v8::Object> V8TypedArray<TypedArray>::createWrapper(PassRefPtr<TypedA
rray> impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 142 v8::Handle<v8::Object> V8TypedArray<TypedArray>::createWrapper(PassRefPtr<TypedA
rray> impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) |
| 143 { | 143 { |
| 144 ASSERT(impl.get()); | 144 ASSERT(impl.get()); |
| 145 ASSERT(!DOMDataStore::containsWrapper<Binding>(impl.get(), isolate)); | 145 ASSERT(!DOMDataStore::containsWrapper<Binding>(impl.get(), isolate)); |
| 146 | 146 |
| 147 RefPtr<ArrayBuffer> buffer = impl->buffer(); | 147 RefPtr<ArrayBuffer> buffer = impl->buffer(); |
| 148 v8::Local<v8::Value> v8Buffer = WebCore::toV8(buffer.get(), creationContext,
isolate); | 148 v8::Local<v8::Value> v8Buffer = WebCore::toV8(buffer.get(), creationContext,
isolate); |
| 149 | 149 |
| 150 ASSERT(v8Buffer->IsArrayBuffer()); | 150 ASSERT(v8Buffer->IsArrayBuffer()); |
| 151 | 151 |
| 152 v8::Local<v8::Object> wrapper = V8Type::New(v8Buffer.As<v8::ArrayBuffer>(),
impl->byteOffset(), Traits::length(impl.get())); | 152 v8::Local<v8::Object> wrapper = V8Type::New(v8Buffer.As<v8::ArrayBuffer>(),
impl->byteOffset(), Traits::length(impl.get())); |
| 153 | 153 |
| 154 V8DOMWrapper::associateObjectWithWrapper<Binding>(impl, &info, wrapper, isol
ate, WrapperConfiguration::Independent); | 154 V8DOMWrapper::associateObjectWithWrapper<Binding>(impl, &wrapperTypeInfo, wr
apper, isolate, WrapperConfiguration::Independent); |
| 155 return wrapper; | 155 return wrapper; |
| 156 } | 156 } |
| 157 | 157 |
| 158 template <typename TypedArray> | 158 template <typename TypedArray> |
| 159 TypedArray* V8TypedArray<TypedArray>::toNative(v8::Handle<v8::Object> object) | 159 TypedArray* V8TypedArray<TypedArray>::toNative(v8::Handle<v8::Object> object) |
| 160 { | 160 { |
| 161 ASSERT(Traits::IsInstance(object)); | 161 ASSERT(Traits::IsInstance(object)); |
| 162 void* typedarrayPtr = object->GetAlignedPointerFromInternalField(v8DOMWrappe
rObjectIndex); | 162 void* typedarrayPtr = object->GetAlignedPointerFromInternalField(v8DOMWrappe
rObjectIndex); |
| 163 if (typedarrayPtr) | 163 if (typedarrayPtr) |
| 164 return reinterpret_cast<TypedArray*>(typedarrayPtr); | 164 return reinterpret_cast<TypedArray*>(typedarrayPtr); |
| 165 | 165 |
| 166 v8::Handle<V8Type> view = object.As<V8Type>(); | 166 v8::Handle<V8Type> view = object.As<V8Type>(); |
| 167 RefPtr<ArrayBuffer> arrayBuffer = V8ArrayBuffer::toNative(view->Buffer()); | 167 RefPtr<ArrayBuffer> arrayBuffer = V8ArrayBuffer::toNative(view->Buffer()); |
| 168 RefPtr<TypedArray> typedArray = TypedArray::create(arrayBuffer, view->ByteOf
fset(), Traits::length(view)); | 168 RefPtr<TypedArray> typedArray = TypedArray::create(arrayBuffer, view->ByteOf
fset(), Traits::length(view)); |
| 169 ASSERT(typedArray.get()); | 169 ASSERT(typedArray.get()); |
| 170 V8DOMWrapper::associateObjectWithWrapper<Binding>(typedArray.release(), &inf
o, object, v8::Isolate::GetCurrent(), WrapperConfiguration::Independent); | 170 V8DOMWrapper::associateObjectWithWrapper<Binding>(typedArray.release(), &wra
pperTypeInfo, object, v8::Isolate::GetCurrent(), WrapperConfiguration::Independe
nt); |
| 171 | 171 |
| 172 typedarrayPtr = object->GetAlignedPointerFromInternalField(v8DOMWrapperObjec
tIndex); | 172 typedarrayPtr = object->GetAlignedPointerFromInternalField(v8DOMWrapperObjec
tIndex); |
| 173 ASSERT(typedarrayPtr); | 173 ASSERT(typedarrayPtr); |
| 174 return reinterpret_cast<TypedArray*>(typedarrayPtr); | 174 return reinterpret_cast<TypedArray*>(typedarrayPtr); |
| 175 } | 175 } |
| 176 | 176 |
| 177 | 177 |
| 178 template <typename TypedArray> | 178 template <typename TypedArray> |
| 179 WrapperTypeInfo V8TypedArray<TypedArray>::info = { | 179 WrapperTypeInfo V8TypedArray<TypedArray>::wrapperTypeInfo = { |
| 180 0, V8TypedArray<TypedArray>::derefObject, | 180 0, V8TypedArray<TypedArray>::derefObject, |
| 181 0, 0, 0, 0, 0, WrapperTypeObjectPrototype | 181 0, 0, 0, 0, 0, WrapperTypeObjectPrototype |
| 182 }; | 182 }; |
| 183 | 183 |
| 184 template <typename TypedArray> | 184 template <typename TypedArray> |
| 185 void V8TypedArray<TypedArray>::derefObject(void* object) | 185 void V8TypedArray<TypedArray>::derefObject(void* object) |
| 186 { | 186 { |
| 187 static_cast<TypedArray*>(object)->deref(); | 187 static_cast<TypedArray*>(object)->deref(); |
| 188 } | 188 } |
| 189 | 189 |
| 190 | 190 |
| 191 } // namespace WebCode | 191 } // namespace WebCode |
| 192 | 192 |
| 193 #endif // V8TypedArrayCustom_h | 193 #endif // V8TypedArrayCustom_h |
| OLD | NEW |