Index: chrome/browser/ui/views/frame/browser_view_layout.h |
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.h b/chrome/browser/ui/views/frame/browser_view_layout.h |
index c9af58a9036033b3cca3d22b1f044a1dbe0de3e2..22cfcff51ec1e8c115196e87936059a261affb13 100644 |
--- a/chrome/browser/ui/views/frame/browser_view_layout.h |
+++ b/chrome/browser/ui/views/frame/browser_view_layout.h |
@@ -16,12 +16,12 @@ class BookmarkBarView; |
class Browser; |
class BrowserView; |
class ContentsContainer; |
-class DownloadShelfView; |
+class ImmersiveModeController; |
class InfoBarContainerView; |
class OverlayContainer; |
class TabContentsContainer; |
class TabStrip; |
-class ToolbarView; |
+class TopContainerView; |
class WebContentsModalDialogHost; |
namespace gfx { |
@@ -33,6 +33,19 @@ namespace views { |
class SingleSplitView; |
} |
+// Delegate class to allow BrowserViewLayout to be decoupled from BrowserView |
+// for testing. Not a nested class so it can be forward declared. |
+class BrowserViewLayoutDelegate { |
sky
2013/05/15 00:37:22
put in its own header.
James Cook
2013/05/15 16:45:39
Done.
|
+ public: |
+ virtual ~BrowserViewLayoutDelegate() {} |
sky
2013/05/15 00:37:22
nit: make protected as BrowserViewLayout doesn't o
James Cook
2013/05/15 16:45:39
I don't understand this suggestion. BrowserView ow
sky
2013/05/15 17:24:52
Makes ownership simpler. BrowserView has and owns
|
+ |
+ virtual bool IsTabStripVisible() const = 0; |
+ virtual gfx::Rect GetBoundsForTabStrip(views::View* tab_strip) const = 0; |
+ virtual bool IsToolbarVisible() const = 0; |
+ virtual bool IsBookmarkBarVisible() const = 0; |
+ virtual bool DownloadShelfNeedsLayout() const = 0; |
+}; |
+ |
// The layout manager used in chrome browser. |
class BrowserViewLayout : public views::LayoutManager { |
public: |
@@ -43,18 +56,30 @@ class BrowserViewLayout : public views::LayoutManager { |
virtual ~BrowserViewLayout(); |
// Sets all the views to be managed. Tests may inject stubs or NULL. |
+ // Does not take ownership. |
void Init(Browser* browser, |
+ BrowserViewLayoutDelegate* delegate, |
BrowserView* browser_view, |
+ views::View* top_container, |
+ TabStrip* tab_strip, |
+ views::View* toolbar, |
InfoBarContainerView* infobar_container, |
- views::SingleSplitView* contents_split, |
+ views::View* contents_split, |
ContentsContainer* contents_container, |
- OverlayContainer* overlay_container); |
+ OverlayContainer* overlay_container, |
+ ImmersiveModeController* immersive_mode_controller); |
// Sets or updates views that are not available when |this| is initialized. |
+ void set_window_switcher_button(views::View* button) { |
+ window_switcher_button_ = button; |
+ } |
+ void set_tab_strip(TabStrip* tab_strip) { |
+ tab_strip_ = tab_strip; |
+ } |
void set_bookmark_bar(BookmarkBarView* bookmark_bar) { |
bookmark_bar_ = bookmark_bar; |
} |
- void set_download_shelf(DownloadShelfView* download_shelf) { |
+ void set_download_shelf(views::View* download_shelf) { |
download_shelf_ = download_shelf; |
} |
@@ -83,6 +108,7 @@ class BrowserViewLayout : public views::LayoutManager { |
private: |
FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, BrowserViewLayout); |
FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, Layout); |
+ FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, LayoutDownloadShelf); |
class WebContentsModalDialogHostViews; |
enum InstantUIState { |
@@ -99,7 +125,7 @@ class BrowserViewLayout : public views::LayoutManager { |
// Layout the tab strip region, returns the coordinate of the bottom of the |
// TabStrip, for laying out subsequent controls. |
- int LayoutTabStripRegion(); |
+ int LayoutTabStripRegion(views::View* browser_view); |
// Layout the following controls, starting at |top|, returns the coordinate |
// of the bottom of the control, for laying out the next control. |
@@ -143,16 +169,28 @@ class BrowserViewLayout : public views::LayoutManager { |
// The browser from the owning BrowserView. |
Browser* browser_; |
+ // The delegate interface. May be a mock in tests. |
+ BrowserViewLayoutDelegate* delegate_; |
+ |
// The owning BrowserView. May be NULL in tests. |
+ // TODO(jamescook): Remove this, use the views::View passed in to Layout(). |
BrowserView* browser_view_; |
// Child views that the layout manager manages. |
+ // NOTE: If you add a view, try to add it as a views::View, which makes |
+ // testing much easier. |
+ views::View* top_container_; |
+ TabStrip* tab_strip_; |
+ views::View* toolbar_; |
BookmarkBarView* bookmark_bar_; |
InfoBarContainerView* infobar_container_; |
- views::SingleSplitView* contents_split_; |
+ views::View* contents_split_; |
ContentsContainer* contents_container_; |
OverlayContainer* overlay_container_; |
- DownloadShelfView* download_shelf_; |
+ views::View* window_switcher_button_; |
+ views::View* download_shelf_; |
+ |
+ ImmersiveModeController* immersive_mode_controller_; |
// The bounds within which the vertically-stacked contents of the BrowserView |
// should be laid out within. This is just the local bounds of the |