Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / dom / custom / CustomElementMicrotaskDispatcher.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CustomElementMicrotaskDispatcher_h
6 #define CustomElementMicrotaskDispatcher_h
7
8 #include "platform/heap/Handle.h"
9 #include "wtf/Noncopyable.h"
10 #include "wtf/PassOwnPtr.h"
11 #include "wtf/Vector.h"
12
13 namespace blink {
14
15 class CustomElementCallbackQueue;
16
17 class CustomElementMicrotaskDispatcher final : public NoBaseWillBeGarbageCollected<CustomElementMicrotaskDispatcher> {
18     WTF_MAKE_NONCOPYABLE(CustomElementMicrotaskDispatcher);
19     DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(CustomElementMicrotaskDispatcher);
20 public:
21     static CustomElementMicrotaskDispatcher& instance();
22
23     void enqueue(CustomElementCallbackQueue*);
24
25     bool elementQueueIsEmpty() { return m_elements.isEmpty(); }
26
27     void trace(Visitor*);
28
29 private:
30     CustomElementMicrotaskDispatcher();
31
32     void ensureMicrotaskScheduledForElementQueue();
33     void ensureMicrotaskScheduled();
34
35     static void dispatch();
36     void doDispatch();
37
38     bool m_hasScheduledMicrotask;
39     enum {
40         Quiescent,
41         Resolving,
42         DispatchingCallbacks
43     } m_phase;
44
45     WillBeHeapVector<RawPtrWillBeMember<CustomElementCallbackQueue> > m_elements;
46 };
47
48 } // namespace blink
49
50 #endif // CustomElementMicrotaskDispatcher_h