Backed out changeset c034b967d740 (bug 1571247) for perma failures on test_DownloadsCommon_getMimeInfo.js. CLOSED TREE

This commit is contained in:
Razvan Maries 2020-08-21 01:27:47 +03:00
Родитель 5746cb6bd9
Коммит 0c5b98d077
2 изменённых файлов: 7 добавлений и 47 удалений

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

@ -487,7 +487,7 @@ static const nsExtraMimeTypeEntry extraMimeEntries[] = {
{IMAGE_BMP, "bmp", "BMP Image"},
{IMAGE_GIF, "gif", "GIF Image"},
{IMAGE_ICO, "ico,cur", "ICO Image"},
{IMAGE_JPEG, "jpg,jpeg,jfif,pjpeg,pjp", "JPEG Image"},
{IMAGE_JPEG, "jpeg,jpg,jfif,pjpeg,pjp", "JPEG Image"},
{IMAGE_PNG, "png", "PNG Image"},
{IMAGE_APNG, "apng", "APNG Image"},
{IMAGE_TIFF, "tiff,tif", "TIFF Image"},
@ -528,9 +528,6 @@ static const nsExtraMimeTypeEntry extraMimeEntries[] = {
{AUDIO_MIDI, "mid", "Standard MIDI Audio"},
{APPLICATION_WASM, "wasm", "WebAssembly Module"}};
static const nsDefaultMimeTypeEntry sForbiddenPrimaryExtensions[] = {
{IMAGE_JPEG, "jfif"}};
/**
* File extensions for which decoding should be disabled.
* NOTE: These MUST be lower-case and ASCII.
@ -2634,18 +2631,6 @@ NS_IMETHODIMP nsExternalHelperAppService::GetFromTypeAndExtension(
LOG(("Falling back to 'File' file description\n"));
}
// Sometimes, OSes give us bad data. We have a set of forbidden extensions
// for some MIME types. If the primary extension is forbidden,
// overwrite it with a known-good one. See bug 1571247 for context.
nsAutoCString primaryExtension;
(*_retval)->GetPrimaryExtension(primaryExtension);
if (!primaryExtension.LowerCaseEqualsASCII(
PromiseFlatCString(aFileExt).get())) {
if (MaybeReplacePrimaryExtension(primaryExtension, *_retval)) {
(*_retval)->GetPrimaryExtension(primaryExtension);
}
}
// Finally, check if we got a file extension and if yes, if it is an
// extension on the mimeinfo, in which case we want it to be the primary one
if (!aFileExt.IsEmpty()) {
@ -2657,7 +2642,6 @@ NS_IMETHODIMP nsExternalHelperAppService::GetFromTypeAndExtension(
nsAutoCString fileExt;
ToLowerCase(aFileExt, fileExt);
(*_retval)->SetPrimaryExtension(fileExt);
primaryExtension = fileExt;
}
}
@ -2665,7 +2649,9 @@ NS_IMETHODIMP nsExternalHelperAppService::GetFromTypeAndExtension(
// type is in our list; these are file formats supported by Firefox and
// we don't want other brands positioning themselves as the sole viewer
// for a system.
if (!primaryExtension.IsEmpty()) {
nsAutoCString primaryExtension;
rv = (*_retval)->GetPrimaryExtension(primaryExtension);
if (NS_SUCCEEDED(rv)) {
for (const char* ext : descriptionOverwriteExtensions) {
if (primaryExtension.Equals(ext)) {
nsCOMPtr<nsIStringBundleService> bundleService =
@ -2694,8 +2680,10 @@ NS_IMETHODIMP nsExternalHelperAppService::GetFromTypeAndExtension(
nsAutoCString type;
(*_retval)->GetMIMEType(type);
nsAutoCString ext;
(*_retval)->GetPrimaryExtension(ext);
LOG(("MIME Info Summary: Type '%s', Primary Ext '%s'\n", type.get(),
primaryExtension.get()));
ext.get()));
}
return NS_OK;
@ -2902,26 +2890,6 @@ nsresult nsExternalHelperAppService::FillMIMEInfoForExtensionFromExtras(
return FillMIMEInfoForMimeTypeFromExtras(type, true, aMIMEInfo);
}
bool nsExternalHelperAppService::MaybeReplacePrimaryExtension(
const nsACString& aPrimaryExtension, nsIMIMEInfo* aMIMEInfo) {
for (const auto& entry : sForbiddenPrimaryExtensions) {
if (aPrimaryExtension.LowerCaseEqualsASCII(entry.mFileExtension)) {
nsDependentCString mime(entry.mMimeType);
for (const auto& extraEntry : extraMimeEntries) {
if (mime.LowerCaseEqualsASCII(extraEntry.mMimeType)) {
nsDependentCString goodExts(extraEntry.mFileExtensions);
int32_t commaPos = goodExts.FindChar(',');
commaPos = commaPos == kNotFound ? goodExts.Length() : commaPos;
auto goodExt = Substring(goodExts, 0, commaPos);
aMIMEInfo->SetPrimaryExtension(goodExt);
return true;
}
}
}
}
return false;
}
bool nsExternalHelperAppService::GetTypeFromExtras(const nsACString& aExtension,
nsACString& aMIMEType) {
NS_ASSERTION(!aExtension.IsEmpty(), "Empty aExtension parameter!");

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

@ -143,14 +143,6 @@ class nsExternalHelperAppService : public nsIExternalHelperAppService,
nsresult FillMIMEInfoForExtensionFromExtras(const nsACString& aExtension,
nsIMIMEInfo* aMIMEInfo);
/**
* Replace the primary extension of the mimeinfo object if it's in our
* list of forbidden extensions. This fixes up broken information
* provided to us by the OS.
*/
bool MaybeReplacePrimaryExtension(const nsACString& aPrimaryExtension,
nsIMIMEInfo* aMIMEInfo);
/**
* Searches the "extra" array for a MIME type, and gets its extension.
* @param aExtension The extension to search for