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_CRITICAL_NOTIFICATION_BUBBLE_VIEW_H_ 6 #define CHROME_BROWSER_UI_VIEWS_CRITICAL_NOTIFICATION_BUBBLE_VIEW_H_ 7 8 #include "base/timer/timer.h" 9 #include "ui/views/bubble/bubble_delegate.h" 10 #include "ui/views/controls/button/button.h" 11 12 namespace ui { 13 class Accelerator; 14 } 15 16 namespace views { 17 class Label; 18 class LabelButton; 19 } 20 21 class CriticalNotificationBubbleView : public views::BubbleDelegateView, 22 public views::ButtonListener { 23 public: 24 explicit CriticalNotificationBubbleView(views::View* anchor_view); 25 virtual ~CriticalNotificationBubbleView(); 26 27 // views::ButtonListener overrides: 28 virtual void ButtonPressed(views::Button* sender, 29 const ui::Event& event) OVERRIDE; 30 31 // views::WidgetDelegate overrides: 32 virtual void WindowClosing() OVERRIDE; 33 34 // views::View overrides: 35 virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 36 virtual void ViewHierarchyChanged( 37 const ViewHierarchyChangedDetails& details) OVERRIDE; 38 39 protected: 40 // views::BubbleDelegateView overrides: 41 virtual bool AcceleratorPressed( 42 const ui::Accelerator& accelerator) OVERRIDE; 43 virtual void Init() OVERRIDE; 44 45 private: 46 // Helper function to calculate the remaining time (in seconds) until 47 // spontaneous reboot. 48 int GetRemainingTime(); 49 50 // Helper function to set the headline for the bubble. 51 void UpdateBubbleHeadline(int seconds); 52 53 // Called when the timer fires each time the clock ticks. 54 void OnCountdown(); 55 56 // The headline and buttons on the bubble. 57 views::Label* headline_; 58 views::LabelButton* restart_button_; 59 views::LabelButton* dismiss_button_; 60 61 // A timer to refresh the bubble to show new countdown value. 62 base::RepeatingTimer<CriticalNotificationBubbleView> refresh_timer_; 63 64 // When the bubble was created. 65 base::Time bubble_created_; 66 67 DISALLOW_COPY_AND_ASSIGN(CriticalNotificationBubbleView); 68 }; 69 70 #endif // CHROME_BROWSER_UI_VIEWS_CRITICAL_NOTIFICATION_BUBBLE_VIEW_H_ 71