Commit 843a15b4 authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Commit Bot

Pass NonClientFrameView to DefaultFrameHeader

This is to make the use of HeaderView consistent between
browser and non browser windows.

Bug: 1126857
Change-Id: I453ae3c063e93276f6ec9da0aae05244d5e28ed5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2363504
Commit-Queue: Mitsuru Oshima <oshima@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812631}
parent 3d66250d
......@@ -184,9 +184,8 @@ TEST_F(DefaultFrameHeaderTest, DeleteDuringAnimation) {
ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
wm::ActivateWindow(win0.get());
auto* header_view = NonClientFrameViewAsh::Get(win0.get())->GetHeaderView();
ASSERT_TRUE(header_view);
auto* animating_layer_holding_view = header_view->children()[0];
auto* frame_view = NonClientFrameViewAsh::Get(win0.get());
auto* animating_layer_holding_view = frame_view->children()[0];
EXPECT_TRUE(!std::strcmp(animating_layer_holding_view->GetClassName(),
"FrameAnimatorView"));
ASSERT_TRUE(animating_layer_holding_view->layer());
......@@ -220,17 +219,18 @@ TEST_F(DefaultFrameHeaderTest, ResizeAndReorderDuringAnimation) {
ui::ScopedAnimationDurationScaleMode non_zero_duration_mode(
ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
auto* header_view_0 =
NonClientFrameViewAsh::Get(win_0.get())->GetHeaderView();
auto* animating_layer_holding_view_0 = header_view_0->children()[0];
auto* frame_view_0 = NonClientFrameViewAsh::Get(win_0.get());
auto* animating_layer_holding_view_0 = frame_view_0->children()[0];
EXPECT_TRUE(!std::strcmp(animating_layer_holding_view_0->GetClassName(),
"FrameAnimatorView"));
size_t original_layers_count_0 =
animating_layer_holding_view_0->layer()->parent()->children().size();
auto* header_view_1 =
NonClientFrameViewAsh::Get(win_1.get())->GetHeaderView();
auto* animating_layer_holding_view_1 = header_view_1->children()[0];
auto* frame_view_1 = NonClientFrameViewAsh::Get(win_1.get());
auto* extra_view_1 =
frame_view_1->AddChildView(std::make_unique<views::View>());
auto* animating_layer_holding_view_1 = frame_view_1->children()[0];
EXPECT_TRUE(!std::strcmp(animating_layer_holding_view_1->GetClassName(),
"FrameAnimatorView"));
size_t original_layers_count_1 =
......@@ -259,7 +259,7 @@ TEST_F(DefaultFrameHeaderTest, ResizeAndReorderDuringAnimation) {
}
{
// wind_1 should still be animating.
// win_1 should still be animating.
EXPECT_EQ(
animating_layer_holding_view_1->layer()->parent()->children().size(),
original_layers_count_1 + 1);
......@@ -269,8 +269,8 @@ TEST_F(DefaultFrameHeaderTest, ResizeAndReorderDuringAnimation) {
LayerDestroyedChecker checker(animating_layer);
// Change the view's stacking order should stop the animation.
ASSERT_EQ(3u, header_view_1->children().size());
header_view_1->ReorderChildView(header_view_1->children()[2], 0);
ASSERT_EQ(2u, frame_view_1->children().size());
frame_view_1->ReorderChildView(extra_view_1, 0);
EXPECT_EQ(
animating_layer_holding_view_1->layer()->parent()->children().size(),
......
......@@ -19,6 +19,7 @@
#include "ui/base/ui_base_features.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/non_client_view.h"
namespace ash {
......@@ -50,7 +51,8 @@ class HeaderView::HeaderContentView : public views::View {
DISALLOW_COPY_AND_ASSIGN(HeaderContentView);
};
HeaderView::HeaderView(views::Widget* target_widget)
HeaderView::HeaderView(views::Widget* target_widget,
views::NonClientFrameView* frame_view)
: target_widget_(target_widget) {
header_content_view_ =
AddChildView(std::make_unique<HeaderContentView>(this));
......@@ -61,7 +63,9 @@ HeaderView::HeaderView(views::Widget* target_widget)
aura::Window* window = target_widget->GetNativeWindow();
frame_header_ = std::make_unique<DefaultFrameHeader>(
target_widget, this, caption_button_container_);
target_widget,
(frame_view ? static_cast<views::View*>(frame_view) : this),
caption_button_container_);
UpdateBackButton();
......
......@@ -28,6 +28,7 @@ namespace views {
class FrameCaptionButton;
class ImageView;
class Widget;
class NonClientFrameView;
}
namespace ash {
......@@ -48,7 +49,8 @@ class ASH_EXPORT HeaderView : public views::View,
// placed in. For example, in immersive fullscreen this view may be painted in
// a widget that slides in and out on top of the main app or browser window.
// However, clicking a caption button should act on the target widget.
explicit HeaderView(views::Widget* target_widget);
HeaderView(views::Widget* target_widget,
views::NonClientFrameView* frame_view);
~HeaderView() override;
METADATA_HEADER(HeaderView);
......
......@@ -203,7 +203,7 @@ const char NonClientFrameViewAsh::kViewClassName[] = "NonClientFrameViewAsh";
NonClientFrameViewAsh::NonClientFrameViewAsh(views::Widget* frame)
: frame_(frame),
header_view_(new HeaderView(frame)),
header_view_(new HeaderView(frame, this)),
overlay_view_(new OverlayView(header_view_)) {
DCHECK(frame_);
......
......@@ -91,7 +91,9 @@ WideFrameView::WideFrameView(views::Widget* target)
aura::Window* target_window = target->GetNativeWindow();
target_window->AddObserver(this);
header_view_ = new HeaderView(target);
// Use the HeaderView itself as a frame view because WideFrameView is
// is the frame only.
header_view_ = new HeaderView(target, /*frame view=*/nullptr);
AddChildView(header_view_);
GetTargetHeaderView()->SetShouldPaintHeader(false);
......
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