Closed
Bug 1024388
Opened 11 years ago
Closed 11 years ago
Allow JAR channels to be retargeted to a different thread.
Categories
(Core :: Networking: JAR, defect)
Core
Networking: JAR
Tracking
()
RESOLVED
FIXED
mozilla33
People
(Reporter: khuey, Assigned: khuey)
Details
Attachments
(2 files, 2 obsolete files)
|
1.80 KB,
patch
|
khuey
:
review+
|
Details | Diff | Splinter Review |
|
6.95 KB,
patch
|
bzbarsky
:
review+
jduell.mcbugs
:
review+
|
Details | Diff | Splinter Review |
No description provided.
| Assignee | ||
Comment 1•11 years ago
|
||
Attachment #8439060 -
Flags: review?(bzbarsky)
| Assignee | ||
Comment 2•11 years ago
|
||
My try run is not yet complete, but it doesn't look like anything depends on the progress listener notifications ...
What's the correct way to reimplement that? Should I just dispatch a runnable to call OnProgressChange to the main thread?
Attachment #8439062 -
Flags: feedback?(sworkman)
Attachment #8439062 -
Flags: feedback?(jduell.mcbugs)
Attachment #8439062 -
Flags: feedback?(bzbarsky)
| Assignee | ||
Comment 3•11 years ago
|
||
Comment 4•11 years ago
|
||
Comment on attachment 8439060 [details] [diff] [review]
Part 1: Attempt to retarget the HTML parser's request regardless of the stream type
r=me assuming the warning doesn't fire too much. And maybe s/delivery/HTML data delivery/?
Updated•11 years ago
|
Attachment #8439060 -
Flags: review?(bzbarsky) → review+
Comment 5•11 years ago
|
||
Comment on attachment 8439062 [details] [diff] [review]
Part 2: Implement thread retargeting for JAR channels
> Should I just dispatch a runnable to call OnProgressChange to the main thread?
I would assume yes. That's exactly what httpchannel does in OnDataAvailable:
5297 if (NS_IsMainThread()) {
5298 OnTransportStatus(nullptr, transportStatus, progress, progressMax);
5299 } else {
5300 nsresult rv = NS_DispatchToMainThread(
5301 new OnTransportStatusAsyncEvent(this, transportStatus,
5302 progress, progressMax));
5303 NS_ENSURE_SUCCESS(rv, rv);
5304 }
nsHttpChannel::OnTransportStatus does various stuff including calling mProgressSink->OnProgress. OnTransportStatusAsyncEvent just invokes OnTransportStatutus on its first arg.
Document the lifetime guarantees on mRequest, please.
Attachment #8439062 -
Flags: feedback?(bzbarsky) → feedback+
| Assignee | ||
Updated•11 years ago
|
Attachment #8439062 -
Flags: feedback?(sworkman)
Attachment #8439062 -
Flags: feedback?(jduell.mcbugs)
| Assignee | ||
Comment 6•11 years ago
|
||
Attachment #8439060 -
Attachment is obsolete: true
Attachment #8439257 -
Flags: review+
| Assignee | ||
Comment 7•11 years ago
|
||
Attachment #8439062 -
Attachment is obsolete: true
Attachment #8439258 -
Flags: review?(jduell.mcbugs)
Attachment #8439258 -
Flags: review?(bzbarsky)
Comment 8•11 years ago
|
||
Comment on attachment 8439258 [details] [diff] [review]
Part 2: Implement thread retargeting for JAR channels
I'm not convinced about null-checking mProgressSink and mLoadFlags on the background thread. I think we should move those checks into FireOnProgress.
r=me with that.
Attachment #8439258 -
Flags: review?(bzbarsky) → review+
Comment 9•11 years ago
|
||
Comment on attachment 8439257 [details] [diff] [review]
Part 1: Attempt to retarget the HTML parser's request regardless of the stream type
Review of attachment 8439257 [details] [diff] [review]:
-----------------------------------------------------------------
::: parser/html/nsHtml5StreamParser.cpp
@@ +943,5 @@
> + rv = threadRetargetableRequest->RetargetDeliveryTo(mThread);
> + }
> +
> + if (NS_FAILED(rv)) {
> + NS_WARNING("Failed to retarget HTML data delivery to the parser thread.");
IIUC this will warn every time we load HTML from a jar:// uri that's backed by a regular jar file instead of an http: link. Not sure how common that is.
Comment 10•11 years ago
|
||
Comment on attachment 8439258 [details] [diff] [review]
Part 2: Implement thread retargeting for JAR channels
Review of attachment 8439258 [details] [diff] [review]:
-----------------------------------------------------------------
::: modules/libjar/nsJARChannel.cpp
@@ +1035,5 @@
>
> // simply report progress here instead of hooking ourselves up as a
> // nsITransportEventSink implementation.
> // XXX do the 64-bit stuff for real
> + if (mProgressSink && NS_SUCCEEDED(rv) && !(mLoadFlags & LOAD_BACKGROUND)) {
mProgressSink only gets initialized in AsyncOpen and nulled out in OnStopRequest, so we're probably fine with the use here. I also wouldn't expect mLoadFlags to change after AsyncOpen. So I'm less worried than bz about these. But I'm fine with moving them to FireOnProgress.
::: modules/libjar/nsJARChannel.h
@@ +15,5 @@
> #include "nsIRemoteOpenFileListener.h"
> #include "nsIZipReader.h"
> #include "nsIDownloader.h"
> #include "nsILoadGroup.h"
> +#include "nsIThreadRetargetableRequest.h"
Change comment in nsIThreadRetargetableRequest.idl:
* ... Should
* only be called before AsyncOpen for nsIWebsocketChannels, or during
* OnStartRequest for nsIChannels.
* Note: For nsIChannels, OnStartRequest and OnStopRequest will still be
* delivered on the main thread.
i.e. s/nsIHttpChannel/nsIChannel/
Attachment #8439258 -
Flags: review?(jduell.mcbugs) → review+
| Assignee | ||
Comment 11•11 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/9a02ba6359bb
https://hg.mozilla.org/mozilla-central/rev/97fa54d04c48
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla33
You need to log in
before you can comment on or make changes to this bug.
Description
•