summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.h')
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.h b/chromium/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.h
new file mode 100644
index 00000000000..961074fd242
--- /dev/null
+++ b/chromium/third_party/WebKit/Source/core/dom/custom/CustomElementMicrotaskDispatcher.h
@@ -0,0 +1,70 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CustomElementMicrotaskDispatcher_h
+#define CustomElementMicrotaskDispatcher_h
+
+#include "platform/heap/Handle.h"
+#include "wtf/Noncopyable.h"
+#include "wtf/PassOwnPtr.h"
+#include "wtf/Vector.h"
+
+namespace WebCore {
+
+class CustomElementCallbackQueue;
+class CustomElementMicrotaskImportStep;
+class CustomElementMicrotaskStep;
+class CustomElementMicrotaskStepDispatcher;
+class HTMLImportLoader;
+
+class CustomElementMicrotaskDispatcher FINAL : public NoBaseWillBeGarbageCollected<CustomElementMicrotaskDispatcher> {
+ WTF_MAKE_NONCOPYABLE(CustomElementMicrotaskDispatcher);
+ DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(CustomElementMicrotaskDispatcher);
+public:
+ static CustomElementMicrotaskDispatcher& instance();
+
+ void enqueue(HTMLImportLoader* parentLoader, PassOwnPtrWillBeRawPtr<CustomElementMicrotaskStep>);
+ void enqueue(HTMLImportLoader* parentLoader, PassOwnPtrWillBeRawPtr<CustomElementMicrotaskImportStep>, bool importIsSync);
+
+ void enqueue(CustomElementCallbackQueue*);
+
+
+ void importDidFinish(CustomElementMicrotaskImportStep*);
+
+ bool elementQueueIsEmpty() { return m_elements.isEmpty(); }
+
+ void trace(Visitor*);
+
+#if !defined(NDEBUG)
+ void show();
+#endif
+
+private:
+ CustomElementMicrotaskDispatcher();
+
+ void ensureMicrotaskScheduledForElementQueue();
+ void ensureMicrotaskScheduledForMicrotaskSteps();
+ void ensureMicrotaskScheduled();
+
+ static void dispatch();
+ void doDispatch();
+
+ bool m_hasScheduledMicrotask;
+ enum {
+ Quiescent,
+ Resolving,
+ DispatchingCallbacks
+ } m_phase;
+
+ RefPtrWillBeMember<CustomElementMicrotaskStepDispatcher> m_steps;
+ WillBeHeapVector<RawPtrWillBeMember<CustomElementCallbackQueue> > m_elements;
+};
+
+}
+
+#if !defined(NDEBUG)
+void showCEMD();
+#endif
+
+#endif // CustomElementMicrotaskDispatcher_h