Chromium Code Reviews| Index: Source/bindings/dart/DartDOMWrapper.h |
| diff --git a/Source/bindings/dart/DartDOMWrapper.h b/Source/bindings/dart/DartDOMWrapper.h |
| index ce7b9dd0877ad4ffd0c6cca14afc54deffe9326e..c74f6f65cda84dc4ab160f8e52af953d1235745b 100644 |
| --- a/Source/bindings/dart/DartDOMWrapper.h |
| +++ b/Source/bindings/dart/DartDOMWrapper.h |
| @@ -272,11 +272,17 @@ private: |
| } |
| template <class BindingsClass> |
| - static void wrapperWeakCallback(Dart_WeakPersistentHandle, void* peer) |
| + static void wrapperWeakCallback(Dart_WeakPersistentHandle wrapper, void* peer) |
| { |
| typedef DartDOMWrapperTraits<BindingsClass> Traits; |
| DartDOMData* domData = DartDOMData::current(); |
| typename BindingsClass::NativeType* domObject = static_cast<typename BindingsClass::NativeType*>(peer); |
| + Dart_WeakPersistentHandle currentWrapper = Traits::MapTraits::domMap(domData)->get(domObject); |
| + // This could be an old wrapper which has been replaced with a custom element. |
| + if (!Dart_IdentityEquals(Dart_HandleFromWeakPersistent(currentWrapper), Dart_HandleFromWeakPersistent(wrapper))) { |
|
blois
2013/10/31 18:43:07
Changing the check to:
if (currentWrapper != wrapp
siva
2013/10/31 19:42:40
if (currentWrapper != wrapper) {} is preferable fo
blois
2013/10/31 20:24:18
Done.
|
| + return; |
| + } |
| + |
| if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->contains(domObject)) { |
| Traits::MapTraits::domMap(domData)->remove(domObject); |
| Traits::ActiveTraits::removeWrapper(domData, domObject); |