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. |
} |