10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Google Inc.  All rights reserved.
306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Copyright (C) 2010 Apple Inc. All Rights Reserved.
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions are
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * met:
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     * Redistributions of source code must retain the above copyright
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer.
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     * Redistributions in binary form must reproduce the above
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * copyright notice, this list of conditions and the following disclaimer
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * in the documentation and/or other materials provided with the
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * distribution.
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     * Neither the name of Google Inc. nor the names of its
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * contributors may be used to endorse or promote products derived from
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * this software without specific prior written permission.
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochmodule websockets {
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    interface [
35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        Conditional=WEB_SOCKETS,
3606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        CanBeConstructed,
3706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        CustomConstructFunction,
3806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        ConstructorParameters=1,
3906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        V8CustomConstructor,
40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        EventTarget,
41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        NoStaticTables
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ] WebSocket {
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        readonly attribute DOMString URL;
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // ready state
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        const unsigned short CONNECTING = 0;
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        const unsigned short OPEN = 1;
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        const unsigned short CLOSED = 2;
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        readonly attribute unsigned short readyState;
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        readonly attribute unsigned long bufferedAmount;
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // networking
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        attribute EventListener onopen;
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        attribute EventListener onmessage;
56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        attribute EventListener onerror;
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        attribute EventListener onclose;
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        [RequiresAllArguments] boolean send(in DOMString data) raises(DOMException);
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void close();
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // EventTarget interface
6321939df44de1705786c545cd1bf519d47250322dBen Murdoch        void addEventListener(in DOMString type,
6421939df44de1705786c545cd1bf519d47250322dBen Murdoch                              in EventListener listener,
6521939df44de1705786c545cd1bf519d47250322dBen Murdoch                              in boolean useCapture);
6621939df44de1705786c545cd1bf519d47250322dBen Murdoch        void removeEventListener(in DOMString type,
6721939df44de1705786c545cd1bf519d47250322dBen Murdoch                                 in EventListener listener,
6821939df44de1705786c545cd1bf519d47250322dBen Murdoch                                 in boolean useCapture);
69cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        boolean dispatchEvent(in Event evt)
70cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            raises(EventException);
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
73