Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / frame / browser_non_client_frame_view_ash.h
index b5fd737..ce15dad 100644 (file)
@@ -8,13 +8,16 @@
 #include "ash/shell_observer.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_ptr.h"
+#include "chrome/browser/command_observer.h"
 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
 #include "chrome/browser/ui/views/tab_icon_view_model.h"
+#include "ui/views/controls/button/button.h"
 
 class TabIconView;
 
 namespace ash {
 class FrameBorderHitTestController;
+class FrameCaptionButton;
 class FrameCaptionButtonContainerView;
 class HeaderPainter;
 }
@@ -23,10 +26,11 @@ class ImageButton;
 class ToggleImageButton;
 }
 
-class BrowserNonClientFrameViewAsh
-    : public BrowserNonClientFrameView,
-      public ash::ShellObserver,
-      public chrome::TabIconViewModel {
+class BrowserNonClientFrameViewAsh : public BrowserNonClientFrameView,
+                                     public ash::ShellObserver,
+                                     public chrome::TabIconViewModel,
+                                     public CommandObserver,
+                                     public views::ButtonListener {
  public:
   static const char kViewClassName[];
 
@@ -35,13 +39,13 @@ class BrowserNonClientFrameViewAsh
 
   void Init();
 
-  // BrowserNonClientFrameView overrides:
+  // BrowserNonClientFrameView:
   virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const OVERRIDE;
   virtual int GetTopInset() const OVERRIDE;
   virtual int GetThemeBackgroundXInset() const OVERRIDE;
   virtual void UpdateThrobber(bool running) OVERRIDE;
 
-  // views::NonClientFrameView overrides:
+  // views::NonClientFrameView:
   virtual gfx::Rect GetBoundsForClientView() const OVERRIDE;
   virtual gfx::Rect GetWindowBoundsForClientBounds(
       const gfx::Rect& client_bounds) const OVERRIDE;
@@ -51,23 +55,31 @@ class BrowserNonClientFrameViewAsh
   virtual void ResetWindowControls() OVERRIDE;
   virtual void UpdateWindowIcon() OVERRIDE;
   virtual void UpdateWindowTitle() OVERRIDE;
+  virtual void SizeConstraintsChanged() OVERRIDE;
 
-  // views::View overrides:
+  // views::View:
   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
   virtual void Layout() OVERRIDE;
   virtual const char* GetClassName() const OVERRIDE;
-  virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
   virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
-  virtual gfx::Size GetMinimumSize() OVERRIDE;
+  virtual gfx::Size GetMinimumSize() const OVERRIDE;
+  virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
 
   // ash::ShellObserver:
   virtual void OnMaximizeModeStarted() OVERRIDE;
   virtual void OnMaximizeModeEnded() OVERRIDE;
 
-  // Overridden from chrome::TabIconViewModel:
+  // chrome::TabIconViewModel:
   virtual bool ShouldTabIconViewAnimate() const OVERRIDE;
   virtual gfx::ImageSkia GetFaviconForTabIconView() OVERRIDE;
 
+  // CommandObserver:
+  virtual void EnabledStateChangedForCommand(int id, bool enabled) OVERRIDE;
+
+  // views::ButtonListener:
+  virtual void ButtonPressed(views::Button* sender,
+                             const ui::Event& event) OVERRIDE;
+
  private:
   FRIEND_TEST_ALL_PREFIXES(BrowserNonClientFrameViewAshTest, WindowHeader);
   FRIEND_TEST_ALL_PREFIXES(BrowserNonClientFrameViewAshTest,
@@ -77,6 +89,10 @@ class BrowserNonClientFrameViewAsh
   FRIEND_TEST_ALL_PREFIXES(BrowserNonClientFrameViewAshTest,
                            ToggleMaximizeModeRelayout);
 
+  // views::NonClientFrameView:
+  virtual bool DoesIntersectRect(const views::View* target,
+                                 const gfx::Rect& rect) const OVERRIDE;
+
   // Distance between the left edge of the NonClientFrameView and the tab strip.
   int GetTabStripLeftInset() const;
 
@@ -94,6 +110,11 @@ class BrowserNonClientFrameViewAsh
   // scheme than browser windows.
   bool UsePackagedAppHeaderStyle() const;
 
+  // Returns true if the header should be painted with a WebApp header style.
+  // The WebApp header style has a back button and title along with the usual
+  // accoutrements.
+  bool UseWebAppHeaderStyle() const;
+
   // Layout the incognito icon.
   void LayoutAvatar();
 
@@ -111,9 +132,15 @@ class BrowserNonClientFrameViewAsh
   // the packaged app header style.
   void PaintContentEdge(gfx::Canvas* canvas);
 
+  // Update the state of the back button.
+  void UpdateBackButtonState(bool enabled);
+
   // View which contains the window controls.
   ash::FrameCaptionButtonContainerView* caption_button_container_;
 
+  // The back button for web app style header.
+  ash::FrameCaptionButton* web_app_back_button_;
+
   // For popups, the window icon.
   TabIconView* window_icon_;