Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / fullscreen / fullscreen_exit_bubble.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_FULLSCREEN_FULLSCREEN_EXIT_BUBBLE_H_
6 #define CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_EXIT_BUBBLE_H_
7
8 #include "base/timer/timer.h"
9 #include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble_type.h"
10 #include "ui/gfx/animation/animation_delegate.h"
11 #include "ui/gfx/point.h"
12 #include "url/gurl.h"
13
14 class Browser;
15
16 namespace gfx {
17 class Rect;
18 }
19
20 class FullscreenExitBubble : public gfx::AnimationDelegate {
21  public:
22   explicit FullscreenExitBubble(Browser* browser,
23                                 const GURL& url,
24                                 FullscreenExitBubbleType bubble_type);
25   ~FullscreenExitBubble() override;
26
27  protected:
28   static const int kPaddingPx;           // Amount of padding around the link
29   static const int kInitialDelayMs;      // Initial time bubble remains onscreen
30   static const int kIdleTimeMs;          // Time before mouse idle triggers hide
31   static const int kPositionCheckHz;     // How fast to check the mouse position
32   static const int kSlideInRegionHeightPx;
33                                          // Height of region triggering
34                                          // slide-in
35   static const int kPopupTopPx;          // Space between the popup and the top
36                                          // of the screen.
37   static const int kSlideInDurationMs;   // Duration of slide-in animation
38   static const int kSlideOutDurationMs;  // Duration of slide-out animation
39
40   // Returns the current desirable rect for the popup window.  If
41   // |ignore_animation_state| is true this returns the rect assuming the popup
42   // is fully onscreen.
43   virtual gfx::Rect GetPopupRect(bool ignore_animation_state) const = 0;
44   virtual gfx::Point GetCursorScreenPoint() = 0;
45   virtual bool WindowContainsPoint(gfx::Point pos) = 0;
46
47   // Returns true if the window is active.
48   virtual bool IsWindowActive() = 0;
49
50   // Hides the bubble.  This is a separate function so it can be called by a
51   // timer.
52   virtual void Hide() = 0;
53
54   // Shows the bubble.
55   virtual void Show() = 0;
56
57   virtual bool IsAnimating() = 0;
58
59   // True if the mouse position can trigger sliding in the exit fullscreen
60   // bubble when the bubble is hidden.
61   virtual bool CanMouseTriggerSlideIn() const = 0;
62
63   void StartWatchingMouse();
64   void StopWatchingMouse();
65   bool IsWatchingMouse() const;
66
67   // Called repeatedly to get the current mouse position and animate the bubble
68   // on or off the screen as appropriate.
69   void CheckMousePosition();
70
71   void ToggleFullscreen();
72   // Accepts the request. Can cause FullscreenExitBubble to be deleted.
73   void Accept();
74   // Denys the request. Can cause FullscreenExitBubble to be deleted.
75   void Cancel();
76
77   // The following strings may change according to the content type and URL.
78   base::string16 GetCurrentMessageText() const;
79   base::string16 GetCurrentDenyButtonText() const;
80
81   // The following strings never change.
82   base::string16 GetAllowButtonText() const;
83   base::string16 GetInstructionText() const;
84
85   // The browser this bubble is in.
86   Browser* browser_;
87
88   // The host the bubble is for, can be empty.
89   GURL url_;
90
91   // The type of the bubble; controls e.g. which buttons to show.
92   FullscreenExitBubbleType bubble_type_;
93
94  private:
95   // Timer to delay before allowing the bubble to hide after it's initially
96   // shown.
97   base::OneShotTimer<FullscreenExitBubble> initial_delay_;
98
99   // Timer to see how long the mouse has been idle.
100   base::OneShotTimer<FullscreenExitBubble> idle_timeout_;
101
102   // Timer to poll the current mouse position.  We can't just listen for mouse
103   // events without putting a non-empty HWND onscreen (or hooking Windows, which
104   // has other problems), so instead we run a low-frequency poller to see if the
105   // user has moved in or out of our show/hide regions.
106   base::RepeatingTimer<FullscreenExitBubble> mouse_position_checker_;
107
108   // The most recently seen mouse position, in screen coordinates.  Used to see
109   // if the mouse has moved since our last check.
110   gfx::Point last_mouse_pos_;
111
112   DISALLOW_COPY_AND_ASSIGN(FullscreenExitBubble);
113 };
114
115 #endif  // CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_EXIT_BUBBLE_H_