1 // Copyright 2014 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_TOOLBAR_WRENCH_MENU_BADGE_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_BADGE_CONTROLLER_H_ 7 8 #include "base/macros.h" 9 #include "chrome/browser/ui/toolbar/wrench_icon_painter.h" 10 #include "content/public/browser/notification_details.h" 11 #include "content/public/browser/notification_observer.h" 12 #include "content/public/browser/notification_registrar.h" 13 #include "content/public/browser/notification_service.h" 14 15 class Profile; 16 17 // WrenchMenuBadgeController encapsulates the logic for badging the wrench menu 18 // icon as a result of various events - such as available updates, errors, etc. 19 class WrenchMenuBadgeController : public content::NotificationObserver { 20 public: 21 enum BadgeType { 22 BADGE_TYPE_NONE, 23 BADGE_TYPE_UPGRADE_NOTIFICATION, 24 BADGE_TYPE_GLOBAL_ERROR, 25 BADGE_TYPE_INCOMPATIBILITY_WARNING, 26 }; 27 28 // Delegate interface for receiving badge update notifications. 29 class Delegate { 30 public: 31 // Notifies the UI to update the badge to have the specified |severity|, as 32 // well as specifying whether it should |animate|. The |type| parameter 33 // specifies the type of change (i.e. the source of the notification). 34 virtual void UpdateBadgeSeverity(BadgeType type, 35 WrenchIconPainter::Severity severity, 36 bool animate) = 0; 37 38 protected: ~Delegate()39 virtual ~Delegate() {} 40 }; 41 42 // Creates an instance of this class for the given |profile| that will notify 43 // |delegate| of updates. 44 WrenchMenuBadgeController(Profile* profile, Delegate* delegate); 45 virtual ~WrenchMenuBadgeController(); 46 47 // Forces an update of the UI based on the current state of the world. This 48 // will check whether there are any current pending updates, global errors, 49 // etc. and based on that information trigger an appropriate call to the 50 // delegate. 51 void UpdateDelegate(); 52 53 private: 54 // content::NotificationObserver: 55 virtual void Observe(int type, 56 const content::NotificationSource& source, 57 const content::NotificationDetails& details) OVERRIDE; 58 59 Profile* profile_; 60 Delegate* delegate_; 61 content::NotificationRegistrar registrar_; 62 63 DISALLOW_COPY_AND_ASSIGN(WrenchMenuBadgeController); 64 }; 65 66 #endif // CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_BADGE_CONTROLLER_H_ 67