- From: Ryan Sleevi <sleevi@google.com>
- Date: Mon, 25 Mar 2013 16:05:41 -0700
- To: Richard Barnes <rbarnes@bbn.com>
- Cc: Web Cryptography Working Group <public-webcrypto@w3.org>
- Message-ID: <CACvaWvacLFz-i4g0Wu_qJvOH8qiTr9MJvaUkWyOkoS+2U0C-Aw@mail.gmail.com>
On Mon, Mar 25, 2013 at 4:01 PM, Richard Barnes <rbarnes@bbn.com> wrote: > I'll try to fix the polyfill soon. > > I'm now seeing that I may have mis-read the spec. It's a little > unfortunate that the HTML5 spec linked from the references [1] does not > actually contain the phrase "queue a task"; for that you have to click > through to the separate page for APIs [2]. > > The Promises model still seems more intuitive to me, so I support the note > in the spec about moving CryptoOperation to a Promises-like API. > > --Richard > Glad to hear. Still working out the right API to do so, as the DOMFuture work continues to evolve based on the feedback from many of the existing Promises APIs. > > > [1] <http://www.w3.org/html/wg/drafts/html/master/Overview.html> > [2] < > http://www.w3.org/html/wg/drafts/html/master/webappapis.html#event-loops> > > > On Mar 25, 2013, at 4:50 PM, Ryan Sleevi <sleevi@google.com> wrote: > > > > > > > > > On Mon, Mar 25, 2013 at 1:20 PM, Richard Barnes <rbarnes@bbn.com> wrote: > > Hey all, > > > > Section 1. Is there a problem? > > > > I'm wondering if the "single-shot" syntax for > encrypt/decrypt/sign/verify introduces a race condition for developers. > Suppose I write the following two lines: > > > > var op = window.crypto.encrypt(alg, key, buffer); > > op.oncomplete = function(e) { /* do stuff with result */ } > > > > The encrypt() call is asynchronous, so the "complete" event may have > already fired before the "oncomplete" handler is set. So my handler never > gets called, which makes my app not work. > > > > > > Section 2. How do we solve the problem > > > > It seems like there are two possible approaches here: > > 1. Delay the event > > 2. Provide explicit sequencing (Promises or synchronous call) > > > > FWIW, PolyCrypt resolves takes the former approach right now. An > operation caches the last event that it fired of each type. Then when a > listener is registered, it can get the cached event. This is basically the > same as the Promises approach, but with dirtier syntax. > > > > In other words, it seems like implementing a Promises-style interface > should be a high priority, because otherwise there's non-deterministic > behavior. > > > > --Richard > > > > Just to be clear, your polyfill is non-comformant then. > > > > You can easily simulate the "queue a task" by using a setTimeout value > of 0, which will ensure that control is yielded back to the event loop > before continuing processing. > > > >
Received on Monday, 25 March 2013 23:06:15 UTC