forked from mirrors/gecko-dev
Some style system APIs (like StyleNewSubtree) don't deal with nested restyles really well (it'd be weird if StyleNewSubtree would end up styling not only that subtree but the whole document). To prevent breaking style system invariants, make sure to invalidate the style asynchronously using an early runner. This should ensure at most one frame of wrong metrics, but usually zero. Differential Revision: https://phabricator.services.mozilla.com/D126076
57 lines
1.7 KiB
C++
57 lines
1.7 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "PostTraversalTask.h"
|
|
|
|
#include "mozilla/dom/FontFace.h"
|
|
#include "mozilla/dom/FontFaceSet.h"
|
|
#include "gfxPlatformFontList.h"
|
|
#include "gfxTextRun.h"
|
|
#include "ServoStyleSet.h"
|
|
#include "nsPresContext.h"
|
|
|
|
namespace mozilla {
|
|
|
|
using namespace dom;
|
|
|
|
void PostTraversalTask::Run() {
|
|
switch (mType) {
|
|
case Type::ResolveFontFaceLoadedPromise:
|
|
static_cast<FontFace*>(mTarget)->DoResolve();
|
|
break;
|
|
|
|
case Type::RejectFontFaceLoadedPromise:
|
|
static_cast<FontFace*>(mTarget)->DoReject(mResult);
|
|
break;
|
|
|
|
case Type::DispatchLoadingEventAndReplaceReadyPromise:
|
|
static_cast<FontFaceSet*>(mTarget)
|
|
->DispatchLoadingEventAndReplaceReadyPromise();
|
|
break;
|
|
|
|
case Type::DispatchFontFaceSetCheckLoadingFinishedAfterDelay:
|
|
static_cast<FontFaceSet*>(mTarget)
|
|
->DispatchCheckLoadingFinishedAfterDelay();
|
|
break;
|
|
|
|
case Type::LoadFontEntry:
|
|
static_cast<gfxUserFontEntry*>(mTarget)->ContinueLoad();
|
|
break;
|
|
|
|
case Type::InitializeFamily:
|
|
Unused << gfxPlatformFontList::PlatformFontList()->InitializeFamily(
|
|
static_cast<fontlist::Family*>(mTarget));
|
|
break;
|
|
|
|
case Type::FontInfoUpdate:
|
|
if (auto* pc = static_cast<ServoStyleSet*>(mTarget)->GetPresContext()) {
|
|
pc->ForceReflowForFontInfoUpdateFromStyle();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
} // namespace mozilla
|