Re: Necko integration with NavigationController

Josh Matthews <[email protected]> Thu, 19 Sep 2013 15:44:29 -0400
Newsgroups gmane.comp.mozilla.devel.netlib
Message-ID <[email protected]>
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