Closed
Bug 293350
Opened 20 years ago
Closed 19 years ago
Allow dynamic changes of notification callbacks (was: Don't show download status in status bar (since it shows in the DL manager))
Categories
(Core :: Networking, defect)
Core
Networking
Tracking
()
VERIFIED
FIXED
mozilla1.8beta4
People
(Reporter: timeless, Assigned: darin.moz)
References
Details
(Keywords: regression, verified1.8, Whiteboard: [has r+SR])
Attachments
(1 file, 2 obsolete files)
54.81 KB,
patch
|
Biesinger
:
review+
asa
:
approval1.8b5+
|
Details | Diff | Splinter Review |
build id: 2005021808 (v0.8+)
steps:
0. load tabs for gmail.com, bugzilla.mozilla.org, ubuntu.com
1. ask camino to download two isos from us.releases.ubuntu.com
1' camino's downloads window merrily displays progress for the two downloads
2. read gmail and poke bugzilla.mozilla.org in tabs in my main camino window
(from which i started the iso downloads)
actual (unexpected results): the status bar in the tabbed camino browser window
says "Transferring data from us.releases.ubuntu.com"
I asked Wevah#camino, and wevah said: yes, that does happen :/
Yeah I saw this aswell. I think this mightbe a regression of some sort.
Severity: minor → normal
Status: UNCONFIRMED → NEW
Ever confirmed: true
Flags: camino0.9?
Summary: status for downloads managed by download manager appears in tab from which downloads were started → Status for downloads in download manager appear in tab from which downloads were started
This only happens for me if I'm browsing in the tab that I started the download
in. All other tabs display normally for me.
Comment 3•20 years ago
|
||
if this really is a regression, it might be worth looking at, but personally i'd
say this is minor enough that it can be pushed to 1.0 in a pinch.
Comment 4•20 years ago
|
||
i've seen this a lot this weekend, boy is it annoying.
Comment 6•20 years ago
|
||
For the record, using Firefox 1.0.4 on Windows 2003, I can see this same issue.
I'm not sure if it's related, but it seems to be exactly the same.
Comment 7•19 years ago
|
||
Is that a more comprehensible summary?
Summary: Status for downloads in download manager appear in tab from which downloads were started → Don't show download status in status bar when other tabs are frontmost
smfr: except it doesn't accurately summarize the problem. the download status
*is* shown *only* in the tab that started the download. it shouldn't show in
*any* tabs, since the download manager window owns the status.
Updated•19 years ago
|
Summary: Don't show download status in status bar when other tabs are frontmost → Don't show download status in status bar (since it shows in the DL manager)
Removing regression keyword as we have no evidence of that in the bug. Feel free
to put it back if there is evidence found.
This is an annoying bug but I don't think it should block a release. Upping its
severity since we should fix it soon, but bumping it to 1.0.
Severity: minor → major
Flags: camino0.9+ → camino0.9-
Keywords: regression
Target Milestone: Camino0.9 → Camino1.0
Comment 10•19 years ago
|
||
Will take a look at while working on download manager tweaks
Comment 11•19 years ago
|
||
Same problem occurs in deer park alpha 2, If you download something in another
tab than select some other tabs, it still says something like "transering data
from XX.XX.XXX". Maybe regression isn't key here, and it is a gecko issue?
Comment 12•19 years ago
|
||
Yeah, this certainly isn't an easy camino fix, I think.
Comment 13•19 years ago
|
||
if it's a core bug, over to core....
Assignee: pinkerton → adamlock
Component: Downloading → Embedding: Docshell
Flags: camino0.9-
Keywords: regression
Product: Camino → Core
QA Contact: adamlock
Target Milestone: Camino1.0 → ---
Version: unspecified → Trunk
Comment 14•19 years ago
|
||
hrm, docshell probably isn't the right component, but i'm not sure what is. it's
not an app-level bug (since it's in both camino and firefox), but it's not
really a necko bug either.
ideas on component?
regardless, this is a regression from the 1.7branch.
Flags: blocking1.8b4?
wheeee...
*** This bug has been marked as a duplicate of 250295 ***
Status: NEW → RESOLVED
Closed: 19 years ago
Flags: blocking1.8b4?
Resolution: --- → DUPLICATE
Comment 16•19 years ago
|
||
*** Bug 304063 has been marked as a duplicate of this bug. ***
Updated•19 years ago
|
Status: RESOLVED → REOPENED
Resolution: DUPLICATE → ---
Comment 17•19 years ago
|
||
-> Camino
Comments to follow.
Assignee: adamlock → pinkerton
Status: REOPENED → NEW
Component: Embedding: Docshell → Downloading
Product: Core → Camino
QA Contact: adamlock
Target Milestone: --- → Camino1.0
Version: Trunk → unspecified
Comment 18•19 years ago
|
||
Alright, here's the deal. I tracked this down and this regressed in Camino only
on 11/16/04.
There are no Camino-specific checkins that would have caused this, however,
talking with stephend, we found a checkin for bug 261083 which "without a doubt"
caused this. The query we used is below.
So, this is *not* the core bug and can be fixed on our end (at least I hope) but
will not fix the core problems.
CCing darin since it was his checkin. Also, does this need to be in for 1.8b4?
http://bonsai.mozilla.org/cvsquery.cgi?treeid=default&module=all&branch=HEAD&branchtype=match&dir=%2Fmozilla&file=&filetype=match&who=&whotype=match&sortby=Date&hours=2&date=explicit&mindate=2004-11-15&maxdate=2004-11-17&cvsroot=%2Fcvsroot
Comment 19•19 years ago
|
||
my gut feeling is to keep this in Core so it can get a 18b blocking flag and
stays on their radar. If we can't get permission for the branch, it matters
little if it blocks us.
Updated•19 years ago
|
Flags: blocking1.8b4?
Comment 20•19 years ago
|
||
Darin, can you have a look at this?
Comment 21•19 years ago
|
||
Can you fix it on the camino side and file a new bug for any core issues?
Flags: blocking1.8b4? → blocking1.8b4-
Comment 22•19 years ago
|
||
(In reply to comment #21)
> Can you fix it on the camino side and file a new bug for any core issues?
>
>
No, because a core checkin caused the problems. We can't fix this without fixing
the core bug (that I know of).
Please re-evaluate blocking1.8b4.
Comment 23•19 years ago
|
||
Note: You do not need to have a blocking flag set in order to get a patch
approved for the branch.
Comment 24•19 years ago
|
||
-> Core. Re-requesting nomination per IRC conversation with schrep.
Component: Downloading → Networking
Flags: blocking1.8b4- → blocking1.8b4?
Product: Camino → Core
Target Milestone: Camino1.0 → ---
Version: unspecified → 1.0 Branch
Updated•19 years ago
|
Assignee: pinkerton → darin
QA Contact: benc
Version: 1.0 Branch → Trunk
Comment 25•19 years ago
|
||
The problem is the immutability of notification callbacks that bug 261083
introduced. It means that the code in
nsExternalAppHandler::RetargetLoadNotifications becomes a no-op, and as a result
the load delivers progress and status notifications to the window that started
it, since that's the callback it has for progress and status events.
I do think this should block 1.8b4, since fixing this may require yet another
effective nsIChannel API change of the sort that bug 261083 made.
Flags: blocking1.8b4? → blocking1.8b4+
Comment 26•19 years ago
|
||
Further note: bug 261083 comment 11 is wrong -- since the channel used to be in
the loadgroup it DOES have a request info in the docloader. We don't remove
request infos till the next pageload starts or all loads stop as far as I can
see. biesi suggested removing them in OnStopRequest.
Updated•19 years ago
|
Target Milestone: --- → mozilla1.8beta4
Assignee | ||
Updated•19 years ago
|
Status: NEW → ASSIGNED
OS: MacOS X → All
Hardware: Macintosh → All
Assignee | ||
Comment 27•19 years ago
|
||
I think the best solution for this bug is to make all of the code lazily query
notification callbacks, and then clear out any cached interfaces when the
notification callbacks are set. I'll develop a patch for this shortly...
Assignee | ||
Comment 28•19 years ago
|
||
Assignee | ||
Comment 29•19 years ago
|
||
Comment on attachment 194434 [details] [diff] [review]
prototype patch for http channel
biesi: can you look this over to see if you agree with this approach? if so,
i'll do the same for the rest of the channel implementations. thx!
Attachment #194434 -
Flags: review?(cbiesinger)
Comment 30•19 years ago
|
||
Comment on attachment 194434 [details] [diff] [review]
prototype patch for http channel
hm, yeah, this does make sense.
Now, nsIChannel still documents that channels may ignore changing the
callbacks. Should nsDocLoader deal with that? Maybe be setting a flag on the
RequestInfo object in its OnStopRequest implementation and ignoring further
notifications for that object?
Attachment #194434 -
Flags: review?(cbiesinger) → review+
Assignee | ||
Comment 31•19 years ago
|
||
biesi:
I believe I added that comment last November. So, we haven't exactly shipped a
release with that comment made explicit. I think we could massage that
statement into something like this:
NOTE: A channel implementation should take care when caching an interface
queried from the notification callbacks. If the notification callbacks
are changed, then a cached interface may become invalid and need to be
re-queried.
I think I'd be happier adding this requirement even though it was not
implemented in Gecko 1.7 or earlier. What do you think?
The RequestInfo idea sounds pretty good too in case we want to be absolutely
sure that no "rogue" channel can re-introduce this bug. But, maybe that is not
a huge concern. IIRC, nsIProgressEventSink changed since Gecko 1.7 anyways.
Comment 32•19 years ago
|
||
yeah, the nsIProgressEventSink change is a good point. I guess other channel
impls don't often need other interfaces (nsIAuthPrompt maybe? but then, that
doesn't really need dynamic changes). ok, just changing the nsIChannel docs
seems ok.
Assignee | ||
Comment 33•19 years ago
|
||
Alright.. sounds good. I'll post a final patch shortly.
Assignee | ||
Comment 34•19 years ago
|
||
Fixes most channels. I left out changes to nsMsgProtocol and nsLDAPChannel
because 1) they don't apply to this bug and 2) it isn't obvious how to fix them
or if it is even necessary to fix them. nsMsgProtocol for instance may have
mProgressEventSink initialized in its constructor, and I'm not sure if it is
okay to clear that value when SetNotificationCallbacks or SetLoadGroup is
called. nsLDAPChannel uses multiple threads, and needs to query the
notification callbacks up front so that it can be build a proxy object that its
background thread will use. Seems like it would be pretty complicated to teach
it how to query its notification callbacks lazily.
Attachment #194434 -
Attachment is obsolete: true
Attachment #194557 -
Flags: superreview?(bzbarsky)
Attachment #194557 -
Flags: review?(cbiesinger)
Updated•19 years ago
|
Summary: Don't show download status in status bar (since it shows in the DL manager) → Allow dynamic changes of notification callbacks (was: Don't show download status in status bar (since it shows in the DL manager))
Comment 35•19 years ago
|
||
Comment on attachment 194557 [details] [diff] [review]
v1 patch
>Index: netwerk/base/public/nsIChannel.idl
>+ * listener as it becomes available. The stream listener's methods are
>+ * called via an event dispatched through the event queue service on the
>+ * same thread that called asyncOpen.
How about just:
The stream listener's methods are called on the thread that
asyncOpen was called on.
because if a channel runs entirely on one thread there is no pressing need for
it to call these methods via an event, really...
Unless you're trying to emphasize that asyncOpen will return before
OnStartRequest is called, in which case we should perhaps just state that
explicitly.
The rest looks great. sr=bzbarsky.
Attachment #194557 -
Flags: superreview?(bzbarsky) → superreview+
Updated•19 years ago
|
Whiteboard: [needs review cbiesinger]
Comment 36•19 years ago
|
||
Comment on attachment 194557 [details] [diff] [review]
v1 patch
Hrm, as I now realize, this means that if notification callbacks do not give
out a progress event sink, it gets queried on each ODA call...
Maybe the LSB of the pointer could store a flag whether it should be
regotten. Or am I worrying too much about perf here?
nsFTPChannel.cpp:
hrm... is OnStatus here always called on the thread asyncOpen was called on?
(I am especially concerned about the caller in StopProcessing via Process)
And what about FtpState's mPrompter/mAuthPrompter, that doesn't seeem to get
reset?
nsGopherChannel.cpp:
nsGopherChannel::SetLoadFlags(PRUint32 aLoadFlags)
{
mLoadFlags = aLoadFlags;
+ mProgressSink = nsnull;
SetLoadFlags? Wrong function? ;)
I'm not sure that ignoring mailnews is great here, because it does trigger
downloads (mail attachments). But then, I guess status from them rarely ends
up in a status bar...
Attachment #194557 -
Flags: review?(cbiesinger) → review+
Updated•19 years ago
|
Whiteboard: [needs review cbiesinger] → [has r+SR]
Assignee | ||
Comment 37•19 years ago
|
||
> The stream listener's methods are called on the thread that
> asyncOpen was called on.
Yeah, I like that wording combined with your suggested phrase "that asyncOpen
will return before OnStartRequest is called."
> because if a channel runs entirely on one thread there is no pressing need for
> it to call these methods via an event, really...
No, the whole event queue business is important. It's important that we make
some promise of actually calling OnStartRequest asynchronously after asyncOpen
returns. But, perhaps actual mention of "event queues" is best avoided. That's
why I like your suggested wording.
Assignee | ||
Comment 38•19 years ago
|
||
> Hrm, as I now realize, this means that if notification callbacks do not give
> out a progress event sink, it gets queried on each ODA call...
>
> Maybe the LSB of the pointer could store a flag whether it should be
> regotten. Or am I worrying too much about perf here?
Hmm... yeah, I think we can punt on this for now. I doubt there is much
overhead to this, and most of the critical paths (like webpage loading) will
have a progress sink. At some point, it might be nice to create a helper class
that encapsulates this optimization though... or encapsulate it in a
nsBaseChannel implementation ;-)
> nsFTPChannel.cpp:
> hrm... is OnStatus here always called on the thread asyncOpen was called on?
Yes, it is, and it had better be :-)
> (I am especially concerned about the caller in StopProcessing via Process)
> And what about FtpState's mPrompter/mAuthPrompter, that doesn't seeem to get
> reset?
Yeah, the same problem exists with the nsIFTPEventSink object. I should
probably clean that up too.
> nsGopherChannel.cpp:
> nsGopherChannel::SetLoadFlags(PRUint32 aLoadFlags)
> {
> mLoadFlags = aLoadFlags;
> + mProgressSink = nsnull;
>
> SetLoadFlags? Wrong function? ;)
Crap, I meant SetLoadGroup :( Thanks!
> I'm not sure that ignoring mailnews is great here, because it does trigger
> downloads (mail attachments). But then, I guess status from them rarely ends
> up in a status bar...
I'd rather do the mailnews changes in a separate patch at least because I have
less confidence in that area of the code.
Thanks for the review comments. I'll post a revised patch shortly.
Assignee | ||
Comment 39•19 years ago
|
||
This patch includes the following changes:
* revised text for asyncOpen documentation in nsIChannel.idl
* revised nsGopherChannel.cpp to fix SetLoadFlags vs SetLoadGroup thinko
* revised nsFTPChannel.cpp & nsFtpConnectionThread.cpp to resolve outstanding
issues there with the prompters and FTP eventsink
Biesi, can you please look this over. Thanks!
Attachment #194557 -
Attachment is obsolete: true
Attachment #195204 -
Flags: review?(cbiesinger)
Comment 40•19 years ago
|
||
netwerk/protocol/ftp/src/nsFTPChannel.cpp
- return mEventSink->OnStatus(this, mUserContext, aStatus,
+ return mProgressSink->OnStatus(this, mUserContext, aStatus,
NS_ConvertUTF8toUTF16(host).get());
wrong indentation here
- return mEventSink->OnProgress(this, mUserContext,
+ return mProgressSink->OnProgress(this, mUserContext,
aProgress, aProgressMax);
and here...
nsFtpConnectionThread.cpp:
+ mChannel->GetCallback(prompter);
+ if (!prompter)
+ return NS_ERROR_NOT_INITIALIZED;
That error code is kinda not ideal...
- NS_ASSERTION(mPrompter, "no prompter!");
nice :)
Updated•19 years ago
|
Attachment #195204 -
Flags: review?(cbiesinger) → review+
Assignee | ||
Comment 41•19 years ago
|
||
fixed-on-trunk
biesi: I kept NS_ERROR_NOT_INITIALIZED for lack of a better error code.
Status: ASSIGNED → RESOLVED
Closed: 19 years ago → 19 years ago
Resolution: --- → FIXED
Comment 42•19 years ago
|
||
(In reply to comment #41)
> biesi: I kept NS_ERROR_NOT_INITIALIZED for lack of a better error code.
Wouldn't NS_ERROR_NOT_AVAILABLE be better?
Assignee | ||
Comment 43•19 years ago
|
||
> > biesi: I kept NS_ERROR_NOT_INITIALIZED for lack of a better error code.
>
> Wouldn't NS_ERROR_NOT_AVAILABLE be better?
Would it? I considered that error code too, but I figured that neither really
seemed better than the other. I also considered NS_ERROR_NO_INTERFACE. But,
finally I thought that if someone really cared about the error code, then they
might care that it not change. Remember that this error code will be seen by
the Stream Listener's OnStopRequest method, so from that point of view
NS_ERROR_NOT_INITIALIZED seems to make some sense (i.e., the data could not be
fetched because something wasn't initialized properly).
Comment 44•19 years ago
|
||
looks like this caused bug 308018
Assignee | ||
Comment 45•19 years ago
|
||
Comment on attachment 195204 [details] [diff] [review]
v1.1 patch
Requesting approval to land this patch on the 1.8 branch w/ biesi's small
addition in bug 308018.
Attachment #195204 -
Flags: approval1.8b5?
Updated•19 years ago
|
Attachment #195204 -
Flags: approval1.8b5? → approval1.8b5+
Verified FIXED on trunk using Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv:1.9a1) Gecko/20050913 Firefox/1.6a1
Status: RESOLVED → VERIFIED
Sorry for the noise, but is there a timetable for landing this on the branch?
Assignee | ||
Comment 48•19 years ago
|
||
I'll be landing this on the 1.8 branch shortly. It unfortunately slipped off my
radar until now :-(
Comment 50•19 years ago
|
||
Verified fixed on the branch in Camino: Version 2005092804 (1.0a1+). Adding keyword.
Keywords: fixed1.8 → verified1.8
You need to log in
before you can comment on or make changes to this bug.
Description
•