Index: content/browser/web_contents/navigation_controller_impl.cc |
diff --git a/content/browser/web_contents/navigation_controller_impl.cc b/content/browser/web_contents/navigation_controller_impl.cc |
index b24eb5b1390c3071230174dcd27948bd9c4f3d93..e497f18bd1f973c56d4a041f2dc8cd1503be1ded 100644 |
--- a/content/browser/web_contents/navigation_controller_impl.cc |
+++ b/content/browser/web_contents/navigation_controller_impl.cc |
@@ -114,6 +114,14 @@ bool AreURLsInPageNavigation(const GURL& existing_url, const GURL& new_url) { |
new_url.ReplaceComponents(replacements); |
} |
+// Determines whether or not we should be carrying over a user agent override |
+// between two NavigationEntries. |
+bool ShouldKeepOverride( |
+ content::PageTransition transition, |
Charlie Reis
2012/06/19 22:47:59
Why is transition needed?
gone
2012/06/20 00:01:10
Was a leftover bit... removed.
|
+ const content::NavigationEntry* last_entry) { |
+ return last_entry && last_entry->GetIsOverridingUserAgent(); |
+} |
+ |
} // namespace |
// NavigationControllerImpl ---------------------------------------------------- |
@@ -577,14 +585,9 @@ void NavigationControllerImpl::LoadURL( |
if (content::HandleDebugURL(url, transition)) |
return; |
- // The user initiated a load, we don't need to reload anymore. |
- needs_reload_ = false; |
- |
- NavigationEntryImpl* entry = NavigationEntryImpl::FromNavigationEntry( |
- CreateNavigationEntry( |
- url, referrer, transition, false, extra_headers, browser_context_)); |
- |
- LoadEntry(entry); |
+ bool override = ShouldKeepOverride(transition, GetLastCommittedEntry()); |
+ LoadURLWithUserAgentOverride(url, referrer, transition, false, extra_headers, |
+ override); |
} |
void NavigationControllerImpl::LoadURLFromRenderer( |
@@ -592,12 +595,26 @@ void NavigationControllerImpl::LoadURLFromRenderer( |
const content::Referrer& referrer, |
content::PageTransition transition, |
const std::string& extra_headers) { |
+ bool override = ShouldKeepOverride(transition, GetLastCommittedEntry()); |
+ LoadURLWithUserAgentOverride(url, referrer, transition, true, extra_headers, |
+ override); |
+} |
+ |
+void NavigationControllerImpl::LoadURLWithUserAgentOverride( |
+ const GURL& url, |
+ const content::Referrer& referrer, |
+ content::PageTransition transition, |
+ bool is_renderer_initiated, |
+ const std::string& extra_headers, |
+ bool is_overriding_user_agent) { |
// The user initiated a load, we don't need to reload anymore. |
needs_reload_ = false; |
NavigationEntryImpl* entry = NavigationEntryImpl::FromNavigationEntry( |
CreateNavigationEntry( |
- url, referrer, transition, true, extra_headers, browser_context_)); |
+ url, referrer, transition, is_renderer_initiated, extra_headers, |
+ browser_context_)); |
+ entry->SetIsOverridingUserAgent(is_overriding_user_agent); |
LoadEntry(entry); |
} |
@@ -868,6 +885,7 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage( |
static_cast<SiteInstanceImpl*>(web_contents_->GetSiteInstance())); |
new_entry->SetHasPostData(params.is_post); |
new_entry->SetPostID(params.post_id); |
+ new_entry->SetIsOverridingUserAgent(params.is_overriding_user_agent); |
if (params.redirects.size() > 0) |
new_entry->SetOriginalRequestURL(params.redirects[0]); |