Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 2b6e5b18f1af5c242a4b3a5671f84bfc44edf5d3..9e1f01cc6d909fdfd23b600e90770531d05710e4 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1448,6 +1448,10 @@ void RenderViewImpl::UpdateURL(WebFrame* frame) { |
params.post_id = ExtractPostId(item); |
} |
+ // Send the user agent override back. |
+ params.is_overriding_user_agent = |
+ document_state->is_overriding_user_agent(); |
+ |
// Save some histogram data so we can compute the average memory used per |
// page load of the glyphs. |
UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad", |
@@ -2740,6 +2744,17 @@ void RenderViewImpl::didCreateDataSource(WebFrame* frame, WebDataSource* ds) { |
PopulateDocumentStateFromPending(document_state); |
} |
+ // Carry over the user agent override flag, if it exists. |
+ if (content_initiated && webview() && webview()->mainFrame() && |
+ webview()->mainFrame()->dataSource()) { |
darin (slow to review)
2012/06/19 18:36:34
why do you need to null-check mainFrame()->dataSou
gone
2012/06/19 21:44:22
Oddly, yes. At least in my Android build, I get i
|
+ DocumentState* old_document_state = |
+ DocumentState::FromDataSource(webview()->mainFrame()->dataSource()); |
+ if (old_document_state) { |
+ document_state->set_is_overriding_user_agent( |
+ old_document_state->is_overriding_user_agent()); |
+ } |
+ } |
+ |
// The rest of RenderView assumes that a WebDataSource will always have a |
// non-null NavigationState. |
if (content_initiated) |
@@ -2823,6 +2838,7 @@ void RenderViewImpl::PopulateDocumentStateFromPending( |
document_state->set_load_type(DocumentState::NORMAL_LOAD); |
document_state->set_referrer_policy(params.referrer.policy); |
+ document_state->set_is_overriding_user_agent(params.is_overriding_user_agent); |
} |
NavigationState* RenderViewImpl::CreateNavigationStateFromPending() { |
@@ -3699,6 +3715,32 @@ void RenderViewImpl::willOpenSocketStream( |
SocketStreamHandleData::AddToHandle(handle, routing_id_); |
} |
+WebKit::WebString RenderViewImpl::userAgentOverride( |
+ WebKit::WebFrame* frame, |
+ const WebKit::WebURL& url) { |
+ if (webview() && webview()->mainFrame() && |
darin (slow to review)
2012/06/19 18:36:34
nit: return early to minimize indentation for the
gone
2012/06/19 21:44:22
Done.
|
+ !renderer_preferences_.user_agent_override.empty()) { |
+ WebFrame* main_frame = webview()->mainFrame(); |
+ WebDataSource* data_source = NULL; |
+ |
+ // If we're in the middle of committing a load, the data source we need |
+ // will still be provisional. |
+ if (main_frame->provisionalDataSource()) { |
+ data_source = main_frame->provisionalDataSource(); |
+ } else { |
+ data_source = main_frame->dataSource(); |
+ } |
+ |
+ DocumentState* document_state = |
+ data_source ? DocumentState::FromDataSource(data_source) : NULL; |
+ if (document_state && document_state->is_overriding_user_agent()) { |
+ return WebString::fromUTF8(renderer_preferences_.user_agent_override); |
+ } |
+ } |
+ |
+ return WebKit::WebString(); |
+} |
+ |
// WebKit::WebPageSerializerClient implementation ------------------------------ |
void RenderViewImpl::didSerializeDataForFrame( |