15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_BADGE_CONTROLLER_H_ 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_BADGE_CONTROLLER_H_ 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/macros.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/toolbar/wrench_icon_painter.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_details.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_service.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class Profile; 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// WrenchMenuBadgeController encapsulates the logic for badging the wrench menu 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// icon as a result of various events - such as available updates, errors, etc. 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WrenchMenuBadgeController : public content::NotificationObserver { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) enum BadgeType { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BADGE_TYPE_NONE, 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BADGE_TYPE_UPGRADE_NOTIFICATION, 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BADGE_TYPE_GLOBAL_ERROR, 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BADGE_TYPE_INCOMPATIBILITY_WARNING, 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Delegate interface for receiving badge update notifications. 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) class Delegate { 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Notifies the UI to update the badge to have the specified |severity|, as 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // well as specifying whether it should |animate|. The |type| parameter 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // specifies the type of change (i.e. the source of the notification). 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void UpdateBadgeSeverity(BadgeType type, 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WrenchIconPainter::Severity severity, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool animate) = 0; 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected: 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~Delegate() {} 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Creates an instance of this class for the given |profile| that will notify 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // |delegate| of updates. 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WrenchMenuBadgeController(Profile* profile, Delegate* delegate); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~WrenchMenuBadgeController(); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Forces an update of the UI based on the current state of the world. This 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // will check whether there are any current pending updates, global errors, 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // etc. and based on that information trigger an appropriate call to the 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // delegate. 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void UpdateDelegate(); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // content::NotificationObserver: 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void Observe(int type, 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const content::NotificationSource& source, 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile_; 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Delegate* delegate_; 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::NotificationRegistrar registrar_; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WrenchMenuBadgeController); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // CHROME_BROWSER_UI_TOOLBAR_WRENCH_MENU_BADGE_CONTROLLER_H_ 67