Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 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 #include "chrome/browser/extensions/extension_warning_set.h" | |
| 6 | |
| 7 #include "chrome/browser/extensions/extension_global_error.h" | |
| 8 #include "chrome/browser/ui/global_error_service.h" | |
| 9 #include "chrome/browser/ui/global_error_service_factory.h" | |
| 10 #include "chrome/common/chrome_notification_types.h" | |
| 11 #include "content/common/notification_service.h" | |
| 12 | |
| 13 bool operator<(const ExtensionWarning& a, const ExtensionWarning& b) { | |
| 14 if (a.warning_type() == b.warning_type()) | |
| 15 return a.extension_id() < b.extension_id(); | |
| 16 return a.warning_type() < b.warning_type(); | |
| 17 } | |
| 18 | |
| 19 ExtensionWarning::ExtensionWarning() : type_(ExtensionWarning::kInvalid) { | |
| 20 } | |
| 21 | |
| 22 ExtensionWarning::ExtensionWarning( | |
| 23 ExtensionWarning::WarningType type, | |
| 24 const std::string& extension_id) | |
| 25 : type_(type), extension_id_(extension_id) { | |
| 26 } | |
| 27 | |
| 28 ExtensionWarning::~ExtensionWarning() { | |
| 29 } | |
| 30 | |
| 31 ExtensionWarningSet::ExtensionWarningSet(Profile* profile) | |
| 32 : extension_global_error_(NULL), profile_(profile) { | |
| 33 } | |
| 34 | |
| 35 ExtensionWarningSet::~ExtensionWarningSet() { | |
| 36 } | |
| 37 | |
| 38 void ExtensionWarningSet::SetWarning(const ExtensionWarning& warning) { | |
| 39 bool inserted = warnings_.insert(warning).second; | |
| 40 if (inserted) { | |
| 41 NotifyWarningsChanged(); | |
| 42 UpdateWarningBadge(); | |
| 43 } | |
| 44 } | |
| 45 | |
| 46 void ExtensionWarningSet::ClearWarnings( | |
| 47 const std::set<ExtensionWarning::WarningType>& types) { | |
| 48 bool deleted_anything = false; | |
| 49 for (const_iterator i = warnings_.begin(); i != warnings_.end();) { | |
| 50 if (types.find(i->warning_type()) != types.end()) { | |
| 51 deleted_anything = true; | |
| 52 warnings_.erase(i++); | |
| 53 } else { | |
| 54 ++i; | |
| 55 } | |
| 56 } | |
| 57 | |
| 58 if (deleted_anything) { | |
| 59 NotifyWarningsChanged(); | |
| 60 UpdateWarningBadge(); | |
| 61 } | |
| 62 } | |
| 63 | |
| 64 void ExtensionWarningSet::GetWarningsAffectingExtension( | |
| 65 const std::string& extension_id, | |
| 66 std::set<ExtensionWarning::WarningType>* result) const { | |
| 67 result->clear(); | |
| 68 for (const_iterator i = warnings_.begin(); i != warnings_.end(); ++i) { | |
| 69 if (i->extension_id() == extension_id) | |
| 70 result->insert(i->warning_type()); | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 void ExtensionWarningSet::SuppressBadgeForCurrentWarnings() { | |
| 75 badge_suppressions_.insert(warnings_.begin(), warnings_.end()); | |
| 76 UpdateWarningBadge(); | |
| 77 } | |
| 78 | |
| 79 void ExtensionWarningSet::NotifyWarningsChanged() { | |
| 80 NotificationService::current()->Notify( | |
| 81 chrome::NOTIFICATION_EXTENSION_WARNING_CHANGED, | |
| 82 Source<Profile>(profile_), | |
| 83 NotificationService::NoDetails()); | |
| 84 } | |
| 85 | |
| 86 void ExtensionWarningSet::ActivateBadge() { | |
| 87 DCHECK(!extension_global_error_); | |
| 88 DCHECK(profile_); | |
| 89 extension_global_error_ = new ExtensionGlobalError; | |
| 90 GlobalErrorServiceFactory::GetForProfile(profile_)->AddGlobalError( | |
| 91 extension_global_error_); | |
| 92 } | |
| 93 | |
| 94 void ExtensionWarningSet::DeactivateBadge() { | |
| 95 DCHECK(extension_global_error_); | |
| 96 DCHECK(profile_); | |
| 97 GlobalErrorServiceFactory::GetForProfile(profile_)->RemoveGlobalError( | |
| 98 extension_global_error_); | |
| 99 delete extension_global_error_; | |
| 100 extension_global_error_ = NULL; | |
| 101 } | |
| 102 | |
| 103 void ExtensionWarningSet::UpdateWarningBadge() { | |
| 104 // We need a badge if a warning exists that has not been suppressed. | |
| 105 bool need_warning_badge = false; | |
| 106 for (const_iterator i = warnings_.begin(); i != warnings_.end(); ++i) { | |
| 107 if (badge_suppressions_.find(*i) == badge_suppressions_.end()) { | |
| 108 need_warning_badge = true; | |
| 109 break; | |
| 110 } | |
| 111 } | |
| 112 | |
| 113 // Activate or hide the warning badge in case the current state is incorrect. | |
| 114 if (extension_global_error_ && !need_warning_badge) { | |
| 115 DeactivateBadge(); | |
| 116 } else if (!extension_global_error_ && need_warning_badge) { | |
| 117 ActivateBadge(); | |
| 118 } | |
|
Finnur
2011/10/10 09:59:24
nit: no braces on single-line if-else clauses.
battre
2011/10/10 13:16:36
Done.
| |
| 119 } | |
| OLD | NEW |