1e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch/* 2e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2013 Google Inc. All rights reserved. 3e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 4e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Redistribution and use in source and binary forms, with or without 5e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * modification, are permitted provided that the following conditions 6e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * are met: 7e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 8e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 1. Redistributions of source code must retain the above copyright 9e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * notice, this list of conditions and the following disclaimer. 10e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 11e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * notice, this list of conditions and the following disclaimer 12e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * in the documentation and/or other materials provided with the 13e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * distribution. 14e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 3. Neither the name of Google Inc. nor the names of its contributors 15e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * may be used to endorse or promote products derived from this 16e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * software without specific prior written permission. 17e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 18e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 30e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 31e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#ifndef CustomElementCallbackQueue_h 32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#define CustomElementCallbackQueue_h 33e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 3406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/dom/Element.h" 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/dom/custom/CustomElementProcessingStep.h" 36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "platform/heap/Handle.h" 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/OwnPtr.h" 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassOwnPtr.h" 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassRefPtr.h" 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefPtr.h" 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Vector.h" 42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 44e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// FIXME: Rename this because it contains resolution and upgrade as 4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// well as callbacks. 47d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class CustomElementCallbackQueue : public NoBaseWillBeGarbageCollectedFinalized<CustomElementCallbackQueue> { 48e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch WTF_MAKE_NONCOPYABLE(CustomElementCallbackQueue); 49e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochpublic: 50d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) static PassOwnPtrWillBeRawPtr<CustomElementCallbackQueue> create(PassRefPtrWillBeRawPtr<Element>); 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) typedef int ElementQueueId; 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ElementQueueId owner() const { return m_owner; } 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void setOwner(ElementQueueId newOwner) 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 57e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // ElementCallbackQueues only migrate towards the top of the 58e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // processing stack. 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ASSERT(newOwner >= m_owner); 60e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch m_owner = newOwner; 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 62e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool processInElementQueue(ElementQueueId); 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void append(PassOwnPtr<CustomElementProcessingStep> invocation) { m_queue.append(invocation); } 66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool inCreatedCallback() const { return m_inCreatedCallback; } 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void trace(Visitor*); 69d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 70e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochprivate: 71d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) explicit CustomElementCallbackQueue(PassRefPtrWillBeRawPtr<Element>); 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 73d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeMember<Element> m_element; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Vector<OwnPtr<CustomElementProcessingStep> > m_queue; 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ElementQueueId m_owner; 76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch size_t m_index; 77e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool m_inCreatedCallback; 78e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 79e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 80e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 81e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 82e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#endif // CustomElementCallbackQueue_h 83