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

Side by Side Diff: content/browser/web_contents/aura/overscroll_navigation_overlay.cc

Issue 2102283002: Gesture Nav: Protect against the case when navigation completes as soon as it is requested. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/web_contents/aura/overscroll_navigation_overlay.h" 5 #include "content/browser/web_contents/aura/overscroll_navigation_overlay.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 void OverscrollNavigationOverlay::OnOverscrollCompleted( 216 void OverscrollNavigationOverlay::OnOverscrollCompleted(
217 std::unique_ptr<aura::Window> window) { 217 std::unique_ptr<aura::Window> window) {
218 DCHECK(direction_ != NONE); 218 DCHECK(direction_ != NONE);
219 aura::Window* main_window = GetMainWindow(); 219 aura::Window* main_window = GetMainWindow();
220 if (!main_window) { 220 if (!main_window) {
221 UMA_HISTOGRAM_ENUMERATION( 221 UMA_HISTOGRAM_ENUMERATION(
222 "Overscroll.Cancelled", direction_, NAVIGATION_COUNT); 222 "Overscroll.Cancelled", direction_, NAVIGATION_COUNT);
223 return; 223 return;
224 } 224 }
225 225
226 main_window->SetTransform(gfx::Transform());
227 window_ = std::move(window);
228 // Make sure the window is in its default position.
229 window_->SetBounds(gfx::Rect(web_contents_window_->bounds().size()));
230 window_->SetTransform(gfx::Transform());
231 // Make sure the overlay window is on top.
232 web_contents_window_->StackChildAtTop(window_.get());
233
226 // Make sure we can navigate first, as other factors can trigger a navigation 234 // Make sure we can navigate first, as other factors can trigger a navigation
227 // during an overscroll gesture and navigating without history produces a 235 // during an overscroll gesture and navigating without history produces a
228 // crash. 236 // crash.
229 bool navigated = false; 237 bool navigated = false;
230 if (direction_ == FORWARD && web_contents_->GetController().CanGoForward()) { 238 if (direction_ == FORWARD && web_contents_->GetController().CanGoForward()) {
231 web_contents_->GetController().GoForward(); 239 web_contents_->GetController().GoForward();
232 navigated = true; 240 navigated = true;
233 } else if (direction_ == BACK && web_contents_->GetController().CanGoBack()) { 241 } else if (direction_ == BACK && web_contents_->GetController().CanGoBack()) {
234 web_contents_->GetController().GoBack(); 242 web_contents_->GetController().GoBack();
235 navigated = true; 243 navigated = true;
236 } else { 244 } else {
237 // We need to dismiss the overlay without navigating as soon as the 245 // We need to dismiss the overlay without navigating as soon as the
238 // overscroll finishes. 246 // overscroll finishes.
239 UMA_HISTOGRAM_ENUMERATION( 247 UMA_HISTOGRAM_ENUMERATION(
240 "Overscroll.Cancelled", direction_, NAVIGATION_COUNT); 248 "Overscroll.Cancelled", direction_, NAVIGATION_COUNT);
241 loading_complete_ = true; 249 loading_complete_ = true;
242 } 250 }
243 251
244 if (navigated) { 252 if (navigated) {
245 UMA_HISTOGRAM_ENUMERATION( 253 UMA_HISTOGRAM_ENUMERATION(
246 "Overscroll.Navigated2", direction_, NAVIGATION_COUNT); 254 "Overscroll.Navigated2", direction_, NAVIGATION_COUNT);
247 StartObserving(); 255 StartObserving();
248 } 256 }
249 257
250 main_window->SetTransform(gfx::Transform());
251 window_ = std::move(window);
252 // Make sure the window is in its default position.
253 window_->SetBounds(gfx::Rect(web_contents_window_->bounds().size()));
254 window_->SetTransform(gfx::Transform());
255 // Make sure the overlay window is on top.
256 web_contents_window_->StackChildAtTop(window_.get());
257 direction_ = NONE; 258 direction_ = NONE;
258 StopObservingIfDone(); 259 StopObservingIfDone();
259 } 260 }
260 261
261 void OverscrollNavigationOverlay::OnOverscrollCancelled() { 262 void OverscrollNavigationOverlay::OnOverscrollCancelled() {
262 UMA_HISTOGRAM_ENUMERATION( 263 UMA_HISTOGRAM_ENUMERATION(
263 "Overscroll.Cancelled", direction_, NAVIGATION_COUNT); 264 "Overscroll.Cancelled", direction_, NAVIGATION_COUNT);
264 aura::Window* main_window = GetMainWindow(); 265 aura::Window* main_window = GetMainWindow();
265 if (!main_window) 266 if (!main_window)
266 return; 267 return;
(...skipping 14 matching lines...) Expand all
281 282
282 void OverscrollNavigationOverlay::DidStopLoading() { 283 void OverscrollNavigationOverlay::DidStopLoading() {
283 // Don't compare URLs in this case - it's possible they won't match if 284 // Don't compare URLs in this case - it's possible they won't match if
284 // a gesture-nav initiated navigation was interrupted by some other in-site 285 // a gesture-nav initiated navigation was interrupted by some other in-site
285 // navigation (e.g., from a script, or from a bookmark). 286 // navigation (e.g., from a script, or from a bookmark).
286 loading_complete_ = true; 287 loading_complete_ = true;
287 StopObservingIfDone(); 288 StopObservingIfDone();
288 } 289 }
289 290
290 } // namespace content 291 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698