| Index: chrome/browser/ui/views/frame/browser_view_layout_unittest.cc
|
| diff --git a/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc b/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc
|
| index e083596d6bd6f810ac2d594628598a7520ddf04d..26875bdcd081ec2fa9156329caca0a00a3a8b38f 100644
|
| --- a/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc
|
| +++ b/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc
|
| @@ -5,36 +5,198 @@
|
| #include "chrome/browser/ui/views/frame/browser_view_layout.h"
|
|
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| +#include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h"
|
| +#include "chrome/browser/ui/views/frame/contents_container.h"
|
| +#include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
|
| +#include "chrome/browser/ui/views/frame/overlay_container.h"
|
| #include "chrome/browser/ui/views/infobars/infobar_container_view.h"
|
| +#include "chrome/browser/ui/views/tabs/tab_strip.h"
|
| #include "chrome/test/base/browser_with_test_window_test.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +class MockBrowserViewLayoutDelegate : public BrowserViewLayoutDelegate {
|
| + public:
|
| + MockBrowserViewLayoutDelegate()
|
| + : tab_strip_visible_(true),
|
| + toolbar_visible_(true),
|
| + bookmark_bar_visible_(true),
|
| + download_shelf_needs_layout_(false) {
|
| + }
|
| + virtual ~MockBrowserViewLayoutDelegate() {}
|
| +
|
| + void set_download_shelf_needs_layout(bool layout) {
|
| + download_shelf_needs_layout_ = layout;
|
| + }
|
| + void set_tab_strip_visible(bool visible) {
|
| + tab_strip_visible_ = visible;
|
| + }
|
| + void set_toolbar_visible(bool visible) {
|
| + toolbar_visible_ = visible;
|
| + }
|
| + void set_bookmark_bar_visible(bool visible) {
|
| + bookmark_bar_visible_ = visible;
|
| + }
|
| +
|
| + // BrowserViewLayout::Delegate overrides:
|
| + virtual bool IsTabStripVisible() const OVERRIDE {
|
| + return tab_strip_visible_;
|
| + }
|
| + virtual gfx::Rect GetBoundsForTabStrip(views::View* tab_strip) const
|
| + OVERRIDE {
|
| + return gfx::Rect();
|
| + }
|
| + virtual bool IsToolbarVisible() const OVERRIDE {
|
| + return toolbar_visible_;
|
| + }
|
| + virtual bool IsBookmarkBarVisible() const OVERRIDE {
|
| + return bookmark_bar_visible_;
|
| + }
|
| + virtual bool DownloadShelfNeedsLayout() const OVERRIDE {
|
| + return download_shelf_needs_layout_;
|
| + }
|
| +
|
| + private:
|
| + bool tab_strip_visible_;
|
| + bool toolbar_visible_;
|
| + bool bookmark_bar_visible_;
|
| + bool download_shelf_needs_layout_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MockBrowserViewLayoutDelegate);
|
| +};
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| +// A simple view that prefers an initial size.
|
| +class MockView : public views::View {
|
| + public:
|
| + explicit MockView(gfx::Size initial_size)
|
| + : size_(initial_size) {
|
| + SetBoundsRect(gfx::Rect(gfx::Point(), size_));
|
| + }
|
| + virtual ~MockView() {}
|
| +
|
| + // views::View overrides:
|
| + virtual gfx::Size GetPreferredSize() OVERRIDE {
|
| + return size_;
|
| + }
|
| +
|
| + private:
|
| + gfx::Size size_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MockView);
|
| +};
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| +class MockImmersiveModeController : public ImmersiveModeController {
|
| + public:
|
| + MockImmersiveModeController() {}
|
| + virtual ~MockImmersiveModeController() {}
|
| +
|
| + // ImmersiveModeController overrides:
|
| + virtual void Init(BrowserView* browser_view) OVERRIDE {}
|
| + virtual void SetEnabled(bool enabled) OVERRIDE {}
|
| + virtual bool IsEnabled() const OVERRIDE { return false; }
|
| + virtual bool ShouldHideTabIndicators() const OVERRIDE { return false; }
|
| + virtual bool ShouldHideTopViews() const OVERRIDE { return false; }
|
| + virtual bool IsRevealed() const OVERRIDE { return false; }
|
| + virtual void MaybeStackViewAtTop() OVERRIDE {}
|
| + virtual ImmersiveRevealedLock* GetRevealedLock(
|
| + AnimateReveal animate_reveal) OVERRIDE WARN_UNUSED_RESULT { return NULL; }
|
| + virtual void AnchorWidgetToTopContainer(views::Widget* widget,
|
| + int y_offset) OVERRIDE {}
|
| + virtual void UnanchorWidgetFromTopContainer(views::Widget* widget) OVERRIDE {}
|
| + virtual void OnTopContainerBoundsChanged() OVERRIDE {}
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MockImmersiveModeController);
|
| +};
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| // Tests of BrowserViewLayout. Runs tests without constructing a BrowserView.
|
| class BrowserViewLayoutTest : public BrowserWithTestWindowTest {
|
| public:
|
| - BrowserViewLayoutTest() {}
|
| + BrowserViewLayoutTest()
|
| + : delegate_(NULL),
|
| + top_container_(NULL),
|
| + tab_strip_(NULL),
|
| + toolbar_(NULL),
|
| + infobar_container_(NULL),
|
| + contents_split_(NULL),
|
| + contents_container_(NULL),
|
| + overlay_container_(NULL),
|
| + active_web_view_(NULL) {}
|
| virtual ~BrowserViewLayoutTest() {}
|
|
|
| + BrowserViewLayout* layout() { return layout_.get(); }
|
| + MockBrowserViewLayoutDelegate* delegate() { return delegate_; }
|
| + MockView* root_view() { return root_view_.get(); }
|
| + MockView* top_container() { return top_container_; }
|
| + TabStrip* tab_strip() { return tab_strip_; }
|
| + MockView* toolbar() { return toolbar_; }
|
| + InfoBarContainerView* infobar_container() { return infobar_container_; }
|
| + MockView* contents_split() { return contents_split_; }
|
| + ContentsContainer* contents_container() { return contents_container_; }
|
| +
|
| + // BrowserWithTestWindowTest overrides:
|
| virtual void SetUp() OVERRIDE {
|
| BrowserWithTestWindowTest::SetUp();
|
|
|
| - // Because we have a TestBrowserWindow, not a BrowserView, |layout_| is
|
| - // not attached to a host view.
|
| + root_view_.reset(new MockView(gfx::Size(800, 600)));
|
| +
|
| + top_container_ = new MockView(gfx::Size(800, 60));
|
| + tab_strip_ = new TabStrip(NULL);
|
| + top_container_->AddChildView(tab_strip_);
|
| + toolbar_ = new MockView(gfx::Size(800, 30));
|
| + top_container_->AddChildView(toolbar_);
|
| + root_view_->AddChildView(top_container_);
|
| +
|
| + overlay_container_ = new OverlayContainer(NULL);
|
| + root_view_->AddChildView(overlay_container_);
|
| +
|
| + infobar_container_ = new InfoBarContainerView(NULL, NULL);
|
| + root_view_->AddChildView(infobar_container_);
|
| +
|
| + contents_split_ = new MockView(gfx::Size(800, 600));
|
| + active_web_view_ = new MockView(gfx::Size(800, 600));
|
| + contents_container_ = new ContentsContainer(active_web_view_);
|
| + contents_split_->AddChildView(contents_container_);
|
| + root_view_->AddChildView(contents_split_);
|
| +
|
| + immersive_mode_controller_.reset(new MockImmersiveModeController);
|
| +
|
| + // TODO(jamescook): Attach |layout_| to |root_view_|?
|
| layout_.reset(new BrowserViewLayout);
|
| - infobar_container_.reset(new InfoBarContainerView(NULL, NULL));
|
| - layout_->Init(browser(),
|
| - NULL,
|
| - infobar_container_.get(),
|
| - NULL,
|
| - NULL,
|
| - NULL);
|
| + delegate_ = new MockBrowserViewLayoutDelegate;
|
| + layout_->Init(delegate_,
|
| + browser(),
|
| + NULL, // BrowserView.
|
| + top_container_,
|
| + tab_strip_,
|
| + toolbar_,
|
| + infobar_container_,
|
| + contents_split_,
|
| + contents_container_,
|
| + overlay_container_,
|
| + immersive_mode_controller_.get());
|
| }
|
|
|
| - BrowserViewLayout* layout() { return layout_.get(); }
|
| -
|
| private:
|
| scoped_ptr<BrowserViewLayout> layout_;
|
| - scoped_ptr<InfoBarContainerView> infobar_container_;
|
| + MockBrowserViewLayoutDelegate* delegate_; // Owned by |layout_|.
|
| + scoped_ptr<MockView> root_view_;
|
| +
|
| + // Views owned by |root_view_|.
|
| + MockView* top_container_;
|
| + TabStrip* tab_strip_;
|
| + MockView* toolbar_;
|
| + InfoBarContainerView* infobar_container_;
|
| + MockView* contents_split_;
|
| + ContentsContainer* contents_container_;
|
| + OverlayContainer* overlay_container_;
|
| + MockView* active_web_view_;
|
| +
|
| + scoped_ptr<MockImmersiveModeController> immersive_mode_controller_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutTest);
|
| };
|
| @@ -45,13 +207,49 @@ TEST_F(BrowserViewLayoutTest, BrowserViewLayout) {
|
| EXPECT_TRUE(layout()->GetWebContentsModalDialogHost());
|
| EXPECT_EQ(BrowserViewLayout::kInstantUINone, layout()->GetInstantUIState());
|
| EXPECT_FALSE(layout()->InfobarVisible());
|
| - // TODO(jamescook): Add more as we break dependencies.
|
| }
|
|
|
| // Test the core layout functions.
|
| TEST_F(BrowserViewLayoutTest, Layout) {
|
| - // We don't have a bookmark bar yet, so no contents offset is required.
|
| - EXPECT_EQ(0, layout()->GetContentsOffsetForBookmarkBar());
|
| - EXPECT_EQ(0, layout()->GetTopMarginForActiveContent());
|
| - // TODO(jamescook): Add more as we break dependencies.
|
| + // Simulate a window with no interesting UI.
|
| + delegate()->set_tab_strip_visible(false);
|
| + delegate()->set_toolbar_visible(false);
|
| + delegate()->set_bookmark_bar_visible(false);
|
| + layout()->Layout(root_view());
|
| +
|
| + // Top views are zero-height.
|
| + EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString());
|
| + EXPECT_EQ("0,0 800x0", toolbar()->bounds().ToString());
|
| + EXPECT_EQ("0,0 800x0", infobar_container()->bounds().ToString());
|
| + // Contents split fills the window.
|
| + EXPECT_EQ("0,0 800x600", contents_split()->bounds().ToString());
|
| +
|
| + // Turn on the toolbar, like in a pop-up window.
|
| + delegate()->set_toolbar_visible(true);
|
| + layout()->Layout(root_view());
|
| +
|
| + // Now the toolbar has bounds and other views shift down.
|
| + EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString());
|
| + EXPECT_EQ("0,0 800x30", toolbar()->bounds().ToString());
|
| + EXPECT_EQ("0,30 800x0", infobar_container()->bounds().ToString());
|
| + EXPECT_EQ("0,30 800x570", contents_split()->bounds().ToString());
|
| +
|
| + // TODO(jamescook): Tab strip and bookmark bar.
|
| +}
|
| +
|
| +TEST_F(BrowserViewLayoutTest, LayoutDownloadShelf) {
|
| + scoped_ptr<MockView> download_shelf(new MockView(gfx::Size(800, 50)));
|
| + layout()->set_download_shelf(download_shelf.get());
|
| +
|
| + // If download shelf doesn't need layout, it doesn't move the bottom edge.
|
| + delegate()->set_download_shelf_needs_layout(false);
|
| + const int kBottom = 500;
|
| + EXPECT_EQ(kBottom, layout()->LayoutDownloadShelf(kBottom));
|
| +
|
| + // Download shelf layout moves up the bottom edge and sets visibility.
|
| + delegate()->set_download_shelf_needs_layout(true);
|
| + download_shelf->SetVisible(false);
|
| + EXPECT_EQ(450, layout()->LayoutDownloadShelf(kBottom));
|
| + EXPECT_TRUE(download_shelf->visible());
|
| + EXPECT_EQ("0,450 0x50", download_shelf->bounds().ToString());
|
| }
|
|
|