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..e6503db9a47164af933b928765823bdd5c41d336 100644 |
| --- a/Source/bindings/dart/DartDOMWrapper.h |
| +++ b/Source/bindings/dart/DartDOMWrapper.h |
| @@ -272,11 +272,18 @@ 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); |
|
vsm
2013/10/31 23:19:43
Looking the IDB failures - if they are from this -
|
| + // This could be an old wrapper which has been replaced with a custom element. |
| + if (currentWrapper != wrapper) { |
| + ASSERT(!Dart_IdentityEquals(Dart_HandleFromWeakPersistent(currentWrapper), Dart_HandleFromWeakPersistent(wrapper))); |
| + return; |
| + } |
| + |
| if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->contains(domObject)) { |
| Traits::MapTraits::domMap(domData)->remove(domObject); |
| Traits::ActiveTraits::removeWrapper(domData, domObject); |