Index: chrome/browser/ui/views/toolbar/toolbar_view.cc |
=================================================================== |
--- chrome/browser/ui/views/toolbar/toolbar_view.cc (revision 283822) |
+++ chrome/browser/ui/views/toolbar/toolbar_view.cc (working copy) |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/ui/views/toolbar/toolbar_view.h" |
+#include <algorithm> |
+ |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
#include "base/i18n/number_formatting.h" |
@@ -44,7 +46,6 @@ |
#include "chrome/browser/ui/views/toolbar/toolbar_button.h" |
#include "chrome/browser/ui/views/toolbar/wrench_menu.h" |
#include "chrome/browser/ui/views/toolbar/wrench_toolbar_button.h" |
-#include "chrome/browser/upgrade_detector.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "content/public/browser/browser_accessibility_state.h" |
@@ -73,8 +74,6 @@ |
#include "ui/views/window/non_client_view.h" |
#if defined(OS_WIN) |
-#include "base/win/windows_version.h" |
-#include "chrome/browser/enumerate_modules_model_win.h" |
#include "chrome/browser/ui/views/conflicting_module_view_win.h" |
#include "chrome/browser/ui/views/critical_notification_bubble_view.h" |
#endif |
@@ -136,6 +135,7 @@ |
browser_actions_(NULL), |
app_menu_(NULL), |
browser_(browser), |
+ badge_controller_(browser->profile(), this), |
extension_message_bubble_factory_( |
new extensions::ExtensionMessageBubbleFactory(browser->profile(), |
this)) { |
@@ -166,16 +166,7 @@ |
#if defined(OS_WIN) |
registrar_.Add(this, chrome::NOTIFICATION_CRITICAL_UPGRADE_INSTALLED, |
content::NotificationService::AllSources()); |
- if (base::win::GetVersion() == base::win::VERSION_XP) { |
- registrar_.Add(this, chrome::NOTIFICATION_MODULE_LIST_ENUMERATED, |
- content::NotificationService::AllSources()); |
- } |
#endif |
- registrar_.Add(this, |
- chrome::NOTIFICATION_MODULE_INCOMPATIBILITY_BADGE_CHANGE, |
- content::NotificationService::AllSources()); |
- registrar_.Add(this, chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED, |
- content::Source<Profile>(browser_->profile())); |
} |
ToolbarView::~ToolbarView() { |
@@ -264,7 +255,7 @@ |
// Add any necessary badges to the menu item based on the system state. |
// Do this after |app_menu_| has been added as a bubble may be shown that |
// needs the widget (widget found by way of app_menu_->GetWidget()). |
- UpdateAppMenuState(); |
+ badge_controller_.UpdateDelegate(); |
location_bar_->Init(); |
@@ -490,12 +481,6 @@ |
const content::NotificationSource& source, |
const content::NotificationDetails& details) { |
switch (type) { |
- case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: |
- case chrome::NOTIFICATION_MODULE_INCOMPATIBILITY_BADGE_CHANGE: |
- case chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED: |
- case chrome::NOTIFICATION_MODULE_LIST_ENUMERATED: |
- UpdateAppMenuState(); |
- break; |
case chrome::NOTIFICATION_OUTDATED_INSTALL: |
ShowOutdatedInstallNotification(true); |
break; |
@@ -714,24 +699,39 @@ |
return ViewTargeterDelegate::DoesIntersectRect(this, rect); |
} |
-bool ToolbarView::ShouldShowUpgradeRecommended() { |
-#if defined(OS_CHROMEOS) |
- // In chromeos, the update recommendation is shown in the system tray. So it |
- // should not be displayed in the wrench menu. |
- return false; |
-#else |
- return (UpgradeDetector::GetInstance()->notify_upgrade()); |
-#endif |
-} |
+void ToolbarView::UpdateBadgeSeverity(WrenchMenuBadgeController::BadgeType type, |
+ WrenchIconPainter::Severity severity, |
+ bool animate) { |
+ // Showing the bubble requires |app_menu_| to be in a widget. See comment |
+ // in ConflictingModuleView for details. |
+ DCHECK(app_menu_->GetWidget()); |
-bool ToolbarView::ShouldShowIncompatibilityWarning() { |
+ base::string16 accname_app = l10n_util::GetStringUTF16(IDS_ACCNAME_APP); |
+ if (type == WrenchMenuBadgeController::UPGRADE_NOTIFICATION) { |
+ accname_app = l10n_util::GetStringFUTF16( |
+ IDS_ACCNAME_APP_UPGRADE_RECOMMENDED, accname_app); |
+ } |
+ app_menu_->SetAccessibleName(accname_app); |
+ app_menu_->SetSeverity(severity, animate); |
+ SchedulePaint(); |
sky
2014/07/17 19:54:28
I realize you're copying code here, but it seems l
Alexei Svitkine (slow)
2014/07/17 21:35:28
Done.
|
+ |
+ // Keep track of whether we were showing the badge before, so we don't send |
+ // multiple UMA events for example when multiple Chrome windows are open. |
+ static bool incompatibility_badge_showing = false; |
+ // Save the old value before resetting it. |
+ bool was_showing = incompatibility_badge_showing; |
+ incompatibility_badge_showing = false; |
+ |
+ if (type == WrenchMenuBadgeController::INCOMPATIBILITY_WARNING) { |
+ if (!was_showing) { |
+ content::RecordAction(UserMetricsAction("ConflictBadge")); |
#if defined(OS_WIN) |
- EnumerateModulesModel* loaded_modules = EnumerateModulesModel::GetInstance(); |
- loaded_modules->MaybePostScanningTask(); |
- return loaded_modules->ShouldShowConflictWarning(); |
-#else |
- return false; |
+ ConflictingModuleView::MaybeShow(browser_, app_menu_); |
#endif |
+ } |
+ incompatibility_badge_showing = true; |
+ return; |
+ } |
} |
int ToolbarView::PopupTopSpacing() const { |
@@ -791,62 +791,6 @@ |
} |
} |
-void ToolbarView::UpdateAppMenuState() { |
- base::string16 accname_app = l10n_util::GetStringUTF16(IDS_ACCNAME_APP); |
- if (ShouldShowUpgradeRecommended()) { |
- accname_app = l10n_util::GetStringFUTF16( |
- IDS_ACCNAME_APP_UPGRADE_RECOMMENDED, accname_app); |
- } |
- app_menu_->SetAccessibleName(accname_app); |
- |
- UpdateWrenchButtonSeverity(); |
- SchedulePaint(); |
-} |
- |
-void ToolbarView::UpdateWrenchButtonSeverity() { |
- // Showing the bubble requires |app_menu_| to be in a widget. See comment |
- // in ConflictingModuleView for details. |
- DCHECK(app_menu_->GetWidget()); |
- |
- // Keep track of whether we were showing the badge before, so we don't send |
- // multiple UMA events for example when multiple Chrome windows are open. |
- static bool incompatibility_badge_showing = false; |
- // Save the old value before resetting it. |
- bool was_showing = incompatibility_badge_showing; |
- incompatibility_badge_showing = false; |
- |
- if (ShouldShowUpgradeRecommended()) { |
- UpgradeDetector::UpgradeNotificationAnnoyanceLevel level = |
- UpgradeDetector::GetInstance()->upgrade_notification_stage(); |
- app_menu_->SetSeverity(WrenchIconPainter::SeverityFromUpgradeLevel(level), |
- WrenchIconPainter::ShouldAnimateUpgradeLevel(level)); |
- return; |
- } |
- |
- if (ShouldShowIncompatibilityWarning()) { |
- if (!was_showing) { |
- content::RecordAction(UserMetricsAction("ConflictBadge")); |
-#if defined(OS_WIN) |
- ConflictingModuleView::MaybeShow(browser_, app_menu_); |
-#endif |
- } |
- app_menu_->SetSeverity(WrenchIconPainter::SEVERITY_MEDIUM, true); |
- incompatibility_badge_showing = true; |
- return; |
- } |
- |
- GlobalErrorService* service = |
- GlobalErrorServiceFactory::GetForProfile(browser_->profile()); |
- GlobalError* error = |
- service->GetHighestSeverityGlobalErrorWithWrenchMenuItem(); |
- if (error) { |
- app_menu_->SetSeverity(WrenchIconPainter::GlobalErrorSeverity(), true); |
- return; |
- } |
- |
- app_menu_->SetSeverity(WrenchIconPainter::SEVERITY_NONE, true); |
-} |
- |
void ToolbarView::OnShowHomeButtonChanged() { |
Layout(); |
SchedulePaint(); |