critical_notification_bubble_view.h revision a93a17c8d99d686bd4a1511e5504e5e6cc9fcadf
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.h"
9#include "ui/views/bubble/bubble_delegate.h"
10#include "ui/views/controls/button/button.h"
11
12namespace ui {
13class Accelerator;
14}
15
16namespace views {
17class Label;
18class LabelButton;
19}
20
21class 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::AccessibleViewState* 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