Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Unified Diff: chrome/browser/tab_contents/web_contents.cc

Issue 56020: Reverting 12673. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/tab_contents/web_contents.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/tab_contents/web_contents.cc
===================================================================
--- chrome/browser/tab_contents/web_contents.cc (revision 12684)
+++ chrome/browser/tab_contents/web_contents.cc (working copy)
@@ -363,30 +363,16 @@
}
bool WebContents::ShouldDisplayURL() {
- if (controller()->GetPendingEntry()) {
- // When there is a pending entry, that should determine whether the URL is
- // displayed (including getting the default behavior if the DOMUI doesn't
- // specify).
- if (render_manager_.pending_dom_ui())
- return !render_manager_.pending_dom_ui()->should_hide_url();
- return true;
- }
-
- if (render_manager_.dom_ui())
- return !render_manager_.dom_ui()->should_hide_url();
+ DOMUI* dom_ui = GetDOMUIForCurrentState();
+ if (dom_ui)
+ return !dom_ui->should_hide_url();
return true;
}
bool WebContents::ShouldDisplayFavIcon() {
- if (controller()->GetPendingEntry()) {
- // See ShouldDisplayURL.
- if (render_manager_.pending_dom_ui())
- return !render_manager_.pending_dom_ui()->hide_favicon();
- return true;
- }
-
- if (render_manager_.dom_ui())
- return !render_manager_.dom_ui()->hide_favicon();
+ DOMUI* dom_ui = GetDOMUIForCurrentState();
+ if (dom_ui)
+ return !dom_ui->hide_favicon();
return true;
}
@@ -532,21 +518,24 @@
}
bool WebContents::IsBookmarkBarAlwaysVisible() {
- // We want the bookmarks bar to go with the committed entry. This way, when
- // you're on the new tab page and navigate, the bookmarks bar doesn't
- // disappear until the next load commits (the same time the page changes).
- if (!controller()->GetLastCommittedEntry()) {
- // However, when there is no committed entry (the first load of the tab),
- // then we fall back on the pending entry. This means that the bookmarks bar
- // will be visible before the new tab page load commits.
- if (render_manager_.pending_dom_ui())
- return render_manager_.pending_dom_ui()->force_bookmark_bar_visible();
- return false;
+ // See GetDOMUIForCurrentState() comment for more info. This case is very
+ // similar, but for non-first loads, we want to use the committed entry. This
+ // is so the bookmarks bar disappears at the same time the page does.
+ if (controller()->GetLastCommittedEntry()) {
+ // Not the first load, always use the committed DOM UI.
+ if (render_manager_.dom_ui())
+ return render_manager_.dom_ui()->force_bookmark_bar_visible();
+ return false; // Default.
}
+ // When it's the first load, we know either the pending one or the committed
+ // one will have the DOM UI in it (see GetDOMUIForCurrentState), and only one
+ // of them will be valid, so we can just check both.
+ if (render_manager_.pending_dom_ui())
+ return render_manager_.pending_dom_ui()->force_bookmark_bar_visible();
if (render_manager_.dom_ui())
return render_manager_.dom_ui()->force_bookmark_bar_visible();
- return false;
+ return false; // Default.
}
void WebContents::SetDownloadShelfVisible(bool visible) {
@@ -563,12 +552,9 @@
}
bool WebContents::FocusLocationBarByDefault() {
- // Allow the DOM UI to override the default. We use the pending DOM UI since
- // that's what the user "just did" so should control what happens after they
- // did it. Using the committed one would mean when they navigate from a DOMUI
- // to a regular page, the location bar would be focused.
- if (render_manager_.pending_dom_ui())
- return render_manager_.pending_dom_ui()->focus_location_bar_by_default();
+ DOMUI* dom_ui = GetDOMUIForCurrentState();
+ if (dom_ui)
+ return dom_ui->focus_location_bar_by_default();
return false;
}
@@ -2018,3 +2004,43 @@
new_url->set_safe_for_autoreplace(true);
url_model->Add(new_url);
}
+
+DOMUI* WebContents::GetDOMUIForCurrentState() {
+ // When there is a pending navigation entry, we want to use the pending DOMUI
+ // that goes along with it to control the basic flags. For example, we want to
+ // show the pending URL in the URL bar, so we want the display_url flag to
+ // be from the pending entry.
+ //
+ // The confusion comes because there are multiple possibilities for the
+ // initial load in a tab as a side effect of the way the RenderViewHostManager
+ // works.
+ //
+ // - For the very first tab the load looks "normal". The new tab DOM UI is
+ // the pending one, and we want it to apply here.
+ //
+ // - For subsequent new tabs, they'll get a new SiteInstance which will then
+ // get switched to the one previously associated with the new tab pages.
+ // This switching will cause the manager to commit the RVH/DOMUI. So we'll
+ // have a committed DOM UI in this case.
+ //
+ // This condition handles all of these cases:
+ //
+ // - First load in first tab: no committed nav entry + pending nav entry +
+ // pending dom ui:
+ // -> Use pending DOM UI if any.
+ //
+ // - First load in second tab: no committed nav entry + pending nav entry +
+ // no pending DOM UI:
+ // -> Use the committed DOM UI if any.
+ //
+ // - Second navigation in any tab: committed nav entry + pending nav entry:
+ // -> Use pending DOM UI if any.
+ //
+ // - Normal state with no load: committed nav entry + no pending nav entry:
+ // -> Use committed DOM UI.
+ if (controller()->GetPendingEntry() &&
+ (controller()->GetLastCommittedEntry() ||
+ render_manager_.pending_dom_ui()))
+ return render_manager_.pending_dom_ui();
+ return render_manager_.dom_ui();
+}
« no previous file with comments | « chrome/browser/tab_contents/web_contents.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698