diff options
author | toyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-21 15:39:34 +0000 |
---|---|---|
committer | toyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-21 15:39:34 +0000 |
commit | 5fa3a0695ffbad35741ce258dc20408485ca0911 (patch) | |
tree | 2efeeb5003c3f01e21d4b473e5af86793b3d1b8e /content | |
parent | e2df9ef5dd3040914e09450d5b7f32983fd14ada (diff) | |
download | chromium_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.cc | 11 | ||||
-rw-r--r-- | content/browser/renderer_host/socket_stream_dispatcher_host.h | 2 | ||||
-rw-r--r-- | content/browser/renderer_host/socket_stream_host.cc | 5 | ||||
-rw-r--r-- | content/browser/renderer_host/socket_stream_host.h | 6 | ||||
-rw-r--r-- | content/common/socket_stream_dispatcher.cc | 9 | ||||
-rw-r--r-- | content/common/socket_stream_handle_data.cc | 32 | ||||
-rw-r--r-- | content/common/socket_stream_handle_data.h | 43 | ||||
-rw-r--r-- | content/common/socket_stream_messages.h | 5 | ||||
-rw-r--r-- | content/content_common.gypi | 2 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 8 | ||||
-rw-r--r-- | content/renderer/render_view_impl.h | 7 |
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 ---------------------------- |