PageGroupLoadDeferrer.cpp [plain text]
#include "config.h"
#include "PageGroupLoadDeferrer.h"
#include "Document.h"
#include "DocumentParser.h"
#include "MainFrame.h"
#include "Page.h"
#include "PageGroup.h"
#include "ScriptRunner.h"
#include <wtf/HashSet.h>
namespace WebCore {
PageGroupLoadDeferrer::PageGroupLoadDeferrer(Page& page, bool deferSelf)
{
for (auto& otherPage : page.group().pages()) {
if ((deferSelf || otherPage != &page)) {
if (!otherPage->defersLoading()) {
m_deferredFrames.append(&otherPage->mainFrame());
for (Frame* frame = &otherPage->mainFrame(); frame; frame = frame->tree().traverseNext())
frame->document()->suspendScheduledTasks(ActiveDOMObject::WillDeferLoading);
}
}
}
for (auto& deferredFrame : m_deferredFrames) {
if (Page* page = deferredFrame->page())
page->setDefersLoading(true);
}
}
PageGroupLoadDeferrer::~PageGroupLoadDeferrer()
{
for (auto& deferredFrame : m_deferredFrames) {
if (Page* page = deferredFrame->page()) {
page->setDefersLoading(false);
for (Frame* frame = &page->mainFrame(); frame; frame = frame->tree().traverseNext())
frame->document()->resumeScheduledTasks(ActiveDOMObject::WillDeferLoading);
}
}
}
}