<br><br><div class="gmail_quote">On Mon, Jul 6, 2009 at 9:30 PM, Ian Hickson <span dir="ltr">&lt;<a href="mailto:ian@hixie.ch">ian@hixie.ch</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
&gt; 1) The &#39;readyState&#39; attribute can never actually be used by an application<br><div class="im">
&gt; and is redundant.<br>
&gt;<br>
&gt; Initially, the &#39;readyState&#39; attribute is set to CONNECTING, but while<br>
&gt; the object is in this state the user is not permitted to interact with<br>
&gt; the WebSocket in any way.  The only useful thing that a user could do is<br>
&gt; set event handlers and wait for the &#39;open&#39; event to fire.  When the<br>
&gt; WebSocket becomes connected, the readyState becomes 1 and the &#39;open&#39;<br>
&gt; event is fired. Once the WebSocket is open, the spec states that<br>
&gt; whenever the connection is closed the readyState changes to CLOSED and a<br>
</div>&gt; &#39;close&#39; event is enqueued. However, users can&#39;t usefully check the<br>
<div class="im">&gt; readyState to see if the WebSocket is still open because there are not<br>
&gt; and cannot be any synchronization guarantees about when the WebSocket<br>
</div><div class="im">&gt; may close.  A user will have to wrap all calls to postMessage() (or<br>
&gt; send() if the function is renamed) in a try/catch block in order to<br>
&gt; handle INVALID_STATE_ERRs.  Once the &#39;close&#39; event has been received the<br>
&gt; readyState attribute is useless since the state of the WebSocket is<br>
&gt; known and can never change.<br>
&gt;<br>
&gt; I think &#39;readyState&#39; should just go away since an application will have<br>
&gt; to keep track of state updates through the fired events and use<br>
&gt; try/catch blocks around all API calls anyway.<br>
<br>
</div>The attribute is mostly present for debugging purposes. I wouldn&#39;t expect<br>
anyone to actually use it for production work.</blockquote><div><br>Is there precedent for other portions of the API that are mostly for debugging purposes?  (I can&#39;t think of anything off the top of my head.)<br><br>
Also, maybe it should be noted as such in the spec?<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On Fri, 26 Jun 2009, James Robinson wrote:<br>
<div class="im">
&gt;<br>
&gt; Not changing variables out from under executing JavaScript makes a lot<br>
&gt; of sense, but if that was the case then it&#39;s not clear when the<br>
&gt; readyState could be updated.  The spec states &quot;When the *Web Socket<br>
</div><br>&gt; connection is closed*, the readyState attribute&#39;s value must be changed<br>
<div class="im">&gt; to CLOSED (2), and the user agent must queue a task to fire a simple<br>
&gt; event called close at the WebSocket object.&quot; If the browser cannot<br>
&gt; mutate the readyState until JavaScript stops running then it would<br>
&gt; either have to either enqueue a second task to change readyState at some<br>
&gt; point in the future or set the readyState right before dispatching the<br>
&gt; &#39;close&#39; event.  The latter would be much nicer to implement - but then<br>
&gt; it does make the readyState completely useless as it would always be<br>
&gt; exactly equivalent to the last event that was fired on a given<br>
&gt; WebSocket.<br>
<br>
</div>I&#39;ve left it as is (the attribute changes on the fly), which is possibly<br>
risky, but more consistent with how such attributes are handled in<br>
general.</blockquote><div><br>If it&#39;s only for debugging purposes, maybe a cleaner way to define it is to simply be the last event fired on a given WebSocket?<br><br><br>One other random question:  in the IDL for WebSockets, the three constants for ready state are all defined as shorts but the value of ready state is a long.  Is this an oversight?<br>
<br>J<br></div></div>