Home | History | Annotate | Download | only in views
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_
      6 #define CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble.h"
     11 #include "content/public/browser/notification_observer.h"
     12 #include "content/public/browser/notification_registrar.h"
     13 #include "ui/views/widget/widget_observer.h"
     14 
     15 class BrowserView;
     16 class GURL;
     17 namespace ui {
     18 class SlideAnimation;
     19 }
     20 namespace views {
     21 class View;
     22 class Widget;
     23 }
     24 
     25 // FullscreenExitBubbleViews is responsible for showing a bubble atop the
     26 // screen in fullscreen mode, telling users how to exit and providing a click
     27 // target. The bubble auto-hides, and re-shows when the user moves to the
     28 // screen top.
     29 class FullscreenExitBubbleViews : public FullscreenExitBubble,
     30                                   public content::NotificationObserver,
     31                                   public views::WidgetObserver {
     32  public:
     33   FullscreenExitBubbleViews(BrowserView* browser,
     34                             const GURL& url,
     35                             FullscreenExitBubbleType bubble_type);
     36   virtual ~FullscreenExitBubbleViews();
     37 
     38   void UpdateContent(const GURL& url, FullscreenExitBubbleType bubble_type);
     39 
     40   // Repositions |popup_| if it is visible.
     41   void RepositionIfVisible();
     42 
     43  private:
     44   class FullscreenExitView;
     45 
     46   enum AnimatedAttribute {
     47     ANIMATED_ATTRIBUTE_BOUNDS,
     48     ANIMATED_ATTRIBUTE_OPACITY
     49   };
     50 
     51   // Starts or stops polling the mouse location based on |popup_| and
     52   // |bubble_type_|.
     53   void UpdateMouseWatcher();
     54 
     55   // Updates any state which depends on whether the user is in immersive
     56   // fullscreen.
     57   void UpdateForImmersiveState();
     58 
     59   // Updates |popup|'s bounds given |animation_| and |animated_attribute_|.
     60   void UpdateBounds();
     61 
     62   // Returns the root view containing |browser_view_|.
     63   views::View* GetBrowserRootView() const;
     64 
     65   // FullScreenExitBubble overrides:
     66   virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE;
     67   virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE;
     68   virtual gfx::Rect GetPopupRect(bool ignore_animation_state) const OVERRIDE;
     69   virtual gfx::Point GetCursorScreenPoint() OVERRIDE;
     70   virtual bool WindowContainsPoint(gfx::Point pos) OVERRIDE;
     71   virtual bool IsWindowActive() OVERRIDE;
     72   virtual void Hide() OVERRIDE;
     73   virtual void Show() OVERRIDE;
     74   virtual bool IsAnimating() OVERRIDE;
     75   virtual bool CanMouseTriggerSlideIn() const OVERRIDE;
     76 
     77   // content::NotificationObserver override:
     78   virtual void Observe(int type,
     79                        const content::NotificationSource& source,
     80                        const content::NotificationDetails& details) OVERRIDE;
     81 
     82   // views::WidgetObserver override:
     83   virtual void OnWidgetVisibilityChanged(views::Widget* widget,
     84                                          bool visible) OVERRIDE;
     85 
     86   BrowserView* browser_view_;
     87 
     88   views::Widget* popup_;
     89 
     90   // Animation controlling showing/hiding of the exit bubble.
     91   scoped_ptr<ui::SlideAnimation> animation_;
     92 
     93   // Attribute animated by |animation_|.
     94   AnimatedAttribute animated_attribute_;
     95 
     96   // The contents of the popup.
     97   FullscreenExitView* view_;
     98 
     99   content::NotificationRegistrar registrar_;
    100 
    101   DISALLOW_COPY_AND_ASSIGN(FullscreenExitBubbleViews);
    102 };
    103 
    104 #endif  // CHROME_BROWSER_UI_VIEWS_FULLSCREEN_EXIT_BUBBLE_VIEWS_H_
    105