Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / extensions / browser / warning_service.h
blobf675e1f469ed9dacf311eaf44e02dc1b5356c885
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.
5 #ifndef EXTENSIONS_BROWSER_WARNING_SERVICE_H_
6 #define EXTENSIONS_BROWSER_WARNING_SERVICE_H_
8 #include <set>
9 #include <string>
10 #include <vector>
12 #include "base/observer_list.h"
13 #include "base/scoped_observer.h"
14 #include "base/threading/non_thread_safe.h"
15 #include "extensions/browser/extension_registry_observer.h"
16 #include "extensions/browser/warning_set.h"
18 // TODO(battre) Remove the Extension prefix.
20 namespace content {
21 class BrowserContext;
22 class NotificationDetails;
23 class NotificationSource;
26 namespace extensions {
28 class ExtensionRegistry;
30 // Manages a set of warnings caused by extensions. These warnings (e.g.
31 // conflicting modifications of network requests by extensions, slow extensions,
32 // etc.) trigger a warning badge in the UI and and provide means to resolve
33 // them. This class must be used on the UI thread only.
34 class WarningService : public ExtensionRegistryObserver,
35 public base::NonThreadSafe {
36 public:
37 class Observer {
38 public:
39 virtual void ExtensionWarningsChanged() = 0;
42 // |browser_context| may be NULL for testing. In this case, be sure to not
43 // insert any warnings.
44 explicit WarningService(content::BrowserContext* browser_context);
45 virtual ~WarningService();
47 // Clears all warnings of types contained in |types| and notifies observers
48 // of the changed warnings.
49 void ClearWarnings(const std::set<Warning::WarningType>& types);
51 // Returns all types of warnings effecting extension |extension_id|.
52 std::set<Warning::WarningType> GetWarningTypesAffectingExtension(
53 const std::string& extension_id) const;
55 // Returns all localized warnings for extension |extension_id| in |result|.
56 std::vector<std::string> GetWarningMessagesForExtension(
57 const std::string& extension_id) const;
59 const WarningSet& warnings() const { return warnings_; }
61 // Adds a set of warnings and notifies observers if any warning is new.
62 void AddWarnings(const WarningSet& warnings);
64 // Notifies the WarningService of browser_context |browser_context_id| that
65 // new |warnings| occurred and triggers a warning badge.
66 static void NotifyWarningsOnUI(void* profile_id, const WarningSet& warnings);
68 void AddObserver(Observer* observer);
69 void RemoveObserver(Observer* observer);
71 private:
72 void NotifyWarningsChanged();
74 // ExtensionRegistryObserver implementation.
75 virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
76 const Extension* extension,
77 UnloadedExtensionInfo::Reason reason)
78 OVERRIDE;
80 // Currently existing warnings.
81 WarningSet warnings_;
83 content::BrowserContext* const browser_context_;
85 // Listen to extension unloaded notifications.
86 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
87 extension_registry_observer_;
89 ObserverList<Observer> observer_list_;
92 } // namespace extensions
94 #endif // EXTENSIONS_BROWSER_WARNING_SERVICE_H_