summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/src/nsXPConnect.cpp
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2019-06-09 14:44:37 -0400
committerGaming4JC <g4jc@hyperbola.info>2019-07-18 22:38:32 -0400
commitd7fbf2a9df8904d495c4c86e6f575d44185eae1b (patch)
tree8eba25a8fb3589ba71595c04622dd9dc269eba51 /js/xpconnect/src/nsXPConnect.cpp
parentf4552af8bc9419c5f2860385de14e28a6805ea7e (diff)
downloadUXP-d7fbf2a9df8904d495c4c86e6f575d44185eae1b.tar
UXP-d7fbf2a9df8904d495c4c86e6f575d44185eae1b.tar.gz
UXP-d7fbf2a9df8904d495c4c86e6f575d44185eae1b.tar.lz
UXP-d7fbf2a9df8904d495c4c86e6f575d44185eae1b.tar.xz
UXP-d7fbf2a9df8904d495c4c86e6f575d44185eae1b.zip
1283712 - Part 6: Add xpc::ErrorBase, xpc::ErrorNote, and xpc::ErrorReport.mNotes.
Diffstat (limited to 'js/xpconnect/src/nsXPConnect.cpp')
-rw-r--r--js/xpconnect/src/nsXPConnect.cpp126
1 files changed, 99 insertions, 27 deletions
diff --git a/js/xpconnect/src/nsXPConnect.cpp b/js/xpconnect/src/nsXPConnect.cpp
index 0466175b1..4a403874b 100644
--- a/js/xpconnect/src/nsXPConnect.cpp
+++ b/js/xpconnect/src/nsXPConnect.cpp
@@ -170,9 +170,31 @@ nsXPConnect::IsISupportsDescendant(nsIInterfaceInfo* info)
}
void
+xpc::ErrorBase::Init(JSErrorBase* aReport)
+{
+ if (!aReport->filename) {
+ mFileName.SetIsVoid(true);
+ } else {
+ mFileName.AssignWithConversion(aReport->filename);
+ }
+
+ mLineNumber = aReport->lineno;
+ mColumn = aReport->column;
+}
+
+void
+xpc::ErrorNote::Init(JSErrorNotes::Note* aNote)
+{
+ xpc::ErrorBase::Init(aNote);
+
+ ErrorNoteToMessageString(aNote, mErrorMsg);
+}
+
+void
xpc::ErrorReport::Init(JSErrorReport* aReport, const char* aToStringResult,
bool aIsChrome, uint64_t aWindowID)
{
+ xpc::ErrorBase::Init(aReport);
mCategory = aIsChrome ? NS_LITERAL_CSTRING("chrome javascript")
: NS_LITERAL_CSTRING("content javascript");
mWindowID = aWindowID;
@@ -182,12 +204,6 @@ xpc::ErrorReport::Init(JSErrorReport* aReport, const char* aToStringResult,
AppendUTF8toUTF16(aToStringResult, mErrorMsg);
}
- if (!aReport->filename) {
- mFileName.SetIsVoid(true);
- } else {
- mFileName.AssignWithConversion(aReport->filename);
- }
-
mSourceLine.Assign(aReport->linebuf(), aReport->linebufLength());
const JSErrorFormatString* efs = js::GetErrorMessage(nullptr, aReport->errorNumber);
@@ -197,10 +213,20 @@ xpc::ErrorReport::Init(JSErrorReport* aReport, const char* aToStringResult,
mErrorMsgName.AssignASCII(efs->name);
}
- mLineNumber = aReport->lineno;
- mColumn = aReport->column;
mFlags = aReport->flags;
mIsMuted = aReport->isMuted;
+
+ if (aReport->notes) {
+ if (!mNotes.SetLength(aReport->notes->length(), fallible)) {
+ return;
+ }
+
+ size_t i = 0;
+ for (auto&& note : *aReport->notes) {
+ mNotes.ElementAt(i).Init(note.get());
+ i++;
+ }
+ }
}
void
@@ -226,6 +252,59 @@ xpc::ErrorReport::Init(JSContext* aCx, mozilla::dom::Exception* aException,
static LazyLogModule gJSDiagnostics("JSDiagnostics");
void
+xpc::ErrorBase::AppendErrorDetailsTo(nsCString& error)
+{
+ error.Append(NS_LossyConvertUTF16toASCII(mFileName));
+ error.AppendLiteral(", line ");
+ error.AppendInt(mLineNumber, 10);
+ error.AppendLiteral(": ");
+ error.Append(NS_LossyConvertUTF16toASCII(mErrorMsg));
+}
+
+void
+xpc::ErrorNote::LogToStderr()
+{
+ if (!nsContentUtils::DOMWindowDumpEnabled()) {
+ return;
+ }
+
+ nsAutoCString error;
+ error.AssignLiteral("JavaScript note: ");
+ AppendErrorDetailsTo(error);
+
+ fprintf(stderr, "%s\n", error.get());
+ fflush(stderr);
+}
+
+void
+xpc::ErrorReport::LogToStderr()
+{
+ if (!nsContentUtils::DOMWindowDumpEnabled()) {
+ return;
+ }
+
+ nsAutoCString error;
+ error.AssignLiteral("JavaScript ");
+ if (JSREPORT_IS_STRICT(mFlags)) {
+ error.AppendLiteral("strict ");
+ }
+ if (JSREPORT_IS_WARNING(mFlags)) {
+ error.AppendLiteral("warning: ");
+ } else {
+ error.AppendLiteral("error: ");
+ }
+ AppendErrorDetailsTo(error);
+
+ fprintf(stderr, "%s\n", error.get());
+ fflush(stderr);
+
+ for (size_t i = 0, len = mNotes.Length(); i < len; i++) {
+ ErrorNote& note = mNotes[i];
+ note.LogToStderr();
+ }
+}
+
+void
xpc::ErrorReport::LogToConsole()
{
LogToConsoleWithStack(nullptr);
@@ -233,25 +312,7 @@ xpc::ErrorReport::LogToConsole()
void
xpc::ErrorReport::LogToConsoleWithStack(JS::HandleObject aStack)
{
- // Log to stdout.
- if (nsContentUtils::DOMWindowDumpEnabled()) {
- nsAutoCString error;
- error.AssignLiteral("JavaScript ");
- if (JSREPORT_IS_STRICT(mFlags))
- error.AppendLiteral("strict ");
- if (JSREPORT_IS_WARNING(mFlags))
- error.AppendLiteral("warning: ");
- else
- error.AppendLiteral("error: ");
- error.Append(NS_LossyConvertUTF16toASCII(mFileName));
- error.AppendLiteral(", line ");
- error.AppendInt(mLineNumber, 10);
- error.AppendLiteral(": ");
- error.Append(NS_LossyConvertUTF16toASCII(mErrorMsg));
-
- fprintf(stderr, "%s\n", error.get());
- fflush(stderr);
- }
+ LogToStderr();
MOZ_LOG(gJSDiagnostics,
JSREPORT_IS_WARNING(mFlags) ? LogLevel::Warning : LogLevel::Error,
@@ -287,6 +348,17 @@ xpc::ErrorReport::LogToConsoleWithStack(JS::HandleObject aStack)
/* static */
void
+xpc::ErrorNote::ErrorNoteToMessageString(JSErrorNotes::Note* aNote,
+ nsAString& aString)
+{
+ aString.Truncate();
+ if (aNote->message()) {
+ aString.Append(NS_ConvertUTF8toUTF16(aNote->message().c_str()));
+ }
+}
+
+/* static */
+void
xpc::ErrorReport::ErrorReportToMessageString(JSErrorReport* aReport,
nsAString& aString)
{