OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_UPGRADE_DETECTOR_H_ | 5 #ifndef CHROME_BROWSER_UPGRADE_DETECTOR_H_ |
6 #define CHROME_BROWSER_UPGRADE_DETECTOR_H_ | 6 #define CHROME_BROWSER_UPGRADE_DETECTOR_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "base/timer.h" | 9 #include "base/timer.h" |
10 #include "ui/gfx/image.h" | 10 #include "ui/gfx/image.h" |
11 | 11 |
12 template <typename T> struct DefaultSingletonTraits; | |
13 class PrefService; | 12 class PrefService; |
14 | 13 |
15 /////////////////////////////////////////////////////////////////////////////// | 14 /////////////////////////////////////////////////////////////////////////////// |
16 // UpgradeDetector | 15 // UpgradeDetector |
17 // | 16 // |
18 // This class is a singleton class that monitors when an upgrade happens in the | 17 // This class is a singleton class that monitors when an upgrade happens in the |
19 // background. We basically ask Omaha what it thinks the latest version is and | 18 // background. We basically ask Omaha what it thinks the latest version is and |
20 // if our version is lower we send out a notification upon: | 19 // if our version is lower we send out a notification upon: |
21 // a) Detecting an upgrade and... | 20 // a) Detecting an upgrade and... |
22 // b) When we think the user should be notified about the upgrade. | 21 // b) When we think the user should be notified about the upgrade. |
23 // The latter happens much later, since we don't want to be too annoying. | 22 // The latter happens much later, since we don't want to be too annoying. |
24 // | 23 // |
25 class UpgradeDetector { | 24 class UpgradeDetector { |
26 public: | 25 public: |
27 // The Homeland Security Upgrade Advisory System. | 26 // The Homeland Security Upgrade Advisory System. |
28 enum UpgradeNotificationAnnoyanceLevel { | 27 enum UpgradeNotificationAnnoyanceLevel { |
29 UPGRADE_ANNOYANCE_NONE = 0, // What? Me worry? | 28 UPGRADE_ANNOYANCE_NONE = 0, // What? Me worry? |
30 UPGRADE_ANNOYANCE_LOW, // Green. | 29 UPGRADE_ANNOYANCE_LOW, // Green. |
31 UPGRADE_ANNOYANCE_ELEVATED, // Yellow. | 30 UPGRADE_ANNOYANCE_ELEVATED, // Yellow. |
32 UPGRADE_ANNOYANCE_HIGH, // Red. | 31 UPGRADE_ANNOYANCE_HIGH, // Red. |
33 UPGRADE_ANNOYANCE_SEVERE, // Orange. | 32 UPGRADE_ANNOYANCE_SEVERE, // Orange. |
34 }; | 33 }; |
35 | 34 |
36 // The two types of icons we know about. | 35 // The two types of icons we know about. |
37 enum UpgradeNotificationIconType { | 36 enum UpgradeNotificationIconType { |
38 UPGRADE_ICON_TYPE_BADGE = 0, // For overlay badging of the wrench menu. | 37 UPGRADE_ICON_TYPE_BADGE = 0, // For overlay badging of the wrench menu. |
39 UPGRADE_ICON_TYPE_MENU_ICON, // For showing in the wrench menu. | 38 UPGRADE_ICON_TYPE_MENU_ICON, // For showing in the wrench menu. |
40 }; | 39 }; |
41 | 40 |
42 // Returns the singleton instance. | 41 // Returns the singleton implementation instance. |
43 static UpgradeDetector* GetInstance(); | 42 static UpgradeDetector* GetInstance(); |
44 | 43 |
45 ~UpgradeDetector(); | 44 virtual ~UpgradeDetector(); |
46 | 45 |
47 static void RegisterPrefs(PrefService* prefs); | 46 static void RegisterPrefs(PrefService* prefs); |
48 | 47 |
49 bool notify_upgrade() { return notify_upgrade_; } | 48 bool notify_upgrade() { return notify_upgrade_; } |
50 | 49 |
51 // Retrieves the right icon ID based on the degree of severity (see | 50 // Retrieves the right icon ID based on the degree of severity (see |
52 // UpgradeNotificationAnnoyanceLevel, each level has an an accompanying icon | 51 // UpgradeNotificationAnnoyanceLevel, each level has an an accompanying icon |
53 // to go with it). |type| determines which class of icons the caller wants, | 52 // to go with it). |type| determines which class of icons the caller wants, |
54 // either an icon appropriate for badging the wrench menu or one to display | 53 // either an icon appropriate for badging the wrench menu or one to display |
55 // within the wrench menu. | 54 // within the wrench menu. |
56 int GetIconResourceID(UpgradeNotificationIconType type); | 55 int GetIconResourceID(UpgradeNotificationIconType type); |
57 | 56 |
58 private: | 57 protected: |
59 friend struct DefaultSingletonTraits<UpgradeDetector>; | |
60 | |
61 UpgradeDetector(); | 58 UpgradeDetector(); |
62 | 59 |
63 // Launches a task on the file thread to check if we have the latest version. | 60 // Sends out UPGRADE_DETECTED notification and record upgrade_detected_time_. |
64 void CheckForUpgrade(); | 61 void NotifyUpgradeDetected(); |
65 | 62 |
66 // Sends out a notification and starts a one shot timer to wait until | 63 // Sends out UPGRADE_RECOMMENDED notification and set notify_upgrade_. |
67 // notifying the user. | 64 void NotifyUpgradeRecommended(); |
68 void UpgradeDetected(); | |
69 | 65 |
70 // The function that sends out a notification (after a certain time has | 66 // accessors |
Finnur
2011/06/12 12:07:43
nit: Capital A and end with period.
xiyuan
2011/06/12 21:02:07
Done.
| |
71 // elapsed) that lets the rest of the UI know we should start notifying the | 67 const base::Time& upgrade_detected_time() const { |
72 // user that a new version is available. | 68 return upgrade_detected_time_; |
73 void NotifyOnUpgrade(); | 69 } |
74 | 70 |
75 // We periodically check to see if Chrome has been upgraded. | 71 void set_upgrade_notification_stage(UpgradeNotificationAnnoyanceLevel stage) { |
76 base::RepeatingTimer<UpgradeDetector> detect_upgrade_timer_; | 72 upgrade_notification_stage_ = stage; |
73 } | |
77 | 74 |
78 // After we detect an upgrade we start a recurring timer to see if enough time | 75 private: |
79 // has passed and we should start notifying the user. | |
80 base::RepeatingTimer<UpgradeDetector> upgrade_notification_timer_; | |
81 | |
82 // We use this factory to create callback tasks for UpgradeDetected. We pass | |
83 // the task to the actual upgrade detection code, which is in | |
84 // DetectUpgradeTask. | |
85 ScopedRunnableMethodFactory<UpgradeDetector> method_factory_; | |
86 | |
87 // When the upgrade was detected. | 76 // When the upgrade was detected. |
88 base::Time upgrade_detected_time_; | 77 base::Time upgrade_detected_time_; |
89 | 78 |
90 // True if this build is a dev or canary channel build. | |
91 bool is_unstable_channel_; | |
92 | |
93 // The stage at which the annoyance level for upgrade notifications is at. | 79 // The stage at which the annoyance level for upgrade notifications is at. |
94 UpgradeNotificationAnnoyanceLevel upgrade_notification_stage_; | 80 UpgradeNotificationAnnoyanceLevel upgrade_notification_stage_; |
95 | 81 |
96 // Whether we have waited long enough after detecting an upgrade (to see | 82 // Whether we have waited long enough after detecting an upgrade (to see |
97 // is we should start nagging about upgrading). | 83 // is we should start nagging about upgrading). |
98 bool notify_upgrade_; | 84 bool notify_upgrade_; |
99 | 85 |
100 DISALLOW_COPY_AND_ASSIGN(UpgradeDetector); | 86 DISALLOW_COPY_AND_ASSIGN(UpgradeDetector); |
101 }; | 87 }; |
102 | 88 |
103 #endif // CHROME_BROWSER_UPGRADE_DETECTOR_H_ | 89 #endif // CHROME_BROWSER_UPGRADE_DETECTOR_H_ |
OLD | NEW |