| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 16837b999eba5b00df72bfdb3b9f3f2e62772dfc..8236194c9b0447989e4a42e07293a259302e6ee1 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -1451,6 +1451,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",
|
| @@ -2736,6 +2740,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()) {
|
| + 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)
|
| @@ -2819,6 +2834,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() {
|
| @@ -3714,6 +3730,31 @@ void RenderViewImpl::willOpenSocketStream(
|
| SocketStreamHandleData::AddToHandle(handle, routing_id_);
|
| }
|
|
|
| +WebKit::WebString RenderViewImpl::userAgentOverride(
|
| + WebKit::WebFrame* frame,
|
| + const WebKit::WebURL& url) {
|
| + if (!webview() || !webview()->mainFrame() ||
|
| + renderer_preferences_.user_agent_override.empty()) {
|
| + return WebKit::WebString();
|
| + }
|
| +
|
| + // If we're in the middle of committing a load, the data source we need
|
| + // will still be provisional.
|
| + WebFrame* main_frame = webview()->mainFrame();
|
| + WebDataSource* data_source = NULL;
|
| + 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);
|
| + else
|
| + return WebKit::WebString();
|
| +}
|
| +
|
| // WebKit::WebPageSerializerClient implementation ------------------------------
|
|
|
| void RenderViewImpl::didSerializeDataForFrame(
|
|
|