Bug 1603458 - Distinguish between Error and Warning messages from OTS in the web console. r=heycam

Differential Revision: https://phabricator.services.mozilla.com/D56963

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jonathan Kew 2019-12-13 00:01:54 +00:00
Родитель 9daf9ebab6
Коммит bb251e81db
2 изменённых файлов: 23 добавлений и 14 удалений

Просмотреть файл

@ -242,21 +242,23 @@ class MOZ_STACK_CLASS gfxOTSContext : public ots::OTSContext {
mWarningsIssued.PutEntry(msg);
}
mMessages.AppendElement(msg);
mMessages.AppendElement(gfxUserFontEntry::OTSMessage{msg, level});
}
bool Process(ots::OTSStream* aOutput, const uint8_t* aInput, size_t aLength,
nsTArray<nsCString>& aMessages) {
nsTArray<gfxUserFontEntry::OTSMessage>& aMessages) {
bool ok = ots::OTSContext::Process(aOutput, aInput, aLength);
aMessages = TakeMessages();
return ok;
}
nsTArray<nsCString>&& TakeMessages() { return std::move(mMessages); }
nsTArray<gfxUserFontEntry::OTSMessage>&& TakeMessages() {
return std::move(mMessages);
}
private:
nsTHashtable<nsCStringHashKey> mWarningsIssued;
nsTArray<nsCString> mMessages;
nsTArray<gfxUserFontEntry::OTSMessage> mMessages;
bool mCheckOTLTables;
bool mCheckVariationTables;
bool mKeepColorBitmaps;
@ -266,7 +268,7 @@ class MOZ_STACK_CLASS gfxOTSContext : public ots::OTSContext {
// Returns a newly-allocated block, or nullptr in case of fatal errors.
const uint8_t* gfxUserFontEntry::SanitizeOpenTypeData(
const uint8_t* aData, uint32_t aLength, uint32_t& aSaneLength,
gfxUserFontType& aFontType, nsTArray<nsCString>& aMessages) {
gfxUserFontType& aFontType, nsTArray<OTSMessage>& aMessages) {
aFontType = gfxFontUtils::DetermineFontDataType(aData, aLength);
Telemetry::Accumulate(Telemetry::WEBFONT_FONTTYPE, uint32_t(aFontType));
@ -695,7 +697,7 @@ bool gfxUserFontEntry::LoadPlatformFontSync(const uint8_t* aFontData,
// if necessary. The original data in aFontData is left unchanged.
uint32_t saneLen;
gfxUserFontType fontType;
nsTArray<nsCString> messages;
nsTArray<OTSMessage> messages;
const uint8_t* saneData =
SanitizeOpenTypeData(aFontData, aLength, saneLen, fontType, messages);
@ -711,13 +713,13 @@ void gfxUserFontEntry::StartPlatformFontLoadOnWorkerThread(
uint32_t saneLen;
gfxUserFontType fontType;
nsTArray<nsCString> messages;
nsTArray<OTSMessage> messages;
const uint8_t* saneData =
SanitizeOpenTypeData(aFontData, aLength, saneLen, fontType, messages);
nsCOMPtr<nsIRunnable> event =
NewRunnableMethod<const uint8_t*, uint32_t, gfxUserFontType,
const uint8_t*, uint32_t, nsTArray<nsCString>&&,
const uint8_t*, uint32_t, nsTArray<OTSMessage>&&,
nsMainThreadPtrHandle<nsIFontLoadCompleteCallback>>(
"gfxUserFontEntry::ContinuePlatformFontLoadOnMainThread", this,
&gfxUserFontEntry::ContinuePlatformFontLoadOnMainThread, aFontData,
@ -730,11 +732,13 @@ bool gfxUserFontEntry::LoadPlatformFont(const uint8_t* aOriginalFontData,
gfxUserFontType aFontType,
const uint8_t* aSanitizedFontData,
uint32_t aSanitizedLength,
nsTArray<nsCString>&& aMessages) {
nsTArray<OTSMessage>&& aMessages) {
MOZ_ASSERT(NS_IsMainThread());
for (const auto& msg : aMessages) {
mFontSet->LogMessage(this, msg.get());
mFontSet->LogMessage(this, msg.mMessage.get(),
msg.mLevel > 0 ? nsIScriptError::warningFlag
: nsIScriptError::errorFlag);
}
if (!aSanitizedFontData) {
@ -949,7 +953,7 @@ void gfxUserFontEntry::LoadPlatformFontAsync(
void gfxUserFontEntry::ContinuePlatformFontLoadOnMainThread(
const uint8_t* aOriginalFontData, uint32_t aOriginalLength,
gfxUserFontType aFontType, const uint8_t* aSanitizedFontData,
uint32_t aSanitizedLength, nsTArray<nsCString>&& aMessages,
uint32_t aSanitizedLength, nsTArray<OTSMessage>&& aMessages,
nsMainThreadPtrHandle<nsIFontLoadCompleteCallback> aCallback) {
MOZ_ASSERT(NS_IsMainThread());

Просмотреть файл

@ -644,10 +644,15 @@ class gfxUserFontEntry : public gfxFontEntry {
static void Shutdown() { sFontLoadingThread = nullptr; }
protected:
struct OTSMessage {
nsCString mMessage;
int mLevel; // see OTSContext in gfx/ots/include/opentype-sanitizer.h
};
const uint8_t* SanitizeOpenTypeData(const uint8_t* aData, uint32_t aLength,
uint32_t& aSaneLength,
gfxUserFontType& aFontType,
nsTArray<nsCString>& aMessages);
nsTArray<OTSMessage>& aMessages);
// attempt to load the next resource in the src list.
void LoadNextSrc();
@ -683,7 +688,7 @@ class gfxUserFontEntry : public gfxFontEntry {
void ContinuePlatformFontLoadOnMainThread(
const uint8_t* aOriginalFontData, uint32_t aOriginalLength,
gfxUserFontType aFontType, const uint8_t* aSanitizedFontData,
uint32_t aSanitizedLength, nsTArray<nsCString>&& aMessages,
uint32_t aSanitizedLength, nsTArray<OTSMessage>&& aMessages,
nsMainThreadPtrHandle<nsIFontLoadCompleteCallback> aCallback);
// helper method for LoadPlatformFontSync and
@ -692,7 +697,7 @@ class gfxUserFontEntry : public gfxFontEntry {
uint32_t aOriginalLength, gfxUserFontType aFontType,
const uint8_t* aSanitizedFontData,
uint32_t aSanitizedLength,
nsTArray<nsCString>&& aMessages);
nsTArray<OTSMessage>&& aMessages);
// helper method for FontDataDownloadComplete and
// ContinuePlatformFontLoadOnMainThread; runs on the main thread