In case it helps, here's the diff of my changes so far: https://gist.github.com/jdm/6628822

On 09/19/2013 03:42 PM, Josh Matthews wrote:
I'm working on an experimental NavigationController
(https://github.com/slightlyoff/EventWorker/blob/master/explainer.md)
implementation for Gecko. Part of this work requires me to intercept
navigation requests before they turn into network requests and allow
content code to provide a synthesized response. I'm going to document my
current thinking and experiments for implementing this in Necko, and
then I'm hoping for feedback and/or suggestions for alternatives.

Focusing on nsHttpChannel for now, my avenue of attack is the following:
* split the code that runs in AsyncOpen into AsyncOpenSetup (everything
that sets headers on the channel) and FinishAsyncOpen (everything that
initiates an actual network request)
* create a new wrapper channel implementation that QIs to nsIChannel,
and contains the ability to inject an nsIInputStream which will be
passed to the wrapped channel's streamlistener callbacks.
* I am contemplating making this wrapper channel also QI to every
interface that nsHttpChannel implements and forward the calls that
should modify the underlying channel

This is incomplete, because fields like mResponseHead need to be
initialized, but I'm hoping for feedback as to whether this sounds
workable or not. Note that we also need the ability to continue the
original request (or perhaps a clone of it somehow) if the web content
decides not to intercept it.  Any thoughts?

Cheers,
Josh

_______________________________________________
dev-tech-network mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-network

Reply via email to