On Wednesday, December 10, 2014 12:11:39 PM UTC-8, jyas...@chromium.org wrote:
> On Wednesday, December 10, 2014 9:46:58 AM UTC-8, Ehsan Akhgari wrote:
> > On 2014-12-10 12:21 AM, Nikhil Marathe wrote:
> > > (cross posted dev.b2g since this seems very relevant to it, but please 
> > > keep
> > > the discussion on dev.platform)
> > >
> > > Hi All,
> > >
> > > As part of the ServiceWorker initiative [1], Google is proposing a
> > > `navigator.connect` API [2] to allow cross-origin ServiceWorker
> > > communication. This post is mostly a notice to inform everyone of this
> > > unofficial draft API.
> > >
> > > This seems similar to our Inter-App communication API [3] and I'm sure the
> > > authors and users of that API have feedback that should be incorporated in
> > > a cross-web (non-b2g-specific) API. There also seems to be overlap with
> > > some use-cases for Web Activities [4].
> > >
> > > This is a good opportunity for us to influence how cross-origin messaging
> > > is implemented at an early stage. If someone wants to drive this from
> > > Mozilla's side, please "raise your hand".
> > 
> > I am very interested in this problem, and in fact I've been thinking 
> > about what we should do for cross origin SW communications for a while. 
> >   :-)  I do support the idea but I'm not convinced that we need a 
> > specific API to talk to the SW (such as navigator.connect.)
> > 
> > What I have been envisioning is allowing SWs that are registered with 
> > the UA to respond to cross origin fetch requests made through XHR/fetch 
> > even from documents that are themselves not controlled by a SW.  The 
> > reasoning I have for this is as follows:
> > 
> > Currently on the Web, the defacto way that applications talk to each 
> > other cross origin is through XHR using CORS.  See the numerous HTTP 
> > based APIs that are developed by various organizations that are used by 
> > Web applications right now.  With service workers, we are going to have 
> > a Web that is usable off-line, and we can also use SWs to do things such 
> > as smarter caching on the client side.  The next interesting use case 
> > would be to enable the usage of these HTTP based APIs offline (or doing 
> > smart caching on the client side, etc.)
> > 
> > I see no great reason to require Web applications to write specific code 
> > for this, though.  Let's say that my application XHRs into 
> > <https://socialnetwork.com/get/friends> in order to get the user's list 
> > of friends.  It would be nice to allow that request to be handled by the 
> > service worker registered for socialnetwork.com and give that SW control 
> > over whether it wants to respond to the request without going to the 
> > network.  This has the additional advantage that people's code and all 
> > of the ecosystem that they have built on top of XHR based APIs over the 
> > years will just work offline once the service providers get their SWs 
> > registered.
> > 
> > The downside of this approach is of course relying on the service 
> > providers to get their SWs registered, which may require the user to 
> > navigate to the service provider's origin, but I suppose that matches 
> > the security model of the UA prompting for the installation of the 
> > service worker, etc.
> > 
> > So I guess my biggest question so far is: what will we gain by adding 
> > another API specifically for connecting to the service worker?  Do you 
> > think we can avoid doing that and focus on making XHR/fetch work with 
> > cross origin SWs?
> 
> "Work with" is a bit too vague here. I think you're suggesting to change 
> which SW cross-origin fetch() calls are routed to. Right now, 
> https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#on-fetch-request-algorithm
>  (called from https://fetch.spec.whatwg.org/#http-fetch) specifies in step 13 
> that 'fetch' contexts go to the client's SW, not the target URL's SW.
> 
> So, what are the implications of changing that? We'd have to ask Anne and 
> Alex, at least, to be sure, but I can think of a couple problems:
> 1) Sites wouldn't be able to cache cross-origin resources until the other 
> origin installed a SW

Well, that's not entirely clear. Both sites could maintain caches.

> 2) Users could more easily write infinite loops between SWs, since at no 
> point would they be guaranteed to bottom out at the network.

I'm more worried about the memory implications for low-spec devices of the 
russian-doll design for SW fetches. We've avoided it thus far for these reasons.

> We could solve the first with an extra flag to fetch(), letting users 
> explicitly control which origin's SW gets the request, but we can think of 
> navigator.connect() as exactly that flag, followed by some streamlining 
> because of the expected target.

The goal of the navigator.connect() effort is a much more general messaging and 
services bus. I'm optimistic that we could do something with it that makes many 
of the nested-fetch use cases both easier for developers to comprehend and 
better for runtimes to manage. I'm not as optimistic about russian-doll fetch 
handling and, as we have thus far in SW's design, want to wait until we have a 
compelling need before going that route.
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to