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

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

Issue 24677002: Revert "Revert "Dartium changes for custom element lifecycle events."" (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Created 7 years, 2 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(DartDOMData* domData, bool is Node, void* domObject) 69 static Dart_WeakPersistentHandle lookupWrapper(DartDOMData* domData, bool is Node, void* domObject)
66 { 70 {
67 ASSERT(domObject); 71 ASSERT(domObject);
68 ASSERT(domData); 72 ASSERT(domData);
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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 static void returnToDart(Dart_NativeArguments args, PassRefPtr<typename Bind ingsClass::NativeType> domObject) 195 static void returnToDart(Dart_NativeArguments args, PassRefPtr<typename Bind ingsClass::NativeType> domObject)
196 { 196 {
197 returnToDart<BindingsClass>(args, domObject.get()); 197 returnToDart<BindingsClass>(args, domObject.get());
198 } 198 }
199 199
200 static int wrapperNativeFieldCount() { return kNativeFieldCount; } 200 static int wrapperNativeFieldCount() { return kNativeFieldCount; }
201 201
202 static Dart_Handle exceptionCodeToDartException(ExceptionCode); 202 static Dart_Handle exceptionCodeToDartException(ExceptionCode);
203 static Dart_Handle exceptionCodeToDartException(DartExceptionState&); 203 static Dart_Handle exceptionCodeToDartException(DartExceptionState&);
204 204
205 template <class BindingsClass>
206 static Dart_Handle dartClass()
207 {
208 return dartClass(BindingsClass::dartImplementationClassName,
209 BindingsClass::dartImplementationLibraryName, BindingsClass::dartCla ssId);
210 }
211
205 private: 212 private:
206 enum NativeFieldIndices { 213 enum NativeFieldIndices {
207 kNativeImplementationIndex = 0, 214 kNativeImplementationIndex = 0,
208 kNativeFieldCount 215 kNativeFieldCount
209 }; 216 };
210 217
211 static Dart_Handle dartClass(const char* dartImplementationClassName, 218 static Dart_Handle dartClass(const char* dartImplementationClassName,
212 const char* dartImplementationLibraryName, intptr_t classIndex); 219 const char* dartImplementationLibraryName, intptr_t classIndex);
213 220
214 template <class BindingsClass>
215 static Dart_Handle dartClass()
216 {
217 return dartClass(BindingsClass::dartImplementationClassName,
218 BindingsClass::dartImplementationLibraryName, BindingsClass::dartCla ssId);
219 }
220
221 static void writeNativePointer(Dart_Handle wrapper, int index, void* pointer ) 221 static void writeNativePointer(Dart_Handle wrapper, int index, void* pointer )
222 { 222 {
223 DartApiScope scope; 223 DartApiScope scope;
224 Dart_Handle result = Dart_SetNativeInstanceField(wrapper, index, reinter pret_cast<intptr_t>(pointer)); 224 Dart_Handle result = Dart_SetNativeInstanceField(wrapper, index, reinter pret_cast<intptr_t>(pointer));
225 UNUSED_PARAM(result); 225 UNUSED_PARAM(result);
226 ASSERT(!Dart_IsError(result)); 226 ASSERT(!Dart_IsError(result));
227 } 227 }
228 228
229 static void* readNativePointer(Dart_Handle wrapper, int index) 229 static void* readNativePointer(Dart_Handle wrapper, int index)
230 { 230 {
(...skipping 15 matching lines...) Expand all
246 DartDOMData* domData = DartDOMData::current(); 246 DartDOMData* domData = DartDOMData::current();
247 typename BindingsClass::NativeType* domObject = static_cast<typename Bin dingsClass::NativeType*>(peer); 247 typename BindingsClass::NativeType* domObject = static_cast<typename Bin dingsClass::NativeType*>(peer);
248 if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->con tains(domObject)) { 248 if (DartDOMWrapperTraits<BindingsClass>::MapTraits::domMap(domData)->con tains(domObject)) {
249 Traits::MapTraits::domMap(domData)->remove(domObject); 249 Traits::MapTraits::domMap(domData)->remove(domObject);
250 Traits::ActiveTraits::removeWrapper(domData, domObject); 250 Traits::ActiveTraits::removeWrapper(domData, domObject);
251 Traits::EventTargetTraits::removeWrapper(domData, domObject); 251 Traits::EventTargetTraits::removeWrapper(domData, domObject);
252 } 252 }
253 domObject->deref(); 253 domObject->deref();
254 } 254 }
255 255
256 static Dart_WeakPersistentHandle lookupCustomElementWrapper(
257 DartDOMData*, Dart_WeakPersistentHandle wrapper, Node* domObject);
258
259 template <class BindingsClass> 256 template <class BindingsClass>
260 static void associateWrapper(typename BindingsClass::NativeType* domObject, Dart_Handle newInstance) 257 static void associateWrapper(typename BindingsClass::NativeType* domObject, Dart_Handle newInstance)
261 { 258 {
262 typedef DartDOMWrapperTraits<BindingsClass> Traits; 259 typedef DartDOMWrapperTraits<BindingsClass> Traits;
263 260
264 DartDOMData* domData = DartDOMData::current(); 261 DartDOMData* domData = DartDOMData::current();
265 Dart_WeakPersistentHandle wrapper = DartUtilities::createPrologueWeakPer sistentHandle( 262 Dart_WeakPersistentHandle wrapper = DartUtilities::createPrologueWeakPer sistentHandle(
266 newInstance, domObject, &wrapperWeakCallback<BindingsClass>); 263 newInstance, domObject, &wrapperWeakCallback<BindingsClass>);
267 Traits::MapTraits::domMap(domData)->set(domObject, wrapper); 264 Traits::MapTraits::domMap(domData)->set(domObject, wrapper);
268 Traits::ActiveTraits::setWrapper(domData, domObject, wrapper); 265 Traits::ActiveTraits::setWrapper(domData, domObject, wrapper);
269 Traits::EventTargetTraits::setWrapper(domData, domObject, wrapper); 266 Traits::EventTargetTraits::setWrapper(domData, domObject, wrapper);
270 domObject->ref(); 267 domObject->ref();
271 } 268 }
272 269
273 template <class BindingsClass> 270 template <class BindingsClass>
274 static void disassociateWrapper(typename BindingsClass::NativeType* domObjec t, Dart_Handle oldInstance) 271 static void disassociateWrapper(typename BindingsClass::NativeType* domObjec t, Dart_Handle oldInstance)
275 { 272 {
276 typedef DartDOMWrapperTraits<BindingsClass> Traits; 273 typedef DartDOMWrapperTraits<BindingsClass> Traits;
277 274
278 DartDOMData* domData = DartDOMData::current(); 275 DartDOMData* domData = DartDOMData::current();
279 Dart_WeakPersistentHandle wrapper = Traits::MapTraits::domMap(domData)-> get(domObject); 276 Dart_WeakPersistentHandle wrapper = Traits::MapTraits::domMap(domData)-> get(domObject);
280 ASSERT(Dart_IdentityEquals(Dart_HandleFromWeakPersistent(wrapper), oldIn stance)); 277 ASSERT(Dart_IdentityEquals(Dart_HandleFromWeakPersistent(wrapper), oldIn stance));
281 Traits::MapTraits::domMap(domData)->remove(domObject); 278 Traits::MapTraits::domMap(domData)->remove(domObject);
282 Traits::ActiveTraits::removeWrapper(domData, domObject); 279 Traits::ActiveTraits::removeWrapper(domData, domObject);
283 Traits::EventTargetTraits::removeWrapper(domData, domObject); 280 Traits::EventTargetTraits::removeWrapper(domData, domObject);
284 } 281 }
285 282
286 friend class DartCustomElement; 283 friend class DartCustomElementWrapper<HTMLElement>;
287 }; 284 };
288 285
289 template<bool isNode> 286 template<bool isNode>
290 struct DartDOMWrapperMapTraits { }; 287 struct DartDOMWrapperMapTraits { };
291 288
292 template<> 289 template<>
293 struct DartDOMWrapperMapTraits<false> { 290 struct DartDOMWrapperMapTraits<false> {
294 static DartDOMObjectMap* domMap(DartDOMData* domData) { return domData->obje ctMap(); } 291 static DartDOMObjectMap* domMap(DartDOMData* domData) { return domData->obje ctMap(); }
295 }; 292 };
296 293
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 static DartMessagePortMap* domMap(DartDOMData* domData) { return domData ->messagePortMap(); } 357 static DartMessagePortMap* domMap(DartDOMData* domData) { return domData ->messagePortMap(); }
361 }; 358 };
362 typedef MessagePortMapTraits MapTraits; 359 typedef MessagePortMapTraits MapTraits;
363 typedef DartDOMWrapperActiveTraits<DartMessagePort, false> ActiveTraits; 360 typedef DartDOMWrapperActiveTraits<DartMessagePort, false> ActiveTraits;
364 typedef DartDOMWrapperEventTargetTraits<DartMessagePort, true> EventTargetTr aits; 361 typedef DartDOMWrapperEventTargetTraits<DartMessagePort, true> EventTargetTr aits;
365 }; 362 };
366 363
367 } 364 }
368 365
369 #endif // DartDOMWrapper_h 366 #endif // DartDOMWrapper_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698