OLD | NEW |
---|---|
1 // Copyright 2011, Google Inc. | 1 // Copyright 2011, Google Inc. |
2 // All rights reserved. | 2 // 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 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
265 // FIXME: the fact that we return 0 on error rather than asserting is | 265 // FIXME: the fact that we return 0 on error rather than asserting is |
266 // somewhat of a hack. We currently make this method return 0 because | 266 // somewhat of a hack. We currently make this method return 0 because |
267 // we reuse this method to verify that objects are actually native | 267 // we reuse this method to verify that objects are actually native |
268 // Node objects rather than objects that implement the Node interface. | 268 // Node objects rather than objects that implement the Node interface. |
269 if (Dart_IsError(result)) | 269 if (Dart_IsError(result)) |
270 return 0; | 270 return 0; |
271 return reinterpret_cast<void*>(value); | 271 return reinterpret_cast<void*>(value); |
272 } | 272 } |
273 | 273 |
274 template <class BindingsClass> | 274 template <class BindingsClass> |
275 static void wrapperWeakCallback(Dart_WeakPersistentHandle, void* peer) | 275 static void wrapperWeakCallback(Dart_WeakPersistentHandle wrapper, void* pee r) |
276 { | 276 { |
277 typedef DartDOMWrapperTraits<BindingsClass> Traits; | 277 typedef DartDOMWrapperTraits<BindingsClass> Traits; |
278 DartDOMData* domData = DartDOMData::current(); | 278 DartDOMData* domData = DartDOMData::current(); |
279 typename BindingsClass::NativeType* domObject = static_cast<typename Bin dingsClass::NativeType*>(peer); | 279 typename BindingsClass::NativeType* domObject = static_cast<typename Bin dingsClass::NativeType*>(peer); |
280 Dart_WeakPersistentHandle currentWrapper = Traits::MapTraits::domMap(dom Data)->get(domObject); | |
vsm
2013/10/31 23:19:43
Looking the IDB failures - if they are from this -
| |
281 // This could be an old wrapper which has been replaced with a custom el ement. | |
282 if (currentWrapper != wrapper) { | |
283 ASSERT(!Dart_IdentityEquals(Dart_HandleFromWeakPersistent(currentWra pper), Dart_HandleFromWeakPersistent(wrapper))); | |
284 return; | |
285 } | |
286 | |
280 if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->con tains(domObject)) { | 287 if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->con tains(domObject)) { |
281 Traits::MapTraits::domMap(domData)->remove(domObject); | 288 Traits::MapTraits::domMap(domData)->remove(domObject); |
282 Traits::ActiveTraits::removeWrapper(domData, domObject); | 289 Traits::ActiveTraits::removeWrapper(domData, domObject); |
283 Traits::EventTargetTraits::removeWrapper(domData, domObject); | 290 Traits::EventTargetTraits::removeWrapper(domData, domObject); |
284 } | 291 } |
285 domObject->deref(); | 292 domObject->deref(); |
286 } | 293 } |
287 | 294 |
288 template <class BindingsClass> | 295 template <class BindingsClass> |
289 static void associateWrapper( | 296 static void associateWrapper( |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
391 static DartMessagePortMap* domMap(DartDOMData* domData) { return domData ->messagePortMap(); } | 398 static DartMessagePortMap* domMap(DartDOMData* domData) { return domData ->messagePortMap(); } |
392 }; | 399 }; |
393 typedef MessagePortMapTraits MapTraits; | 400 typedef MessagePortMapTraits MapTraits; |
394 typedef DartDOMWrapperActiveTraits<DartMessagePort, false> ActiveTraits; | 401 typedef DartDOMWrapperActiveTraits<DartMessagePort, false> ActiveTraits; |
395 typedef DartDOMWrapperEventTargetTraits<DartMessagePort, true> EventTargetTr aits; | 402 typedef DartDOMWrapperEventTargetTraits<DartMessagePort, true> EventTargetTr aits; |
396 }; | 403 }; |
397 | 404 |
398 } | 405 } |
399 | 406 |
400 #endif // DartDOMWrapper_h | 407 #endif // DartDOMWrapper_h |
OLD | NEW |