Here's what I think...
What's the purpose of RawWebSocketImpl vs. WebSocket? that you could do a new WebSocket() instead of WebSocket.newInstance() ? (I don't dispute the interface+implementation, which is more-than-useful for mockability).
Different browsers might have a slightly different WebSocket object implementation, so it seems to be necessary to be able to inject different implementations for different browsers. The other thing is that it feels much more natural to instantiate a java objet using syntax like new WebSocket() compared to WebSocket.newInstance(). Third, it adds to the testability.
When you look at the WebSocketTest, it actually doesn't test anything really useful, only that a 'short' state is correctly converted into a 'State' enum value, and that the generic event-name+EventListener+event-handler-as-Object is correctly mapped to/from
event-specific-method+event-specific-handler+HandlerRegistration
(actually, it doesn't even test the HandlerRegistration behavior).
I reckon more test will be added. This is not a final implementation. (Up in the thread it says that this is not ready to submit yet, this is a work in progrss. Right, John?)
What this dichotomy buys us? a cleaner API? why couldn't it be built at the interface level (currently named RawWebSocket)?
RawWebSocket is the contract that each RawWebSocket implementation needs to adhere to. I'm not sure what you would put here... http://gwt-code-reviews.appspot.com/646803/show -- http://groups.google.com/group/Google-Web-Toolkit-Contributors