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