Chromium Code Reviews| 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 cce4485b3d4d67801e5037ee042d88fd5aaaaa41..c7bc8c8132cf25ad392936880ddd2fccf61ab12c 100644 |
| --- a/content/browser/renderer_host/websocket_host.cc |
| +++ b/content/browser/renderer_host/websocket_host.cc |
| @@ -25,8 +25,10 @@ |
| #include "content/browser/ssl/ssl_manager.h" |
| #include "content/common/websocket_messages.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/devtools_agent_host.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/storage_partition.h" |
| +#include "content/public/browser/web_contents.h" |
| #include "ipc/ipc_message_macros.h" |
| #include "net/base/net_errors.h" |
| #include "net/http/http_request_headers.h" |
| @@ -424,13 +426,34 @@ void WebSocketHost::AddChannel( |
| const std::vector<std::string>& requested_protocols, |
| const url::Origin& origin, |
| int render_frame_id) { |
| + |
| + DCHECK(!channel_); |
| + |
| + net::HttpRequestHeaders additional_headers; |
| + RenderFrameHost* frame_host = RenderFrameHost::FromID( |
| + dispatcher_->render_process_id(), render_frame_id); |
| + if (frame_host) { |
| + WebContents* tab = WebContents::FromRenderFrameHost(frame_host); |
| + DCHECK(tab); |
| + |
| + if (DevToolsAgentHost::HasFor(tab)) { |
| + scoped_refptr<DevToolsAgentHost> agent = |
| + DevToolsAgentHost::GetOrCreateFor(tab); |
| + DCHECK(agent); |
| + |
| + std::string user_agent = agent->GetUserAgentOverride(); |
|
dgozman
2016/05/24 19:02:30
I'd reverse this dependency, reaching from Network
|
| + if (user_agent.length()) |
| + additional_headers.SetHeader( |
| + net::HttpRequestHeaders::kUserAgent, user_agent.c_str()); |
| + } |
| + } |
| + |
| DVLOG(3) << "WebSocketHost::AddChannel" |
| << " routing_id=" << routing_id_ << " socket_url=\"" << socket_url |
| << "\" requested_protocols=\"" |
| << base::JoinString(requested_protocols, ", ") << "\" origin=\"" |
| - << origin << "\""; |
| - |
| - DCHECK(!channel_); |
| + << origin << "\" additional_headers=\"" |
| + << additional_headers.ToString() << "\""; |
| std::unique_ptr<net::WebSocketEventInterface> event_interface( |
| new WebSocketEventHandler(dispatcher_, this, routing_id_, |
| @@ -450,8 +473,9 @@ void WebSocketHost::AddChannel( |
| pending_flow_control_quota_)); |
| pending_flow_control_quota_ = 0; |
| } |
| - |
| - channel_->SendAddChannelRequest(socket_url, requested_protocols, origin); |
| + channel_->SendAddChannelRequest( |
| + socket_url, requested_protocols, origin, |
| + additional_headers.ToString()); |
| // |this| may have been deleted here. |
| } |