| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/frame/browser_view_layout.h" | 5 #include "chrome/browser/ui/views/frame/browser_view_layout.h" |
| 6 | 6 |
| 7 #include "chrome/browser/ui/views/frame/browser_view.h" | 7 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 8 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" | 8 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" |
| 9 #include "chrome/browser/ui/views/frame/contents_container.h" | 9 #include "chrome/browser/ui/views/frame/contents_container.h" |
| 10 #include "chrome/browser/ui/views/frame/devtools_container.h" |
| 10 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" | 11 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
| 11 #include "chrome/browser/ui/views/infobars/infobar_container_view.h" | 12 #include "chrome/browser/ui/views/infobars/infobar_container_view.h" |
| 12 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 13 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
| 13 #include "chrome/test/base/browser_with_test_window_test.h" | 14 #include "chrome/test/base/browser_with_test_window_test.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 16 |
| 16 class MockBrowserViewLayoutDelegate : public BrowserViewLayoutDelegate { | 17 class MockBrowserViewLayoutDelegate : public BrowserViewLayoutDelegate { |
| 17 public: | 18 public: |
| 18 MockBrowserViewLayoutDelegate() | 19 MockBrowserViewLayoutDelegate() |
| 19 : tab_strip_visible_(true), | 20 : tab_strip_visible_(true), |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 /////////////////////////////////////////////////////////////////////////////// | 129 /////////////////////////////////////////////////////////////////////////////// |
| 129 // Tests of BrowserViewLayout. Runs tests without constructing a BrowserView. | 130 // Tests of BrowserViewLayout. Runs tests without constructing a BrowserView. |
| 130 class BrowserViewLayoutTest : public BrowserWithTestWindowTest { | 131 class BrowserViewLayoutTest : public BrowserWithTestWindowTest { |
| 131 public: | 132 public: |
| 132 BrowserViewLayoutTest() | 133 BrowserViewLayoutTest() |
| 133 : delegate_(NULL), | 134 : delegate_(NULL), |
| 134 top_container_(NULL), | 135 top_container_(NULL), |
| 135 tab_strip_(NULL), | 136 tab_strip_(NULL), |
| 136 toolbar_(NULL), | 137 toolbar_(NULL), |
| 137 infobar_container_(NULL), | 138 infobar_container_(NULL), |
| 138 contents_split_(NULL), | |
| 139 contents_container_(NULL), | 139 contents_container_(NULL), |
| 140 devtools_container_(NULL), |
| 140 active_web_view_(NULL) {} | 141 active_web_view_(NULL) {} |
| 141 virtual ~BrowserViewLayoutTest() {} | 142 virtual ~BrowserViewLayoutTest() {} |
| 142 | 143 |
| 143 BrowserViewLayout* layout() { return layout_.get(); } | 144 BrowserViewLayout* layout() { return layout_.get(); } |
| 144 MockBrowserViewLayoutDelegate* delegate() { return delegate_; } | 145 MockBrowserViewLayoutDelegate* delegate() { return delegate_; } |
| 145 MockView* root_view() { return root_view_.get(); } | 146 MockView* root_view() { return root_view_.get(); } |
| 146 MockView* top_container() { return top_container_; } | 147 MockView* top_container() { return top_container_; } |
| 147 TabStrip* tab_strip() { return tab_strip_; } | 148 TabStrip* tab_strip() { return tab_strip_; } |
| 148 MockView* toolbar() { return toolbar_; } | 149 MockView* toolbar() { return toolbar_; } |
| 149 InfoBarContainerView* infobar_container() { return infobar_container_; } | 150 InfoBarContainerView* infobar_container() { return infobar_container_; } |
| 150 MockView* contents_split() { return contents_split_; } | |
| 151 ContentsContainer* contents_container() { return contents_container_; } | 151 ContentsContainer* contents_container() { return contents_container_; } |
| 152 DevToolsContainer* devtools_container() { return devtools_container_; } |
| 152 | 153 |
| 153 // BrowserWithTestWindowTest overrides: | 154 // BrowserWithTestWindowTest overrides: |
| 154 virtual void SetUp() OVERRIDE { | 155 virtual void SetUp() OVERRIDE { |
| 155 BrowserWithTestWindowTest::SetUp(); | 156 BrowserWithTestWindowTest::SetUp(); |
| 156 | 157 |
| 157 root_view_.reset(new MockView(gfx::Size(800, 600))); | 158 root_view_.reset(new MockView(gfx::Size(800, 600))); |
| 158 | 159 |
| 159 immersive_mode_controller_.reset(new MockImmersiveModeController); | 160 immersive_mode_controller_.reset(new MockImmersiveModeController); |
| 160 | 161 |
| 161 top_container_ = new MockView(gfx::Size(800, 60)); | 162 top_container_ = new MockView(gfx::Size(800, 60)); |
| 162 tab_strip_ = new TabStrip(NULL); | 163 tab_strip_ = new TabStrip(NULL); |
| 163 top_container_->AddChildView(tab_strip_); | 164 top_container_->AddChildView(tab_strip_); |
| 164 toolbar_ = new MockView(gfx::Size(800, 30)); | 165 toolbar_ = new MockView(gfx::Size(800, 30)); |
| 165 top_container_->AddChildView(toolbar_); | 166 top_container_->AddChildView(toolbar_); |
| 166 root_view_->AddChildView(top_container_); | 167 root_view_->AddChildView(top_container_); |
| 167 | 168 |
| 168 infobar_container_ = new InfoBarContainerView(NULL); | 169 infobar_container_ = new InfoBarContainerView(NULL); |
| 169 root_view_->AddChildView(infobar_container_); | 170 root_view_->AddChildView(infobar_container_); |
| 170 | 171 |
| 171 contents_split_ = new MockView(gfx::Size(800, 600)); | |
| 172 active_web_view_ = new MockView(gfx::Size(800, 600)); | 172 active_web_view_ = new MockView(gfx::Size(800, 600)); |
| 173 contents_container_ = new ContentsContainer(active_web_view_); | 173 devtools_view_ = new MockView(gfx::Size(800, 600)); |
| 174 contents_split_->AddChildView(contents_container_); | 174 devtools_view_->SetVisible(false); |
| 175 root_view_->AddChildView(contents_split_); | 175 devtools_container_ = |
| 176 new DevToolsContainer(active_web_view_, devtools_view_); |
| 177 contents_container_ = new ContentsContainer(devtools_container_); |
| 178 root_view_->AddChildView(contents_container_); |
| 176 | 179 |
| 177 // TODO(jamescook): Attach |layout_| to |root_view_|? | 180 // TODO(jamescook): Attach |layout_| to |root_view_|? |
| 178 layout_.reset(new BrowserViewLayout); | 181 layout_.reset(new BrowserViewLayout); |
| 179 delegate_ = new MockBrowserViewLayoutDelegate; | 182 delegate_ = new MockBrowserViewLayoutDelegate; |
| 180 layout_->Init(delegate_, | 183 layout_->Init(delegate_, |
| 181 browser(), | 184 browser(), |
| 182 NULL, // BrowserView. | 185 NULL, // BrowserView. |
| 183 top_container_, | 186 top_container_, |
| 184 tab_strip_, | 187 tab_strip_, |
| 185 toolbar_, | 188 toolbar_, |
| 186 infobar_container_, | 189 infobar_container_, |
| 187 contents_split_, | |
| 188 contents_container_, | 190 contents_container_, |
| 189 immersive_mode_controller_.get()); | 191 immersive_mode_controller_.get()); |
| 190 } | 192 } |
| 191 | 193 |
| 192 private: | 194 private: |
| 193 scoped_ptr<BrowserViewLayout> layout_; | 195 scoped_ptr<BrowserViewLayout> layout_; |
| 194 MockBrowserViewLayoutDelegate* delegate_; // Owned by |layout_|. | 196 MockBrowserViewLayoutDelegate* delegate_; // Owned by |layout_|. |
| 195 scoped_ptr<MockView> root_view_; | 197 scoped_ptr<MockView> root_view_; |
| 196 | 198 |
| 197 // Views owned by |root_view_|. | 199 // Views owned by |root_view_|. |
| 198 MockView* top_container_; | 200 MockView* top_container_; |
| 199 TabStrip* tab_strip_; | 201 TabStrip* tab_strip_; |
| 200 MockView* toolbar_; | 202 MockView* toolbar_; |
| 201 InfoBarContainerView* infobar_container_; | 203 InfoBarContainerView* infobar_container_; |
| 202 MockView* contents_split_; | |
| 203 ContentsContainer* contents_container_; | 204 ContentsContainer* contents_container_; |
| 205 DevToolsContainer* devtools_container_; |
| 204 MockView* active_web_view_; | 206 MockView* active_web_view_; |
| 207 MockView* devtools_view_; |
| 205 | 208 |
| 206 scoped_ptr<MockImmersiveModeController> immersive_mode_controller_; | 209 scoped_ptr<MockImmersiveModeController> immersive_mode_controller_; |
| 207 | 210 |
| 208 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutTest); | 211 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutTest); |
| 209 }; | 212 }; |
| 210 | 213 |
| 211 // Test basic construction and initialization. | 214 // Test basic construction and initialization. |
| 212 TEST_F(BrowserViewLayoutTest, BrowserViewLayout) { | 215 TEST_F(BrowserViewLayoutTest, BrowserViewLayout) { |
| 213 EXPECT_TRUE(layout()->browser()); | 216 EXPECT_TRUE(layout()->browser()); |
| 214 EXPECT_TRUE(layout()->GetWebContentsModalDialogHost()); | 217 EXPECT_TRUE(layout()->GetWebContentsModalDialogHost()); |
| 215 EXPECT_FALSE(layout()->InfobarVisible()); | 218 EXPECT_FALSE(layout()->InfobarVisible()); |
| 216 } | 219 } |
| 217 | 220 |
| 218 // Test the core layout functions. | 221 // Test the core layout functions. |
| 219 TEST_F(BrowserViewLayoutTest, Layout) { | 222 TEST_F(BrowserViewLayoutTest, Layout) { |
| 220 // Simulate a window with no interesting UI. | 223 // Simulate a window with no interesting UI. |
| 221 delegate()->set_tab_strip_visible(false); | 224 delegate()->set_tab_strip_visible(false); |
| 222 delegate()->set_toolbar_visible(false); | 225 delegate()->set_toolbar_visible(false); |
| 223 delegate()->set_bookmark_bar_visible(false); | 226 delegate()->set_bookmark_bar_visible(false); |
| 224 layout()->Layout(root_view()); | 227 layout()->Layout(root_view()); |
| 225 | 228 |
| 226 // Top views are zero-height. | 229 // Top views are zero-height. |
| 227 EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString()); | 230 EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString()); |
| 228 EXPECT_EQ("0,0 800x0", toolbar()->bounds().ToString()); | 231 EXPECT_EQ("0,0 800x0", toolbar()->bounds().ToString()); |
| 229 EXPECT_EQ("0,0 800x0", infobar_container()->bounds().ToString()); | 232 EXPECT_EQ("0,0 800x0", infobar_container()->bounds().ToString()); |
| 230 // Contents split fills the window. | 233 // Contents split fills the window. |
| 231 EXPECT_EQ("0,0 800x600", contents_split()->bounds().ToString()); | 234 EXPECT_EQ("0,0 800x600", contents_container()->bounds().ToString()); |
| 232 | 235 |
| 233 // Turn on the toolbar, like in a pop-up window. | 236 // Turn on the toolbar, like in a pop-up window. |
| 234 delegate()->set_toolbar_visible(true); | 237 delegate()->set_toolbar_visible(true); |
| 235 layout()->Layout(root_view()); | 238 layout()->Layout(root_view()); |
| 236 | 239 |
| 237 // Now the toolbar has bounds and other views shift down. | 240 // Now the toolbar has bounds and other views shift down. |
| 238 EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString()); | 241 EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString()); |
| 239 EXPECT_EQ("0,0 800x30", toolbar()->bounds().ToString()); | 242 EXPECT_EQ("0,0 800x30", toolbar()->bounds().ToString()); |
| 240 EXPECT_EQ("0,30 800x0", infobar_container()->bounds().ToString()); | 243 EXPECT_EQ("0,30 800x0", infobar_container()->bounds().ToString()); |
| 241 EXPECT_EQ("0,30 800x570", contents_split()->bounds().ToString()); | 244 EXPECT_EQ("0,30 800x570", contents_container()->bounds().ToString()); |
| 242 | 245 |
| 243 // TODO(jamescook): Tab strip and bookmark bar. | 246 // TODO(jamescook): Tab strip and bookmark bar. |
| 244 } | 247 } |
| 245 | 248 |
| 246 TEST_F(BrowserViewLayoutTest, LayoutDownloadShelf) { | 249 TEST_F(BrowserViewLayoutTest, LayoutDownloadShelf) { |
| 247 scoped_ptr<MockView> download_shelf(new MockView(gfx::Size(800, 50))); | 250 scoped_ptr<MockView> download_shelf(new MockView(gfx::Size(800, 50))); |
| 248 layout()->set_download_shelf(download_shelf.get()); | 251 layout()->set_download_shelf(download_shelf.get()); |
| 249 | 252 |
| 250 // If download shelf doesn't need layout, it doesn't move the bottom edge. | 253 // If download shelf doesn't need layout, it doesn't move the bottom edge. |
| 251 delegate()->set_download_shelf_needs_layout(false); | 254 delegate()->set_download_shelf_needs_layout(false); |
| 252 const int kBottom = 500; | 255 const int kBottom = 500; |
| 253 EXPECT_EQ(kBottom, layout()->LayoutDownloadShelf(kBottom)); | 256 EXPECT_EQ(kBottom, layout()->LayoutDownloadShelf(kBottom)); |
| 254 | 257 |
| 255 // Download shelf layout moves up the bottom edge and sets visibility. | 258 // Download shelf layout moves up the bottom edge and sets visibility. |
| 256 delegate()->set_download_shelf_needs_layout(true); | 259 delegate()->set_download_shelf_needs_layout(true); |
| 257 download_shelf->SetVisible(false); | 260 download_shelf->SetVisible(false); |
| 258 EXPECT_EQ(450, layout()->LayoutDownloadShelf(kBottom)); | 261 EXPECT_EQ(450, layout()->LayoutDownloadShelf(kBottom)); |
| 259 EXPECT_TRUE(download_shelf->visible()); | 262 EXPECT_TRUE(download_shelf->visible()); |
| 260 EXPECT_EQ("0,450 0x50", download_shelf->bounds().ToString()); | 263 EXPECT_EQ("0,450 0x50", download_shelf->bounds().ToString()); |
| 261 } | 264 } |
| OLD | NEW |