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

Side by Side Diff: Source/bindings/dart/DartDOMWrapper.h

Issue 24294002: Dartium changes for custom element lifecycle events. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 28 matching lines...) Expand all
39 #include "core/dom/ExceptionCode.h" 39 #include "core/dom/ExceptionCode.h"
40 40
41 #include <dart_api.h> 41 #include <dart_api.h>
42 #include <wtf/PassRefPtr.h> 42 #include <wtf/PassRefPtr.h>
43 #include <wtf/RefPtr.h> 43 #include <wtf/RefPtr.h>
44 #include <wtf/text/AtomicString.h> 44 #include <wtf/text/AtomicString.h>
45 #include <wtf/text/WTFString.h> 45 #include <wtf/text/WTFString.h>
46 46
47 namespace WebCore { 47 namespace WebCore {
48 48
49 template<typename HTMLElement>
50 class DartCustomElementWrapper;
51 class HTMLElement;
52
49 template<class BindingsClass> 53 template<class BindingsClass>
50 struct DartDOMWrapperTraits; 54 struct DartDOMWrapperTraits;
51 55
52 class DartDOMWrapper { 56 class DartDOMWrapper {
53 public: 57 public:
54 template <class WebKitClass> 58 template <class WebKitClass>
55 static Dart_Handle newWrapper(const char* className, const char* libraryName , intptr_t cid, WebKitClass* domObject) 59 static Dart_Handle newWrapper(const char* className, const char* libraryName , intptr_t cid, WebKitClass* domObject)
56 { 60 {
57 61
58 Dart_Handle type = dartClass(className, libraryName, cid); 62 Dart_Handle type = dartClass(className, libraryName, cid);
59 ASSERT(!Dart_IsError(type)); 63 ASSERT(!Dart_IsError(type));
60 Dart_Handle wrapper = Dart_Allocate(type); 64 Dart_Handle wrapper = Dart_Allocate(type);
61 writeNativePointer(wrapper, kNativeImplementationIndex, domObject); 65 writeNativePointer(wrapper, kNativeImplementationIndex, domObject);
62 return wrapper; 66 return wrapper;
63 } 67 }
64 68
65 static Dart_WeakPersistentHandle lookupWrapper(bool isNode, void* domObject) 69 static Dart_WeakPersistentHandle lookupWrapper(bool isNode, void* domObject)
66 { 70 {
67 ASSERT(domObject); 71 ASSERT(domObject);
68 DartDOMData* domData = DartDOMData::current(); 72 DartDOMData* domData = DartDOMData::current();
69 if (isNode) { 73 if (isNode) {
70 Node* domNodeObject = reinterpret_cast<Node*>(domObject); 74 Node* domNodeObject = reinterpret_cast<Node*>(domObject);
71 Dart_WeakPersistentHandle wrapper = domData->nodeMap()->get(domNodeO bject); 75 return domData->nodeMap()->get(domNodeObject);
72 if (wrapper && domNodeObject->isCustomElement()) {
73 return lookupCustomElementWrapper(domData, wrapper, domNodeObjec t);
74 }
75 return wrapper;
76 } 76 }
77 return domData->objectMap()->get(domObject); 77 return domData->objectMap()->get(domObject);
78 } 78 }
79 79
80 template <class BindingsClass> 80 template <class BindingsClass>
81 static Dart_Handle createWrapper(typename BindingsClass::NativeType* domObje ct) 81 static Dart_Handle createWrapper(typename BindingsClass::NativeType* domObje ct)
82 { 82 {
83 ASSERT(domObject); 83 ASSERT(domObject);
84 return createWrapperWithClassName<BindingsClass>( 84 return createWrapperWithClassName<BindingsClass>(
85 domObject, 85 domObject,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 DartDOMData* domData = DartDOMData::current(); 245 DartDOMData* domData = DartDOMData::current();
246 typename BindingsClass::NativeType* domObject = static_cast<typename Bin dingsClass::NativeType*>(peer); 246 typename BindingsClass::NativeType* domObject = static_cast<typename Bin dingsClass::NativeType*>(peer);
247 if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->con tains(domObject)) { 247 if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->con tains(domObject)) {
248 Traits::MapTraits::domMap(domData)->remove(domObject); 248 Traits::MapTraits::domMap(domData)->remove(domObject);
249 Traits::ActiveTraits::removeWrapper(domData, domObject); 249 Traits::ActiveTraits::removeWrapper(domData, domObject);
250 Traits::EventTargetTraits::removeWrapper(domData, domObject); 250 Traits::EventTargetTraits::removeWrapper(domData, domObject);
251 } 251 }
252 domObject->deref(); 252 domObject->deref();
253 } 253 }
254 254
255 static Dart_WeakPersistentHandle lookupCustomElementWrapper(
256 DartDOMData*, Dart_WeakPersistentHandle wrapper, Node* domObject);
257
258 template <class BindingsClass> 255 template <class BindingsClass>
259 static void associateWrapper(typename BindingsClass::NativeType* domObject, Dart_Handle newInstance) 256 static void associateWrapper(typename BindingsClass::NativeType* domObject, Dart_Handle newInstance)
260 { 257 {
261 typedef DartDOMWrapperTraits<BindingsClass> Traits; 258 typedef DartDOMWrapperTraits<BindingsClass> Traits;
262 259
263 DartDOMData* domData = DartDOMData::current(); 260 DartDOMData* domData = DartDOMData::current();
264 Dart_WeakPersistentHandle wrapper = DartUtilities::createPrologueWeakPer sistentHandle( 261 Dart_WeakPersistentHandle wrapper = DartUtilities::createPrologueWeakPer sistentHandle(
265 newInstance, domObject, &wrapperWeakCallback<BindingsClass>); 262 newInstance, domObject, &wrapperWeakCallback<BindingsClass>);
266 Traits::MapTraits::domMap(domData)->set(domObject, wrapper); 263 Traits::MapTraits::domMap(domData)->set(domObject, wrapper);
267 Traits::ActiveTraits::setWrapper(domData, domObject, wrapper); 264 Traits::ActiveTraits::setWrapper(domData, domObject, wrapper);
268 Traits::EventTargetTraits::setWrapper(domData, domObject, wrapper); 265 Traits::EventTargetTraits::setWrapper(domData, domObject, wrapper);
269 domObject->ref(); 266 domObject->ref();
270 } 267 }
271 268
272 template <class BindingsClass> 269 template <class BindingsClass>
273 static void disassociateWrapper(typename BindingsClass::NativeType* domObjec t, Dart_Handle oldInstance) 270 static void disassociateWrapper(typename BindingsClass::NativeType* domObjec t, Dart_Handle oldInstance)
274 { 271 {
275 typedef DartDOMWrapperTraits<BindingsClass> Traits; 272 typedef DartDOMWrapperTraits<BindingsClass> Traits;
276 273
277 DartDOMData* domData = DartDOMData::current(); 274 DartDOMData* domData = DartDOMData::current();
278 Dart_WeakPersistentHandle wrapper = Traits::MapTraits::domMap(domData)-> get(domObject); 275 Dart_WeakPersistentHandle wrapper = Traits::MapTraits::domMap(domData)-> get(domObject);
279 ASSERT(Dart_IdentityEquals(Dart_HandleFromWeakPersistent(wrapper), oldIn stance)); 276 ASSERT(Dart_IdentityEquals(Dart_HandleFromWeakPersistent(wrapper), oldIn stance));
280 Traits::MapTraits::domMap(domData)->remove(domObject); 277 Traits::MapTraits::domMap(domData)->remove(domObject);
281 Traits::ActiveTraits::removeWrapper(domData, domObject); 278 Traits::ActiveTraits::removeWrapper(domData, domObject);
282 Traits::EventTargetTraits::removeWrapper(domData, domObject); 279 Traits::EventTargetTraits::removeWrapper(domData, domObject);
283 } 280 }
284 281
285 friend class DartCustomElement; 282 friend class DartCustomElementWrapper<HTMLElement>;
286 }; 283 };
287 284
288 template<bool isNode> 285 template<bool isNode>
289 struct DartDOMWrapperMapTraits { }; 286 struct DartDOMWrapperMapTraits { };
290 287
291 template<> 288 template<>
292 struct DartDOMWrapperMapTraits<false> { 289 struct DartDOMWrapperMapTraits<false> {
293 static DartDOMObjectMap* domMap(DartDOMData* domData) { return domData->obje ctMap(); } 290 static DartDOMObjectMap* domMap(DartDOMData* domData) { return domData->obje ctMap(); }
294 }; 291 };
295 292
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 static DartMessagePortMap* domMap(DartDOMData* domData) { return domData ->messagePortMap(); } 356 static DartMessagePortMap* domMap(DartDOMData* domData) { return domData ->messagePortMap(); }
360 }; 357 };
361 typedef MessagePortMapTraits MapTraits; 358 typedef MessagePortMapTraits MapTraits;
362 typedef DartDOMWrapperActiveTraits<DartMessagePort, false> ActiveTraits; 359 typedef DartDOMWrapperActiveTraits<DartMessagePort, false> ActiveTraits;
363 typedef DartDOMWrapperEventTargetTraits<DartMessagePort, true> EventTargetTr aits; 360 typedef DartDOMWrapperEventTargetTraits<DartMessagePort, true> EventTargetTr aits;
364 }; 361 };
365 362
366 } 363 }
367 364
368 #endif // DartDOMWrapper_h 365 #endif // DartDOMWrapper_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698