1// Copyright (c) 2012 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_EXTENSIONS_EXTENSION_WARNING_BADGE_SERVICE_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_WARNING_BADGE_SERVICE_H_
7
8#include "base/compiler_specific.h"
9#include "base/threading/non_thread_safe.h"
10#include "extensions/browser/warning_service.h"
11#include "extensions/browser/warning_set.h"
12
13// TODO(battre): Rename ExtensionWarningBadgeService to WarningBadgeService.
14
15class Profile;
16
17namespace extensions {
18
19// A service that is responsible for showing an extension warning badge on the
20// wrench menu.
21class ExtensionWarningBadgeService : public WarningService::Observer,
22                                     public base::NonThreadSafe {
23 public:
24  explicit ExtensionWarningBadgeService(Profile* profile);
25  virtual ~ExtensionWarningBadgeService();
26
27  // Black lists all currently active extension warnings, so that they do not
28  // trigger a warning badge again for the life-time of the browsing session.
29  void SuppressCurrentWarnings();
30
31 protected:
32  // Virtual for testing.
33  virtual const std::set<Warning>& GetCurrentWarnings() const;
34
35 private:
36  // Implementation of WarningService::Observer.
37  virtual void ExtensionWarningsChanged() OVERRIDE;
38
39  void UpdateBadgeStatus();
40  virtual void ShowBadge(bool show);
41
42  Profile* profile_;
43
44  // Warnings that do not trigger a badge on the wrench menu.
45  WarningSet suppressed_warnings_;
46
47  DISALLOW_COPY_AND_ASSIGN(ExtensionWarningBadgeService);
48};
49
50}  // namespace extensions
51
52#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_WARNING_BADGE_SERVICE_H_
53