Closed Bug 290995 Opened 20 years ago Closed 20 years ago

Add Components.reportError()

Categories

(Core :: XPConnect, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla1.8beta2

People

(Reporter: benjamin, Assigned: benjamin)

Details

Attachments

(1 file, 1 obsolete file)

I'm working on advanced logging of JS errors, and I frequently have encountered situations where a JS exception handler would like to report an exception to the console, but then continue whatever it was doing. To facilitate this, I have added a Components.reportError() method, which takes a JS Error object (presumably from an exception handler) and reports it to the console. I have not security-protected this function, because you can flood the console anyway (by throwing in a setTimeout, for example).
Attached patch Add Components.reportError() (obsolete) — Splinter Review
dbradley, would you like to review this, or shall I ask somebody else for the second review?
Attachment #181161 - Flags: review?(shaver)
Comment on attachment 181161 [details] [diff] [review] Add Components.reportError() >+ // This function shall never fail! Silently eat any failure conditions. >+ nsresult rv; >+ if(argc < 1) >+ return NS_ERROR_XPC_NOT_ENOUGH_ARGS; The function seems to fail here; I presume you mean that the function will never fail because of some other component.
I mean, that it should not fail if called as designed. argc < 1 is a code error, and it's fine to throw from that.
Comment on attachment 181161 [details] [diff] [review] Add Components.reportError() >+ // It's not a JS Error object, so we synthesize as best we're able >+ JSString* msgstr = JS_ValueToString(cx, argv[0]); You should root this here, in case something under scripterr->Init() causes a GC: argv[0] = STRING_TO_JSVAL(msgstr); Also, you should check that msgstr isn't null, which would can indicate that you're being called on an object that doesn't convert to string, or the usual OOM. >+ rv = scripterr->Init(NS_REINTERPRET_CAST(const PRUnichar*, >+ msgstr), That cast looks totally wrong to me; does this actually work? I think you want NS_REINTERPRET_CAST(const PRUnichar *, JS_GetStringChars(msgstr)) and you want to check for NULL as well, unless Init is null-safe for its string param. >+ nsnull, >+ nsnull, >+ 0, 0, We can get the current file/line info from nsXPConnect::GetCurrentJSStack, which would make this report much more useful. People who want to report a warning or a message can use the console service directly, I guess.
Attachment #181161 - Flags: review?(shaver) → review-
Attachment #181161 - Attachment is obsolete: true
Attachment #181785 - Flags: review?(shaver)
Comment on attachment 181785 [details] [diff] [review] Add Components.reportError(), rev. 1.1 >+ // get place for return value >+ jsval *retval = nsnull; >+ rv = cc->GetRetValPtr(&retval); >+ if(NS_FAILED(rv) || !retval) >+ return NS_OK; You don't seem to use retval anywhere else, and I don't think there's any interesting return value to give to the caller, so just lose this section. r+sr=shaver with that removal, requesting approval as well.
Attachment #181785 - Flags: superreview+
Attachment #181785 - Flags: review?(shaver)
Attachment #181785 - Flags: review+
Attachment #181785 - Flags: approval1.8b2?
Comment on attachment 181785 [details] [diff] [review] Add Components.reportError(), rev. 1.1 s/if (/if(/ and open brace on next line to match prevailing style, and a=me. /be
Attachment #181785 - Flags: approval1.8b2? → approval1.8b2+
Fixed on trunk.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla1.8beta2
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: