Chromium Code Reviews| Index: Source/WebCore/bindings/dart/DartDOMWrapper.h |
| diff --git a/Source/WebCore/bindings/dart/DartDOMWrapper.h b/Source/WebCore/bindings/dart/DartDOMWrapper.h |
| index 180c433d4ab042c5f48ca49c7ce3099d7651828d..0006f17edba235714dc626216d5215d4b6a4b726 100644 |
| --- a/Source/WebCore/bindings/dart/DartDOMWrapper.h |
| +++ b/Source/WebCore/bindings/dart/DartDOMWrapper.h |
| @@ -313,11 +313,11 @@ inline void dartListToVector(Dart_Handle list, Vector<Element>& array, Dart_Hand |
| class DartDOMWrapper { |
| public: |
| - template <class WebkitClass> |
| - static Dart_Handle newWrapper(const char* className, WebkitClass* domObject) |
| + template <class WebKitClass> |
|
Anton Muhin
2012/03/29 19:18:45
if you please, do not rename as a part of another
podivilov
2012/03/30 10:36:28
Done.
|
| + static Dart_Handle newWrapper(const char* className, WebKitClass* domObject) |
| { |
| Dart_Handle wrapper = instantiateWrapper(className); |
| - installNativePointers(domObject, wrapper); |
| + writeNativePointer(wrapper, kNativeImplementationIndex, domObject); |
| return wrapper; |
| } |
| @@ -327,8 +327,8 @@ public: |
| return toDart(instance, BindingsClass::dartImplementationClassName); |
| } |
| - template <class WebkitClass> |
| - static Dart_Handle toDart(WebkitClass* instance, const char* className) |
| + template <class WebKitClass> |
| + static Dart_Handle toDart(WebKitClass* instance, const char* className) |
| { |
| if (!instance) |
| return 0; |
| @@ -345,15 +345,14 @@ public: |
| return wrapper; |
| } |
| - template <class WebkitClass> |
| - static void bindDOMObjectToDartWrapper(WebkitClass* domObject, Dart_Handle wrapper) |
| + template <class WebKitClass> |
| + static void bindDOMObjectToDartWrapper(WebKitClass* domObject, Dart_Handle wrapper) |
| { |
| ASSERT(domObject); |
| domObject->ref(); |
| - installNativePointers(domObject, wrapper); |
| + writeNativePointer(wrapper, kNativeImplementationIndex, domObject); |
| - // FIXME: make persistent handle weak and deref domObject in weak callback. |
| - Dart_Handle persistentWrapperHandle = Dart_NewPersistentHandle(wrapper); |
| + Dart_Handle persistentWrapperHandle = DartUtilities::createWeakPersistentHandle(wrapper, domObject, &wrapperWeakCallback<WebKitClass>); |
| DartDOMMap* domMap = DartUtilities::domMapForCurrentIsolate(); |
| ASSERT(!domMap->contains(domObject)); |
| @@ -374,14 +373,12 @@ public: |
| return reinterpret_cast<typename BindingsClass::NativeType*>(nativePointer); |
| } |
| - static void derefDOMObject(Dart_Handle wrapper, void* domObject); |
| - |
| - template <class WebkitClass> |
| - static WebkitClass* receiver(Dart_NativeArguments args) |
| + template <class WebKitClass> |
| + static WebKitClass* receiver(Dart_NativeArguments args) |
| { |
| // Type of receiver is ensured by Dart VM runtime, so bypass additional checks. |
| void* nativePointer = readNativePointer(Dart_GetNativeArgument(args, 0), kNativeImplementationIndex); |
| - WebkitClass* const recv = static_cast<WebkitClass*>(nativePointer); |
| + WebKitClass* const recv = static_cast<WebKitClass*>(nativePointer); |
| ASSERT(recv); // Never should return 0. |
| return recv; |
| } |
| @@ -412,7 +409,6 @@ public: |
| private: |
| enum NativeFieldIndices { |
| kNativeImplementationIndex = 0, |
| - kDerefObjectFunctionIndex, |
|
Anton Muhin
2012/03/29 19:18:45
please, do not forget to change pure Dart implemen
podivilov
2012/03/30 10:36:28
https://chromiumcodereview.appspot.com/9968004
|
| kNativeFieldCount |
| }; |
| @@ -437,30 +433,16 @@ private: |
| return reinterpret_cast<void*>(value); |
| } |
| - template <class WebkitClass> |
| - static void installNativePointers(WebkitClass* domObject, Dart_Handle wrapper) |
| - { |
| - ASSERT(domObject); |
| - DerefObjectFunction derefObjectFunction = &DartDOMWrapper::derefObject<WebkitClass>; |
| - writeNativePointer(wrapper, kNativeImplementationIndex, domObject); |
| - writeNativePointer(wrapper, kDerefObjectFunctionIndex, reinterpret_cast<void*>(derefObjectFunction)); |
| - } |
| - |
| - typedef void (*DerefObjectFunction)(void*); |
| - |
| template<typename T> |
| - static void derefObject(void* pointer) |
| + static void wrapperWeakCallback(Dart_Handle, void* domObject) |
| { |
| - static_cast<T*>(pointer)->deref(); |
| + DartDOMMap* domMap = DartUtilities::domMapForCurrentIsolate(); |
| + ASSERT(domMap->contains(domObject)); |
| + domMap->remove(domObject); |
| + static_cast<T*>(domObject)->deref(); |
| } |
| }; |
| -template<> |
| -inline void DartDOMWrapper::derefObject<NPObject>(void*) |
| -{ |
| - // FIXME: proper deref. |
| -} |
| - |
| // ParameterAdapter. |
| template <typename Value> |