X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontent%2Fbrowser%2Fweb_contents%2Faura%2Foverscroll_navigation_overlay.cc;h=260668844d268615af4d52a191d9a801f029b7ed;hb=ac5c4e12d0a033d1c358a787e329f167d4ded761;hp=530028b6721af7685fab55f4293e12554d80cd74;hpb=0a7e0ff458505735434b51cfa564902cdb901fc1;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/content/browser/web_contents/aura/overscroll_navigation_overlay.cc b/src/content/browser/web_contents/aura/overscroll_navigation_overlay.cc index 530028b..2606688 100644 --- a/src/content/browser/web_contents/aura/overscroll_navigation_overlay.cc +++ b/src/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& redirect_chain = entry->GetRedirectChain(); + for (std::vector::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 { @@ -116,7 +134,6 @@ OverscrollNavigationOverlay::OverscrollNavigationOverlay( image_delegate_(NULL), loading_complete_(false), received_paint_update_(false), - pending_entry_id_(0), slide_direction_(SLIDE_UNKNOWN) { } @@ -127,7 +144,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. @@ -137,10 +153,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( @@ -279,23 +295,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