flutter_flutter/engine/core/dom/custom/CustomElementMicrotaskRunQueue.cpp
Elliott Sprehn d1e3759806 Remove more oilpan.
I also unraveled lots of transitive deps from Handle.h

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/709203002
2014-11-07 18:11:03 -08:00

66 lines
1.8 KiB
C++

// 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.
#include "config.h"
#include "core/dom/custom/CustomElementMicrotaskRunQueue.h"
#include "base/bind.h"
#include "core/dom/Microtask.h"
#include "core/dom/custom/CustomElementAsyncImportMicrotaskQueue.h"
#include "core/dom/custom/CustomElementSyncMicrotaskQueue.h"
#include "core/html/imports/HTMLImportLoader.h"
#include <stdio.h>
namespace blink {
CustomElementMicrotaskRunQueue::CustomElementMicrotaskRunQueue()
: m_syncQueue(CustomElementSyncMicrotaskQueue::create())
, m_asyncQueue(CustomElementAsyncImportMicrotaskQueue::create())
, m_dispatchIsPending(false)
, m_weakFactory(this)
{
}
CustomElementMicrotaskRunQueue::~CustomElementMicrotaskRunQueue()
{
}
void CustomElementMicrotaskRunQueue::enqueue(HTMLImportLoader* parentLoader, PassOwnPtr<CustomElementMicrotaskStep> step, bool importIsSync)
{
if (importIsSync) {
if (parentLoader)
parentLoader->microtaskQueue()->enqueue(step);
else
m_syncQueue->enqueue(step);
} else {
m_asyncQueue->enqueue(step);
}
requestDispatchIfNeeded();
}
void CustomElementMicrotaskRunQueue::requestDispatchIfNeeded()
{
if (m_dispatchIsPending || isEmpty())
return;
Microtask::enqueueMicrotask(base::Bind(&CustomElementMicrotaskRunQueue::dispatch, m_weakFactory.GetWeakPtr()));
m_dispatchIsPending = true;
}
void CustomElementMicrotaskRunQueue::dispatch()
{
m_dispatchIsPending = false;
m_syncQueue->dispatch();
if (m_syncQueue->isEmpty())
m_asyncQueue->dispatch();
}
bool CustomElementMicrotaskRunQueue::isEmpty() const
{
return m_syncQueue->isEmpty() && m_asyncQueue->isEmpty();
}
} // namespace blink