| Index: Source/core/dom/custom/CustomElementScheduler.cpp
|
| diff --git a/Source/core/dom/custom/CustomElementScheduler.cpp b/Source/core/dom/custom/CustomElementScheduler.cpp
|
| index 40f7235a65d2cd6a4580deda40738f41e14b10df..7743156d279e51486cf8662310c25de3a7b963a2 100644
|
| --- a/Source/core/dom/custom/CustomElementScheduler.cpp
|
| +++ b/Source/core/dom/custom/CustomElementScheduler.cpp
|
| @@ -48,8 +48,8 @@ class HTMLImport;
|
|
|
| void CustomElementScheduler::scheduleCreatedCallback(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, PassRefPtr<Element> element)
|
| {
|
| - CustomElementCallbackQueue* queue = instance().schedule(element);
|
| - queue->append(CustomElementCallbackInvocation::createInvocation(callbacks, CustomElementLifecycleCallbacks::Created));
|
| + CustomElementCallbackQueue& queue = instance().schedule(element);
|
| + queue.append(CustomElementCallbackInvocation::createInvocation(callbacks, CustomElementLifecycleCallbacks::Created));
|
| }
|
|
|
| void CustomElementScheduler::scheduleAttributeChangedCallback(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, PassRefPtr<Element> element, const AtomicString& name, const AtomicString& oldValue, const AtomicString& newValue)
|
| @@ -57,8 +57,8 @@ void CustomElementScheduler::scheduleAttributeChangedCallback(PassRefPtr<CustomE
|
| if (!callbacks->hasAttributeChangedCallback())
|
| return;
|
|
|
| - CustomElementCallbackQueue* queue = instance().schedule(element);
|
| - queue->append(CustomElementCallbackInvocation::createAttributeChangedInvocation(callbacks, name, oldValue, newValue));
|
| + CustomElementCallbackQueue& queue = instance().schedule(element);
|
| + queue.append(CustomElementCallbackInvocation::createAttributeChangedInvocation(callbacks, name, oldValue, newValue));
|
| }
|
|
|
| void CustomElementScheduler::scheduleAttachedCallback(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, PassRefPtr<Element> element)
|
| @@ -66,8 +66,8 @@ void CustomElementScheduler::scheduleAttachedCallback(PassRefPtr<CustomElementLi
|
| if (!callbacks->hasAttachedCallback())
|
| return;
|
|
|
| - CustomElementCallbackQueue* queue = instance().schedule(element);
|
| - queue->append(CustomElementCallbackInvocation::createInvocation(callbacks, CustomElementLifecycleCallbacks::Attached));
|
| + CustomElementCallbackQueue& queue = instance().schedule(element);
|
| + queue.append(CustomElementCallbackInvocation::createInvocation(callbacks, CustomElementLifecycleCallbacks::Attached));
|
| }
|
|
|
| void CustomElementScheduler::scheduleDetachedCallback(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, PassRefPtr<Element> element)
|
| @@ -75,8 +75,8 @@ void CustomElementScheduler::scheduleDetachedCallback(PassRefPtr<CustomElementLi
|
| if (!callbacks->hasDetachedCallback())
|
| return;
|
|
|
| - CustomElementCallbackQueue* queue = instance().schedule(element);
|
| - queue->append(CustomElementCallbackInvocation::createInvocation(callbacks, CustomElementLifecycleCallbacks::Detached));
|
| + CustomElementCallbackQueue& queue = instance().schedule(element);
|
| + queue.append(CustomElementCallbackInvocation::createInvocation(callbacks, CustomElementLifecycleCallbacks::Detached));
|
| }
|
|
|
| void CustomElementScheduler::resolveOrScheduleResolution(PassRefPtr<CustomElementRegistrationContext> context, PassRefPtr<Element> element, const CustomElementDescriptor& descriptor)
|
| @@ -112,13 +112,12 @@ CustomElementScheduler& CustomElementScheduler::instance()
|
| return instance;
|
| }
|
|
|
| -CustomElementCallbackQueue* CustomElementScheduler::ensureCallbackQueue(PassRefPtr<Element> element)
|
| +CustomElementCallbackQueue& CustomElementScheduler::ensureCallbackQueue(PassRefPtr<Element> element)
|
| {
|
| - Element* key = element.get();
|
| - ElementCallbackQueueMap::iterator it = m_elementCallbackQueueMap.find(key);
|
| - if (it == m_elementCallbackQueueMap.end())
|
| - return m_elementCallbackQueueMap.add(key, CustomElementCallbackQueue::create(element)).storedValue->value.get();
|
| - return it->value.get();
|
| + ElementCallbackQueueMap::ValueType* it = m_elementCallbackQueueMap.add(element.get(), nullptr).storedValue;
|
| + if (!it->value)
|
| + it->value = CustomElementCallbackQueue::create(element);
|
| + return *it->value.get();
|
| }
|
|
|
| void CustomElementScheduler::callbackDispatcherDidFinish()
|
| @@ -140,12 +139,12 @@ void CustomElementScheduler::clearElementCallbackQueueMap()
|
| }
|
|
|
| // Finds or creates the callback queue for element.
|
| -CustomElementCallbackQueue* CustomElementScheduler::schedule(PassRefPtr<Element> passElement)
|
| +CustomElementCallbackQueue& CustomElementScheduler::schedule(PassRefPtr<Element> passElement)
|
| {
|
| RefPtr<Element> element(passElement);
|
|
|
| - CustomElementCallbackQueue* callbackQueue = ensureCallbackQueue(element);
|
| - if (callbackQueue->inCreatedCallback()) {
|
| + CustomElementCallbackQueue& callbackQueue = ensureCallbackQueue(element);
|
| + if (callbackQueue.inCreatedCallback()) {
|
| // Don't move it. Authors use the createdCallback like a
|
| // constructor. By not moving it, the createdCallback
|
| // completes before any other callbacks are entered for this
|
| @@ -155,11 +154,11 @@ CustomElementCallbackQueue* CustomElementScheduler::schedule(PassRefPtr<Element>
|
|
|
| if (CustomElementCallbackDispatcher::inCallbackDeliveryScope()) {
|
| // The processing stack is active.
|
| - CustomElementCallbackDispatcher::instance().enqueue(callbackQueue);
|
| + CustomElementCallbackDispatcher::instance().enqueue(&callbackQueue);
|
| return callbackQueue;
|
| }
|
|
|
| - CustomElementMicrotaskDispatcher::instance().enqueue(callbackQueue);
|
| + CustomElementMicrotaskDispatcher::instance().enqueue(&callbackQueue);
|
| return callbackQueue;
|
| }
|
|
|
|
|