- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / fullscreen_exit_bubble_views.h
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 gfx {
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 gfx::Animation* animation) OVERRIDE;
67   virtual void AnimationEnded(const gfx::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<gfx::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_