mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-04 23:08:39 +09:00
Remove base conditional code for crash reporter and injector.
This commit is contained in:
parent
87fa26d31e
commit
434f3590e3
131 changed files with 39 additions and 4139 deletions
|
|
@ -23,19 +23,6 @@
|
|||
#include "nsPrintfCString.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
|
||||
// Includes for the crash report annotation in ErrorLoadingSheet.
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
#include "mozilla/Omnijar.h"
|
||||
#include "nsDirectoryService.h"
|
||||
#include "nsDirectoryServiceDefs.h"
|
||||
#include "nsExceptionHandler.h"
|
||||
#include "nsIChromeRegistry.h"
|
||||
#include "nsISimpleEnumerator.h"
|
||||
#include "nsISubstitutingProtocolHandler.h"
|
||||
#include "zlib.h"
|
||||
#include "nsZipArchive.h"
|
||||
#endif
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::css;
|
||||
|
||||
|
|
@ -463,280 +450,6 @@ nsLayoutStylesheetCache::LoadSheetFile(nsIFile* aFile,
|
|||
LoadSheet(uri, aSheet, aParsingMode, aFailureAction);
|
||||
}
|
||||
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
static inline nsresult
|
||||
ComputeCRC32(nsIFile* aFile, uint32_t* aResult)
|
||||
{
|
||||
PRFileDesc* fd;
|
||||
nsresult rv = aFile->OpenNSPRFileDesc(PR_RDONLY, 0, &fd);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
uint32_t crc = crc32(0, nullptr, 0);
|
||||
|
||||
unsigned char buf[512];
|
||||
int32_t n;
|
||||
while ((n = PR_Read(fd, buf, sizeof(buf))) > 0) {
|
||||
crc = crc32(crc, buf, n);
|
||||
}
|
||||
PR_Close(fd);
|
||||
|
||||
if (n < 0) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
*aResult = crc;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
ListInterestingFiles(nsString& aAnnotation, nsIFile* aFile,
|
||||
const nsTArray<nsString>& aInterestingFilenames)
|
||||
{
|
||||
nsString filename;
|
||||
aFile->GetLeafName(filename);
|
||||
for (const nsString& interestingFilename : aInterestingFilenames) {
|
||||
if (interestingFilename == filename) {
|
||||
nsString path;
|
||||
aFile->GetPath(path);
|
||||
aAnnotation.AppendLiteral(" ");
|
||||
aAnnotation.Append(path);
|
||||
aAnnotation.AppendLiteral(" (");
|
||||
int64_t size;
|
||||
if (NS_SUCCEEDED(aFile->GetFileSize(&size))) {
|
||||
aAnnotation.AppendPrintf("%ld", size);
|
||||
} else {
|
||||
aAnnotation.AppendLiteral("???");
|
||||
}
|
||||
aAnnotation.AppendLiteral(" bytes, crc32 = ");
|
||||
uint32_t crc;
|
||||
nsresult rv = ComputeCRC32(aFile, &crc);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aAnnotation.AppendPrintf("0x%08x)\n", crc);
|
||||
} else {
|
||||
aAnnotation.AppendPrintf("error 0x%08x)\n", uint32_t(rv));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bool isDir = false;
|
||||
aFile->IsDirectory(&isDir);
|
||||
|
||||
if (!isDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> entries;
|
||||
if (NS_FAILED(aFile->GetDirectoryEntries(getter_AddRefs(entries)))) {
|
||||
aAnnotation.AppendLiteral(" (failed to enumerated directory)\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
bool hasMore = false;
|
||||
if (NS_FAILED(entries->HasMoreElements(&hasMore))) {
|
||||
aAnnotation.AppendLiteral(" (failed during directory enumeration)\n");
|
||||
return;
|
||||
}
|
||||
if (!hasMore) {
|
||||
break;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISupports> entry;
|
||||
if (NS_FAILED(entries->GetNext(getter_AddRefs(entry)))) {
|
||||
aAnnotation.AppendLiteral(" (failed during directory enumeration)\n");
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFile> file = do_QueryInterface(entry);
|
||||
if (file) {
|
||||
ListInterestingFiles(aAnnotation, file, aInterestingFilenames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generate a crash report annotation to help debug issues with style
|
||||
// sheets failing to load (bug 1194856).
|
||||
static void
|
||||
AnnotateCrashReport(nsIURI* aURI)
|
||||
{
|
||||
nsAutoCString spec;
|
||||
nsAutoCString scheme;
|
||||
nsDependentCSubstring filename;
|
||||
if (aURI) {
|
||||
spec = aURI->GetSpecOrDefault();
|
||||
aURI->GetScheme(scheme);
|
||||
int32_t i = spec.RFindChar('/');
|
||||
if (i != -1) {
|
||||
filename.Rebind(spec, i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
nsString annotation;
|
||||
|
||||
// The URL of the sheet that failed to load.
|
||||
annotation.AppendLiteral("Error loading sheet: ");
|
||||
annotation.Append(NS_ConvertUTF8toUTF16(spec).get());
|
||||
annotation.Append('\n');
|
||||
|
||||
annotation.AppendLiteral("NS_ERROR_FILE_CORRUPTION reason: ");
|
||||
if (nsZipArchive::sFileCorruptedReason) {
|
||||
annotation.Append(NS_ConvertUTF8toUTF16(nsZipArchive::sFileCorruptedReason).get());
|
||||
annotation.Append('\n');
|
||||
} else {
|
||||
annotation.AppendLiteral("(none)\n");
|
||||
}
|
||||
|
||||
// The jar: or file: URL that the sheet's resource: or chrome: URL
|
||||
// resolves to.
|
||||
if (scheme.EqualsLiteral("resource")) {
|
||||
annotation.AppendLiteral("Real location: ");
|
||||
nsCOMPtr<nsISubstitutingProtocolHandler> handler;
|
||||
nsCOMPtr<nsIIOService> io(do_GetIOService());
|
||||
if (io) {
|
||||
nsCOMPtr<nsIProtocolHandler> ph;
|
||||
io->GetProtocolHandler(scheme.get(), getter_AddRefs(ph));
|
||||
if (ph) {
|
||||
handler = do_QueryInterface(ph);
|
||||
}
|
||||
}
|
||||
if (!handler) {
|
||||
annotation.AppendLiteral("(ResolveURI failed)\n");
|
||||
} else {
|
||||
nsAutoCString resolvedSpec;
|
||||
handler->ResolveURI(aURI, resolvedSpec);
|
||||
annotation.Append(NS_ConvertUTF8toUTF16(resolvedSpec));
|
||||
annotation.Append('\n');
|
||||
}
|
||||
} else if (scheme.EqualsLiteral("chrome")) {
|
||||
annotation.AppendLiteral("Real location: ");
|
||||
nsCOMPtr<nsIChromeRegistry> reg =
|
||||
mozilla::services::GetChromeRegistryService();
|
||||
if (!reg) {
|
||||
annotation.AppendLiteral("(no chrome registry)\n");
|
||||
} else {
|
||||
nsCOMPtr<nsIURI> resolvedURI;
|
||||
reg->ConvertChromeURL(aURI, getter_AddRefs(resolvedURI));
|
||||
if (!resolvedURI) {
|
||||
annotation.AppendLiteral("(ConvertChromeURL failed)\n");
|
||||
} else {
|
||||
annotation.Append(
|
||||
NS_ConvertUTF8toUTF16(resolvedURI->GetSpecOrDefault()));
|
||||
annotation.Append('\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nsTArray<nsString> interestingFiles;
|
||||
interestingFiles.AppendElement(NS_LITERAL_STRING("chrome.manifest"));
|
||||
interestingFiles.AppendElement(NS_LITERAL_STRING("omni.ja"));
|
||||
interestingFiles.AppendElement(NS_ConvertUTF8toUTF16(filename));
|
||||
|
||||
annotation.AppendLiteral("GRE directory: ");
|
||||
nsCOMPtr<nsIFile> file;
|
||||
nsDirectoryService::gService->Get(NS_GRE_DIR, NS_GET_IID(nsIFile),
|
||||
getter_AddRefs(file));
|
||||
if (file) {
|
||||
// The Firefox installation directory.
|
||||
nsString path;
|
||||
file->GetPath(path);
|
||||
annotation.Append(path);
|
||||
annotation.Append('\n');
|
||||
|
||||
// List interesting files -- any chrome.manifest or omni.ja file or any file
|
||||
// whose name is the sheet's filename -- under the Firefox installation
|
||||
// directory.
|
||||
annotation.AppendLiteral("Interesting files in the GRE directory:\n");
|
||||
ListInterestingFiles(annotation, file, interestingFiles);
|
||||
|
||||
// If the Firefox installation directory has a chrome.manifest file, let's
|
||||
// see what's in it.
|
||||
file->Append(NS_LITERAL_STRING("chrome.manifest"));
|
||||
bool exists = false;
|
||||
file->Exists(&exists);
|
||||
if (exists) {
|
||||
annotation.AppendLiteral("Contents of chrome.manifest:\n[[[\n");
|
||||
PRFileDesc* fd;
|
||||
if (NS_SUCCEEDED(file->OpenNSPRFileDesc(PR_RDONLY, 0, &fd))) {
|
||||
nsCString contents;
|
||||
char buf[512];
|
||||
int32_t n;
|
||||
while ((n = PR_Read(fd, buf, sizeof(buf))) > 0) {
|
||||
contents.Append(buf, n);
|
||||
}
|
||||
if (n < 0) {
|
||||
annotation.AppendLiteral(" (error while reading)\n");
|
||||
} else {
|
||||
annotation.Append(NS_ConvertUTF8toUTF16(contents));
|
||||
}
|
||||
PR_Close(fd);
|
||||
}
|
||||
annotation.AppendLiteral("]]]\n");
|
||||
}
|
||||
} else {
|
||||
annotation.AppendLiteral("(none)\n");
|
||||
}
|
||||
|
||||
// The jar: or file: URL prefix that chrome: and resource: URLs get translated
|
||||
// to.
|
||||
annotation.AppendLiteral("GRE omnijar URI string: ");
|
||||
nsCString uri;
|
||||
nsresult rv = Omnijar::GetURIString(Omnijar::GRE, uri);
|
||||
if (NS_FAILED(rv)) {
|
||||
annotation.AppendLiteral("(failed)\n");
|
||||
} else {
|
||||
annotation.Append(NS_ConvertUTF8toUTF16(uri));
|
||||
annotation.Append('\n');
|
||||
}
|
||||
|
||||
RefPtr<nsZipArchive> zip = Omnijar::GetReader(Omnijar::GRE);
|
||||
if (zip) {
|
||||
// List interesting files in the GRE omnijar.
|
||||
annotation.AppendLiteral("Interesting files in the GRE omnijar:\n");
|
||||
nsZipFind* find;
|
||||
rv = zip->FindInit(nullptr, &find);
|
||||
if (NS_FAILED(rv)) {
|
||||
annotation.AppendPrintf(" (FindInit failed with 0x%08x)\n", rv);
|
||||
} else if (!find) {
|
||||
annotation.AppendLiteral(" (FindInit returned null)\n");
|
||||
} else {
|
||||
const char* result;
|
||||
uint16_t len;
|
||||
while (NS_SUCCEEDED(find->FindNext(&result, &len))) {
|
||||
nsCString itemPathname;
|
||||
nsString itemFilename;
|
||||
itemPathname.Append(result, len);
|
||||
int32_t i = itemPathname.RFindChar('/');
|
||||
if (i != -1) {
|
||||
itemFilename = NS_ConvertUTF8toUTF16(Substring(itemPathname, i + 1));
|
||||
}
|
||||
for (const nsString& interestingFile : interestingFiles) {
|
||||
if (interestingFile == itemFilename) {
|
||||
annotation.AppendLiteral(" ");
|
||||
annotation.Append(NS_ConvertUTF8toUTF16(itemPathname));
|
||||
nsZipItem* item = zip->GetItem(itemPathname.get());
|
||||
if (!item) {
|
||||
annotation.AppendLiteral(" (GetItem failed)\n");
|
||||
} else {
|
||||
annotation.AppendPrintf(" (%d bytes, crc32 = 0x%08x)\n",
|
||||
item->RealSize(),
|
||||
item->CRC32());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
delete find;
|
||||
}
|
||||
} else {
|
||||
annotation.AppendLiteral("No GRE omnijar\n");
|
||||
}
|
||||
|
||||
CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("SheetLoadFailure"),
|
||||
NS_ConvertUTF16toUTF8(annotation));
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ErrorLoadingSheet(nsIURI* aURI, const char* aMsg, FailureAction aFailureAction)
|
||||
{
|
||||
|
|
@ -751,9 +464,6 @@ ErrorLoadingSheet(nsIURI* aURI, const char* aMsg, FailureAction aFailureAction)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
AnnotateCrashReport(aURI);
|
||||
#endif
|
||||
NS_RUNTIMEABORT(errorMessage.get());
|
||||
}
|
||||
|
||||
|
|
@ -780,9 +490,6 @@ nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
nsZipArchive::sFileCorruptedReason = nullptr;
|
||||
#endif
|
||||
nsresult rv = loader->LoadSheetSync(aURI, aParsingMode, true, aSheet);
|
||||
if (NS_FAILED(rv)) {
|
||||
ErrorLoadingSheet(aURI,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue