- From: Stewart Brodie <stewart.brodie@antplc.com>
- Date: Fri, 10 Jul 2009 14:37:14 +0100
I've been reviewing the new EventSource draft. I'm very pleased to see it converted into a separate object, rather than being tacked onto everything that implements EventTarget. This is a huge improvement. However, there are some issues that I think need to be addressed, specifically in the area of lifetime management. The GC rules in section 9 seem overly permissive - if there is a listener for message events but the script "forgets" to call close() when the user navigates away, then the resources it is consuming cannot be reclaimed. There is a small chance that it may be reclaimed if the server terminates the connection and a GC occurs before the UA is able to re-establish the connection (i.e. during the reconnection delay or the reconnection), but I don't think it's wise to rely on this as it would allow malicious scripts to consume resource with no way for the user agent to recover. The simplest way to prevent this would be to modify the condition in section 9 slightly to insist that the event listener is callable, drawing on the text from HTML5's "Calling scripts" section 6.5.3.2#1. i.e. modify the text to say: "An EventSource object with an open connection must not be garbage collected if there are any event listeners registered for message events and at least one of those listeners' global object is a Window object whose Document object is fully active." In other words, the automatic marking of the EventSource now requires that at least one of the event listeners must be callable. The only difference that this makes, I *think*, is that pages in the history lose unreferenced EventSource objects. Is this true and would it actually be a problem? -- Stewart Brodie Software Engineer ANT Software Limited
Received on Friday, 10 July 2009 06:37:14 UTC