| Index: mojo/services/network/web_socket_impl.cc
|
| diff --git a/mojo/services/network/web_socket_impl.cc b/mojo/services/network/web_socket_impl.cc
|
| deleted file mode 100644
|
| index 2d89149d49748efa299523e7afa35be8f6b9fe98..0000000000000000000000000000000000000000
|
| --- a/mojo/services/network/web_socket_impl.cc
|
| +++ /dev/null
|
| @@ -1,242 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "mojo/services/network/web_socket_impl.h"
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "mojo/message_pump/handle_watcher.h"
|
| -#include "mojo/services/network/network_context.h"
|
| -#include "mojo/services/network/public/cpp/web_socket_read_queue.h"
|
| -#include "mojo/services/network/public/cpp/web_socket_write_queue.h"
|
| -#include "net/websockets/websocket_channel.h"
|
| -#include "net/websockets/websocket_errors.h"
|
| -#include "net/websockets/websocket_event_interface.h"
|
| -#include "net/websockets/websocket_frame.h" // for WebSocketFrameHeader::OpCode
|
| -#include "net/websockets/websocket_handshake_request_info.h"
|
| -#include "net/websockets/websocket_handshake_response_info.h"
|
| -#include "url/origin.h"
|
| -
|
| -namespace mojo {
|
| -
|
| -template <>
|
| -struct TypeConverter<net::WebSocketFrameHeader::OpCode,
|
| - WebSocket::MessageType> {
|
| - static net::WebSocketFrameHeader::OpCode Convert(
|
| - WebSocket::MessageType type) {
|
| - DCHECK(type == WebSocket::MessageType::CONTINUATION ||
|
| - type == WebSocket::MessageType::TEXT ||
|
| - type == WebSocket::MessageType::BINARY);
|
| - typedef net::WebSocketFrameHeader::OpCode OpCode;
|
| - // These compile asserts verify that the same underlying values are used for
|
| - // both types, so we can simply cast between them.
|
| - static_assert(static_cast<OpCode>(WebSocket::MessageType::CONTINUATION) ==
|
| - net::WebSocketFrameHeader::kOpCodeContinuation,
|
| - "enum values must match for opcode continuation");
|
| - static_assert(static_cast<OpCode>(WebSocket::MessageType::TEXT) ==
|
| - net::WebSocketFrameHeader::kOpCodeText,
|
| - "enum values must match for opcode text");
|
| - static_assert(static_cast<OpCode>(WebSocket::MessageType::BINARY) ==
|
| - net::WebSocketFrameHeader::kOpCodeBinary,
|
| - "enum values must match for opcode binary");
|
| - return static_cast<OpCode>(type);
|
| - }
|
| -};
|
| -
|
| -template <>
|
| -struct TypeConverter<WebSocket::MessageType,
|
| - net::WebSocketFrameHeader::OpCode> {
|
| - static WebSocket::MessageType Convert(
|
| - net::WebSocketFrameHeader::OpCode type) {
|
| - DCHECK(type == net::WebSocketFrameHeader::kOpCodeContinuation ||
|
| - type == net::WebSocketFrameHeader::kOpCodeText ||
|
| - type == net::WebSocketFrameHeader::kOpCodeBinary);
|
| - return static_cast<WebSocket::MessageType>(type);
|
| - }
|
| -};
|
| -
|
| -namespace {
|
| -
|
| -typedef net::WebSocketEventInterface::ChannelState ChannelState;
|
| -
|
| -struct WebSocketEventHandler : public net::WebSocketEventInterface {
|
| - public:
|
| - WebSocketEventHandler(WebSocketClientPtr client)
|
| - : client_(std::move(client)) {}
|
| - ~WebSocketEventHandler() override {}
|
| -
|
| - private:
|
| - // net::WebSocketEventInterface methods:
|
| - ChannelState OnAddChannelResponse(const std::string& selected_subprotocol,
|
| - const std::string& extensions) override;
|
| - ChannelState OnDataFrame(bool fin,
|
| - WebSocketMessageType type,
|
| - const std::vector<char>& data) override;
|
| - ChannelState OnClosingHandshake() override;
|
| - ChannelState OnFlowControl(int64_t quota) override;
|
| - ChannelState OnDropChannel(bool was_clean,
|
| - uint16_t code,
|
| - const std::string& reason) override;
|
| - ChannelState OnFailChannel(const std::string& message) override;
|
| - ChannelState OnStartOpeningHandshake(
|
| - scoped_ptr<net::WebSocketHandshakeRequestInfo> request) override;
|
| - ChannelState OnFinishOpeningHandshake(
|
| - scoped_ptr<net::WebSocketHandshakeResponseInfo> response) override;
|
| - ChannelState OnSSLCertificateError(
|
| - scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks,
|
| - const GURL& url,
|
| - const net::SSLInfo& ssl_info,
|
| - bool fatal) override;
|
| -
|
| - // Called once we've written to |receive_stream_|.
|
| - void DidWriteToReceiveStream(bool fin,
|
| - net::WebSocketFrameHeader::OpCode type,
|
| - uint32_t num_bytes,
|
| - const char* buffer);
|
| - WebSocketClientPtr client_;
|
| - ScopedDataPipeProducerHandle receive_stream_;
|
| - scoped_ptr<WebSocketWriteQueue> write_queue_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebSocketEventHandler);
|
| -};
|
| -
|
| -ChannelState WebSocketEventHandler::OnAddChannelResponse(
|
| - const std::string& selected_protocol,
|
| - const std::string& extensions) {
|
| - DataPipe data_pipe;
|
| - receive_stream_ = std::move(data_pipe.producer_handle);
|
| - write_queue_.reset(new WebSocketWriteQueue(receive_stream_.get()));
|
| - client_->DidConnect(selected_protocol, extensions,
|
| - std::move(data_pipe.consumer_handle));
|
| - return WebSocketEventInterface::CHANNEL_ALIVE;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnDataFrame(
|
| - bool fin,
|
| - net::WebSocketFrameHeader::OpCode type,
|
| - const std::vector<char>& data) {
|
| - uint32_t size = static_cast<uint32_t>(data.size());
|
| - write_queue_->Write(
|
| - &data[0], size,
|
| - base::Bind(&WebSocketEventHandler::DidWriteToReceiveStream,
|
| - base::Unretained(this),
|
| - fin, type, size));
|
| - return WebSocketEventInterface::CHANNEL_ALIVE;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnClosingHandshake() {
|
| - return WebSocketEventInterface::CHANNEL_ALIVE;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnFlowControl(int64_t quota) {
|
| - client_->DidReceiveFlowControl(quota);
|
| - return WebSocketEventInterface::CHANNEL_ALIVE;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnDropChannel(bool was_clean,
|
| - uint16_t code,
|
| - const std::string& reason) {
|
| - client_->DidClose(was_clean, code, reason);
|
| - return WebSocketEventInterface::CHANNEL_DELETED;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnFailChannel(const std::string& message) {
|
| - client_->DidFail(message);
|
| - return WebSocketEventInterface::CHANNEL_DELETED;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnStartOpeningHandshake(
|
| - scoped_ptr<net::WebSocketHandshakeRequestInfo> request) {
|
| - return WebSocketEventInterface::CHANNEL_ALIVE;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnFinishOpeningHandshake(
|
| - scoped_ptr<net::WebSocketHandshakeResponseInfo> response) {
|
| - return WebSocketEventInterface::CHANNEL_ALIVE;
|
| -}
|
| -
|
| -ChannelState WebSocketEventHandler::OnSSLCertificateError(
|
| - scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks,
|
| - const GURL& url,
|
| - const net::SSLInfo& ssl_info,
|
| - bool fatal) {
|
| - client_->DidFail("SSL Error");
|
| - return WebSocketEventInterface::CHANNEL_DELETED;
|
| -}
|
| -
|
| -void WebSocketEventHandler::DidWriteToReceiveStream(
|
| - bool fin,
|
| - net::WebSocketFrameHeader::OpCode type,
|
| - uint32_t num_bytes,
|
| - const char* buffer) {
|
| - client_->DidReceiveData(
|
| - fin, ConvertTo<WebSocket::MessageType>(type), num_bytes);
|
| -}
|
| -
|
| -} // namespace mojo
|
| -
|
| -WebSocketImpl::WebSocketImpl(NetworkContext* context,
|
| - scoped_ptr<mojo::MessageLoopRef> app_refcount,
|
| - InterfaceRequest<WebSocket> request)
|
| - : context_(context),
|
| - app_refcount_(std::move(app_refcount)),
|
| - binding_(this, std::move(request)) {}
|
| -
|
| -WebSocketImpl::~WebSocketImpl() {
|
| -}
|
| -
|
| -void WebSocketImpl::Connect(const String& url,
|
| - Array<String> protocols,
|
| - const String& origin,
|
| - ScopedDataPipeConsumerHandle send_stream,
|
| - WebSocketClientPtr client) {
|
| - DCHECK(!channel_);
|
| - send_stream_ = std::move(send_stream);
|
| - read_queue_.reset(new WebSocketReadQueue(send_stream_.get()));
|
| - scoped_ptr<net::WebSocketEventInterface> event_interface(
|
| - new WebSocketEventHandler(std::move(client)));
|
| - channel_.reset(new net::WebSocketChannel(std::move(event_interface),
|
| - context_->url_request_context()));
|
| - channel_->SendAddChannelRequest(GURL(url.get()),
|
| - protocols.To<std::vector<std::string>>(),
|
| - url::Origin(GURL(origin.get())));
|
| -}
|
| -
|
| -void WebSocketImpl::Send(bool fin,
|
| - WebSocket::MessageType type,
|
| - uint32_t num_bytes) {
|
| - DCHECK(channel_);
|
| - read_queue_->Read(num_bytes,
|
| - base::Bind(&WebSocketImpl::DidReadFromSendStream,
|
| - base::Unretained(this),
|
| - fin, type, num_bytes));
|
| -}
|
| -
|
| -void WebSocketImpl::FlowControl(int64_t quota) {
|
| - DCHECK(channel_);
|
| - channel_->SendFlowControl(quota);
|
| -}
|
| -
|
| -void WebSocketImpl::Close(uint16_t code, const String& reason) {
|
| - DCHECK(channel_);
|
| - channel_->StartClosingHandshake(code, reason);
|
| -}
|
| -
|
| -void WebSocketImpl::DidReadFromSendStream(bool fin,
|
| - WebSocket::MessageType type,
|
| - uint32_t num_bytes,
|
| - const char* data) {
|
| - std::vector<char> buffer(num_bytes);
|
| - memcpy(&buffer[0], data, num_bytes);
|
| - DCHECK(channel_);
|
| - channel_->SendFrame(
|
| - fin, ConvertTo<net::WebSocketFrameHeader::OpCode>(type), buffer);
|
| -}
|
| -
|
| -} // namespace mojo
|
|
|