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..e0efc202978bb3178348448fffb621ac6524bff8 100644 |
--- a/content/browser/renderer_host/websocket_host.cc |
+++ b/content/browser/renderer_host/websocket_host.cc |
@@ -399,22 +399,26 @@ void WebSocketHost::OnAddChannelRequest( |
const GURL& socket_url, |
const std::vector<std::string>& requested_protocols, |
const url::Origin& origin, |
+ const std::string& user_agent_override, |
int render_frame_id) { |
DVLOG(3) << "WebSocketHost::OnAddChannelRequest" |
<< " routing_id=" << routing_id_ << " socket_url=\"" << socket_url |
<< "\" requested_protocols=\"" |
<< base::JoinString(requested_protocols, ", ") << "\" origin=\"" |
- << origin << "\""; |
+ << origin << "\" user_agent_override=\"" << user_agent_override |
+ << "\""; |
DCHECK(!channel_); |
if (delay_ > base::TimeDelta()) { |
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
FROM_HERE, |
base::Bind(&WebSocketHost::AddChannel, weak_ptr_factory_.GetWeakPtr(), |
- socket_url, requested_protocols, origin, render_frame_id), |
+ socket_url, requested_protocols, origin, |
+ user_agent_override, render_frame_id), |
delay_); |
} else { |
- AddChannel(socket_url, requested_protocols, origin, render_frame_id); |
+ AddChannel(socket_url, requested_protocols, origin, |
+ user_agent_override, render_frame_id); |
} |
// |this| may have been deleted here. |
} |
@@ -423,12 +427,14 @@ void WebSocketHost::AddChannel( |
const GURL& socket_url, |
const std::vector<std::string>& requested_protocols, |
const url::Origin& origin, |
+ const std::string& user_agent_override, |
int render_frame_id) { |
DVLOG(3) << "WebSocketHost::AddChannel" |
<< " routing_id=" << routing_id_ << " socket_url=\"" << socket_url |
<< "\" requested_protocols=\"" |
<< base::JoinString(requested_protocols, ", ") << "\" origin=\"" |
- << origin << "\""; |
+ << origin << "\" user_agent_override=\"" |
+ << user_agent_override << "\""; |
DCHECK(!channel_); |
@@ -451,7 +457,20 @@ void WebSocketHost::AddChannel( |
pending_flow_control_quota_ = 0; |
} |
- channel_->SendAddChannelRequest(socket_url, requested_protocols, origin); |
+ std::string additional_headers; |
+ if (user_agent_override != "") { |
+ if (!net::HttpUtil::IsValidHeaderValue(user_agent_override)) { |
+ bad_message::ReceivedBadMessage( |
+ dispatcher_, bad_message::WSH_INVALID_HEADER_VALUE); |
+ return; |
+ } |
+ additional_headers = base::StringPrintf("%s:%s", |
+ net::HttpRequestHeaders::kUserAgent, |
+ user_agent_override.c_str()); |
+ } |
+ channel_->SendAddChannelRequest( |
+ socket_url, requested_protocols, origin, |
+ additional_headers); |
// |this| may have been deleted here. |
} |