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