Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Unified Diff: ppapi/proxy/ppb_flash_tcp_socket_proxy.cc

Issue 7535007: Implement PPB_Flash_TCPSocket.InitiateSSL. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: . Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« ppapi/proxy/ppapi_messages.h ('K') | « ppapi/proxy/ppb_flash_tcp_socket_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
diff --git a/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc b/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
index 6a6ab50e9411898b93633fcda7bd5468f023aeac..97406e3c913285348839c556425f000082d0e387 100644
--- a/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
+++ b/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
@@ -89,6 +89,7 @@ class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
void OnConnectCompleted(bool succeeded,
const PP_Flash_NetAddress& local_addr,
const PP_Flash_NetAddress& remote_addr);
+ void OnInitiateSSLCompleted(bool succeeded);
wtc 2011/08/09 21:21:29 I suggest that you change "InitiateSSL" to "SSLCon
yzshen1 2011/08/09 23:45:29 [I am open to making the change, just to make sure
void OnReadCompleted(bool succeeded, const std::string& data);
void OnWriteCompleted(bool succeeded, int32_t bytes_written);
@@ -97,10 +98,17 @@ class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
// Before a connection is successfully established (including a connect
// request is pending or a previous connect request failed).
BEFORE_CONNECT,
+ // A connection has been successfully established (including a request of
+ // initiating SSL is pending).
CONNECTED,
+ // An SSL connection has been successfully established.
+ SSL_CONNECTED,
+ // The connection has been ended.
DISCONNECTED
};
+ bool IsConnected() const;
+
// Backend for both Connect() and ConnectWithNetAddress(). To keep things
// generic, the message is passed in (on error, it's deleted).
int32_t ConnectWithMessage(IPC::Message* msg,
@@ -112,6 +120,7 @@ class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
ConnectionState connection_state_;
PP_CompletionCallback connect_callback_;
+ PP_CompletionCallback initiate_ssl_callback_;
PP_CompletionCallback read_callback_;
PP_CompletionCallback write_callback_;
@@ -129,6 +138,7 @@ FlashTCPSocket::FlashTCPSocket(const HostResource& resource, uint32 socket_id)
socket_id_(socket_id),
connection_state_(BEFORE_CONNECT),
connect_callback_(PP_BlockUntilComplete()),
+ initiate_ssl_callback_(PP_BlockUntilComplete()),
read_callback_(PP_BlockUntilComplete()),
write_callback_(PP_BlockUntilComplete()),
read_buffer_(NULL),
@@ -178,7 +188,7 @@ int32_t FlashTCPSocket::ConnectWithNetAddress(
}
PP_Bool FlashTCPSocket::GetLocalAddress(PP_Flash_NetAddress* local_addr) {
- if (connection_state_ != CONNECTED || !local_addr)
+ if (!IsConnected() || !local_addr)
return PP_FALSE;
*local_addr = local_addr_;
@@ -186,7 +196,7 @@ PP_Bool FlashTCPSocket::GetLocalAddress(PP_Flash_NetAddress* local_addr) {
}
PP_Bool FlashTCPSocket::GetRemoteAddress(PP_Flash_NetAddress* remote_addr) {
- if (connection_state_ != CONNECTED || !remote_addr)
+ if (!IsConnected() || !remote_addr)
return PP_FALSE;
*remote_addr = remote_addr_;
@@ -195,8 +205,22 @@ PP_Bool FlashTCPSocket::GetRemoteAddress(PP_Flash_NetAddress* remote_addr) {
int32_t FlashTCPSocket::InitiateSSL(const char* server_name,
PP_CompletionCallback callback) {
- // TODO(yzshen): add it.
- return PP_ERROR_FAILED;
+ if (!server_name || !callback.func)
+ return PP_ERROR_BADARGUMENT;
+
+ if (connection_state_ != CONNECTED)
+ return PP_ERROR_FAILED;
+ if (initiate_ssl_callback_.func || read_callback_.func ||
+ write_callback_.func)
+ return PP_ERROR_INPROGRESS;
+
+ initiate_ssl_callback_ = callback;
+
+ // Send the request, the browser will call us back via InitiateSSLACK.
+ GetDispatcher()->SendToBrowser(
+ new PpapiHostMsg_PPBFlashTCPSocket_InitiateSSL(socket_id_,
+ std::string(server_name)));
+ return PP_OK_COMPLETIONPENDING;
}
int32_t FlashTCPSocket::Read(char* buffer,
@@ -205,9 +229,9 @@ int32_t FlashTCPSocket::Read(char* buffer,
if (!buffer || bytes_to_read <= 0 || !callback.func)
return PP_ERROR_BADARGUMENT;
- if (connection_state_ != CONNECTED)
+ if (!IsConnected())
return PP_ERROR_FAILED;
- if (read_callback_.func)
+ if (read_callback_.func || initiate_ssl_callback_.func)
return PP_ERROR_INPROGRESS;
read_buffer_ = buffer;
@@ -226,9 +250,9 @@ int32_t FlashTCPSocket::Write(const char* buffer,
if (!buffer || bytes_to_write <= 0 || !callback.func)
return PP_ERROR_BADARGUMENT;
- if (connection_state_ != CONNECTED)
+ if (!IsConnected())
return PP_ERROR_FAILED;
- if (write_callback_.func)
+ if (write_callback_.func || initiate_ssl_callback_.func)
return PP_ERROR_INPROGRESS;
if (bytes_to_write > kFlashTCPSocketMaxWriteSize)
@@ -248,7 +272,7 @@ void FlashTCPSocket::Disconnect() {
return;
connection_state_ = DISCONNECTED;
- // After removed from the mapping, this object won't receive any notfications
+ // After removed from the mapping, this object won't receive any notifications
// from the proxy.
DCHECK(g_id_to_socket->find(socket_id_) != g_id_to_socket->end());
g_id_to_socket->erase(socket_id_);
@@ -258,6 +282,7 @@ void FlashTCPSocket::Disconnect() {
socket_id_ = 0;
PostAbortAndClearIfNecessary(&connect_callback_);
+ PostAbortAndClearIfNecessary(&initiate_ssl_callback_);
PostAbortAndClearIfNecessary(&read_callback_);
PostAbortAndClearIfNecessary(&write_callback_);
read_buffer_ = NULL;
@@ -282,6 +307,21 @@ void FlashTCPSocket::OnConnectCompleted(
succeeded ? PP_OK : PP_ERROR_FAILED);
}
+void FlashTCPSocket::OnInitiateSSLCompleted(bool succeeded) {
+ if (connection_state_ != CONNECTED || !initiate_ssl_callback_.func) {
+ NOTREACHED();
+ return;
+ }
+
+ if (succeeded) {
+ connection_state_ = SSL_CONNECTED;
+ PP_RunAndClearCompletionCallback(&initiate_ssl_callback_, PP_OK);
+ } else {
+ PP_RunAndClearCompletionCallback(&initiate_ssl_callback_, PP_ERROR_FAILED);
+ Disconnect();
+ }
+}
+
void FlashTCPSocket::OnReadCompleted(bool succeeded, const std::string& data) {
if (!read_callback_.func || !read_buffer_) {
NOTREACHED();
@@ -313,6 +353,10 @@ void FlashTCPSocket::OnWriteCompleted(bool succeeded, int32_t bytes_written) {
succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED));
}
+bool FlashTCPSocket::IsConnected() const {
+ return connection_state_ == CONNECTED || connection_state_ == SSL_CONNECTED;
+}
+
int32_t FlashTCPSocket::ConnectWithMessage(IPC::Message* msg,
PP_CompletionCallback callback) {
scoped_ptr<IPC::Message> msg_deletor(msg);
@@ -384,6 +428,8 @@ bool PPB_Flash_TCPSocket_Proxy::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PPB_Flash_TCPSocket_Proxy, msg)
IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ConnectACK, OnMsgConnectACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_InitiateSSLACK,
+ OnMsgInitiateSSLACK)
IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ReadACK, OnMsgReadACK)
IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_WriteACK, OnMsgWriteACK)
IPC_MESSAGE_UNHANDLED(handled = false)
@@ -407,6 +453,20 @@ void PPB_Flash_TCPSocket_Proxy::OnMsgConnectACK(
iter->second->OnConnectCompleted(succeeded, local_addr, remote_addr);
}
+void PPB_Flash_TCPSocket_Proxy::OnMsgInitiateSSLACK(
+ uint32 /* plugin_dispatcher_id */,
+ uint32 socket_id,
+ bool succeeded) {
+ if (!g_id_to_socket) {
+ NOTREACHED();
+ return;
+ }
+ IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id);
+ if (iter == g_id_to_socket->end())
+ return;
+ iter->second->OnInitiateSSLCompleted(succeeded);
+}
+
void PPB_Flash_TCPSocket_Proxy::OnMsgReadACK(uint32 /* plugin_dispatcher_id */,
uint32 socket_id,
bool succeeded,
« ppapi/proxy/ppapi_messages.h ('K') | « ppapi/proxy/ppb_flash_tcp_socket_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698