Index: content/browser/renderer_host/websocket_host.cc |
diff --git a/content/browser/renderer_host/websocket_host.cc b/content/browser/renderer_host/websocket_host.cc |
index 70c846e39810248f7ac1974cdeb04a1f5efb9a9d..fbbd67fe90cc26a5aacff6bc06f2387a5f592e0b 100644 |
--- a/content/browser/renderer_host/websocket_host.cc |
+++ b/content/browser/renderer_host/websocket_host.cc |
@@ -14,6 +14,7 @@ |
#include "content/browser/ssl/ssl_error_handler.h" |
#include "content/browser/ssl/ssl_manager.h" |
#include "content/common/websocket_messages.h" |
+#include "content/public/browser/render_frame_host.h" |
#include "ipc/ipc_message_macros.h" |
#include "net/http/http_request_headers.h" |
#include "net/http/http_response_headers.h" |
@@ -83,6 +84,17 @@ ChannelState StateCast(WebSocketDispatcherHost::WebSocketHostState host_state) { |
return static_cast<ChannelState>(host_state); |
} |
+WebContents* GetWebContentsFromRFHID(int render_process_id, |
+ int render_frame_id) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ RenderFrameHost* render_frame_host = |
+ RenderFrameHost::FromID(render_process_id, render_frame_id); |
+ if (!render_frame_host) |
+ return nullptr; |
+ |
+ return WebContents::FromRenderFrameHost(render_frame_host); |
+} |
+ |
// Implementation of net::WebSocketEventInterface. Receives events from our |
// WebSocketChannel object. Each event is translated to an IPC and sent to the |
// renderer or child process via WebSocketDispatcherHost. |
@@ -274,13 +286,11 @@ ChannelState WebSocketEventHandler::OnSSLCertificateError( |
<< " cert_status=" << ssl_info.cert_status << " fatal=" << fatal; |
ssl_error_handler_delegate_.reset( |
new SSLErrorHandlerDelegate(callbacks.Pass())); |
- SSLManager::OnSSLCertificateError(ssl_error_handler_delegate_->GetWeakPtr(), |
- RESOURCE_TYPE_SUB_RESOURCE, |
- url, |
- dispatcher_->render_process_id(), |
- render_frame_id_, |
- ssl_info, |
- fatal); |
+ SSLManager::OnSSLCertificateError( |
+ ssl_error_handler_delegate_->GetWeakPtr(), RESOURCE_TYPE_SUB_RESOURCE, |
+ url, base::Bind(&GetWebContentsFromRFHID, |
+ dispatcher_->render_process_id(), render_frame_id_), |
+ ssl_info, fatal); |
// The above method is always asynchronous. |
return WebSocketEventInterface::CHANNEL_ALIVE; |
} |