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

Side by Side Diff: Source/bindings/v8/V8CustomElementLifecycleCallbacks.cpp

Issue 117313008: Update Custom Elements API to new names. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Update for forgotten tests. Created 7 years 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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. 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 27 matching lines...) Expand all
38 #include "bindings/v8/V8Binding.h" 38 #include "bindings/v8/V8Binding.h"
39 #include "bindings/v8/V8HiddenPropertyName.h" 39 #include "bindings/v8/V8HiddenPropertyName.h"
40 #include "bindings/v8/V8PerContextData.h" 40 #include "bindings/v8/V8PerContextData.h"
41 #include "core/dom/ExecutionContext.h" 41 #include "core/dom/ExecutionContext.h"
42 #include "wtf/PassOwnPtr.h" 42 #include "wtf/PassOwnPtr.h"
43 43
44 namespace WebCore { 44 namespace WebCore {
45 45
46 #define CALLBACK_LIST(V) \ 46 #define CALLBACK_LIST(V) \
47 V(created, Created) \ 47 V(created, Created) \
48 V(enteredView, EnteredView) \ 48 V(attached, Attached) \
49 V(leftView, LeftView) \ 49 V(detached, Detached) \
50 V(attributeChanged, AttributeChanged) 50 V(attributeChanged, AttributeChanged)
51 51
52 PassRefPtr<V8CustomElementLifecycleCallbacks> V8CustomElementLifecycleCallbacks: :create(ExecutionContext* executionContext, v8::Handle<v8::Object> prototype, v8 ::Handle<v8::Function> created, v8::Handle<v8::Function> enteredView, v8::Handle <v8::Function> leftView, v8::Handle<v8::Function> attributeChanged) 52 PassRefPtr<V8CustomElementLifecycleCallbacks> V8CustomElementLifecycleCallbacks: :create(ExecutionContext* executionContext, v8::Handle<v8::Object> prototype, v8 ::Handle<v8::Function> created, v8::Handle<v8::Function> attached, v8::Handle<v8 ::Function> detached, v8::Handle<v8::Function> attributeChanged)
53 { 53 {
54 v8::Isolate* isolate = toIsolate(executionContext); 54 v8::Isolate* isolate = toIsolate(executionContext);
55 // A given object can only be used as a Custom Element prototype 55 // A given object can only be used as a Custom Element prototype
56 // once; see customElementIsInterfacePrototypeObject 56 // once; see customElementIsInterfacePrototypeObject
57 #define SET_HIDDEN_PROPERTY(Value, Name) \ 57 #define SET_HIDDEN_PROPERTY(Value, Name) \
58 ASSERT(prototype->GetHiddenValue(V8HiddenPropertyName::customElement##Name(i solate)).IsEmpty()); \ 58 ASSERT(prototype->GetHiddenValue(V8HiddenPropertyName::customElement##Name(i solate)).IsEmpty()); \
59 if (!Value.IsEmpty()) \ 59 if (!Value.IsEmpty()) \
60 prototype->SetHiddenValue(V8HiddenPropertyName::customElement##Name(isol ate), Value); 60 prototype->SetHiddenValue(V8HiddenPropertyName::customElement##Name(isol ate), Value);
61 61
62 CALLBACK_LIST(SET_HIDDEN_PROPERTY) 62 CALLBACK_LIST(SET_HIDDEN_PROPERTY)
63 #undef SET_HIDDEN_PROPERTY 63 #undef SET_HIDDEN_PROPERTY
64 64
65 return adoptRef(new V8CustomElementLifecycleCallbacks(executionContext, prot otype, created, enteredView, leftView, attributeChanged)); 65 return adoptRef(new V8CustomElementLifecycleCallbacks(executionContext, prot otype, created, attached, detached, attributeChanged));
66 } 66 }
67 67
68 static CustomElementLifecycleCallbacks::CallbackType flagSet(v8::Handle<v8::Func tion> enteredView, v8::Handle<v8::Function> leftView, v8::Handle<v8::Function> a ttributeChanged) 68 static CustomElementLifecycleCallbacks::CallbackType flagSet(v8::Handle<v8::Func tion> attached, v8::Handle<v8::Function> detached, v8::Handle<v8::Function> attr ibuteChanged)
69 { 69 {
70 // V8 Custom Elements always run created to swizzle prototypes. 70 // V8 Custom Elements always run created to swizzle prototypes.
71 int flags = CustomElementLifecycleCallbacks::Created; 71 int flags = CustomElementLifecycleCallbacks::Created;
72 72
73 if (!enteredView.IsEmpty()) 73 if (!attached.IsEmpty())
74 flags |= CustomElementLifecycleCallbacks::EnteredView; 74 flags |= CustomElementLifecycleCallbacks::Attached;
75 75
76 if (!leftView.IsEmpty()) 76 if (!detached.IsEmpty())
77 flags |= CustomElementLifecycleCallbacks::LeftView; 77 flags |= CustomElementLifecycleCallbacks::Detached;
78 78
79 if (!attributeChanged.IsEmpty()) 79 if (!attributeChanged.IsEmpty())
80 flags |= CustomElementLifecycleCallbacks::AttributeChanged; 80 flags |= CustomElementLifecycleCallbacks::AttributeChanged;
81 81
82 return CustomElementLifecycleCallbacks::CallbackType(flags); 82 return CustomElementLifecycleCallbacks::CallbackType(flags);
83 } 83 }
84 84
85 template <typename T> 85 template <typename T>
86 static void weakCallback(const v8::WeakCallbackData<T, ScopedPersistent<T> >& da ta) 86 static void weakCallback(const v8::WeakCallbackData<T, ScopedPersistent<T> >& da ta)
87 { 87 {
88 data.GetParameter()->clear(); 88 data.GetParameter()->clear();
89 } 89 }
90 90
91 V8CustomElementLifecycleCallbacks::V8CustomElementLifecycleCallbacks(ExecutionCo ntext* executionContext, v8::Handle<v8::Object> prototype, v8::Handle<v8::Functi on> created, v8::Handle<v8::Function> enteredView, v8::Handle<v8::Function> left View, v8::Handle<v8::Function> attributeChanged) 91 V8CustomElementLifecycleCallbacks::V8CustomElementLifecycleCallbacks(ExecutionCo ntext* executionContext, v8::Handle<v8::Object> prototype, v8::Handle<v8::Functi on> created, v8::Handle<v8::Function> attached, v8::Handle<v8::Function> detache d, v8::Handle<v8::Function> attributeChanged)
92 : CustomElementLifecycleCallbacks(flagSet(enteredView, leftView, attributeCh anged)) 92 : CustomElementLifecycleCallbacks(flagSet(attached, detached, attributeChang ed))
93 , ContextLifecycleObserver(executionContext) 93 , ContextLifecycleObserver(executionContext)
94 , m_owner(0) 94 , m_owner(0)
95 , m_world(DOMWrapperWorld::current()) 95 , m_world(DOMWrapperWorld::current())
96 , m_prototype(toIsolate(executionContext), prototype) 96 , m_prototype(toIsolate(executionContext), prototype)
97 , m_created(toIsolate(executionContext), created) 97 , m_created(toIsolate(executionContext), created)
98 , m_enteredView(toIsolate(executionContext), enteredView) 98 , m_attached(toIsolate(executionContext), attached)
99 , m_leftView(toIsolate(executionContext), leftView) 99 , m_detached(toIsolate(executionContext), detached)
100 , m_attributeChanged(toIsolate(executionContext), attributeChanged) 100 , m_attributeChanged(toIsolate(executionContext), attributeChanged)
101 { 101 {
102 m_prototype.setWeak(&m_prototype, weakCallback<v8::Object>); 102 m_prototype.setWeak(&m_prototype, weakCallback<v8::Object>);
103 103
104 #define MAKE_WEAK(Var, _) \ 104 #define MAKE_WEAK(Var, _) \
105 if (!m_##Var.isEmpty()) \ 105 if (!m_##Var.isEmpty()) \
106 m_##Var.setWeak(&m_##Var, weakCallback<v8::Function>); 106 m_##Var.setWeak(&m_##Var, weakCallback<v8::Function>);
107 107
108 CALLBACK_LIST(MAKE_WEAK) 108 CALLBACK_LIST(MAKE_WEAK)
109 #undef MAKE_WEAK 109 #undef MAKE_WEAK
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 if (receiver.IsEmpty()) 183 if (receiver.IsEmpty())
184 receiver = toV8(element, context->Global(), isolate).As<v8::Object>(); 184 receiver = toV8(element, context->Global(), isolate).As<v8::Object>();
185 185
186 ASSERT(!receiver.IsEmpty()); 186 ASSERT(!receiver.IsEmpty());
187 187
188 v8::TryCatch exceptionCatcher; 188 v8::TryCatch exceptionCatcher;
189 exceptionCatcher.SetVerbose(true); 189 exceptionCatcher.SetVerbose(true);
190 ScriptController::callFunction(executionContext(), callback, receiver, 0, 0, isolate); 190 ScriptController::callFunction(executionContext(), callback, receiver, 0, 0, isolate);
191 } 191 }
192 192
193 void V8CustomElementLifecycleCallbacks::enteredView(Element* element) 193 void V8CustomElementLifecycleCallbacks::attached(Element* element)
194 { 194 {
195 call(m_enteredView, element); 195 call(m_attached, element);
196 } 196 }
197 197
198 void V8CustomElementLifecycleCallbacks::leftView(Element* element) 198 void V8CustomElementLifecycleCallbacks::detached(Element* element)
199 { 199 {
200 call(m_leftView, element); 200 call(m_detached, element);
201 } 201 }
202 202
203 void V8CustomElementLifecycleCallbacks::attributeChanged(Element* element, const AtomicString& name, const AtomicString& oldValue, const AtomicString& newValue) 203 void V8CustomElementLifecycleCallbacks::attributeChanged(Element* element, const AtomicString& name, const AtomicString& oldValue, const AtomicString& newValue)
204 { 204 {
205 // FIXME: callbacks while paused should be queued up for execution to 205 // FIXME: callbacks while paused should be queued up for execution to
206 // continue then be delivered in order rather than delivered immediately. 206 // continue then be delivered in order rather than delivered immediately.
207 // Bug 329665 tracks similar behavior for other synchronous events. 207 // Bug 329665 tracks similar behavior for other synchronous events.
208 if (!executionContext() || executionContext()->activeDOMObjectsAreStopped()) 208 if (!executionContext() || executionContext()->activeDOMObjectsAreStopped())
209 return; 209 return;
210 210
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 256
257 v8::Handle<v8::Object> receiver = toV8(element, context->Global(), isolate). As<v8::Object>(); 257 v8::Handle<v8::Object> receiver = toV8(element, context->Global(), isolate). As<v8::Object>();
258 ASSERT(!receiver.IsEmpty()); 258 ASSERT(!receiver.IsEmpty());
259 259
260 v8::TryCatch exceptionCatcher; 260 v8::TryCatch exceptionCatcher;
261 exceptionCatcher.SetVerbose(true); 261 exceptionCatcher.SetVerbose(true);
262 ScriptController::callFunction(executionContext(), callback, receiver, 0, 0, isolate); 262 ScriptController::callFunction(executionContext(), callback, receiver, 0, 0, isolate);
263 } 263 }
264 264
265 } // namespace WebCore 265 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/bindings/v8/V8CustomElementLifecycleCallbacks.h ('k') | Source/bindings/v8/V8HiddenPropertyName.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698