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" 351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/custom/CustomElementCallbackInvocation.h" 36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassOwnPtr.h" 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassRefPtr.h" 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefPtr.h" 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Vector.h" 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochnamespace WebCore { 42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass CustomElementCallbackQueue { 44e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch WTF_MAKE_NONCOPYABLE(CustomElementCallbackQueue); 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochpublic: 46e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch static PassOwnPtr<CustomElementCallbackQueue> create(PassRefPtr<Element>); 47e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 48e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch typedef int ElementQueue; 49e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ElementQueue owner() { return m_owner; } 50e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch void setOwner(ElementQueue newOwner) 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 52e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // ElementCallbackQueues only migrate towards the top of the 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // processing stack. 54e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ASSERT(newOwner >= m_owner); 55e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch m_owner = newOwner; 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 57e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 58e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch void append(PassOwnPtr<CustomElementCallbackInvocation> invocation) { m_queue.append(invocation); } 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch void processInElementQueue(ElementQueue); 60e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool inCreatedCallback() const { return m_inCreatedCallback; } 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 62e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochprivate: 63e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CustomElementCallbackQueue(PassRefPtr<Element>); 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 65e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RefPtr<Element> m_element; 66e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Vector<OwnPtr<CustomElementCallbackInvocation> > m_queue; 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ElementQueue m_owner; 68e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch size_t m_index; 69e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool m_inCreatedCallback; 70e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 71e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 73e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#endif // CustomElementCallbackQueue_h 75