Bringing setTimeout to ECMAScript

Mark S. Miller erights at google.com
Sat Mar 19 13:45:39 PDT 2011


On Sat, Mar 19, 2011 at 1:34 PM, Peter van der Zee <ecma at qfox.nl> wrote:

> [...]
> And re: return value. Some scripts might rely on the fact that the timers
> return a number (an int, even). So if backwards compat is important (and it
> always is), you can't really break with `typeof token == 'number'`. So if
> there was a new native type, typeof would still have to return 'number',
> which is not very desirable (null anyone?...).
>

I agree that if compat requires `typeof token === 'number'`, then the token
itself must remain a number. Has anyone seen seen any such dependency in the
wild?




> Also, given that setTimeout and setInterval are already implemented in
> browsers for a while with returning numbers, is it really still a problem we
> need to solve? Will browsers really start implementing a setTimeout that
> returns a special timer object? I think any implementation that uses
> "setTimeout" and "setInterval" would have to mimic the current behavior in
> the browser...
>

In Caja, setTimeout/setInterval does indeed return an object, where `typeof
token === 'object'` and that object is accepted by Caja's
clearTimeout/clearInterval. AFAIK, we have not encountered a single
incompatibility as a result of this change. If anyone knows a
counter-example in the wild, please speak up.

And yes, this is a problem that SES needs to solve.



>
> (Even if we implement a host-environment yield kind of thing, I'd still
> prefer a built-in setTimeout abstraction built on it for convience. But I
> don't know about the security or whatever involved.)
>
> Kyle: If there was a way to determine which timers are currently queued,
> would that solve your problem? That's probably the only thing I'm missing
> right now from the timer api: Some array with all queued timeouts/intervals.
> Maybe that's to prevent the clear "attack" mentioned before, looping all
> numbers and clearing them. I don't know. But if you had such an array
> (either with just ints, or even an object with {int,time/interval,callback})
> would that suffice for you? You could check the list and block while there
> are timers left.
>
> - peter
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>


-- 
    Cheers,
    --MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110319/24fb0cb2/attachment.html>


More information about the es-discuss mailing list