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

Unified Diff: content/browser/web_contents/aura/overscroll_navigation_overlay.cc

Issue 575203002: Use entry URLs instead of entry IDs to determine when to dismiss the overscroll overlay. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: "Check entry's URL in DoesEntryMatchURL for the sake of uni tests. Also fixing a nit. Created 6 years, 3 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
Index: content/browser/web_contents/aura/overscroll_navigation_overlay.cc
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
index eeb9d49f40303cb45e53e4c60984eb59d09627b1..8f7c14ec7044602ca35db961f04ec59ebd65ccac 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
@@ -21,6 +21,24 @@
#include "ui/gfx/image/image_skia.h"
namespace content {
+namespace {
+
+// Returns true if the entry's URL or any of the URLs in entry's redirect chain
+// match |url|.
+bool DoesEntryMatchURL(NavigationEntry* entry, const GURL& url) {
+ if (entry->GetURL() == url)
+ return true;
+ const std::vector<GURL>& redirect_chain = entry->GetRedirectChain();
+ for (std::vector<GURL>::const_iterator it = redirect_chain.begin();
+ it != redirect_chain.end();
+ it++) {
+ if (*it == url)
+ return true;
+ }
+ return false;
+}
+
+} // namespace
// A LayerDelegate that paints an image for the layer.
class ImageLayerDelegate : public ui::LayerDelegate {
@@ -119,7 +137,6 @@ OverscrollNavigationOverlay::OverscrollNavigationOverlay(
image_delegate_(NULL),
loading_complete_(false),
received_paint_update_(false),
- pending_entry_id_(0),
slide_direction_(SLIDE_UNKNOWN) {
}
@@ -130,7 +147,6 @@ void OverscrollNavigationOverlay::StartObserving() {
loading_complete_ = false;
received_paint_update_ = false;
overlay_dismiss_layer_.reset();
- pending_entry_id_ = 0;
Observe(web_contents_);
// Make sure the overlay window is on top.
@@ -140,10 +156,10 @@ void OverscrollNavigationOverlay::StartObserving() {
// Assumes the navigation has been initiated.
NavigationEntry* pending_entry =
web_contents_->GetController().GetPendingEntry();
- // Save id of the pending entry to identify when it loads and paints later.
+ // Save url of the pending entry to identify when it loads and paints later.
// Under some circumstances navigation can leave a null pending entry -
// see comments in NavigationControllerImpl::NavigateToPendingEntry().
- pending_entry_id_ = pending_entry ? pending_entry->GetUniqueID() : 0;
+ pending_entry_url_ = pending_entry ? pending_entry->GetURL() : GURL();
}
void OverscrollNavigationOverlay::SetOverlayWindow(
@@ -282,23 +298,21 @@ void OverscrollNavigationOverlay::OnWindowSliderDestroyed() {
}
void OverscrollNavigationOverlay::DidFirstVisuallyNonEmptyPaint() {
- int visible_entry_id =
- web_contents_->GetController().GetVisibleEntry()->GetUniqueID();
- if (visible_entry_id == pending_entry_id_ || !pending_entry_id_) {
+ NavigationEntry* visible_entry =
+ web_contents_->GetController().GetVisibleEntry();
+ if (pending_entry_url_.is_empty() ||
+ DoesEntryMatchURL(visible_entry, pending_entry_url_)) {
received_paint_update_ = true;
StopObservingIfDone();
}
}
void OverscrollNavigationOverlay::DidStopLoading(RenderViewHost* host) {
- // Use the last committed entry rather than the active one, in case a
- // pending entry has been created.
- int committed_entry_id =
- web_contents_->GetController().GetLastCommittedEntry()->GetUniqueID();
- if (committed_entry_id == pending_entry_id_ || !pending_entry_id_) {
- loading_complete_ = true;
- StopObservingIfDone();
- }
+ // Don't compare URLs in this case - it's possible they won't match if
+ // a gesture-nav initiated navigation was interrupted by some other in-site
+ // navigation ((e.g., from a script, or from a bookmark).
+ loading_complete_ = true;
+ StopObservingIfDone();
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698