| 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 "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "chrome/browser/ui/views/frame/browser_view.h" | 8 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 9 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" | 9 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" |
| 10 #include "chrome/browser/ui/views/frame/contents_layout_manager.h" | 10 #include "chrome/browser/ui/views/frame/contents_layout_manager.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 bool tab_strip_visible_; | 63 bool tab_strip_visible_; |
| 64 bool toolbar_visible_; | 64 bool toolbar_visible_; |
| 65 bool bookmark_bar_visible_; | 65 bool bookmark_bar_visible_; |
| 66 bool download_shelf_needs_layout_; | 66 bool download_shelf_needs_layout_; |
| 67 | 67 |
| 68 DISALLOW_COPY_AND_ASSIGN(MockBrowserViewLayoutDelegate); | 68 DISALLOW_COPY_AND_ASSIGN(MockBrowserViewLayoutDelegate); |
| 69 }; | 69 }; |
| 70 | 70 |
| 71 /////////////////////////////////////////////////////////////////////////////// | 71 /////////////////////////////////////////////////////////////////////////////// |
| 72 | 72 |
| 73 // A simple view that prefers an initial size. | 73 views::View* CreateFixedSizeView(const gfx::Size& size) { |
| 74 class MockView : public views::View { | 74 auto* view = new views::View; |
| 75 public: | 75 view->set_preferred_size(size); |
| 76 explicit MockView(gfx::Size initial_size) | 76 view->SizeToPreferredSize(); |
| 77 : size_(initial_size) { | 77 return view; |
| 78 SetBoundsRect(gfx::Rect(gfx::Point(), size_)); | 78 } |
| 79 } | |
| 80 ~MockView() override {} | |
| 81 | |
| 82 // views::View overrides: | |
| 83 gfx::Size GetPreferredSize() const override { return size_; } | |
| 84 | |
| 85 private: | |
| 86 gfx::Size size_; | |
| 87 | |
| 88 DISALLOW_COPY_AND_ASSIGN(MockView); | |
| 89 }; | |
| 90 | 79 |
| 91 /////////////////////////////////////////////////////////////////////////////// | 80 /////////////////////////////////////////////////////////////////////////////// |
| 92 | 81 |
| 93 class MockImmersiveModeController : public ImmersiveModeController { | 82 class MockImmersiveModeController : public ImmersiveModeController { |
| 94 public: | 83 public: |
| 95 MockImmersiveModeController() : ImmersiveModeController(Type::STUB) {} | 84 MockImmersiveModeController() : ImmersiveModeController(Type::STUB) {} |
| 96 ~MockImmersiveModeController() override {} | 85 ~MockImmersiveModeController() override {} |
| 97 | 86 |
| 98 // ImmersiveModeController overrides: | 87 // ImmersiveModeController overrides: |
| 99 void Init(BrowserView* browser_view) override {} | 88 void Init(BrowserView* browser_view) override {} |
| (...skipping 27 matching lines...) Expand all Loading... |
| 127 tab_strip_(nullptr), | 116 tab_strip_(nullptr), |
| 128 toolbar_(nullptr), | 117 toolbar_(nullptr), |
| 129 infobar_container_(nullptr), | 118 infobar_container_(nullptr), |
| 130 contents_container_(nullptr), | 119 contents_container_(nullptr), |
| 131 contents_web_view_(nullptr), | 120 contents_web_view_(nullptr), |
| 132 devtools_web_view_(nullptr) {} | 121 devtools_web_view_(nullptr) {} |
| 133 ~BrowserViewLayoutTest() override {} | 122 ~BrowserViewLayoutTest() override {} |
| 134 | 123 |
| 135 BrowserViewLayout* layout() { return layout_.get(); } | 124 BrowserViewLayout* layout() { return layout_.get(); } |
| 136 MockBrowserViewLayoutDelegate* delegate() { return delegate_; } | 125 MockBrowserViewLayoutDelegate* delegate() { return delegate_; } |
| 137 MockView* root_view() { return root_view_.get(); } | 126 views::View* root_view() { return root_view_.get(); } |
| 138 MockView* top_container() { return top_container_; } | 127 views::View* top_container() { return top_container_; } |
| 139 TabStrip* tab_strip() { return tab_strip_; } | 128 TabStrip* tab_strip() { return tab_strip_; } |
| 140 MockView* toolbar() { return toolbar_; } | 129 views::View* toolbar() { return toolbar_; } |
| 141 InfoBarContainerView* infobar_container() { return infobar_container_; } | 130 InfoBarContainerView* infobar_container() { return infobar_container_; } |
| 142 MockView* contents_container() { return contents_container_; } | 131 views::View* contents_container() { return contents_container_; } |
| 143 | 132 |
| 144 // BrowserWithTestWindowTest overrides: | 133 // BrowserWithTestWindowTest overrides: |
| 145 void SetUp() override { | 134 void SetUp() override { |
| 146 BrowserWithTestWindowTest::SetUp(); | 135 BrowserWithTestWindowTest::SetUp(); |
| 147 | 136 |
| 148 root_view_.reset(new MockView(gfx::Size(800, 600))); | 137 root_view_.reset(CreateFixedSizeView(gfx::Size(800, 600))); |
| 149 | 138 |
| 150 immersive_mode_controller_.reset(new MockImmersiveModeController); | 139 immersive_mode_controller_.reset(new MockImmersiveModeController); |
| 151 | 140 |
| 152 top_container_ = new MockView(gfx::Size(800, 60)); | 141 top_container_ = CreateFixedSizeView(gfx::Size(800, 60)); |
| 153 tab_strip_ = new TabStrip(nullptr); | 142 tab_strip_ = new TabStrip(nullptr); |
| 154 top_container_->AddChildView(tab_strip_); | 143 top_container_->AddChildView(tab_strip_); |
| 155 toolbar_ = new MockView(gfx::Size(800, 30)); | 144 toolbar_ = CreateFixedSizeView(gfx::Size(800, 30)); |
| 156 top_container_->AddChildView(toolbar_); | 145 top_container_->AddChildView(toolbar_); |
| 157 root_view_->AddChildView(top_container_); | 146 root_view_->AddChildView(top_container_); |
| 158 | 147 |
| 159 infobar_container_ = new InfoBarContainerView(nullptr); | 148 infobar_container_ = new InfoBarContainerView(nullptr); |
| 160 root_view_->AddChildView(infobar_container_); | 149 root_view_->AddChildView(infobar_container_); |
| 161 | 150 |
| 162 contents_web_view_ = new MockView(gfx::Size(800, 600)); | 151 contents_web_view_ = CreateFixedSizeView(gfx::Size(800, 600)); |
| 163 devtools_web_view_ = new MockView(gfx::Size(800, 600)); | 152 devtools_web_view_ = CreateFixedSizeView(gfx::Size(800, 600)); |
| 164 devtools_web_view_->SetVisible(false); | 153 devtools_web_view_->SetVisible(false); |
| 165 | 154 |
| 166 contents_container_ = new MockView(gfx::Size(800, 600)); | 155 contents_container_ = CreateFixedSizeView(gfx::Size(800, 600)); |
| 167 contents_container_->AddChildView(devtools_web_view_); | 156 contents_container_->AddChildView(devtools_web_view_); |
| 168 contents_container_->AddChildView(contents_web_view_); | 157 contents_container_->AddChildView(contents_web_view_); |
| 169 ContentsLayoutManager* contents_layout_manager = | 158 ContentsLayoutManager* contents_layout_manager = |
| 170 new ContentsLayoutManager(devtools_web_view_, contents_web_view_); | 159 new ContentsLayoutManager(devtools_web_view_, contents_web_view_); |
| 171 contents_container_->SetLayoutManager(contents_layout_manager); | 160 contents_container_->SetLayoutManager(contents_layout_manager); |
| 172 | 161 |
| 173 root_view_->AddChildView(contents_container_); | 162 root_view_->AddChildView(contents_container_); |
| 174 | 163 |
| 175 // TODO(jamescook): Attach |layout_| to |root_view_|? | 164 // TODO(jamescook): Attach |layout_| to |root_view_|? |
| 176 layout_.reset(new BrowserViewLayout); | 165 layout_.reset(new BrowserViewLayout); |
| 177 delegate_ = new MockBrowserViewLayoutDelegate(contents_web_view_); | 166 delegate_ = new MockBrowserViewLayoutDelegate(contents_web_view_); |
| 178 layout_->Init(delegate_, | 167 layout_->Init(delegate_, |
| 179 browser(), | 168 browser(), |
| 180 nullptr, // BrowserView. | 169 nullptr, // BrowserView. |
| 181 top_container_, | 170 top_container_, |
| 182 tab_strip_, | 171 tab_strip_, |
| 183 toolbar_, | 172 toolbar_, |
| 184 infobar_container_, | 173 infobar_container_, |
| 185 contents_container_, | 174 contents_container_, |
| 186 contents_layout_manager, | 175 contents_layout_manager, |
| 187 immersive_mode_controller_.get()); | 176 immersive_mode_controller_.get()); |
| 188 } | 177 } |
| 189 | 178 |
| 190 private: | 179 private: |
| 191 std::unique_ptr<BrowserViewLayout> layout_; | 180 std::unique_ptr<BrowserViewLayout> layout_; |
| 192 MockBrowserViewLayoutDelegate* delegate_; // Owned by |layout_|. | 181 MockBrowserViewLayoutDelegate* delegate_; // Owned by |layout_|. |
| 193 std::unique_ptr<MockView> root_view_; | 182 std::unique_ptr<views::View> root_view_; |
| 194 | 183 |
| 195 // Views owned by |root_view_|. | 184 // Views owned by |root_view_|. |
| 196 MockView* top_container_; | 185 views::View* top_container_; |
| 197 TabStrip* tab_strip_; | 186 TabStrip* tab_strip_; |
| 198 MockView* toolbar_; | 187 views::View* toolbar_; |
| 199 InfoBarContainerView* infobar_container_; | 188 InfoBarContainerView* infobar_container_; |
| 200 MockView* contents_container_; | 189 views::View* contents_container_; |
| 201 MockView* contents_web_view_; | 190 views::View* contents_web_view_; |
| 202 MockView* devtools_web_view_; | 191 views::View* devtools_web_view_; |
| 203 | 192 |
| 204 std::unique_ptr<MockImmersiveModeController> immersive_mode_controller_; | 193 std::unique_ptr<MockImmersiveModeController> immersive_mode_controller_; |
| 205 | 194 |
| 206 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutTest); | 195 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutTest); |
| 207 }; | 196 }; |
| 208 | 197 |
| 209 // Test basic construction and initialization. | 198 // Test basic construction and initialization. |
| 210 TEST_F(BrowserViewLayoutTest, BrowserViewLayout) { | 199 TEST_F(BrowserViewLayoutTest, BrowserViewLayout) { |
| 211 EXPECT_TRUE(layout()->browser()); | 200 EXPECT_TRUE(layout()->browser()); |
| 212 EXPECT_TRUE(layout()->GetWebContentsModalDialogHost()); | 201 EXPECT_TRUE(layout()->GetWebContentsModalDialogHost()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 235 // Now the toolbar has bounds and other views shift down. | 224 // Now the toolbar has bounds and other views shift down. |
| 236 EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString()); | 225 EXPECT_EQ("0,0 0x0", tab_strip()->bounds().ToString()); |
| 237 EXPECT_EQ("0,0 800x30", toolbar()->bounds().ToString()); | 226 EXPECT_EQ("0,0 800x30", toolbar()->bounds().ToString()); |
| 238 EXPECT_EQ("0,30 800x0", infobar_container()->bounds().ToString()); | 227 EXPECT_EQ("0,30 800x0", infobar_container()->bounds().ToString()); |
| 239 EXPECT_EQ("0,30 800x570", contents_container()->bounds().ToString()); | 228 EXPECT_EQ("0,30 800x570", contents_container()->bounds().ToString()); |
| 240 | 229 |
| 241 // TODO(jamescook): Tab strip and bookmark bar. | 230 // TODO(jamescook): Tab strip and bookmark bar. |
| 242 } | 231 } |
| 243 | 232 |
| 244 TEST_F(BrowserViewLayoutTest, LayoutDownloadShelf) { | 233 TEST_F(BrowserViewLayoutTest, LayoutDownloadShelf) { |
| 245 std::unique_ptr<MockView> download_shelf(new MockView(gfx::Size(800, 50))); | 234 std::unique_ptr<views::View> download_shelf( |
| 235 CreateFixedSizeView(gfx::Size(800, 50))); |
| 246 layout()->set_download_shelf(download_shelf.get()); | 236 layout()->set_download_shelf(download_shelf.get()); |
| 247 | 237 |
| 248 // If download shelf doesn't need layout, it doesn't move the bottom edge. | 238 // If download shelf doesn't need layout, it doesn't move the bottom edge. |
| 249 delegate()->set_download_shelf_needs_layout(false); | 239 delegate()->set_download_shelf_needs_layout(false); |
| 250 const int kBottom = 500; | 240 const int kBottom = 500; |
| 251 EXPECT_EQ(kBottom, layout()->LayoutDownloadShelf(kBottom)); | 241 EXPECT_EQ(kBottom, layout()->LayoutDownloadShelf(kBottom)); |
| 252 | 242 |
| 253 // Download shelf layout moves up the bottom edge and sets visibility. | 243 // Download shelf layout moves up the bottom edge and sets visibility. |
| 254 delegate()->set_download_shelf_needs_layout(true); | 244 delegate()->set_download_shelf_needs_layout(true); |
| 255 download_shelf->SetVisible(false); | 245 download_shelf->SetVisible(false); |
| 256 EXPECT_EQ(450, layout()->LayoutDownloadShelf(kBottom)); | 246 EXPECT_EQ(450, layout()->LayoutDownloadShelf(kBottom)); |
| 257 EXPECT_TRUE(download_shelf->visible()); | 247 EXPECT_TRUE(download_shelf->visible()); |
| 258 EXPECT_EQ("0,450 0x50", download_shelf->bounds().ToString()); | 248 EXPECT_EQ("0,450 0x50", download_shelf->bounds().ToString()); |
| 259 } | 249 } |
| OLD | NEW |