15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#ifndef WebSocketHandleClient_h 32c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#define WebSocketHandleClient_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "WebCommon.h" 35c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "public/platform/WebSocketHandle.h" 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class WebSocketHandshakeRequestInfo; 4051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class WebSocketHandshakeResponseInfo; 41c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class WebString; 42c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class WebURL; 435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 44c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)// FIXME: This class should replace WebSocketStreamHandleClient. 45c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class WebSocketHandleClient { 465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)public: 47c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // Called when the handle is opened. 4806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) virtual void didConnect(WebSocketHandle*, bool fail, const WebString& selectedProtocol, const WebString& extensions) = 0; 49c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 5051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Called when the browser starts the opening handshake. 5151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // This notification can be omitted when the inspector is not active. 5251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void didStartOpeningHandshake(WebSocketHandle*, const WebSocketHandshakeRequestInfo&) = 0; 5351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Called when the browser finishes the opening handshake. 5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // This notification precedes didConnect. 5651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // This notification can be omitted when the inspector is not active. 5751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void didFinishOpeningHandshake(WebSocketHandle*, const WebSocketHandshakeResponseInfo&) = 0; 5851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // Called when the browser is required to fail the connection. 6051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // |message| can be displayed in the inspector, but should not be passed 6151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // to scripts. 6251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // This message also implies that channel is closed with 6351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // (wasClean = false, code = 1006, reason = "") and 6451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // |handle| becomes unavailable. 6551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void didFail(WebSocketHandle* /* handle */, const WebString& message) = 0; 6619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 67c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // Called when data are received. 6806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) virtual void didReceiveData(WebSocketHandle*, bool fin, WebSocketHandle::MessageType, const char* data, size_t /* size */) = 0; 69c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 70c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // Called when the handle is closed. 7151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // |handle| becomes unavailable once this notification arrives. 7251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void didClose(WebSocketHandle* /* handle */, bool wasClean, unsigned short code, const WebString& reason) = 0; 73c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void didReceiveFlowControl(WebSocketHandle*, int64_t quota) = 0; 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Called when the browser receives a Close frame from the remote 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // server. Not called when the renderer initiates the closing handshake. 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void didStartClosingHandshake(WebSocketHandle*) = 0; 795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)}; 805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 8151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 83c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#endif // WebSocketHandleClient_h 84