109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// found in the LICENSE file. 409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#ifndef CustomElementMicrotaskDispatcher_h 609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#define CustomElementMicrotaskDispatcher_h 709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "platform/heap/Handle.h" 909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/Noncopyable.h" 1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/PassOwnPtr.h" 1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/Vector.h" 1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CustomElementCallbackQueue; 1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CustomElementMicrotaskImportStep; 1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CustomElementMicrotaskStep; 18197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass Document; 1910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass HTMLImportLoader; 2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 21d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class CustomElementMicrotaskDispatcher FINAL : public NoBaseWillBeGarbageCollected<CustomElementMicrotaskDispatcher> { 2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(CustomElementMicrotaskDispatcher); 23d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(CustomElementMicrotaskDispatcher); 2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public: 2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) static CustomElementMicrotaskDispatcher& instance(); 2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void enqueue(CustomElementCallbackQueue*); 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool elementQueueIsEmpty() { return m_elements.isEmpty(); } 3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 31d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void trace(Visitor*); 32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private: 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) CustomElementMicrotaskDispatcher(); 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 36f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void ensureMicrotaskScheduledForElementQueue(); 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void ensureMicrotaskScheduled(); 3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) static void dispatch(); 4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void doDispatch(); 4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool m_hasScheduledMicrotask; 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) enum { 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Quiescent, 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Resolving, 4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) DispatchingCallbacks 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } m_phase; 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 49d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) WillBeHeapVector<RawPtrWillBeMember<CustomElementCallbackQueue> > m_elements; 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}; 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif // CustomElementMicrotaskDispatcher_h 55