diff options
author | ricea <ricea@chromium.org> | 2014-10-24 01:53:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-24 08:54:19 +0000 |
commit | 8e60ab5d142eaa8c04a385f265f1c328ad5a9b6d (patch) | |
tree | 0b6ffb9e8244fe12c6ccd75b8bec7126ec6bfb7d /content/child | |
parent | 821aa6e20b4e447f8e37525be247dfd5bd83feff (diff) | |
download | chromium_src-8e60ab5d142eaa8c04a385f265f1c328ad5a9b6d.zip chromium_src-8e60ab5d142eaa8c04a385f265f1c328ad5a9b6d.tar.gz chromium_src-8e60ab5d142eaa8c04a385f265f1c328ad5a9b6d.tar.bz2 |
Remove old WebSocket implementation from content/
Remove the old SocketStream-based WebSocket implementation from
content/.
Large parts of the implementation still exist in net/. They will be
removed in a subsequent CL.
There are also a few traces in chrome/, and some interfaces in Blink
that cannot be removed until this CL is submitted.
BUG=423201
TEST=layout tests, browser_tests
Review URL: https://codereview.chromium.org/655253006
Cr-Commit-Position: refs/heads/master@{#301075}
Diffstat (limited to 'content/child')
-rw-r--r-- | content/child/blink_platform_impl.cc | 6 | ||||
-rw-r--r-- | content/child/blink_platform_impl.h | 1 | ||||
-rw-r--r-- | content/child/child_thread.cc | 4 | ||||
-rw-r--r-- | content/child/child_thread.h | 8 | ||||
-rw-r--r-- | content/child/socket_stream_dispatcher.cc | 255 | ||||
-rw-r--r-- | content/child/socket_stream_dispatcher.h | 51 | ||||
-rw-r--r-- | content/child/web_socket_stream_handle_bridge.h | 37 | ||||
-rw-r--r-- | content/child/web_socket_stream_handle_delegate.h | 44 | ||||
-rw-r--r-- | content/child/web_socket_stream_handle_impl.cc | 194 | ||||
-rw-r--r-- | content/child/web_socket_stream_handle_impl.h | 35 |
10 files changed, 0 insertions, 635 deletions
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc index 84beac0..aa62a54 100644 --- a/content/child/blink_platform_impl.cc +++ b/content/child/blink_platform_impl.cc @@ -35,7 +35,6 @@ #include "content/child/geofencing/web_geofencing_provider_impl.h" #include "content/child/web_discardable_memory_impl.h" #include "content/child/web_gesture_curve_impl.h" -#include "content/child/web_socket_stream_handle_impl.h" #include "content/child/web_url_loader_impl.h" #include "content/child/websocket_bridge.h" #include "content/child/webthread_impl.h" @@ -62,7 +61,6 @@ using blink::WebData; using blink::WebFallbackThemeEngine; using blink::WebLocalizedString; using blink::WebString; -using blink::WebSocketStreamHandle; using blink::WebThemeEngine; using blink::WebURL; using blink::WebURLError; @@ -441,10 +439,6 @@ WebURLLoader* BlinkPlatformImpl::createURLLoader() { child_thread ? child_thread->resource_dispatcher() : NULL); } -WebSocketStreamHandle* BlinkPlatformImpl::createSocketStreamHandle() { - return new WebSocketStreamHandleImpl; -} - blink::WebSocketHandle* BlinkPlatformImpl::createWebSocketHandle() { return new WebSocketBridge; } diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h index 4a3c7b8..060fbf0 100644 --- a/content/child/blink_platform_impl.h +++ b/content/child/blink_platform_impl.h @@ -75,7 +75,6 @@ class CONTENT_EXPORT BlinkPlatformImpl size_t bytes); virtual size_t maxDecodedImageBytes() override; virtual blink::WebURLLoader* createURLLoader(); - virtual blink::WebSocketStreamHandle* createSocketStreamHandle(); virtual blink::WebSocketHandle* createWebSocketHandle() override; virtual blink::WebString userAgent(); virtual blink::WebData parseDataURL( diff --git a/content/child/child_thread.cc b/content/child/child_thread.cc index 6bbc4a4..de85d4f 100644 --- a/content/child/child_thread.cc +++ b/content/child/child_thread.cc @@ -40,7 +40,6 @@ #include "content/child/quota_message_filter.h" #include "content/child/resource_dispatcher.h" #include "content/child/service_worker/service_worker_message_filter.h" -#include "content/child/socket_stream_dispatcher.h" #include "content/child/thread_safe_sender.h" #include "content/child/websocket_dispatcher.h" #include "content/common/child_process_messages.h" @@ -274,7 +273,6 @@ void ChildThread::Init(const Options& options) { base::MessageLoopProxy::current().get(), sync_message_filter_.get()); resource_dispatcher_.reset(new ResourceDispatcher(this)); - socket_stream_dispatcher_.reset(new SocketStreamDispatcher()); websocket_dispatcher_.reset(new WebSocketDispatcher); file_system_dispatcher_.reset(new FileSystemDispatcher()); @@ -464,8 +462,6 @@ bool ChildThread::OnMessageReceived(const IPC::Message& msg) { // Resource responses are sent to the resource dispatcher. if (resource_dispatcher_->OnMessageReceived(msg)) return true; - if (socket_stream_dispatcher_->OnMessageReceived(msg)) - return true; if (websocket_dispatcher_->OnMessageReceived(msg)) return true; if (file_system_dispatcher_->OnMessageReceived(msg)) diff --git a/content/child/child_thread.h b/content/child/child_thread.h index c718000..6c71c0f 100644 --- a/content/child/child_thread.h +++ b/content/child/child_thread.h @@ -46,7 +46,6 @@ class ServiceWorkerMessageFilter; class QuotaDispatcher; class QuotaMessageFilter; class ResourceDispatcher; -class SocketStreamDispatcher; class ThreadSafeSender; class WebSocketDispatcher; struct RequestInfo; @@ -106,10 +105,6 @@ class CONTENT_EXPORT ChildThread : public IPC::Listener, public IPC::Sender { return resource_dispatcher_.get(); } - SocketStreamDispatcher* socket_stream_dispatcher() const { - return socket_stream_dispatcher_.get(); - } - WebSocketDispatcher* websocket_dispatcher() const { return websocket_dispatcher_.get(); } @@ -222,9 +217,6 @@ class CONTENT_EXPORT ChildThread : public IPC::Listener, public IPC::Sender { // Handles resource loads for this process. scoped_ptr<ResourceDispatcher> resource_dispatcher_; - // Handles SocketStream for this process. - scoped_ptr<SocketStreamDispatcher> socket_stream_dispatcher_; - scoped_ptr<WebSocketDispatcher> websocket_dispatcher_; // The OnChannelError() callback was invoked - the channel is dead, don't diff --git a/content/child/socket_stream_dispatcher.cc b/content/child/socket_stream_dispatcher.cc deleted file mode 100644 index 789a31a..0000000 --- a/content/child/socket_stream_dispatcher.cc +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright (c) 2012 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 "content/child/socket_stream_dispatcher.h" - -#include <string> -#include <vector> - -#include "base/bind.h" -#include "base/id_map.h" -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "base/message_loop/message_loop.h" -#include "base/strings/string16.h" -#include "base/strings/utf_string_conversions.h" -#include "content/child/child_thread.h" -#include "content/child/web_socket_stream_handle_bridge.h" -#include "content/child/web_socket_stream_handle_delegate.h" -#include "content/child/web_socket_stream_handle_impl.h" -#include "content/common/socket_stream.h" -#include "content/common/socket_stream_handle_data.h" -#include "content/common/socket_stream_messages.h" -#include "net/base/net_errors.h" -#include "url/gurl.h" - -namespace content { - -// IPCWebSocketStreamHandleBridge is owned by each SocketStreamHandle. -// It communicates with the main browser process via SocketStreamDispatcher. -class IPCWebSocketStreamHandleBridge : public WebSocketStreamHandleBridge { - public: - IPCWebSocketStreamHandleBridge(blink::WebSocketStreamHandle* handle, - WebSocketStreamHandleDelegate* delegate) - : socket_id_(kNoSocketId), handle_(handle), delegate_(delegate) {} - - // Returns the handle having given id or NULL if there is no such handle. - static IPCWebSocketStreamHandleBridge* FromSocketId(int id); - - // WebSocketStreamHandleBridge methods. - void Connect(const GURL& url) override; - bool Send(const std::vector<char>& data) override; - void Close() override; - - // Called by SocketStreamDispatcher. - void OnConnected(int max_amount_send_allowed); - void OnSentData(int amount_sent); - void OnReceivedData(const std::vector<char>& data); - void OnClosed(); - void OnFailed(int error_code, const std::string& error_msg); - - private: - ~IPCWebSocketStreamHandleBridge() override; - - // The ID for this bridge and corresponding SocketStream instance in the - // browser process. - int socket_id_; - - blink::WebSocketStreamHandle* handle_; - WebSocketStreamHandleDelegate* delegate_; - - // Map from ID to bridge instance. - static base::LazyInstance<IDMap<IPCWebSocketStreamHandleBridge> >::Leaky - all_bridges; -}; - -// static -base::LazyInstance<IDMap<IPCWebSocketStreamHandleBridge> >::Leaky - IPCWebSocketStreamHandleBridge::all_bridges = LAZY_INSTANCE_INITIALIZER; - -/* static */ -IPCWebSocketStreamHandleBridge* IPCWebSocketStreamHandleBridge::FromSocketId( - int id) { - return all_bridges.Get().Lookup(id); -} - -IPCWebSocketStreamHandleBridge::~IPCWebSocketStreamHandleBridge() { - DVLOG(1) << "Bridge (" << this << ", socket_id_=" << socket_id_ - << ") Destructor"; - - if (socket_id_ == kNoSocketId) - return; - - ChildThread::current()->Send(new SocketStreamHostMsg_Close(socket_id_)); - socket_id_ = kNoSocketId; -} - -void IPCWebSocketStreamHandleBridge::Connect(const GURL& url) { - DVLOG(1) << "Bridge (" << this << ") Connect (url=" << url << ")"; - - DCHECK_EQ(socket_id_, kNoSocketId); - if (delegate_) - delegate_->WillOpenStream(handle_, url); - - socket_id_ = all_bridges.Get().Add(this); - DCHECK_NE(socket_id_, kNoSocketId); - int render_frame_id = MSG_ROUTING_NONE; - WebSocketStreamHandleImpl* impl = - static_cast<WebSocketStreamHandleImpl*>(handle_); - const SocketStreamHandleData* data = - static_cast<SocketStreamHandleData*>(impl->GetUserData(handle_)); - if (data) - render_frame_id = data->render_frame_id(); - AddRef(); // Released in OnClosed(). - ChildThread::current()->Send( - new SocketStreamHostMsg_Connect(render_frame_id, url, socket_id_)); - DVLOG(1) << "Bridge #" << socket_id_ << " sent IPC Connect"; - // TODO(ukai): timeout to OnConnected. -} - -bool IPCWebSocketStreamHandleBridge::Send(const std::vector<char>& data) { - DVLOG(1) << "Bridge #" << socket_id_ << " Send (" << data.size() - << " bytes)"; - - ChildThread::current()->Send( - new SocketStreamHostMsg_SendData(socket_id_, data)); - if (delegate_) - delegate_->WillSendData(handle_, &data[0], data.size()); - return true; -} - -void IPCWebSocketStreamHandleBridge::Close() { - DVLOG(1) << "Bridge #" << socket_id_ << " Close"; - - ChildThread::current()->Send(new SocketStreamHostMsg_Close(socket_id_)); -} - -void IPCWebSocketStreamHandleBridge::OnConnected(int max_pending_send_allowed) { - DVLOG(1) << "Bridge #" << socket_id_ - << " OnConnected (max_pending_send_allowed=" - << max_pending_send_allowed << ")"; - - if (delegate_) - delegate_->DidOpenStream(handle_, max_pending_send_allowed); -} - -void IPCWebSocketStreamHandleBridge::OnSentData(int amount_sent) { - DVLOG(1) << "Bridge #" << socket_id_ << " OnSentData (" << amount_sent - << " bytes)"; - - if (delegate_) - delegate_->DidSendData(handle_, amount_sent); -} - -void IPCWebSocketStreamHandleBridge::OnReceivedData( - const std::vector<char>& data) { - DVLOG(1) << "Bridge #" << socket_id_ << " OnReceiveData (" << data.size() - << " bytes)"; - if (delegate_) - delegate_->DidReceiveData(handle_, &data[0], data.size()); -} - -void IPCWebSocketStreamHandleBridge::OnClosed() { - DVLOG(1) << "Bridge #" << socket_id_ << " OnClosed"; - - if (socket_id_ != kNoSocketId) { - all_bridges.Get().Remove(socket_id_); - socket_id_ = kNoSocketId; - } - if (delegate_) - delegate_->DidClose(handle_); - delegate_ = NULL; - Release(); -} - -void IPCWebSocketStreamHandleBridge::OnFailed(int error_code, - const std::string& error_msg) { - DVLOG(1) << "Bridge #" << socket_id_ << " OnFailed (error_code=" << error_code - << ")"; - if (delegate_) - delegate_->DidFail(handle_, error_code, base::ASCIIToUTF16(error_msg)); -} - -SocketStreamDispatcher::SocketStreamDispatcher() { -} - -// static -WebSocketStreamHandleBridge* SocketStreamDispatcher::CreateBridge( - blink::WebSocketStreamHandle* handle, - WebSocketStreamHandleDelegate* delegate) { - return new IPCWebSocketStreamHandleBridge(handle, delegate); -} - -bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg) - IPC_MESSAGE_HANDLER(SocketStreamMsg_Connected, OnConnected) - IPC_MESSAGE_HANDLER(SocketStreamMsg_SentData, OnSentData) - IPC_MESSAGE_HANDLER(SocketStreamMsg_ReceivedData, OnReceivedData) - IPC_MESSAGE_HANDLER(SocketStreamMsg_Closed, OnClosed) - IPC_MESSAGE_HANDLER(SocketStreamMsg_Failed, OnFailed) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - return handled; -} - -void SocketStreamDispatcher::OnConnected(int socket_id, - int max_pending_send_allowed) { - DVLOG(1) << "SocketStreamDispatcher::OnConnected (max_pending_send_allowed=" - << max_pending_send_allowed << ") to socket_id=" << socket_id; - - IPCWebSocketStreamHandleBridge* bridge = - IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); - if (bridge) - bridge->OnConnected(max_pending_send_allowed); - else - DLOG(ERROR) << "No bridge for socket_id=" << socket_id; -} - -void SocketStreamDispatcher::OnSentData(int socket_id, int amount_sent) { - DVLOG(1) << "SocketStreamDispatcher::OnSentData (" << amount_sent - << " bytes) to socket_id=" << socket_id; - - IPCWebSocketStreamHandleBridge* bridge = - IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); - if (bridge) - bridge->OnSentData(amount_sent); - else - DLOG(ERROR) << "No bridge for socket_id=" << socket_id; -} - -void SocketStreamDispatcher::OnReceivedData( - int socket_id, const std::vector<char>& data) { - DVLOG(1) << "SocketStreamDispatcher::OnReceivedData (" << data.size() - << " bytes) to socket_id=" << socket_id; - - IPCWebSocketStreamHandleBridge* bridge = - IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); - if (bridge) - bridge->OnReceivedData(data); - else - DLOG(ERROR) << "No bridge for socket_id=" << socket_id; -} - -void SocketStreamDispatcher::OnClosed(int socket_id) { - DVLOG(1) << "SocketStreamDispatcher::OnClosed to socket_id=" << socket_id; - - IPCWebSocketStreamHandleBridge* bridge = - IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); - if (bridge) - bridge->OnClosed(); - else - DLOG(ERROR) << "No bridge for socket_id=" << socket_id; -} - -void SocketStreamDispatcher::OnFailed(int socket_id, int error_code) { - IPCWebSocketStreamHandleBridge* bridge = - IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); - if (bridge) - bridge->OnFailed(error_code, net::ErrorToString(error_code)); - else - DLOG(ERROR) << "No bridge for socket_id=" << socket_id; -} - -} // namespace content diff --git a/content/child/socket_stream_dispatcher.h b/content/child/socket_stream_dispatcher.h deleted file mode 100644 index 25877f8..0000000 --- a/content/child/socket_stream_dispatcher.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012 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. - -#ifndef CONTENT_CHILD_SOCKET_STREAM_DISPATCHER_H_ -#define CONTENT_CHILD_SOCKET_STREAM_DISPATCHER_H_ - -#include <vector> - -#include "base/basictypes.h" -#include "base/compiler_specific.h" -#include "ipc/ipc_listener.h" - -namespace blink { -class WebSocketStreamHandle; -} - -namespace content { - -class WebSocketStreamHandleBridge; -class WebSocketStreamHandleDelegate; - -// Dispatches socket stream related messages sent to a child process from the -// main browser process. There is one instance per child process. Messages -// are dispatched on the main child thread. The RenderThread class -// creates an instance of SocketStreamDispatcher and delegates calls to it. -class SocketStreamDispatcher : public IPC::Listener { - public: - SocketStreamDispatcher(); - ~SocketStreamDispatcher() override {} - - static WebSocketStreamHandleBridge* CreateBridge( - blink::WebSocketStreamHandle* handle, - WebSocketStreamHandleDelegate* delegate); - - // IPC::Listener implementation. - bool OnMessageReceived(const IPC::Message& msg) override; - - private: - void OnConnected(int socket_id, int max_amount_send_allowed); - void OnSentData(int socket_id, int amount_sent); - void OnReceivedData(int socket_id, const std::vector<char>& data); - void OnClosed(int socket_id); - void OnFailed(int socket_id, int error_code); - - DISALLOW_COPY_AND_ASSIGN(SocketStreamDispatcher); -}; - -} // namespace content - -#endif // CONTENT_CHILD_SOCKET_STREAM_DISPATCHER_H_ diff --git a/content/child/web_socket_stream_handle_bridge.h b/content/child/web_socket_stream_handle_bridge.h deleted file mode 100644 index 2655c10..0000000 --- a/content/child/web_socket_stream_handle_bridge.h +++ /dev/null @@ -1,37 +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. - -#ifndef CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_BRIDGE_H_ -#define CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_BRIDGE_H_ - -#include <vector> - -#include "base/basictypes.h" -#include "base/memory/ref_counted.h" - -class GURL; - -namespace content { - -class WebSocketStreamHandleBridge - : public base::RefCountedThreadSafe<WebSocketStreamHandleBridge> { - public: - virtual void Connect(const GURL& url) = 0; - - virtual bool Send(const std::vector<char>& data) = 0; - - virtual void Close() = 0; - - protected: - friend class base::RefCountedThreadSafe<WebSocketStreamHandleBridge>; - WebSocketStreamHandleBridge() {} - virtual ~WebSocketStreamHandleBridge() {} - - private: - DISALLOW_COPY_AND_ASSIGN(WebSocketStreamHandleBridge); -}; - -} // namespace content - -#endif // CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_BRIDGE_H_ diff --git a/content/child/web_socket_stream_handle_delegate.h b/content/child/web_socket_stream_handle_delegate.h deleted file mode 100644 index f7243637..0000000 --- a/content/child/web_socket_stream_handle_delegate.h +++ /dev/null @@ -1,44 +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. - -#ifndef CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_DELEGATE_H_ -#define CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_DELEGATE_H_ - -#include "base/strings/string16.h" - -class GURL; - -namespace blink { -class WebSocketStreamHandle; -} - -namespace content { - -class WebSocketStreamHandleDelegate { - public: - WebSocketStreamHandleDelegate() {} - - virtual void WillOpenStream(blink::WebSocketStreamHandle* handle, - const GURL& url) {} - virtual void WillSendData(blink::WebSocketStreamHandle* handle, - const char* data, int len) {} - - virtual void DidOpenStream(blink::WebSocketStreamHandle* handle, - int max_amount_send_allowed) {} - virtual void DidSendData(blink::WebSocketStreamHandle* handle, - int amount_sent) {} - virtual void DidReceiveData(blink::WebSocketStreamHandle* handle, - const char* data, int len) {} - virtual void DidClose(blink::WebSocketStreamHandle*) {} - virtual void DidFail(blink::WebSocketStreamHandle* handle, - int error_code, - const base::string16& error_msg) {} - - protected: - virtual ~WebSocketStreamHandleDelegate() {} -}; - -} // namespace content - -#endif // CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_DELEGATE_H_ diff --git a/content/child/web_socket_stream_handle_impl.cc b/content/child/web_socket_stream_handle_impl.cc deleted file mode 100644 index de66aeb..0000000 --- a/content/child/web_socket_stream_handle_impl.cc +++ /dev/null @@ -1,194 +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. - -// An implementation of WebSocketStreamHandle. - -#include "content/child/web_socket_stream_handle_impl.h" - -#include <vector> - -#include "base/compiler_specific.h" -#include "base/logging.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" -#include "base/strings/string16.h" -#include "content/child/child_thread.h" -#include "content/child/socket_stream_dispatcher.h" -#include "content/child/web_socket_stream_handle_bridge.h" -#include "content/child/web_socket_stream_handle_delegate.h" -#include "third_party/WebKit/public/platform/WebData.h" -#include "third_party/WebKit/public/platform/WebSocketStreamError.h" -#include "third_party/WebKit/public/platform/WebSocketStreamHandleClient.h" -#include "third_party/WebKit/public/platform/WebURL.h" - -using blink::WebData; -using blink::WebSocketStreamError; -using blink::WebSocketStreamHandle; -using blink::WebSocketStreamHandleClient; -using blink::WebURL; - -namespace content { - -// WebSocketStreamHandleImpl::Context ----------------------------------------- - -class WebSocketStreamHandleImpl::Context - : public base::RefCounted<Context>, - public WebSocketStreamHandleDelegate { - public: - explicit Context(WebSocketStreamHandleImpl* handle); - - WebSocketStreamHandleClient* client() const { return client_; } - void set_client(WebSocketStreamHandleClient* client) { - client_ = client; - } - - void Connect(const WebURL& url); - bool Send(const WebData& data); - void Close(); - - // Must be called before |handle_| or |client_| is deleted. - // Once detached, it never calls |client_| back. - void Detach(); - - // WebSocketStreamHandleDelegate methods: - void DidOpenStream(WebSocketStreamHandle*, int) override; - void DidSendData(WebSocketStreamHandle*, int) override; - void DidReceiveData(WebSocketStreamHandle*, const char*, int) override; - void DidClose(WebSocketStreamHandle*) override; - void DidFail(WebSocketStreamHandle*, int, const base::string16&) override; - - private: - friend class base::RefCounted<Context>; - ~Context() override { - DCHECK(!handle_); - DCHECK(!client_); - DCHECK(!bridge_.get()); - } - - WebSocketStreamHandleImpl* handle_; - WebSocketStreamHandleClient* client_; - // |bridge_| is alive from Connect to DidClose, so Context must be alive - // in the time period. - scoped_refptr<WebSocketStreamHandleBridge> bridge_; - - DISALLOW_COPY_AND_ASSIGN(Context); -}; - -WebSocketStreamHandleImpl::Context::Context(WebSocketStreamHandleImpl* handle) - : handle_(handle), - client_(NULL) { -} - -void WebSocketStreamHandleImpl::Context::Connect(const WebURL& url) { - VLOG(1) << "Connect url=" << url; - DCHECK(!bridge_.get()); - - SocketStreamDispatcher* dispatcher = - ChildThread::current()->socket_stream_dispatcher(); - bridge_ = dispatcher->CreateBridge(handle_, this); - - AddRef(); // Will be released by DidClose(). - bridge_->Connect(url); -} - -bool WebSocketStreamHandleImpl::Context::Send(const WebData& data) { - VLOG(1) << "Send data.size=" << data.size(); - DCHECK(bridge_.get()); - return bridge_->Send( - std::vector<char>(data.data(), data.data() + data.size())); -} - -void WebSocketStreamHandleImpl::Context::Close() { - VLOG(1) << "Close"; - if (bridge_.get()) - bridge_->Close(); -} - -void WebSocketStreamHandleImpl::Context::Detach() { - handle_ = NULL; - client_ = NULL; - // If Connect was called, |bridge_| is not NULL, so that this Context closes - // the |bridge_| here. Then |bridge_| will call back DidClose, and will - // be released by itself. - // Otherwise, |bridge_| is NULL. - if (bridge_.get()) - bridge_->Close(); -} - -void WebSocketStreamHandleImpl::Context::DidOpenStream( - WebSocketStreamHandle* web_handle, int max_amount_send_allowed) { - VLOG(1) << "DidOpen"; - if (client_) - client_->didOpenStream(handle_, max_amount_send_allowed); -} - -void WebSocketStreamHandleImpl::Context::DidSendData( - WebSocketStreamHandle* web_handle, int amount_sent) { - if (client_) - client_->didSendData(handle_, amount_sent); -} - -void WebSocketStreamHandleImpl::Context::DidReceiveData( - WebSocketStreamHandle* web_handle, const char* data, int size) { - if (client_) - client_->didReceiveData(handle_, WebData(data, size)); -} - -void WebSocketStreamHandleImpl::Context::DidClose( - WebSocketStreamHandle* web_handle) { - VLOG(1) << "DidClose"; - bridge_ = NULL; - WebSocketStreamHandleImpl* handle = handle_; - handle_ = NULL; - if (client_) { - WebSocketStreamHandleClient* client = client_; - client_ = NULL; - client->didClose(handle); - } - Release(); -} - -void WebSocketStreamHandleImpl::Context::DidFail( - WebSocketStreamHandle* web_handle, - int error_code, - const base::string16& error_msg) { - VLOG(1) << "DidFail"; - if (client_) { - client_->didFail( - handle_, - WebSocketStreamError(error_code, error_msg)); - } -} - -// WebSocketStreamHandleImpl ------------------------------------------------ - -WebSocketStreamHandleImpl::WebSocketStreamHandleImpl() - : context_(new Context(this)) { -} - -WebSocketStreamHandleImpl::~WebSocketStreamHandleImpl() { - // We won't receive any events from |context_|. - // |context_| is ref counted, and will be released when it received - // DidClose. - context_->Detach(); -} - -void WebSocketStreamHandleImpl::connect( - const WebURL& url, WebSocketStreamHandleClient* client) { - VLOG(1) << "connect url=" << url; - DCHECK(!context_->client()); - context_->set_client(client); - - context_->Connect(url); -} - -bool WebSocketStreamHandleImpl::send(const WebData& data) { - return context_->Send(data); -} - -void WebSocketStreamHandleImpl::close() { - context_->Close(); -} - -} // namespace content diff --git a/content/child/web_socket_stream_handle_impl.h b/content/child/web_socket_stream_handle_impl.h deleted file mode 100644 index c8c2aca..0000000 --- a/content/child/web_socket_stream_handle_impl.h +++ /dev/null @@ -1,35 +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. - -#ifndef CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_IMPL_H_ -#define CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_IMPL_H_ - -#include "base/memory/ref_counted.h" -#include "base/supports_user_data.h" -#include "third_party/WebKit/public/platform/WebSocketStreamHandle.h" - -namespace content { - -class WebSocketStreamHandleImpl : public base::SupportsUserData, - public blink::WebSocketStreamHandle { - public: - WebSocketStreamHandleImpl(); - virtual ~WebSocketStreamHandleImpl(); - - // WebSocketStreamHandle methods: - virtual void connect(const blink::WebURL& url, - blink::WebSocketStreamHandleClient* client); - virtual bool send(const blink::WebData& data); - virtual void close(); - - private: - class Context; - scoped_refptr<Context> context_; - - DISALLOW_COPY_AND_ASSIGN(WebSocketStreamHandleImpl); -}; - -} // namespace content - -#endif // CONTENT_CHILD_WEB_SOCKET_STREAM_HANDLE_IMPL_H_ |