Commit eee84c3b authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Commit Bot

Use "if immersive" condition to compute top border height in CustomFrameViewAsh

*) remove zero_top_border_height_ hack.
a) Always use fullscreen_visible_fraction_  in HeaderView::GetPreferredOnScreenHeight

Cleanup the debug code that I accidentally included in other CLs.

NonClientFrameController doesn't have use immersive in tablet behavior, os
I left it as is.

Browser frame already uses immersive condition to compute the height, so
no changes in browser frame code.

BUG=b/33693796
TEST=no functional change except for a) above. a) is covered by unittests.

Change-Id: Iae7c236426216a3c251de8e40a5ecd69831c0635
Reviewed-on: https://chromium-review.googlesource.com/999967Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550035}
parent a5eb83a8
...@@ -602,23 +602,12 @@ CustomFrameViewAsh::GetFrameCaptionButtonContainerViewForTest() { ...@@ -602,23 +602,12 @@ CustomFrameViewAsh::GetFrameCaptionButtonContainerViewForTest() {
} }
int CustomFrameViewAsh::NonClientTopBorderHeight() const { int CustomFrameViewAsh::NonClientTopBorderHeight() const {
// TODO(oshima): CustomFrameViewAsh should be able to tell if it's
// in immersive mode and return 0, instead of using custom logic.
if (zero_top_border_height_)
return 0;
// The frame should not occupy the window area when it's in fullscreen, // The frame should not occupy the window area when it's in fullscreen,
// not visible or disabled. // not visible or disabled.
if (frame_->IsFullscreen() || !visible() || !enabled()) if (frame_->IsFullscreen() || !visible() || !enabled() ||
header_view_->in_immersive_mode()) {
return 0; return 0;
}
const bool should_hide_titlebar_in_tablet_mode =
Shell::Get()->tablet_mode_controller() &&
Shell::Get()->tablet_mode_controller()->ShouldAutoHideTitlebars(frame_);
if (should_hide_titlebar_in_tablet_mode)
return 0;
return header_view_->GetPreferredHeight(); return header_view_->GetPreferredHeight();
} }
......
...@@ -81,11 +81,6 @@ class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView, ...@@ -81,11 +81,6 @@ class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView,
// preferred height is used. // preferred height is used.
void SetHeaderHeight(base::Optional<int> height); void SetHeaderHeight(base::Optional<int> height);
// Overrides the default top border height with zero value.
void set_zero_top_border_height(bool zero_top_border_height) {
zero_top_border_height_ = zero_top_border_height;
}
// Get the view of the header. // Get the view of the header.
views::View* GetHeaderView(); views::View* GetHeaderView();
...@@ -171,8 +166,6 @@ class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView, ...@@ -171,8 +166,6 @@ class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView,
OverlayView* overlay_view_; OverlayView* overlay_view_;
bool zero_top_border_height_ = false;
ImmersiveFullscreenControllerDelegate* immersive_delegate_; ImmersiveFullscreenControllerDelegate* immersive_delegate_;
// Observes avatar icon change and updates |header_view_|. // Observes avatar icon change and updates |header_view_|.
......
...@@ -269,7 +269,7 @@ TEST_F(CustomFrameViewAshTest, ...@@ -269,7 +269,7 @@ TEST_F(CustomFrameViewAshTest,
} }
TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) { TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) {
auto* delegate = new CustomFrameTestWidgetDelegate(); auto* delegate = new TestWidgetConstraintsDelegate;
std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate);
widget->Maximize(); widget->Maximize();
...@@ -280,7 +280,7 @@ TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) { ...@@ -280,7 +280,7 @@ TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) {
// header is zero. // header is zero.
widget->Minimize(); widget->Minimize();
widget->Show(); widget->Show();
widget->Maximize(); EXPECT_TRUE(widget->IsMaximized());
EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight());
// Verify that when we toggle maximize, the header is shown. For example, // Verify that when we toggle maximize, the header is shown. For example,
...@@ -295,6 +295,27 @@ TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) { ...@@ -295,6 +295,27 @@ TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) {
delegate->GetCustomFrameViewTopBorderHeight()); delegate->GetCustomFrameViewTopBorderHeight());
} }
// Test if creating a new window in tablet mode uses maximzied state
// and immersive mode.
TEST_F(CustomFrameViewAshTest, GetPreferredOnScreenHeightInTabletMaximzied) {
Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true);
auto* delegate = new TestWidgetConstraintsDelegate;
std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate);
auto* frame_view = static_cast<ash::CustomFrameViewAsh*>(
widget->non_client_view()->frame_view());
auto* header_view = static_cast<HeaderView*>(frame_view->GetHeaderView());
ASSERT_TRUE(widget->IsMaximized());
EXPECT_TRUE(header_view->in_immersive_mode());
static_cast<ImmersiveFullscreenControllerDelegate*>(header_view)
->SetVisibleFraction(0.5);
// The height should be ~(33 *.5)
EXPECT_NEAR(16, header_view->GetPreferredOnScreenHeight(), 1);
static_cast<ImmersiveFullscreenControllerDelegate*>(header_view)
->SetVisibleFraction(0.0);
EXPECT_EQ(0, header_view->GetPreferredOnScreenHeight());
}
// Verify windows that are minimized and then entered into tablet mode will have // Verify windows that are minimized and then entered into tablet mode will have
// no header when unminimized in tablet mode. // no header when unminimized in tablet mode.
TEST_F(CustomFrameViewAshTest, MinimizedWindowsInTabletMode) { TEST_F(CustomFrameViewAshTest, MinimizedWindowsInTabletMode) {
...@@ -461,14 +482,10 @@ TEST_F(CustomFrameViewAshTest, BackButton) { ...@@ -461,14 +482,10 @@ TEST_F(CustomFrameViewAshTest, BackButton) {
static_cast<HeaderView*>(custom_frame_view->GetHeaderView()); static_cast<HeaderView*>(custom_frame_view->GetHeaderView());
EXPECT_FALSE(header_view->GetBackButton()); EXPECT_FALSE(header_view->GetBackButton());
model_ptr->SetVisible(CAPTION_BUTTON_ICON_BACK, true); model_ptr->SetVisible(CAPTION_BUTTON_ICON_BACK, true);
LOG(ERROR) << "Enabling Back";
custom_frame_view->SizeConstraintsChanged(); custom_frame_view->SizeConstraintsChanged();
EXPECT_TRUE(header_view->GetBackButton()); EXPECT_TRUE(header_view->GetBackButton());
EXPECT_FALSE(header_view->GetBackButton()->enabled()); EXPECT_FALSE(header_view->GetBackButton()->enabled());
LOG(ERROR) << "Bounds:"
<< header_view->GetBackButton()->GetBoundsInScreen().ToString();
// Back button is disabled, so clicking on it should not should // Back button is disabled, so clicking on it should not should
// generate back key sequence. // generate back key sequence.
ui::test::EventGenerator& generator = GetEventGenerator(); ui::test::EventGenerator& generator = GetEventGenerator();
...@@ -605,16 +622,6 @@ TEST_F(CustomFrameViewAshTest, CustomButtonModel) { ...@@ -605,16 +622,6 @@ TEST_F(CustomFrameViewAshTest, CustomButtonModel) {
#endif #endif
} }
TEST_F(CustomFrameViewAshTest, ZeroTopBorderHeightOverride) {
CustomFrameTestWidgetDelegate* delegate = new CustomFrameTestWidgetDelegate;
std::unique_ptr<views::Widget> widget(CreateTestWidget(delegate));
CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view();
custom_frame_view->set_zero_top_border_height(true);
EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight());
custom_frame_view->set_zero_top_border_height(false);
EXPECT_EQ(33, delegate->GetCustomFrameViewTopBorderHeight());
}
namespace { namespace {
class CustomFrameViewAshFrameColorTest class CustomFrameViewAshFrameColorTest
......
...@@ -17,8 +17,6 @@ ...@@ -17,8 +17,6 @@
#include "ui/views/controls/image_view.h" #include "ui/views/controls/image_view.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#include "base/debug/stack_trace.h"
namespace ash { namespace ash {
HeaderView::HeaderView(views::Widget* target_widget, HeaderView::HeaderView(views::Widget* target_widget,
...@@ -54,13 +52,7 @@ void HeaderView::ResetWindowControls() { ...@@ -54,13 +52,7 @@ void HeaderView::ResetWindowControls() {
} }
int HeaderView::GetPreferredOnScreenHeight() { int HeaderView::GetPreferredOnScreenHeight() {
const bool should_hide_titlebar_in_tablet_mode = if (is_immersive_delegate_ && in_immersive_mode_) {
Shell::Get()->tablet_mode_controller() &&
Shell::Get()->tablet_mode_controller()->ShouldAutoHideTitlebars(
target_widget_);
if (is_immersive_delegate_ &&
(target_widget_->IsFullscreen() || should_hide_titlebar_in_tablet_mode)) {
return static_cast<int>(GetPreferredHeight() * return static_cast<int>(GetPreferredHeight() *
fullscreen_visible_fraction_); fullscreen_visible_fraction_);
} }
...@@ -221,7 +213,12 @@ void HeaderView::OnImmersiveRevealEnded() { ...@@ -221,7 +213,12 @@ void HeaderView::OnImmersiveRevealEnded() {
parent()->Layout(); parent()->Layout();
} }
void HeaderView::OnImmersiveFullscreenEntered() {
in_immersive_mode_ = true;
}
void HeaderView::OnImmersiveFullscreenExited() { void HeaderView::OnImmersiveFullscreenExited() {
in_immersive_mode_ = false;
fullscreen_visible_fraction_ = 0; fullscreen_visible_fraction_ = 0;
DestroyLayer(); DestroyLayer();
parent()->Layout(); parent()->Layout();
......
...@@ -96,6 +96,8 @@ class ASH_EXPORT HeaderView : public views::View, ...@@ -96,6 +96,8 @@ class ASH_EXPORT HeaderView : public views::View,
views::View* avatar_icon() const; views::View* avatar_icon() const;
bool in_immersive_mode() const { return in_immersive_mode_; }
void SetShouldPaintHeader(bool paint); void SetShouldPaintHeader(bool paint);
FrameCaptionButton* GetBackButton(); FrameCaptionButton* GetBackButton();
...@@ -104,6 +106,7 @@ class ASH_EXPORT HeaderView : public views::View, ...@@ -104,6 +106,7 @@ class ASH_EXPORT HeaderView : public views::View,
// ImmersiveFullscreenControllerDelegate: // ImmersiveFullscreenControllerDelegate:
void OnImmersiveRevealStarted() override; void OnImmersiveRevealStarted() override;
void OnImmersiveRevealEnded() override; void OnImmersiveRevealEnded() override;
void OnImmersiveFullscreenEntered() override;
void OnImmersiveFullscreenExited() override; void OnImmersiveFullscreenExited() override;
void SetVisibleFraction(double visible_fraction) override; void SetVisibleFraction(double visible_fraction) override;
std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override; std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override;
...@@ -131,6 +134,8 @@ class ASH_EXPORT HeaderView : public views::View, ...@@ -131,6 +134,8 @@ class ASH_EXPORT HeaderView : public views::View,
// False to skip painting. Used for overview mode to hide the header. // False to skip painting. Used for overview mode to hide the header.
bool should_paint_; bool should_paint_;
bool in_immersive_mode_ = false;
DISALLOW_COPY_AND_ASSIGN(HeaderView); DISALLOW_COPY_AND_ASSIGN(HeaderView);
}; };
......
...@@ -122,6 +122,8 @@ void ImmersiveFullscreenController::SetEnabled(WindowType window_type, ...@@ -122,6 +122,8 @@ void ImmersiveFullscreenController::SetEnabled(WindowType window_type,
if (immersive_focus_watcher_) if (immersive_focus_watcher_)
immersive_focus_watcher_->UpdateFocusRevealedLock(); immersive_focus_watcher_->UpdateFocusRevealedLock();
} }
delegate_->OnImmersiveFullscreenEntered();
} else { } else {
// Stop cursor-at-top tracking. // Stop cursor-at-top tracking.
top_edge_hover_timer_.Stop(); top_edge_hover_timer_.Stop();
......
...@@ -25,6 +25,9 @@ class ASH_PUBLIC_EXPORT ImmersiveFullscreenControllerDelegate { ...@@ -25,6 +25,9 @@ class ASH_PUBLIC_EXPORT ImmersiveFullscreenControllerDelegate {
// prior to OnImmersiveRevealEnded(). // prior to OnImmersiveRevealEnded().
virtual void OnImmersiveRevealEnded() = 0; virtual void OnImmersiveRevealEnded() = 0;
// Called as a result of enabling immersive fullscreen via SetEnabled().
virtual void OnImmersiveFullscreenEntered() = 0;
// Called as a result of disabling immersive fullscreen via SetEnabled(). // Called as a result of disabling immersive fullscreen via SetEnabled().
virtual void OnImmersiveFullscreenExited() = 0; virtual void OnImmersiveFullscreenExited() = 0;
......
...@@ -59,6 +59,7 @@ class MockImmersiveFullscreenControllerDelegate ...@@ -59,6 +59,7 @@ class MockImmersiveFullscreenControllerDelegate
visible_fraction_ = 0; visible_fraction_ = 0;
} }
void OnImmersiveRevealEnded() override { visible_fraction_ = 0; } void OnImmersiveRevealEnded() override { visible_fraction_ = 0; }
void OnImmersiveFullscreenEntered() override {}
void OnImmersiveFullscreenExited() override { void OnImmersiveFullscreenExited() override {
enabled_ = false; enabled_ = false;
visible_fraction_ = 1; visible_fraction_ = 1;
......
...@@ -91,6 +91,7 @@ class ImmersiveFullscreenControllerDelegateMus ...@@ -91,6 +91,7 @@ class ImmersiveFullscreenControllerDelegateMus
SetVisibleFraction(0); SetVisibleFraction(0);
} }
void OnImmersiveRevealEnded() override { DestroyTitleAreaWindow(); } void OnImmersiveRevealEnded() override { DestroyTitleAreaWindow(); }
void OnImmersiveFullscreenEntered() override {}
void OnImmersiveFullscreenExited() override { DestroyTitleAreaWindow(); } void OnImmersiveFullscreenExited() override { DestroyTitleAreaWindow(); }
void SetVisibleFraction(double visible_fraction) override { void SetVisibleFraction(double visible_fraction) override {
aura::Window* title_area_window = GetTitleAreaWindow(); aura::Window* title_area_window = GetTitleAreaWindow();
......
...@@ -282,6 +282,8 @@ void ImmersiveModeControllerAsh::OnImmersiveRevealEnded() { ...@@ -282,6 +282,8 @@ void ImmersiveModeControllerAsh::OnImmersiveRevealEnded() {
observer.OnImmersiveRevealEnded(); observer.OnImmersiveRevealEnded();
} }
void ImmersiveModeControllerAsh::OnImmersiveFullscreenEntered() {}
void ImmersiveModeControllerAsh::OnImmersiveFullscreenExited() { void ImmersiveModeControllerAsh::OnImmersiveFullscreenExited() {
DestroyMashRevealWidget(); DestroyMashRevealWidget();
browser_view_->top_container()->DestroyLayer(); browser_view_->top_container()->DestroyLayer();
......
...@@ -67,6 +67,7 @@ class ImmersiveModeControllerAsh ...@@ -67,6 +67,7 @@ class ImmersiveModeControllerAsh
// ImmersiveFullscreenController::Delegate overrides: // ImmersiveFullscreenController::Delegate overrides:
void OnImmersiveRevealStarted() override; void OnImmersiveRevealStarted() override;
void OnImmersiveRevealEnded() override; void OnImmersiveRevealEnded() override;
void OnImmersiveFullscreenEntered() override;
void OnImmersiveFullscreenExited() override; void OnImmersiveFullscreenExited() override;
void SetVisibleFraction(double visible_fraction) override; void SetVisibleFraction(double visible_fraction) override;
std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override; std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override;
......
...@@ -432,7 +432,6 @@ void ClientControlledShellSurface::UpdateAutoHideFrame() { ...@@ -432,7 +432,6 @@ void ClientControlledShellSurface::UpdateAutoHideFrame() {
bool enabled = frame_type_ == SurfaceFrameType::AUTOHIDE; bool enabled = frame_type_ == SurfaceFrameType::AUTOHIDE;
immersive_fullscreen_controller_->SetEnabled( immersive_fullscreen_controller_->SetEnabled(
ash::ImmersiveFullscreenController::WINDOW_TYPE_OTHER, enabled); ash::ImmersiveFullscreenController::WINDOW_TYPE_OTHER, enabled);
GetFrameView()->set_zero_top_border_height(enabled);
} }
} }
......
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