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

Unified Diff: Source/WebCore/bindings/dart/DartDOMWrapper.h

Issue 9837116: DOM wrappers that are not retained from Dart should be collected. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Address comments. Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
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..cb17b9383746a9c90a4ff1fc930f4759a9bbd2e8 100644
--- a/Source/WebCore/bindings/dart/DartDOMWrapper.h
+++ b/Source/WebCore/bindings/dart/DartDOMWrapper.h
@@ -317,7 +317,7 @@ public:
static Dart_Handle newWrapper(const char* className, WebkitClass* domObject)
{
Dart_Handle wrapper = instantiateWrapper(className);
- installNativePointers(domObject, wrapper);
+ writeNativePointer(wrapper, kNativeImplementationIndex, domObject);
return wrapper;
}
@@ -350,10 +350,9 @@ public:
{
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,8 +373,6 @@ 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)
{
@@ -412,7 +409,6 @@ public:
private:
enum NativeFieldIndices {
kNativeImplementationIndex = 0,
- kDerefObjectFunctionIndex,
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>

Powered by Google App Engine
This is Rietveld 408576698