Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 1bb2373787bc251c0914ddf7c45de945bc4fe72c..4897a3be6c95eaae83ad4497851b5b7fa42ccefc 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -493,6 +493,7 @@ RenderViewImpl::RenderViewImpl( |
int32 surface_id, |
int64 session_storage_namespace_id, |
const string16& frame_name, |
+ const std::string& user_agent_override, |
bool is_renderer_created, |
bool swapped_out, |
int32 next_page_id, |
@@ -504,6 +505,8 @@ RenderViewImpl::RenderViewImpl( |
send_content_state_immediately_(false), |
enabled_bindings_(0), |
send_preferred_size_changes_(false), |
+ user_agent_override_(user_agent_override), |
+ is_overriding_user_agent_(false), |
is_loading_(false), |
navigation_gesture_(NavigationGestureUnknown), |
opened_by_user_gesture_(true), |
@@ -712,6 +715,7 @@ RenderViewImpl* RenderViewImpl::Create( |
int32 surface_id, |
int64 session_storage_namespace_id, |
const string16& frame_name, |
+ const std::string& user_agent_override, |
bool is_renderer_created, |
bool swapped_out, |
int32 next_page_id, |
@@ -729,6 +733,7 @@ RenderViewImpl* RenderViewImpl::Create( |
surface_id, |
session_storage_namespace_id, |
frame_name, |
+ user_agent_override, |
is_renderer_created, |
swapped_out, |
next_page_id, |
@@ -853,6 +858,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind) |
IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding) |
IPC_MESSAGE_HANDLER(ViewMsg_FindReplyACK, OnFindReplyAck) |
+ IPC_MESSAGE_HANDLER(ViewMsg_SetUserAgentOverride, OnSetUserAgentOverride) |
IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) |
IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevel, OnSetZoomLevel) |
IPC_MESSAGE_HANDLER(ViewMsg_ZoomFactor, OnZoomFactor) |
@@ -967,6 +973,9 @@ void RenderViewImpl::OnNavigate(const ViewMsg_Navigate_Params& params) { |
if (is_swapped_out_) |
SetSwappedOut(false); |
+ // Track whether we're using the user agent string override. |
+ is_overriding_user_agent_ = params.is_overriding_user_agent; |
+ |
history_list_offset_ = params.current_history_list_offset; |
history_list_length_ = params.current_history_list_length; |
if (history_list_length_ >= 0) |
@@ -1399,6 +1408,12 @@ void RenderViewImpl::UpdateURL(WebFrame* frame) { |
params.post_id = ExtractPostId(item); |
} |
+ // Send the user agent override back. |
+ params.is_overriding_user_agent = is_overriding_user_agent_; |
+ |
+ // Track the URL of the original request. |
+ params.original_request_url = original_request.url(); |
+ |
// Save some histogram data so we can compute the average memory used per |
// page load of the glyphs. |
UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad", |
@@ -1599,6 +1614,7 @@ WebView* RenderViewImpl::createView( |
surface_id, |
cloned_session_storage_namespace_id, |
frame_name, |
+ user_agent_override_, |
true, |
false, |
1, |
@@ -3636,6 +3652,14 @@ void RenderViewImpl::willOpenSocketStream( |
SocketStreamHandleData::AddToHandle(handle, routing_id_); |
} |
+bool RenderViewImpl::userAgent(const WebKit::WebURL& url, |
+ WebKit::WebString* userAgent) { |
+ if (!is_overriding_user_agent_ || user_agent_override_.empty()) |
+ return false; |
+ *userAgent = WebString::fromUTF8(user_agent_override_); |
+ return true; |
+} |
+ |
// WebKit::WebPageSerializerClient implementation ------------------------------ |
void RenderViewImpl::didSerializeDataForFrame( |
@@ -4222,6 +4246,10 @@ void RenderViewImpl::OnFindReplyAck() { |
} |
} |
+void RenderViewImpl::OnSetUserAgentOverride(const std::string& override) { |
+ user_agent_override_ = override; |
+} |
+ |
void RenderViewImpl::OnZoom(content::PageZoom zoom) { |
if (!webview()) // Not sure if this can happen, but no harm in being safe. |
return; |