Closed
Bug 307437
Opened 19 years ago
Closed 17 years ago
xpfe and suite should use the newer nsIPrefService APIs instead of nsIPref.
Categories
(SeaMonkey :: UI Design, defect)
SeaMonkey
UI Design
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: vhaarr+bmo, Assigned: dwitte)
References
Details
Attachments
(1 file, 3 obsolete files)
20.09 KB,
patch
|
neil
:
review+
neil
:
superreview+
|
Details | Diff | Splinter Review |
Part of the ongoing work I'm doing to rid the source of nsIPref.
Reporter | ||
Comment 1•19 years ago
|
||
First stab at nsIPref removal from xpfe/
Neil: Could you take a look at this patch?
Several things I'm not too sure about in this patch.
* General string usage - I'm not confident about chars/string API yet.
* In nsXULWindow, I change a NewURI(nsDependentCString(urlStr)... to
NewURI(urlStr..., as urlStr was previously a char* but is now a nsXPIDLCString,
and I read somewhere in the string guide that nsDependentStrings should only be
used when dealing with raw char pointers.
* The string building in nsBrowserInstance::GetHomePageGroup - I have tested
this (if it is the reader for tab groups as home page) and it works, but I'm
not sure I'm freeing and addref/releasing what needs to be.
* nsRelatedLinksHandler::Init, the mRLServerURL->AssignWithConversion, should
that be done differently? I seem to remember there being an effort to move away
from *WithConversion.
Attachment #195205 -
Flags: review?(neil.parkwaycc.co.uk)
Comment 2•19 years ago
|
||
Comment on attachment 195205 [details] [diff] [review]
version 0.1
urlStr = "chrome://navigator/content/navigator.xul";
urlStr.AssignLiteral("chrome://..."); would be slightly more efficient
+ rv = aPref->GetComplexValue(PREF_BROWSER_STARTUP_HOMEPAGE,
NS_GET_IID(nsIPrefLocalizedString),
+ getter_AddRefs(uri));
second line is a bit wrongly indented
+ tmpUri->GetData(getter_Copies(uriString));
another wrong indentation
- if (NS_SUCCEEDED(rv) && *aDefaultArgs)
+ if (NS_SUCCEEDED(rv)) {
this no longer checks whether the string is nonempty...
mRLServerURL->AssignWithConversion(prefVal);
yep, please avoid AssignWithConversion. the right thing is probably
nsISupportsString here (as a complex value).
- prefs->UnregisterCallback("browser.search.mode",
searchModePrefCallback, this);
why no replacement for this?
Reporter | ||
Comment 3•19 years ago
|
||
Thank you, biesi.
I did not touch that AssignWithConversion (is that code still in use? the
fallback is www-rl.netscape.com :-), because I wasn't sure if going from a char
-> SupportsString pref without any migration code works?
Attachment #195205 -
Attachment is obsolete: true
Attachment #196954 -
Flags: review?(cbiesinger)
Reporter | ||
Updated•19 years ago
|
Attachment #195205 -
Flags: review?(neil.parkwaycc.co.uk)
Comment 4•19 years ago
|
||
(In reply to comment #2)
> - prefs->UnregisterCallback("browser.search.mode",
> searchModePrefCallback, this);
>
> why no replacement for this?
IIRC pref observers work differently; either
a) you use a strong ref so can't unregister the callback in your destructor
b) you use a weak ref so you don't care about unregistering
Comment 5•19 years ago
|
||
Comment on attachment 195205 [details] [diff] [review]
version 0.1
>+ nsXPIDLString uriString;
>+ uri->GetData(getter_Copies(uriString));
>+
> // The "homepage" is a group of pages, put them in uriList separated by '\n'
>- nsAutoString uriList(uri);
>+ nsAutoString uriList(uriString);
A home page group is unlikely to fit in the stack buffer. Just make uriList an
nsXPIDLString instead, then you can GetData directly into it too.
>+ nsCOMPtr<nsIPrefBranchInternal> prefBranchInternal(do_QueryInterface(prefs));
I think we're supposed to use nsIPrefBranch2 these days. Also, as
nsIPrefBranch2 inherits from nsIPrefBranch you can use a single variable to do
all the operations here.
Comment 6•19 years ago
|
||
(In reply to comment #3)
> I wasn't sure if going from a char
> -> SupportsString pref without any migration code works?
yes, that works. I have no idea whether the code is still used...
Comment 7•19 years ago
|
||
Comment on attachment 196954 [details] [diff] [review]
version 0.2
ok then, a real review ;)
(sorry for the delay)
appshell/src/nsXULWindow.cpp
if (NS_SUCCEEDED(prefres) && urlStr[0] == '\0') {
that second part should be IsEmpty() now
browser/src/nsBrowserInstance.cpp
+ rv = prefs->GetComplexValue(PREF_HOMEPAGE_OVERRIDE_URL,
NS_GET_IID(nsIPrefLocalizedString),
can you wrap this so it fits into 80 chars?
+ if (NS_SUCCEEDED(rv))
+ overrideURL->ToString(aDefaultArgs);
+ if (*aDefaultArgs) {
return NS_OK;
doesn't this leak if the pref is an empty string?
components/related/src/nsRelatedLinksHandler.cpp
- &prefVal)) && (prefVal))
+ getter_Copies(prefVal))) &&
(!prefVal.IsEmpty()))
not quite equivalent, but probably doesn't matter
components/search/src/nsInternetSearchService.cpp
+ pb->RemoveObserver("browser.search.mode", this);
hm... this is in the destructor, so as neil pointed out, it's not very
useful...
- nsXPIDLString defCharset;
+ nsXPIDLString defCharsetStr;
what was the motivation behing this change?
If you don't want to do that nsISupportsString thing, that's fine. but if so,
please file a bug about it. thanks :)
Attachment #196954 -
Flags: review?(cbiesinger) → review-
Updated•19 years ago
|
Version: unspecified → Trunk
Comment 8•18 years ago
|
||
Looks like this has already been fixed. Can anyone else confirm?
Comment 9•18 years ago
|
||
No, still there.
Assignee | ||
Comment 10•17 years ago
|
||
-> me
Assignee: vhaarr+bmo → dwitte
Summary: xpfe should use the newer nsIPrefService APIs instead of nsIPref. → xpfe and suite should use the newer nsIPrefService APIs instead of nsIPref.
Assignee | ||
Comment 11•17 years ago
|
||
updated to trunk, and tweaked per reviewer comments.
Attachment #196954 -
Attachment is obsolete: true
Attachment #295659 -
Flags: superreview?(neil)
Attachment #295659 -
Flags: review?(neil)
Comment 12•17 years ago
|
||
Comment on attachment 295659 [details] [diff] [review]
updated patch
>+ prefs->AddObserver("browser.search.mode", this, PR_FALSE);
This never gets removed. Either make the data source support weak references or remove it on xpcom shutdown or some such.
> stringEncoding.Assign(NS_ConvertASCIItoUTF16(encodingList[i].stringEncoding));
I can't believe I sr'd this.
> nsString defCharset;
>+ nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREF_CONTRACTID));
>+ if (prefs) {
>+ nsCOMPtr<nsIPrefLocalizedString> defCharset;
>+ prefs->GetComplexValue("intl.charset.default",
>+ NS_GET_IID(nsIPrefLocalizedString),
>+ getter_AddRefs(defCharset));
>+ defCharset->GetData(getter_Copies(defCharsetStr));
>+ }
I can't believe that this compiles.
>Index: xpfe/browser/src/nsBrowserInstance.cpp
Only bits of this code are used any more; my makefile fu isn't up to working out whether Camino compiles this but if not then nobody compiles the #ifdef
>Index: xpfe/components/xremote/src/XRemoteService.cpp
And I'm fairly sure that this file is dead.
Attachment #295659 -
Flags: superreview?(neil)
Attachment #295659 -
Flags: superreview-
Attachment #295659 -
Flags: review?(neil)
Assignee | ||
Comment 13•17 years ago
|
||
(In reply to comment #12)
> This never gets removed. Either make the data source support weak references or
> remove it on xpcom shutdown or some such.
so, this shouldn't be a problem, if i'm reading http://mxr.mozilla.org/mozilla/source/modules/libpref/public/nsIPrefBranch2.idl#79 right: the prefbranch will itself observe xpcom-shutdown and remove all the observers, exactly to prevent situations like this. if you want i can do the weak ref thing though, what do you think?
> I can't believe that this compiles.
i suck :(
> >Index: xpfe/browser/src/nsBrowserInstance.cpp
> Only bits of this code are used any more; my makefile fu isn't up to working
> out whether Camino compiles this but if not then nobody compiles the #ifdef
just checked with the camino lads and it seems camino builds this file and doesn't #define MOZ_XUL_APP - so this code is live?
> >Index: xpfe/components/xremote/src/XRemoteService.cpp
> And I'm fairly sure that this file is dead.
ok; mind if i leave these little changes in, just to zap all reference to nsIPref? for great justice!
Comment 14•17 years ago
|
||
(In reply to comment #13)
> the prefbranch will itself observe xpcom-shutdown and remove all the observers
Can you find someone to verify that contract?
> > >Index: xpfe/browser/src/nsBrowserInstance.cpp
> > Only bits of this code are used any more; my makefile fu isn't up to working
> > out whether Camino compiles this but if not then nobody compiles the #ifdef
> just checked with the camino lads and it seems camino builds this file and
> doesn't #define MOZ_XUL_APP - so this code is live?
For as long as they don't #define MOZ_XUL_APP ;-)
> > >Index: xpfe/components/xremote/src/XRemoteService.cpp
> > And I'm fairly sure that this file is dead.
>
> ok; mind if i leave these little changes in, just to zap all reference to
> nsIPref? for great justice!
I guess so, but I can only review these by inspection, so don't break Camino.
Comment 15•17 years ago
|
||
(In reply to comment #14)
> (In reply to comment #13)
> > the prefbranch will itself observe xpcom-shutdown and remove all the observers
> Can you find someone to verify that contract?
That's really what all services holding on to observers should do.
Comment 16•17 years ago
|
||
But yeah, nsIPrefBranch2 even guarantees that.
Assignee | ||
Comment 17•17 years ago
|
||
now with compile goodness.
Attachment #295659 -
Attachment is obsolete: true
Attachment #296226 -
Flags: superreview?(neil)
Attachment #296226 -
Flags: review?(neil)
Comment 18•17 years ago
|
||
Comment on attachment 296226 [details] [diff] [review]
v2
I'm not sure we should be using nsXPIDLString in "new" code - change to nsAutoString perhaps? (getter_Copies still works)
Attachment #296226 -
Flags: superreview?(neil)
Attachment #296226 -
Flags: superreview+
Attachment #296226 -
Flags: review?(neil)
Attachment #296226 -
Flags: review+
Assignee | ||
Comment 19•17 years ago
|
||
checked in, with s/nsXPIDLString/nsString/ (nsAutoString is just overhead, since it's always adopting an allocated buffer).
thanks!
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
Comment 20•17 years ago
|
||
(In reply to comment #19)
>checked in, with s/nsXPIDLString/nsString/ (nsAutoString is just overhead,
>since it's always adopting an allocated buffer).
Sorry, I was thinking of nsString, but the patch actually showed you apparently changing an nsAutoString to an nsXPIDLString, which is what I was objecting to.
You need to log in
before you can comment on or make changes to this bug.
Description
•