• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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