summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authortoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 15:39:34 +0000
committertoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 15:39:34 +0000
commit5fa3a0695ffbad35741ce258dc20408485ca0911 (patch)
tree2efeeb5003c3f01e21d4b473e5af86793b3d1b8e /content
parente2df9ef5dd3040914e09450d5b7f32983fd14ada (diff)
downloadchromium_src-5fa3a0695ffbad35741ce258dc20408485ca0911.zip
chromium_src-5fa3a0695ffbad35741ce258dc20408485ca0911.tar.gz
chromium_src-5fa3a0695ffbad35741ce258dc20408485ca0911.tar.bz2
Bind RenderViewImpl routing_id to SocketStreamHost
- Set RenderViewImpl's routing_id to WebSocketStresmHandleImpl via dispatchWillOpenSocketStream() - Send the id from WebSocketStreamHandleImpl to SocketStreamHost via IPC SocketStreamHostMsg_Connect This change aim that SocketStreamDispatcher uses SSLManager with routing_id to handle SSL errors. BUG=53836 TEST=none Review URL: http://codereview.chromium.org/9677031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@127964 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/renderer_host/socket_stream_dispatcher_host.cc11
-rw-r--r--content/browser/renderer_host/socket_stream_dispatcher_host.h2
-rw-r--r--content/browser/renderer_host/socket_stream_host.cc5
-rw-r--r--content/browser/renderer_host/socket_stream_host.h6
-rw-r--r--content/common/socket_stream_dispatcher.cc9
-rw-r--r--content/common/socket_stream_handle_data.cc32
-rw-r--r--content/common/socket_stream_handle_data.h43
-rw-r--r--content/common/socket_stream_messages.h5
-rw-r--r--content/content_common.gypi2
-rw-r--r--content/renderer/render_view_impl.cc8
-rw-r--r--content/renderer/render_view_impl.h7
11 files changed, 118 insertions, 12 deletions
diff --git a/content/browser/renderer_host/socket_stream_dispatcher_host.cc b/content/browser/renderer_host/socket_stream_dispatcher_host.cc
index 28952e7..a808f96 100644
--- a/content/browser/renderer_host/socket_stream_dispatcher_host.cc
+++ b/content/browser/renderer_host/socket_stream_dispatcher_host.cc
@@ -134,15 +134,20 @@ bool SocketStreamDispatcherHost::CanSetCookie(net::SocketStream* request,
}
// Message handlers called by OnMessageReceived.
-void SocketStreamDispatcherHost::OnConnect(const GURL& url, int socket_id) {
- DVLOG(1) << "SocketStreamDispatcherHost::OnConnect url=" << url
+void SocketStreamDispatcherHost::OnConnect(int render_view_id,
+ const GURL& url,
+ int socket_id) {
+ DVLOG(1) << "SocketStreamDispatcherHost::OnConnect"
+ << " render_view_id=" << render_view_id
+ << " url=" << url
<< " socket_id=" << socket_id;
DCHECK_NE(content::kNoSocketId, socket_id);
if (hosts_.Lookup(socket_id)) {
LOG(ERROR) << "socket_id=" << socket_id << " already registered.";
return;
}
- SocketStreamHost* socket_stream_host = new SocketStreamHost(this, socket_id);
+ SocketStreamHost* socket_stream_host =
+ new SocketStreamHost(this, render_view_id, socket_id);
hosts_.AddWithID(socket_stream_host, socket_id);
socket_stream_host->Connect(url, GetURLRequestContext());
DVLOG(1) << "SocketStreamDispatcherHost::OnConnect -> " << socket_id;
diff --git a/content/browser/renderer_host/socket_stream_dispatcher_host.h b/content/browser/renderer_host/socket_stream_dispatcher_host.h
index ebccfda..34d3d85 100644
--- a/content/browser/renderer_host/socket_stream_dispatcher_host.h
+++ b/content/browser/renderer_host/socket_stream_dispatcher_host.h
@@ -61,7 +61,7 @@ class SocketStreamDispatcherHost : public content::BrowserMessageFilter,
private:
// Message handlers called by OnMessageReceived.
- void OnConnect(const GURL& url, int socket_id);
+ void OnConnect(int render_view_id, const GURL& url, int socket_id);
void OnSendData(int socket_id, const std::vector<char>& data);
void OnCloseReq(int socket_id);
diff --git a/content/browser/renderer_host/socket_stream_host.cc b/content/browser/renderer_host/socket_stream_host.cc
index e5c0aa1..eea1323 100644
--- a/content/browser/renderer_host/socket_stream_host.cc
+++ b/content/browser/renderer_host/socket_stream_host.cc
@@ -22,11 +22,14 @@ class SocketStreamId : public net::SocketStream::UserData {
SocketStreamHost::SocketStreamHost(
net::SocketStream::Delegate* delegate,
+ int render_view_id,
int socket_id)
: delegate_(delegate),
+ render_view_id_(render_view_id),
socket_id_(socket_id) {
DCHECK_NE(socket_id_, content::kNoSocketId);
- VLOG(1) << "SocketStreamHost: socket_id=" << socket_id_;
+ VLOG(1) << "SocketStreamHost: render_view_id=" << render_view_id
+ << " socket_id=" << socket_id_;
}
/* static */
diff --git a/content/browser/renderer_host/socket_stream_host.h b/content/browser/renderer_host/socket_stream_host.h
index 6b08d91..760c966 100644
--- a/content/browser/renderer_host/socket_stream_host.h
+++ b/content/browser/renderer_host/socket_stream_host.h
@@ -28,12 +28,15 @@ class URLRequestContext;
// SocketStreamDispatcherHost.
class SocketStreamHost {
public:
- SocketStreamHost(net::SocketStream::Delegate* delegate, int socket_id);
+ SocketStreamHost(net::SocketStream::Delegate* delegate,
+ int render_view_id,
+ int socket_id);
~SocketStreamHost();
// Gets socket_id associated with |socket|.
static int SocketIdFromSocketStream(net::SocketStream* socket);
+ int render_view_id() const { return render_view_id_; }
int socket_id() const { return socket_id_; }
// Starts to open connection to |url|.
@@ -51,6 +54,7 @@ class SocketStreamHost {
private:
net::SocketStream::Delegate* delegate_;
+ int render_view_id_;
int socket_id_;
scoped_refptr<net::SocketStreamJob> socket_;
diff --git a/content/common/socket_stream_dispatcher.cc b/content/common/socket_stream_dispatcher.cc
index 640a15b..f573329 100644
--- a/content/common/socket_stream_dispatcher.cc
+++ b/content/common/socket_stream_dispatcher.cc
@@ -13,6 +13,7 @@
#include "base/message_loop.h"
#include "content/common/child_thread.h"
#include "content/common/socket_stream.h"
+#include "content/common/socket_stream_handle_data.h"
#include "content/common/socket_stream_messages.h"
#include "googleurl/src/gurl.h"
#include "webkit/glue/websocketstreamhandle_bridge.h"
@@ -146,8 +147,14 @@ void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) {
socket_id_ = all_bridges.Get().Add(this);
DCHECK_NE(socket_id_, content::kNoSocketId);
+ int render_view_id = MSG_ROUTING_NONE;
+ const SocketStreamHandleData* data =
+ SocketStreamHandleData::ForHandle(handle_);
+ if (data)
+ render_view_id = data->render_view_id();
AddRef(); // Released in OnClosed().
- if (child_thread_->Send(new SocketStreamHostMsg_Connect(url, socket_id_))) {
+ if (child_thread_->Send(
+ new SocketStreamHostMsg_Connect(render_view_id, url, socket_id_))) {
DVLOG(1) << "Connect socket_id=" << socket_id_;
// TODO(ukai): timeout to OnConnected.
} else {
diff --git a/content/common/socket_stream_handle_data.cc b/content/common/socket_stream_handle_data.cc
new file mode 100644
index 0000000..82c66a0
--- /dev/null
+++ b/content/common/socket_stream_handle_data.cc
@@ -0,0 +1,32 @@
+// 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/common/socket_stream_handle_data.h"
+
+#include "webkit/glue/websocketstreamhandle_impl.h"
+
+using webkit_glue::WebSocketStreamHandleImpl;
+using WebKit::WebSocketStreamHandle;
+
+// static
+void SocketStreamHandleData::AddToHandle(
+ WebSocketStreamHandle* handle, int render_view_id) {
+ if (!handle) {
+ NOTREACHED();
+ return;
+ }
+ WebSocketStreamHandleImpl* impl =
+ static_cast<WebSocketStreamHandleImpl*>(handle);
+ impl->SetUserData(handle, new SocketStreamHandleData(render_view_id));
+}
+
+// static
+const SocketStreamHandleData* SocketStreamHandleData::ForHandle(
+ WebSocketStreamHandle* handle) {
+ if (!handle)
+ return NULL;
+ WebSocketStreamHandleImpl* impl =
+ static_cast<WebSocketStreamHandleImpl*>(handle);
+ return static_cast<SocketStreamHandleData*>(impl->GetUserData(handle));
+}
diff --git a/content/common/socket_stream_handle_data.h b/content/common/socket_stream_handle_data.h
new file mode 100644
index 0000000..1c50dac
--- /dev/null
+++ b/content/common/socket_stream_handle_data.h
@@ -0,0 +1,43 @@
+// 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_RENDERER_SOCKET_STREAM_HANDLE_DATA_H_
+#define CONTENT_RENDERER_SOCKET_STREAM_HANDLE_DATA_H_
+#pragma once
+
+#include "base/supports_user_data.h"
+#include "content_export.h"
+
+namespace WebKit {
+class WebSocketStreamHandle;
+}
+
+// User data stored in each WebSocketStreamHandleImpl.
+class SocketStreamHandleData : public base::SupportsUserData::Data {
+ public:
+ virtual ~SocketStreamHandleData() {}
+
+ int render_view_id() const { return render_view_id_; }
+
+ // Creates SocketStreamHandleData object with |render_view_id| and store it
+ // to |handle|.
+ static void AddToHandle(
+ WebKit::WebSocketStreamHandle* handle, int render_view_id);
+
+ // Retrieves the stored user data from WebKit::WebSocketStreamHandle object.
+ // |handle| must actually be a WebSocketStreamHandleImpl object.
+ CONTENT_EXPORT static const SocketStreamHandleData* ForHandle(
+ WebKit::WebSocketStreamHandle* handle);
+
+ private:
+ explicit SocketStreamHandleData(int render_view_id)
+ : render_view_id_(render_view_id) {
+ }
+
+ int render_view_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(SocketStreamHandleData);
+};
+
+#endif // CONTENT_RENDERER_SOCKET_STREAM_HANDLE_DATA_H_
diff --git a/content/common/socket_stream_messages.h b/content/common/socket_stream_messages.h
index bb599c4..020796d 100644
--- a/content/common/socket_stream_messages.h
+++ b/content/common/socket_stream_messages.h
@@ -21,7 +21,10 @@
// The browser starts connecting asynchronously.
// Once Socket Stream connection is established, the browser will send
// SocketStreamMsg_Connected back.
-IPC_MESSAGE_CONTROL2(SocketStreamHostMsg_Connect,
+// |render_view_id| must be the routing id of RenderViewImpl to which the
+// Socket Stream belongs.
+IPC_MESSAGE_CONTROL3(SocketStreamHostMsg_Connect,
+ int /* render_view_id */,
GURL /* socket_url */,
int /* socket_id */)
diff --git a/content/content_common.gypi b/content/content_common.gypi
index 7196a6f..2c9682e 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -293,6 +293,8 @@
'common/socket_stream.h',
'common/socket_stream_dispatcher.cc',
'common/socket_stream_dispatcher.h',
+ 'common/socket_stream_handle_data.cc',
+ 'common/socket_stream_handle_data.h',
'common/socket_stream_messages.h',
'common/speech_recognition_messages.h',
'common/ssl_status_serialization.cc',
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index c14e518..18c5238 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -38,6 +38,7 @@
#include "content/common/pepper_plugin_registry.h"
#include "content/common/quota_dispatcher.h"
#include "content/common/request_extra_data.h"
+#include "content/common/socket_stream_handle_data.h"
#include "content/common/view_messages.h"
#include "content/public/common/bindings_policy.h"
#include "content/public/common/content_client.h"
@@ -142,6 +143,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebPoint.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSocketStreamHandle.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLError.h"
@@ -244,6 +246,7 @@ using WebKit::WebSecurityPolicy;
using WebKit::WebSettings;
using WebKit::WebSharedWorker;
using WebKit::WebSize;
+using WebKit::WebSocketStreamHandle;
using WebKit::WebStorageNamespace;
using WebKit::WebStorageQuotaCallbacks;
using WebKit::WebStorageQuotaError;
@@ -3398,6 +3401,11 @@ void RenderViewImpl::dispatchIntent(
routing_id_, intent_data, id));
}
+void RenderViewImpl::willOpenSocketStream(
+ WebSocketStreamHandle* handle) {
+ SocketStreamHandleData::AddToHandle(handle, routing_id_);
+}
+
// WebKit::WebPageSerializerClient implementation ------------------------------
void RenderViewImpl::didSerializeDataForFrame(
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index e009fa2..7706238 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -126,6 +126,7 @@ class WebMediaPlayerClient;
class WebMouseEvent;
class WebPeerConnectionHandler;
class WebPeerConnectionHandlerClient;
+class WebSocketStreamHandle;
class WebSpeechInputController;
class WebSpeechInputListener;
class WebStorageNamespace;
@@ -552,29 +553,27 @@ class RenderViewImpl : public RenderWidget,
virtual void reportFindInPageSelection(int request_id,
int active_match_ordinal,
const WebKit::WebRect& sel);
-
virtual void openFileSystem(WebKit::WebFrame* frame,
WebKit::WebFileSystem::Type type,
long long size,
bool create,
WebKit::WebFileSystemCallbacks* callbacks);
-
virtual void queryStorageUsageAndQuota(
WebKit::WebFrame* frame,
WebKit::WebStorageQuotaType type,
WebKit::WebStorageQuotaCallbacks* callbacks);
-
virtual void requestStorageQuota(
WebKit::WebFrame* frame,
WebKit::WebStorageQuotaType type,
unsigned long long requested_size,
WebKit::WebStorageQuotaCallbacks* callbacks);
-
virtual void registerIntentService(
WebKit::WebFrame* frame,
const WebKit::WebIntentServiceInfo& service);
virtual void dispatchIntent(WebKit::WebFrame* frame,
const WebKit::WebIntentRequest& intentRequest);
+ virtual void willOpenSocketStream(
+ WebKit::WebSocketStreamHandle* handle);
// WebKit::WebPageSerializerClient implementation ----------------------------