Index: chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc |
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc |
index 32fad0808b1c4e62992822b7f022b5578d53622f..4a2b9288b40f7832e3a1f82a221079e96f6d97e3 100644 |
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc |
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "base/command_line.h" |
#include "base/macros.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/ui/layout_constants.h" |
#include "chrome/browser/ui/views/profiles/avatar_menu_button.h" |
#include "chrome/browser/ui/views/tab_icon_view.h" |
#include "chrome/browser/ui/views/tabs/tab.h" |
@@ -20,110 +21,72 @@ |
#include "ui/views/controls/label.h" |
#include "ui/views/test/views_test_base.h" |
-using views::Widget; |
+using OBFVL = OpaqueBrowserFrameViewLayout; |
namespace { |
-const int kWidth = 500; |
+const int kWindowWidth = 500; |
+const int kNonClientBorderThickness = OBFVL::kFrameBorderThickness + |
+ views::NonClientFrameView::kClientEdgeThickness; |
+const int kMinimizeButtonWidth = 26; |
+const int kMaximizeButtonWidth = 25; |
+const int kCloseButtonWidth = 43; |
+const int kMaximizedExtraCloseWidth = OBFVL::kFrameBorderThickness - |
+ views::NonClientFrameView::kFrameShadowThickness; |
+const int kCaptionButtonsWidth = |
+ kMinimizeButtonWidth + kMaximizeButtonWidth + kCloseButtonWidth; |
+const int kCaptionButtonHeight = 18; |
class TestLayoutDelegate : public OpaqueBrowserFrameViewLayoutDelegate { |
public: |
- enum WindowState { |
- STATE_NORMAL, |
- STATE_MAXIMIZED, |
- STATE_MINIMIZED, |
- STATE_FULLSCREEN |
- }; |
- |
TestLayoutDelegate() |
: show_avatar_(false), |
show_caption_buttons_(true), |
- window_state_(STATE_NORMAL) { |
+ maximized_(false) { |
} |
- |
~TestLayoutDelegate() override {} |
- void SetWindowTitle(const base::string16& title) { |
- window_title_ = title; |
- } |
- |
- void SetShouldShowAvatar(bool show_avatar) { |
- show_avatar_ = show_avatar; |
- } |
- |
- void SetShouldShowCaptionButtons(bool show_caption_buttons) { |
+ void set_window_title(const base::string16& title) { window_title_ = title; } |
+ void set_show_avatar(bool show_avatar) { show_avatar_ = show_avatar; } |
+ void set_show_caption_buttons(bool show_caption_buttons) { |
show_caption_buttons_ = show_caption_buttons; |
} |
+ void set_maximized(bool maximized) { maximized_ = maximized; } |
- void SetWindowState(WindowState state) { |
- window_state_ = state; |
- } |
- |
- // OpaqueBrowserFrameViewLayoutDelegate overrides: |
- |
+ // OpaqueBrowserFrameViewLayoutDelegate: |
bool ShouldShowWindowIcon() const override { return !window_title_.empty(); } |
- |
bool ShouldShowWindowTitle() const override { return !window_title_.empty(); } |
- |
base::string16 GetWindowTitle() const override { return window_title_; } |
- |
- int GetIconSize() const override { |
- // The value on linux_aura and non-aura windows. |
- return 17; |
- } |
- |
+ int GetIconSize() const override { return 17; } |
gfx::Size GetBrowserViewMinimumSize() const override { |
- // Taken from a calculation in BrowserViewLayout. |
return gfx::Size(168, 64); |
} |
- |
bool ShouldShowCaptionButtons() const override { |
return show_caption_buttons_; |
} |
- |
bool ShouldShowAvatar() const override { return show_avatar_; } |
- |
bool IsRegularOrGuestSession() const override { return true; } |
- |
gfx::ImageSkia GetOTRAvatarIcon() const override { |
- // The calculations depend on the size of the OTR resource, and chromeos |
- // uses a different sized image, so hard code the size of the current |
- // windows/linux one. |
- gfx::ImageSkiaRep rep(gfx::Size(40, 29), 1.0f); |
- gfx::ImageSkia image(rep); |
- return image; |
+ return gfx::ImageSkia(gfx::ImageSkiaRep(gfx::Size(40, 29), 1.0f)); |
} |
- |
- bool IsMaximized() const override { return window_state_ == STATE_MAXIMIZED; } |
- |
- bool IsMinimized() const override { return window_state_ == STATE_MINIMIZED; } |
- |
- bool IsFullscreen() const override { |
- return window_state_ == STATE_FULLSCREEN; |
- } |
- |
+ bool IsMaximized() const override { return maximized_; } |
+ bool IsMinimized() const override { return false; } |
+ bool IsFullscreen() const override { return false; } |
bool IsTabStripVisible() const override { return window_title_.empty(); } |
- |
int GetTabStripHeight() const override { |
return IsTabStripVisible() ? Tab::GetMinimumInactiveSize().height() : 0; |
} |
- |
bool IsToolbarVisible() const override { return true; } |
- |
gfx::Size GetTabstripPreferredSize() const override { |
- // Measured from Tabstrip::GetPreferredSize(). |
- return IsTabStripVisible() ? gfx::Size(78, 29) : gfx::Size(0, 0); |
- } |
- |
- int GetToolbarLeadingCornerClientWidth() const override { |
- return 0; |
+ return IsTabStripVisible() ? gfx::Size(78, 29) : gfx::Size(); |
} |
+ int GetToolbarLeadingCornerClientWidth() const override { return 0; } |
private: |
base::string16 window_title_; |
bool show_avatar_; |
bool show_caption_buttons_; |
- WindowState window_state_; |
+ bool maximized_; |
DISALLOW_COPY_AND_ASSIGN(TestLayoutDelegate); |
}; |
@@ -139,13 +102,13 @@ class OpaqueBrowserFrameViewLayoutTest : public views::ViewsTestBase { |
views::ViewsTestBase::SetUp(); |
delegate_.reset(new TestLayoutDelegate); |
- layout_manager_ = new OpaqueBrowserFrameViewLayout(delegate_.get()); |
+ layout_manager_ = new OBFVL(delegate_.get()); |
layout_manager_->set_extra_caption_y(0); |
layout_manager_->set_window_caption_spacing(0); |
- widget_ = new Widget; |
- widget_->Init(CreateParams(Widget::InitParams::TYPE_POPUP)); |
+ widget_ = new views::Widget; |
+ widget_->Init(CreateParams(views::Widget::InitParams::TYPE_POPUP)); |
root_view_ = widget_->GetRootView(); |
- root_view_->SetSize(gfx::Size(kWidth, kWidth)); |
+ root_view_->SetSize(gfx::Size(kWindowWidth, kWindowWidth)); |
root_view_->SetLayoutManager(layout_manager_); |
// Add the caption buttons. We use fake images because we're modeling the |
@@ -156,13 +119,17 @@ class OpaqueBrowserFrameViewLayoutTest : public views::ViewsTestBase { |
// accessors so we can test both the windows and linux behaviours once we |
// start modifying the code. |
minimize_button_ = InitWindowCaptionButton( |
- VIEW_ID_MINIMIZE_BUTTON, gfx::Size(26, 18)); |
+ VIEW_ID_MINIMIZE_BUTTON, |
+ gfx::Size(kMinimizeButtonWidth, kCaptionButtonHeight)); |
maximize_button_ = InitWindowCaptionButton( |
- VIEW_ID_MAXIMIZE_BUTTON, gfx::Size(25, 18)); |
+ VIEW_ID_MAXIMIZE_BUTTON, |
+ gfx::Size(kMaximizeButtonWidth, kCaptionButtonHeight)); |
restore_button_ = InitWindowCaptionButton( |
- VIEW_ID_RESTORE_BUTTON, gfx::Size(25, 18)); |
+ VIEW_ID_RESTORE_BUTTON, |
+ gfx::Size(kMaximizeButtonWidth, kCaptionButtonHeight)); |
close_button_ = InitWindowCaptionButton( |
- VIEW_ID_CLOSE_BUTTON, gfx::Size(43, 18)); |
+ VIEW_ID_CLOSE_BUTTON, |
+ gfx::Size(kCloseButtonWidth, kCaptionButtonHeight)); |
} |
void TearDown() override { |
@@ -203,18 +170,175 @@ class OpaqueBrowserFrameViewLayoutTest : public views::ViewsTestBase { |
new views::MenuButton(nullptr, base::string16(), nullptr, false); |
new_avatar_button_->set_id(VIEW_ID_NEW_AVATAR_BUTTON); |
root_view_->AddChildView(new_avatar_button_); |
+ delegate_->set_show_avatar(true); |
+ } |
+ |
+ int CaptionY() const { |
+ return delegate_->IsMaximized() ? |
+ 0 : views::NonClientFrameView::kFrameShadowThickness; |
+ } |
+ |
+ int CaptionLeft() const { |
+ return kWindowWidth - |
+ (delegate_->IsMaximized() ? kMaximizedExtraCloseWidth |
+ : OBFVL::kFrameBorderThickness) - |
+ kCaptionButtonsWidth - OBFVL::kCaptionSpacing; |
+ } |
+ |
+ int IconAndTitleY() const { |
+ // This approximates the real positioning algorithm, which is complicated. |
+ int total_vertical_padding = |
+ (delegate_->IsMaximized() || !delegate_->ShouldShowCaptionButtons()) ? |
+ (kCaptionButtonHeight - delegate_->GetIconSize()) : |
+ (OBFVL::kFrameBorderThickness + |
+ OBFVL::kTitlebarTopAndBottomEdgeThickness); |
+ return (total_vertical_padding + 1) / 2; |
+ } |
+ |
+ void ExpectCaptionButtons(bool caption_buttons_on_left, int extra_height) { |
+ if (!delegate_->ShouldShowCaptionButtons()) { |
+ EXPECT_FALSE(maximize_button_->visible()); |
+ EXPECT_FALSE(minimize_button_->visible()); |
+ EXPECT_FALSE(restore_button_->visible()); |
+ EXPECT_FALSE(close_button_->visible()); |
+ return; |
+ } |
+ |
+ bool maximized = delegate_->IsMaximized(); |
+ int frame_thickness = maximized ? 0 : OBFVL::kFrameBorderThickness; |
+ int close_width = |
+ kCloseButtonWidth + (maximized ? kMaximizedExtraCloseWidth : 0); |
+ int close_x = caption_buttons_on_left ? |
+ frame_thickness : (kWindowWidth - frame_thickness - close_width); |
+ EXPECT_EQ(close_x, close_button_->x()); |
+ EXPECT_EQ(CaptionY(), close_button_->y()); |
+ EXPECT_EQ(close_width, close_button_->width()); |
+ EXPECT_EQ(kCaptionButtonHeight + extra_height, close_button_->height()); |
+ EXPECT_TRUE(close_button_->visible()); |
+ views::ImageButton* visible_button = maximize_button_; |
+ views::ImageButton* hidden_button = restore_button_; |
+ if (maximized) |
+ std::swap(visible_button, hidden_button); |
+ if (caption_buttons_on_left) |
+ EXPECT_EQ(minimize_button_->bounds().right(), visible_button->x()); |
+ else |
+ EXPECT_EQ(close_button_->x(), visible_button->bounds().right()); |
+ EXPECT_EQ(close_button_->y(), visible_button->y()); |
+ EXPECT_EQ(kMaximizeButtonWidth, visible_button->width()); |
+ EXPECT_EQ(close_button_->height(), visible_button->height()); |
+ EXPECT_TRUE(visible_button->visible()); |
+ if (caption_buttons_on_left) |
+ EXPECT_EQ(close_button_->bounds().right(), minimize_button_->x()); |
+ else |
+ EXPECT_EQ(visible_button->x(), minimize_button_->bounds().right()); |
+ EXPECT_EQ(visible_button->y(), minimize_button_->y()); |
+ EXPECT_EQ(kMinimizeButtonWidth, minimize_button_->width()); |
+ EXPECT_EQ(visible_button->height(), minimize_button_->height()); |
+ EXPECT_TRUE(minimize_button_->visible()); |
+ EXPECT_FALSE(hidden_button->visible()); |
} |
- void ExpectBasicWindowBounds() { |
- EXPECT_EQ("428,1 25x18", maximize_button_->bounds().ToString()); |
- EXPECT_EQ("402,1 26x18", minimize_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", restore_button_->bounds().ToString()); |
- EXPECT_EQ("453,1 43x18", close_button_->bounds().ToString()); |
+ void ExpectTabStripAndMinimumSize(bool caption_buttons_on_left) { |
+ int caption_buttons_width = kCaptionButtonsWidth; |
+ bool show_caption_buttons = delegate_->ShouldShowCaptionButtons(); |
+ bool maximized = delegate_->IsMaximized() || !show_caption_buttons; |
+ if (delegate_->ShouldShowAvatar()) { |
+ caption_buttons_width += new_avatar_button_->GetPreferredSize().width() + |
+ (maximized ? OBFVL::kCaptionSpacing |
+ : -GetLayoutSize(NEW_TAB_BUTTON).width()); |
+ } |
+ int tabstrip_x = GetLayoutInsets(AVATAR_ICON).right(); |
+ if (show_caption_buttons && caption_buttons_on_left) { |
+ int right_of_close = |
+ maximized ? kMaximizedExtraCloseWidth : OBFVL::kFrameBorderThickness; |
+ tabstrip_x += caption_buttons_width + right_of_close; |
+ } else if (!maximized) { |
+ tabstrip_x += kNonClientBorderThickness; |
+ } |
+ gfx::Size tabstrip_min_size(delegate_->GetTabstripPreferredSize()); |
+ gfx::Rect tabstrip_bounds( |
+ layout_manager_->GetBoundsForTabStrip(tabstrip_min_size, kWindowWidth)); |
+ EXPECT_EQ(tabstrip_x, tabstrip_bounds.x()); |
+ int maximized_top_border_height = -GetLayoutInsets(TAB).top() + 1; |
+ if (maximized) { |
+ EXPECT_EQ(maximized_top_border_height, tabstrip_bounds.y()); |
+ } else { |
+ int tabstrip_nonexcluded_y = OBFVL::kFrameBorderThickness + |
+ OBFVL::kNonClientRestoredExtraThickness; |
+ EXPECT_LE(tabstrip_bounds.y(), tabstrip_nonexcluded_y); |
+ } |
+ int caption_width = (caption_buttons_on_left || !show_caption_buttons) ? |
+ 0 : caption_buttons_width; |
+ int maximized_spacing = (show_caption_buttons && !caption_buttons_on_left) ? |
+ (OBFVL::kNewTabCaptionCondensedSpacing + kMaximizedExtraCloseWidth) : |
+ OBFVL::kCaptionSpacing; |
+ int restored_spacing = OBFVL::kCaptionSpacing + |
+ (caption_buttons_on_left ? kNonClientBorderThickness |
+ : OBFVL::kFrameBorderThickness); |
+ int spacing = maximized ? maximized_spacing : restored_spacing; |
+ int tabstrip_width = kWindowWidth - tabstrip_x - caption_width - spacing; |
+ EXPECT_EQ(tabstrip_width, tabstrip_bounds.width()); |
+ EXPECT_EQ(tabstrip_min_size.height(), tabstrip_bounds.height()); |
+ maximized_spacing = (show_caption_buttons && !caption_buttons_on_left) ? |
+ OBFVL::kNewTabCaptionCondensedSpacing : OBFVL::kCaptionSpacing; |
+ restored_spacing = 2 * kNonClientBorderThickness + OBFVL::kCaptionSpacing; |
+ spacing = maximized ? maximized_spacing : restored_spacing; |
+ gfx::Size browser_view_min_size(delegate_->GetBrowserViewMinimumSize()); |
+ int min_width = |
+ browser_view_min_size.width() + tabstrip_min_size.width() + spacing; |
+ gfx::Size min_size(layout_manager_->GetMinimumSize(kWindowWidth)); |
+ EXPECT_EQ(min_width, min_size.width()); |
+ int restored_border_height = |
+ OBFVL::kFrameBorderThickness + kNonClientBorderThickness; |
+ int top_border_height = |
+ maximized ? maximized_top_border_height : restored_border_height; |
+ int min_height = top_border_height + browser_view_min_size.height(); |
+ EXPECT_EQ(min_height, min_size.height()); |
} |
- Widget* widget_; |
+ void ExpectWindowIcon(bool caption_buttons_on_left) { |
+ if (caption_buttons_on_left) { |
+ EXPECT_TRUE(layout_manager_->IconBounds().IsEmpty()); |
+ return; |
+ } |
+ |
+ int border_thickness = |
+ (delegate_->IsMaximized() || !delegate_->ShouldShowCaptionButtons()) ? |
+ 0 : OBFVL::kFrameBorderThickness; |
+ gfx::Rect icon_bounds(layout_manager_->IconBounds()); |
+ EXPECT_EQ(border_thickness + OBFVL::kIconLeftSpacing, icon_bounds.x()); |
+ int icon_y = |
+ delegate_->ShouldShowWindowTitle() ? IconAndTitleY() : border_thickness; |
+ EXPECT_EQ(icon_y, icon_bounds.y()); |
+ int icon_size = delegate_->GetIconSize(); |
+ EXPECT_EQ(icon_size, icon_bounds.width()); |
+ EXPECT_EQ(icon_size, icon_bounds.height()); |
+ } |
+ |
+ void ExpectWindowTitle() { |
+ int icon_size = delegate_->GetIconSize(); |
+ int title_x = |
+ (delegate_->IsMaximized() ? 0 : OBFVL::kFrameBorderThickness) + |
+ OBFVL::kIconLeftSpacing + icon_size + OBFVL::kIconTitleSpacing; |
+ gfx::Rect title_bounds(window_title_->bounds()); |
+ EXPECT_EQ(title_x, title_bounds.x()); |
+ EXPECT_EQ(IconAndTitleY(), title_bounds.y()); |
+ EXPECT_EQ(CaptionLeft() - title_x, title_bounds.width()); |
+ EXPECT_EQ(icon_size, title_bounds.height()); |
+ } |
+ |
+ void ExpectAvatar() { |
+ int avatar_width = new_avatar_button_->GetPreferredSize().width(); |
+ gfx::Rect avatar_bounds(new_avatar_button_->bounds()); |
+ EXPECT_EQ(CaptionLeft() - avatar_width, avatar_bounds.x()); |
+ EXPECT_EQ(CaptionY(), avatar_bounds.y()); |
+ EXPECT_EQ(avatar_width, avatar_bounds.width()); |
+ EXPECT_EQ(kCaptionButtonHeight, avatar_bounds.height()); |
+ } |
+ |
+ views::Widget* widget_; |
views::View* root_view_; |
- OpaqueBrowserFrameViewLayout* layout_manager_; |
+ OBFVL* layout_manager_; |
scoped_ptr<TestLayoutDelegate> delegate_; |
// Widgets: |
@@ -235,70 +359,27 @@ class OpaqueBrowserFrameViewLayoutTest : public views::ViewsTestBase { |
TEST_F(OpaqueBrowserFrameViewLayoutTest, BasicWindow) { |
// Tests the layout of a default chrome window with no avatars, no window |
// titles, and a tabstrip. |
- root_view_->Layout(); |
- |
- ExpectBasicWindowBounds(); |
- |
- // After some visual inspection, it really does look like the tabstrip is |
- // initally positioned out of our view. |
- EXPECT_EQ("-1,13 398x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("261x73", layout_manager_->GetMinimumSize(kWidth).ToString()); |
- // A normal window with no window icon still produces icon bounds for |
- // Windows, which has a hidden icon that a user can double click on to close |
- // the window. |
- EXPECT_EQ("6,4 17x17", layout_manager_->IconBounds().ToString()); |
-} |
- |
-TEST_F(OpaqueBrowserFrameViewLayoutTest, BasicWindowMaximized) { |
- // Tests the layout of a default chrome window with no avatars, no window |
- // titles, and a tabstrip, but maximized this time. |
- delegate_->SetWindowState(TestLayoutDelegate::STATE_MAXIMIZED); |
- root_view_->Layout(); |
- |
- // Note how the bounds start at the exact top of the window while maximized |
- // while they start 1 pixel below when unmaximized. |
- EXPECT_EQ("0,0 0x0", maximize_button_->bounds().ToString()); |
- EXPECT_EQ("403,0 26x18", minimize_button_->bounds().ToString()); |
- EXPECT_EQ("429,0 25x18", restore_button_->bounds().ToString()); |
- EXPECT_EQ("454,0 46x18", close_button_->bounds().ToString()); |
- |
- EXPECT_EQ("-6,-3 393x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("262x61", layout_manager_->GetMinimumSize(kWidth).ToString()); |
- |
- // In the maximized case, OpaqueBrowserFrameView::NonClientHitTest() uses |
- // this rect, extended to the top left corner of the window. |
- EXPECT_EQ("2,0 17x17", layout_manager_->IconBounds().ToString()); |
+ for (int i = 0; i < 2; ++i) { |
+ root_view_->Layout(); |
+ SCOPED_TRACE(i == 0 ? "Window is restored" : "Window is maximized"); |
+ ExpectCaptionButtons(false, 0); |
+ ExpectTabStripAndMinimumSize(false); |
+ ExpectWindowIcon(false); |
+ delegate_->set_maximized(true); |
+ } |
} |
TEST_F(OpaqueBrowserFrameViewLayoutTest, MaximizedWithYOffset) { |
// Tests the layout of a basic chrome window with the caption buttons slightly |
// offset from the top of the screen (as they are on Linux). |
layout_manager_->set_extra_caption_y(2); |
- delegate_->SetWindowState(TestLayoutDelegate::STATE_MAXIMIZED); |
+ delegate_->set_maximized(true); |
root_view_->Layout(); |
- // Note how the bounds start at the exact top of the window, DESPITE the |
- // caption Y offset of 2. This ensures that we obey Fitts' Law (the buttons |
- // are clickable on the top edge of the screen). However, the buttons are 2 |
- // pixels taller, so the images appear to be offset by 2 pixels. |
- EXPECT_EQ("0,0 0x0", maximize_button_->bounds().ToString()); |
- EXPECT_EQ("403,0 26x20", minimize_button_->bounds().ToString()); |
- EXPECT_EQ("429,0 25x20", restore_button_->bounds().ToString()); |
- EXPECT_EQ("454,0 46x20", close_button_->bounds().ToString()); |
- |
- EXPECT_EQ("-6,-3 393x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("262x61", layout_manager_->GetMinimumSize(kWidth).ToString()); |
- |
- // In the maximized case, OpaqueBrowserFrameView::NonClientHitTest() uses |
- // this rect, extended to the top left corner of the window. |
- EXPECT_EQ("2,0 17x17", layout_manager_->IconBounds().ToString()); |
+ ExpectCaptionButtons(false, 2); |
+ ExpectTabStripAndMinimumSize(false); |
+ ExpectWindowIcon(false); |
} |
TEST_F(OpaqueBrowserFrameViewLayoutTest, WindowButtonsOnLeft) { |
@@ -309,93 +390,57 @@ TEST_F(OpaqueBrowserFrameViewLayoutTest, WindowButtonsOnLeft) { |
leading_buttons.push_back(views::FRAME_BUTTON_MINIMIZE); |
leading_buttons.push_back(views::FRAME_BUTTON_MAXIMIZE); |
layout_manager_->SetButtonOrdering(leading_buttons, trailing_buttons); |
- root_view_->Layout(); |
- |
- EXPECT_EQ("73,1 25x18", maximize_button_->bounds().ToString()); |
- EXPECT_EQ("47,1 26x18", minimize_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", restore_button_->bounds().ToString()); |
- EXPECT_EQ("4,1 43x18", close_button_->bounds().ToString()); |
- |
- EXPECT_EQ("92,13 398x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("261x73", layout_manager_->GetMinimumSize(kWidth).ToString()); |
- // If the buttons are on the left, there should be no hidden icon for the user |
- // to double click. |
- EXPECT_EQ("0,0 0x0", layout_manager_->IconBounds().ToString()); |
+ for (int i = 0; i < 2; ++i) { |
+ root_view_->Layout(); |
+ SCOPED_TRACE(i == 0 ? "Window is restored" : "Window is maximized"); |
+ ExpectCaptionButtons(true, 0); |
+ ExpectTabStripAndMinimumSize(true); |
+ ExpectWindowIcon(true); |
+ delegate_->set_maximized(true); |
+ } |
} |
TEST_F(OpaqueBrowserFrameViewLayoutTest, WithoutCaptionButtons) { |
// Tests the layout of a default chrome window with no caption buttons (which |
// should force the tab strip to be condensed). |
- delegate_->SetShouldShowCaptionButtons(false); |
- root_view_->Layout(); |
- |
- EXPECT_EQ("0,0 0x0", maximize_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", minimize_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", restore_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", close_button_->bounds().ToString()); |
- |
- EXPECT_EQ("-6,-3 501x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("251x61", layout_manager_->GetMinimumSize(kWidth).ToString()); |
- |
- // A normal window with no window icon still produces icon bounds for |
- // Windows, which has a hidden icon that a user can double click on to close |
- // the window. |
- EXPECT_EQ("2,0 17x17", layout_manager_->IconBounds().ToString()); |
-} |
- |
-TEST_F(OpaqueBrowserFrameViewLayoutTest, MaximizedWithoutCaptionButtons) { |
- // Tests the layout of a maximized chrome window with no caption buttons. |
- delegate_->SetWindowState(TestLayoutDelegate::STATE_MAXIMIZED); |
- delegate_->SetShouldShowCaptionButtons(false); |
- root_view_->Layout(); |
- |
- EXPECT_EQ("0,0 0x0", maximize_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", minimize_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", restore_button_->bounds().ToString()); |
- EXPECT_EQ("0,0 0x0", close_button_->bounds().ToString()); |
- |
- EXPECT_EQ("-6,-3 501x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("251x61", layout_manager_->GetMinimumSize(kWidth).ToString()); |
- |
- // In the maximized case, OpaqueBrowserFrameView::NonClientHitTest() uses |
- // this rect, extended to the top left corner of the window. |
- EXPECT_EQ("2,0 17x17", layout_manager_->IconBounds().ToString()); |
+ delegate_->set_show_caption_buttons(false); |
+ |
+ for (int i = 0; i < 2; ++i) { |
+ root_view_->Layout(); |
+ SCOPED_TRACE(i == 0 ? "Window is restored" : "Window is maximized"); |
+ ExpectCaptionButtons(false, 0); |
+ ExpectTabStripAndMinimumSize(false); |
+ ExpectWindowIcon(false); |
+ delegate_->set_maximized(true); |
+ } |
} |
-TEST_F(OpaqueBrowserFrameViewLayoutTest, WithWindowTitleAndIcon) { |
+TEST_F(OpaqueBrowserFrameViewLayoutTest, WindowWithTitleAndIcon) { |
// Tests the layout of pop up windows. |
- delegate_->SetWindowTitle(base::ASCIIToUTF16("Window Title")); |
+ delegate_->set_window_title(base::ASCIIToUTF16("Window Title")); |
AddWindowTitleIcons(); |
- root_view_->Layout(); |
- |
- // We should have the right hand side should match the BasicWindow case. |
- ExpectBasicWindowBounds(); |
- // Check the location of the tab icon and window title. |
- EXPECT_EQ("6,3 17x17", tab_icon_view_->bounds().ToString()); |
- EXPECT_EQ("27,3 370x17", window_title_->bounds().ToString()); |
+ for (int i = 0; i < 2; ++i) { |
+ root_view_->Layout(); |
+ SCOPED_TRACE(i == 0 ? "Window is restored" : "Window is maximized"); |
+ ExpectCaptionButtons(false, 0); |
+ ExpectWindowIcon(false); |
+ ExpectWindowTitle(); |
+ delegate_->set_maximized(true); |
+ } |
} |
TEST_F(OpaqueBrowserFrameViewLayoutTest, WindowWithNewAvatar) { |
// Tests a normal tabstrip window with the new style avatar icon. |
AddNewAvatarButton(); |
- root_view_->Layout(); |
- ExpectBasicWindowBounds(); |
- |
- // Check the location of the avatar button. |
- EXPECT_EQ("385,1 12x18", new_avatar_button_->bounds().ToString()); |
- // The new tab button is 39px wide and slides completely under the new |
- // avatar button, thus increasing the tabstrip by that amount. |
- EXPECT_EQ("-1,13 420x29", |
- layout_manager_->GetBoundsForTabStrip( |
- delegate_->GetTabstripPreferredSize(), kWidth).ToString()); |
- EXPECT_EQ("261x73", layout_manager_->GetMinimumSize(kWidth).ToString()); |
+ for (int i = 0; i < 2; ++i) { |
+ root_view_->Layout(); |
+ SCOPED_TRACE(i == 0 ? "Window is restored" : "Window is maximized"); |
+ ExpectCaptionButtons(false, 0); |
+ ExpectTabStripAndMinimumSize(false); |
+ ExpectAvatar(); |
+ delegate_->set_maximized(true); |
+ } |
} |