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

Unified Diff: content/browser/web_contents/aura/window_slider.h

Issue 202183003: Fixing race conditions in ui::content::WindowSlider which could cause the overscroll overlay to nev… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
Index: content/browser/web_contents/aura/window_slider.h
diff --git a/content/browser/web_contents/aura/window_slider.h b/content/browser/web_contents/aura/window_slider.h
index 0ebe79239fd35277d712dba0163d84629c51e506..a329b2f08fde23c4568ed75391fd42a608e31588 100644
--- a/content/browser/web_contents/aura/window_slider.h
+++ b/content/browser/web_contents/aura/window_slider.h
@@ -10,6 +10,7 @@
#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
#include "ui/aura/window_observer.h"
+#include "ui/compositor/layer_animator.h"
#include "ui/events/event_handler.h"
namespace ui {
@@ -28,25 +29,33 @@ class CONTENT_EXPORT WindowSlider : public ui::EventHandler,
public:
virtual ~Delegate() {}
- // Creates a layer to show in the background, as the window-layer slides
- // with the scroll gesture.
- // The WindowSlider takes ownership of the created layer.
- virtual ui::Layer* CreateBackLayer() = 0;
-
- // Creates a layer to slide on top of the window-layer with the scroll
+ // Called when the slide in the backward direction starts. Returns a layer
+ // to show in the background, as the window-layer slides with the scroll
// gesture.
// The WindowSlider takes ownership of the created layer.
- virtual ui::Layer* CreateFrontLayer() = 0;
+ virtual ui::Layer* OnSlideBackStartedCreateLayer() = 0;
sadrul 2014/03/19 20:21:18 I want the window-slider to work in terms of back/
mfomitchev 2014/03/20 15:10:06 Ah, do you mean back/front in a sense of below/abo
sadrul 2014/03/24 20:20:46 Yes.
mfomitchev 2014/03/24 22:36:47 Ok, that makes sense. I am still not a big fan of
sadrul 2014/03/25 23:01:56 I don't understand what you mean by 'updating the
- // Called when the slide is complete. Note that at the end of a completed
- // slide, the window-layer may have been transformed. The callback here
- // should reset the transform if necessary.
- virtual void OnWindowSlideComplete() = 0;
+ // Called when the slide in the forward direction starts. Returns a layer
+ // to slide on top of the window-layer with the scroll gesture.
+ // The WindowSlider takes ownership of the created layer.
+ virtual ui::Layer* OnSlideForwardStartedCreateLayer() = 0;
// Called when the slide is aborted. Note that when the slide is aborted,
// the WindowSlider resets any transform it applied on the window-layer.
virtual void OnWindowSlideAborted() = 0;
+ // Called when the sliding window is flinged off-screen (in the direction
+ // it was sliding).
+ // This callback is always preceeded by one of the OnSlide***Started()
sadrul 2014/03/19 20:21:18 What are the OnSlide***Started() callbacks?
mfomitchev 2014/03/20 15:10:06 Done.
+ // callbacks, and is guaranteed to be followed by the
+ // OnWindowFlingCompleted() callback.
+ virtual void OnWindowFlingStarted() = 0;
+
+ // Called when the window fling animation is complete. Note that at the end
+ // the window-layer may have been transformed. The callback here should
+ // reset the transform if necessary.
+ virtual void OnWindowFlingCompleted() = 0;
sadrul 2014/03/19 20:21:18 What if the gesture ends without a fling? Can we
mfomitchev 2014/03/20 15:10:06 Done.
+
// Called when the slider is destroyed.
virtual void OnWindowSliderDestroyed() = 0;
};
@@ -76,16 +85,20 @@ class CONTENT_EXPORT WindowSlider : public ui::EventHandler,
void UpdateForFling(float x_velocity, float y_velocity);
- // Resets any in-progress slide.
- void ResetScroll();
+ // Stops all slider-owned animations, progressing them to their end-points.
+ // Note that depending on the sate of the Delegate and the WindowSlider, this
+ // may destroy the WindowSlider through animation callbacks.
+ void CompleteActiveAnimations();
- // Cancels any scroll/animation in progress.
- void CancelScroll();
+ // Resets in-progress slide if any, and starts the animation of the slidden
+ // window to its original position.
+ void ResetSlide();
// The following callbacks are triggered after an animation.
- void CompleteWindowSlideAfterAnimation();
+ void FlingAnimationCompleted(ui::Layer* layer, ShadowLayerDelegate* shadow);
- void AbortWindowSlideAfterAnimation();
+ void ResetSlideAnimationCompleted(ui::Layer* layer,
+ ShadowLayerDelegate* shadow);
// Overridden from ui::EventHandler:
virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
@@ -109,6 +122,10 @@ class CONTENT_EXPORT WindowSlider : public ui::EventHandler,
// destroy |owner_|.
aura::Window* owner_;
+ // Set to the Animator of the currently active animation. If no animation is
+ // active, this is set to NULL.
+ ui::LayerAnimator* active_animator_;
+
// The accumulated amount of horizontal scroll.
float delta_x_;

Powered by Google App Engine
This is Rietveld 408576698