Commit 40f94744 authored by Ahmed Fakhry's avatar Ahmed Fakhry Committed by Commit Bot

(Reland) Top-chrome slide: Fix and test intermediate sliding

Gesture scrolling starts before top-chrome starts
sliding. During that small period, the
`DoBrowserControlsShrinkRendererSize` bit should
remain unchanged.

This CL fixes this issue and adds a test to verify
the state of the browser while top-chrome sliding
is in progress.

BUG=884440, 867063, 891516
TEST=Added new test

Reviewed-on: https://chromium-review.googlesource.com/c/1249729Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarDavid Bokan <bokan@chromium.org>
Commit-Queue: Ahmed Fakhry <afakhry@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#595899}
Change-Id: I63f101175c1ec1052d6e0bb55bbe760fd7a8b369
Reviewed-on: https://chromium-review.googlesource.com/c/1260105
Cr-Commit-Position: refs/heads/master@{#596700}
parent fad05a97
...@@ -5,5 +5,6 @@ sky@chromium.org ...@@ -5,5 +5,6 @@ sky@chromium.org
per-file immersive_mode_controller*=pkotwicz@chromium.org per-file immersive_mode_controller*=pkotwicz@chromium.org
per-file *x11*=thomasanderson@chromium.org per-file *x11*=thomasanderson@chromium.org
per-file desktop_linux_browser_frame_view*=thomasanderson@chromium.org per-file desktop_linux_browser_frame_view*=thomasanderson@chromium.org
per-file top_controls_slide_controller*=afakhry@chromium.org
# COMPONENT: UI>Browser # COMPONENT: UI>Browser
...@@ -52,6 +52,9 @@ class TopControlsSlideController { ...@@ -52,6 +52,9 @@ class TopControlsSlideController {
// changed state. // changed state.
virtual void SetTopControlsGestureScrollInProgress(bool in_progress) = 0; virtual void SetTopControlsGestureScrollInProgress(bool in_progress) = 0;
// Returns true while gesture scrolls are in progress.
virtual bool IsTopControlsGestureScrollInProgress() const = 0;
private: private:
DISALLOW_COPY_AND_ASSIGN(TopControlsSlideController); DISALLOW_COPY_AND_ASSIGN(TopControlsSlideController);
}; };
......
...@@ -163,9 +163,9 @@ class TopControlsSlideTabObserver : public content::WebContentsObserver { ...@@ -163,9 +163,9 @@ class TopControlsSlideTabObserver : public content::WebContentsObserver {
float shown_ratio() const { return shown_ratio_; } float shown_ratio() const { return shown_ratio_; }
bool shrink_renderer_size() const { return shrink_renderer_size_; } bool shrink_renderer_size() const { return shrink_renderer_size_; }
void SetShownRatio(float ratio, bool sliding_in_progress) { void SetShownRatio(float ratio, bool sliding_or_scrolling_in_progress) {
shown_ratio_ = ratio; shown_ratio_ = ratio;
if (!sliding_in_progress) if (!sliding_or_scrolling_in_progress)
UpdateDoBrowserControlsShrinkRendererSize(); UpdateDoBrowserControlsShrinkRendererSize();
} }
...@@ -248,8 +248,8 @@ class TopControlsSlideTabObserver : public content::WebContentsObserver { ...@@ -248,8 +248,8 @@ class TopControlsSlideTabObserver : public content::WebContentsObserver {
// Indicates whether the renderer's viewport size should be shrunk by the // Indicates whether the renderer's viewport size should be shrunk by the
// height of the browser's top controls. This value should only be updated at // height of the browser's top controls. This value should only be updated at
// the end of sliding, and should never change while sliding is in progress. // the end of sliding, and should never change while sliding or scrolling are
// https://crbug.com/885223. // in progress. https://crbug.com/885223.
bool shrink_renderer_size_ = true; bool shrink_renderer_size_ = true;
DISALLOW_COPY_AND_ASSIGN(TopControlsSlideTabObserver); DISALLOW_COPY_AND_ASSIGN(TopControlsSlideTabObserver);
...@@ -303,7 +303,22 @@ void TopControlsSlideControllerChromeOS::SetShownRatio( ...@@ -303,7 +303,22 @@ void TopControlsSlideControllerChromeOS::SetShownRatio(
// Make sure the value tracked per tab is always updated even when sliding is // Make sure the value tracked per tab is always updated even when sliding is
// disabled, so that we're always synchronized with the renderer. // disabled, so that we're always synchronized with the renderer.
DCHECK(observed_tabs_.count(contents)); DCHECK(observed_tabs_.count(contents));
observed_tabs_[contents]->SetShownRatio(ratio, is_sliding_in_progress_);
// Note that there are two small windows of intervals between:
// 1- When |is_gesture_scrolling_in_progress_| is set to true (i.e. received
// ET_GESTURE_SCROLL_BEGIN) and when |is_sliding_in_progress_| is set to
// true (i.e. top-chrome actually starts moving), and
// 2- When |is_gesture_scrolling_in_progress_| is set to false (i.e.
// ET_GESTURE_SCROLL_END was received) and when |is_sliding_in_progress_|
// is set to false (i.e. top-chrome stopped moving) which can happen as the
// renderer continues to animate top-chrome towards fully-shown or
// fully-hidden after the user had lifted their fingers while the
// shown_ratio is still a fractional value.
// Even during those two small windows, the
// `DoBrowserControlsShrinkRendererSize` bit should remain unchanged from its
// current value until sliding reaches a steady state.
observed_tabs_[contents]->SetShownRatio(
ratio, is_gesture_scrolling_in_progress_ || is_sliding_in_progress_);
if (!IsEnabled()) { if (!IsEnabled()) {
// However, if sliding is disabled, we don't update |shown_ratio_|, which is // However, if sliding is disabled, we don't update |shown_ratio_|, which is
...@@ -369,6 +384,11 @@ void TopControlsSlideControllerChromeOS::SetTopControlsGestureScrollInProgress( ...@@ -369,6 +384,11 @@ void TopControlsSlideControllerChromeOS::SetTopControlsGestureScrollInProgress(
Refresh(); Refresh();
} }
bool TopControlsSlideControllerChromeOS::IsTopControlsGestureScrollInProgress()
const {
return is_gesture_scrolling_in_progress_;
}
void TopControlsSlideControllerChromeOS::OnTabletModeToggled( void TopControlsSlideControllerChromeOS::OnTabletModeToggled(
bool tablet_mode_enabled) { bool tablet_mode_enabled) {
OnEnabledStateChanged(tablet_mode_enabled && !browser_view_->IsFullscreen()); OnEnabledStateChanged(tablet_mode_enabled && !browser_view_->IsFullscreen());
......
...@@ -51,6 +51,7 @@ class TopControlsSlideControllerChromeOS ...@@ -51,6 +51,7 @@ class TopControlsSlideControllerChromeOS
bool DoBrowserControlsShrinkRendererSize( bool DoBrowserControlsShrinkRendererSize(
const content::WebContents* contents) const override; const content::WebContents* contents) const override;
void SetTopControlsGestureScrollInProgress(bool in_progress) override; void SetTopControlsGestureScrollInProgress(bool in_progress) override;
bool IsTopControlsGestureScrollInProgress() const override;
// TabletModeClientObserver: // TabletModeClientObserver:
void OnTabletModeToggled(bool tablet_mode_enabled) override; void OnTabletModeToggled(bool tablet_mode_enabled) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment