Bug 1687635 part 2 - Disable Repair Text Encoding when known not to have effect. r=emk

Differential Revision: https://phabricator.services.mozilla.com/D112929
This commit is contained in:
Henri Sivonen
2021-06-01 05:15:49 +00:00
parent 34e35140d6
commit 05ce9e975a
3 changed files with 54 additions and 1 deletions

View File

@@ -689,7 +689,41 @@ bool nsHTMLDocument::WillIgnoreCharsetOverride() {
return true;
}
}
return false;
switch (mCharacterSetSource) {
case kCharsetUninitialized:
case kCharsetFromFallback:
case kCharsetFromTopLevelDomain:
case kCharsetFromDocTypeDefault:
case kCharsetFromInitialAutoDetectionWouldHaveBeenUTF8:
case kCharsetFromInitialAutoDetectionWouldNotHaveBeenUTF8DependedOnTLD:
case kCharsetFromFinalJapaneseAutoDetection:
case kCharsetFromFinalAutoDetectionWouldHaveBeenUTF8:
case kCharsetFromFinalAutoDetectionWouldNotHaveBeenUTF8DependedOnTLD:
case kCharsetFromParentFrame:
case kCharsetFromXmlDeclaration:
case kCharsetFromMetaPrescan:
case kCharsetFromMetaTag:
case kCharsetFromChannel:
case kCharsetFromUserForced:
case kCharsetFromUserForcedJapaneseAutoDetection:
return false;
}
bool potentialEffect = false;
nsIPrincipal* parentPrincipal = NodePrincipal();
auto subDoc = [&potentialEffect, parentPrincipal](Document& aSubDoc) {
if (parentPrincipal->Equals(aSubDoc.NodePrincipal()) &&
!aSubDoc.WillIgnoreCharsetOverride()) {
potentialEffect = true;
return CallState::Stop;
}
return CallState::Continue;
};
EnumerateSubDocuments(subDoc);
return !potentialEffect;
}
void nsHTMLDocument::GetFormsAndFormControls(nsContentList** aFormList,