diff options
-rw-r--r-- | chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm | 9 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/browser_toolbar_gtk.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/toolbar/wrench_menu_model.cc | 25 | ||||
-rw-r--r-- | chrome/browser/ui/views/toolbar_view.cc | 27 | ||||
-rw-r--r-- | chrome/browser/ui/views/toolbar_view.h | 4 | ||||
-rw-r--r-- | chrome/browser/upgrade_detector.cc | 25 | ||||
-rw-r--r-- | chrome/browser/upgrade_detector.h | 16 |
7 files changed, 56 insertions, 54 deletions
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm index 7aa4def..8c89430 100644 --- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm +++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm @@ -555,10 +555,13 @@ class NotificationBridge : public NotificationObserver { } - (void)badgeWrenchMenuIfNeeded { - if (UpgradeDetector::GetInstance()->notify_upgrade()) - [[wrenchButton_ cell] setOverlayImageID:IDR_UPDATE_BADGE]; - else + if (UpgradeDetector::GetInstance()->notify_upgrade()) { + [[wrenchButton_ cell] + setOverlayImageID:UpgradeDetector::GetInstance()->GetIconResourceID( + UpgradeDetector::UPGRADE_ICON_TYPE_BADGE)]; + } else { [[wrenchButton_ cell] setOverlayImageID:0]; + } } - (void)prefChanged:(std::string*)prefName { diff --git a/chrome/browser/ui/gtk/browser_toolbar_gtk.cc b/chrome/browser/ui/gtk/browser_toolbar_gtk.cc index 555c803..18a2b54 100644 --- a/chrome/browser/ui/gtk/browser_toolbar_gtk.cc +++ b/chrome/browser/ui/gtk/browser_toolbar_gtk.cc @@ -637,7 +637,9 @@ gboolean BrowserToolbarGtk::OnWrenchMenuButtonExpose(GtkWidget* sender, GdkEventExpose* expose) { const SkBitmap* badge = NULL; if (UpgradeDetector::GetInstance()->notify_upgrade()) { - badge = theme_service_->GetBitmapNamed(IDR_UPDATE_BADGE); + badge = theme_service_->GetBitmapNamed( + UpgradeDetector::GetInstance()->GetIconResourceID( + UpgradeDetector::UPGRADE_ICON_TYPE_BADGE)); } else { return FALSE; } diff --git a/chrome/browser/ui/toolbar/wrench_menu_model.cc b/chrome/browser/ui/toolbar/wrench_menu_model.cc index 2d869c8..9551932 100644 --- a/chrome/browser/ui/toolbar/wrench_menu_model.cc +++ b/chrome/browser/ui/toolbar/wrench_menu_model.cc @@ -271,28 +271,15 @@ string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const { bool WrenchMenuModel::GetIconForCommandId(int command_id, SkBitmap* icon) const { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); switch (command_id) { case IDC_UPGRADE_DIALOG: { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - int resource_id; - UpgradeDetector::UpgradeNotificationAnnoyanceLevel stage = - UpgradeDetector::GetInstance()->upgrade_notification_stage(); - switch (stage) { - case UpgradeDetector::UPGRADE_ANNOYANCE_SEVERE: - resource_id = IDR_UPDATE_MENU4; - break; - case UpgradeDetector::UPGRADE_ANNOYANCE_HIGH: - resource_id = IDR_UPDATE_MENU3; - break; - case UpgradeDetector::UPGRADE_ANNOYANCE_ELEVATED: - resource_id = IDR_UPDATE_MENU2; - break; - default: - resource_id = IDR_UPDATE_MENU; - break; + if (UpgradeDetector::GetInstance()->notify_upgrade()) { + *icon = rb.GetNativeImageNamed( + UpgradeDetector::GetInstance()->GetIconResourceID( + UpgradeDetector::UPGRADE_ICON_TYPE_MENU_ICON)); + return true; } - *icon = *rb.GetBitmapNamed(resource_id); - break; } default: break; diff --git a/chrome/browser/ui/views/toolbar_view.cc b/chrome/browser/ui/views/toolbar_view.cc index 20c4715..58d35f5 100644 --- a/chrome/browser/ui/views/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar_view.cc @@ -111,10 +111,8 @@ ToolbarView::ToolbarView(Browser* browser) IDR_LOCATIONBG_POPUPMODE_EDGE); } - if (!IsUpgradeRecommended()) { - registrar_.Add(this, NotificationType::UPGRADE_RECOMMENDED, - NotificationService::AllSources()); - } + registrar_.Add(this, NotificationType::UPGRADE_RECOMMENDED, + NotificationService::AllSources()); registrar_.Add(this, NotificationType::MODULE_INCOMPATIBILITY_BADGE_CHANGE, NotificationService::AllSources()); } @@ -619,23 +617,6 @@ bool ToolbarView::IsUpgradeRecommended() { #endif } -int ToolbarView::GetUpgradeRecommendedBadge() const { -#if defined(OS_CHROMEOS) - return IDR_UPDATE_BADGE; -#else - switch (UpgradeDetector::GetInstance()->upgrade_notification_stage()) { - case UpgradeDetector::UPGRADE_ANNOYANCE_SEVERE: - return IDR_UPDATE_BADGE4; - case UpgradeDetector::UPGRADE_ANNOYANCE_HIGH: - return IDR_UPDATE_BADGE3; - case UpgradeDetector::UPGRADE_ANNOYANCE_ELEVATED: - return IDR_UPDATE_BADGE2; - default: - return IDR_UPDATE_BADGE; - } -#endif -} - bool ToolbarView::ShouldShowIncompatibilityWarning() { #if defined(OS_WIN) EnumerateModulesModel* loaded_modules = EnumerateModulesModel::GetInstance(); @@ -752,7 +733,9 @@ SkBitmap ToolbarView::GetAppMenuIcon(views::CustomButton::ButtonState state) { // Only one badge can be active at any given time. The Upgrade notification // is deemed most important, then the DLL conflict badge. if (IsUpgradeRecommended()) { - badge = *tp->GetBitmapNamed(GetUpgradeRecommendedBadge()); + badge = *tp->GetBitmapNamed( + UpgradeDetector::GetInstance()->GetIconResourceID( + UpgradeDetector::UPGRADE_ICON_TYPE_BADGE)); } else if (ShouldShowIncompatibilityWarning()) { #if defined(OS_WIN) if (!was_showing) diff --git a/chrome/browser/ui/views/toolbar_view.h b/chrome/browser/ui/views/toolbar_view.h index 53616fc..a5a6c8e 100644 --- a/chrome/browser/ui/views/toolbar_view.h +++ b/chrome/browser/ui/views/toolbar_view.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_VIEW_H_ #pragma once +#include <set> #include <vector> #include "base/memory/ref_counted.h" @@ -144,9 +145,6 @@ class ToolbarView : public AccessiblePaneView, // Returns true if we should show the upgrade recommended dot. bool IsUpgradeRecommended(); - // Retrieve which badge we should show when recommending an upgrade. - int GetUpgradeRecommendedBadge() const; - // Returns true if we should show the background page badge. bool ShouldShowBackgroundPageBadge(); diff --git a/chrome/browser/upgrade_detector.cc b/chrome/browser/upgrade_detector.cc index df2fbb0..c15c8d5 100644 --- a/chrome/browser/upgrade_detector.cc +++ b/chrome/browser/upgrade_detector.cc @@ -23,6 +23,8 @@ #include "content/browser/browser_thread.h" #include "content/common/notification_service.h" #include "content/common/notification_type.h" +#include "grit/theme_resources.h" +#include "ui/base/resource/resource_bundle.h" #if defined(OS_WIN) #include "chrome/installer/util/install_util.h" @@ -44,7 +46,7 @@ const int kCheckForUpgradeMs = 2 * 60 * 60 * 1000; // 2 hours. const int kNotifyCycleTimeMs = 20 * 60 * 1000; // 20 minutes. // Same as kNotifyCycleTimeMs but only used during testing. -const int kNotifyCycleTimeForTestingMs = 5000; // 5 seconds. +const int kNotifyCycleTimeForTestingMs = 500; // Half a second. std::string CmdLineInterval() { const CommandLine& cmd_line = *CommandLine::ForCurrentProcess(); @@ -155,6 +157,22 @@ void UpgradeDetector::RegisterPrefs(PrefService* prefs) { prefs->RegisterBooleanPref(prefs::kRestartLastSessionOnShutdown, false); } +int UpgradeDetector::GetIconResourceID(UpgradeNotificationIconType type) { + bool badge = type == UPGRADE_ICON_TYPE_BADGE; + switch (upgrade_notification_stage_) { + case UPGRADE_ANNOYANCE_SEVERE: + return badge ? IDR_UPDATE_BADGE4 : IDR_UPDATE_MENU4; + case UPGRADE_ANNOYANCE_HIGH: + return badge ? IDR_UPDATE_BADGE3 : IDR_UPDATE_MENU3; + case UPGRADE_ANNOYANCE_ELEVATED: + return badge ? IDR_UPDATE_BADGE2 : IDR_UPDATE_MENU2; + case UPGRADE_ANNOYANCE_LOW: + return badge ? IDR_UPDATE_BADGE : IDR_UPDATE_MENU; + default: + return 0; + } +} + UpgradeDetector::UpgradeDetector() : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), is_unstable_channel_(false), @@ -227,10 +245,10 @@ void UpgradeDetector::NotifyOnUpgrade() { std::string interval = CmdLineInterval(); // A command line interval implies testing, which we'll make more convenient - // by switching to minutes of waiting instead of days between flipping + // by switching to seconds of waiting instead of days between flipping // severity. This works in conjunction with the similar interval.empty() // check below. - int time_passed = interval.empty() ? delta.InHours() : delta.InMinutes(); + int64 time_passed = interval.empty() ? delta.InHours() : delta.InSeconds(); if (is_unstable_channel_) { // There's only one threat level for unstable channels like dev and @@ -248,6 +266,7 @@ void UpgradeDetector::NotifyOnUpgrade() { } } else { const int kMultiplier = interval.empty() ? 24 : 1; + // 14 days when not testing, otherwise 14 seconds. const int kSevereThreshold = 14 * kMultiplier; const int kHighThreshold = 7 * kMultiplier; const int kElevatedThreshold = 4 * kMultiplier; diff --git a/chrome/browser/upgrade_detector.h b/chrome/browser/upgrade_detector.h index 3188efb..00227d5 100644 --- a/chrome/browser/upgrade_detector.h +++ b/chrome/browser/upgrade_detector.h @@ -7,6 +7,7 @@ #pragma once #include "base/timer.h" +#include "ui/gfx/image.h" template <typename T> struct DefaultSingletonTraits; class PrefService; @@ -32,6 +33,12 @@ class UpgradeDetector { UPGRADE_ANNOYANCE_SEVERE, // Orange. }; + // The two types of icons we know about. + enum UpgradeNotificationIconType { + UPGRADE_ICON_TYPE_BADGE = 0, // For overlay badging of the wrench menu. + UPGRADE_ICON_TYPE_MENU_ICON, // For showing in the wrench menu. + }; + // Returns the singleton instance. static UpgradeDetector* GetInstance(); @@ -41,9 +48,12 @@ class UpgradeDetector { bool notify_upgrade() { return notify_upgrade_; } - UpgradeNotificationAnnoyanceLevel upgrade_notification_stage() const { - return upgrade_notification_stage_; - } + // Retrieves the right icon ID based on the degree of severity (see + // UpgradeNotificationAnnoyanceLevel, each level has an an accompanying icon + // to go with it). |type| determines which class of icons the caller wants, + // either an icon appropriate for badging the wrench menu or one to display + // within the wrench menu. + int GetIconResourceID(UpgradeNotificationIconType type); private: friend struct DefaultSingletonTraits<UpgradeDetector>; |