| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/extension_warning_set.h" | 5 #include "chrome/browser/extensions/extension_warning_set.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" |
| 7 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 8 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/extensions/extension_global_error_badge.h" | 10 #include "chrome/browser/extensions/extension_global_error_badge.h" |
| 10 #include "chrome/browser/extensions/extension_service.h" | 11 #include "chrome/browser/extensions/extension_service.h" |
| 11 #include "chrome/browser/extensions/extension_system.h" | 12 #include "chrome/browser/extensions/extension_system.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/profiles/profile_manager.h" | 14 #include "chrome/browser/profiles/profile_manager.h" |
| 14 #include "chrome/browser/ui/global_error/global_error_service.h" | 15 #include "chrome/browser/ui/global_error/global_error_service.h" |
| 15 #include "chrome/browser/ui/global_error/global_error_service_factory.h" | 16 #include "chrome/browser/ui/global_error/global_error_service_factory.h" |
| 16 #include "chrome/common/chrome_notification_types.h" | 17 #include "chrome/common/chrome_notification_types.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 final_parameters[1], final_parameters[2]); | 195 final_parameters[1], final_parameters[2]); |
| 195 case 4: | 196 case 4: |
| 196 return l10n_util::GetStringFUTF8(message_id_, final_parameters[0], | 197 return l10n_util::GetStringFUTF8(message_id_, final_parameters[0], |
| 197 final_parameters[1], final_parameters[2], final_parameters[3]); | 198 final_parameters[1], final_parameters[2], final_parameters[3]); |
| 198 default: | 199 default: |
| 199 NOTREACHED(); | 200 NOTREACHED(); |
| 200 return std::string(); | 201 return std::string(); |
| 201 } | 202 } |
| 202 } | 203 } |
| 203 | 204 |
| 204 bool operator<(const linked_ptr<ExtensionWarning>& a, | 205 bool ExtensionWarningComparator::operator()(ExtensionWarning* a, |
| 205 const linked_ptr<ExtensionWarning>& b) { | 206 ExtensionWarning* b) const { |
| 206 if (a->extension_id() != b->extension_id()) | 207 if (a->extension_id() != b->extension_id()) |
| 207 return a->extension_id() < b->extension_id(); | 208 return a->extension_id() < b->extension_id(); |
| 208 return a->warning_type() < b->warning_type(); | 209 return a->warning_type() < b->warning_type(); |
| 209 } | 210 } |
| 210 | 211 |
| 211 // | 212 // |
| 212 // ExtensionWarningSet | 213 // ExtensionWarningSet |
| 213 // | 214 // |
| 214 | 215 |
| 215 ExtensionWarningSet::ExtensionWarningSet() {} | 216 ExtensionWarningSet::ExtensionWarningSet() {} |
| 216 | 217 |
| 217 ExtensionWarningSet::~ExtensionWarningSet() {} | 218 ExtensionWarningSet::~ExtensionWarningSet() { |
| 219 // We cannot delete elements that are still in the set because operator< |
| 220 // cannot be executed on freed pointers that are still in the set. |
| 221 std::vector<ExtensionWarning*> tmp(warnings_.begin(), warnings_.end()); |
| 222 STLDeleteContainerPointers(tmp.begin(), tmp.end()); |
| 223 } |
| 218 | 224 |
| 219 void ExtensionWarningSet::Insert(scoped_ptr<ExtensionWarning> warning) { | 225 void ExtensionWarningSet::Insert(scoped_ptr<ExtensionWarning> warning) { |
| 220 warnings_.insert(make_linked_ptr(warning.release())); | 226 warnings_.insert(warning.release()); |
| 221 } | 227 } |
| 222 | 228 |
| 223 std::set<linked_ptr<ExtensionWarning> > ExtensionWarningSet::Release() { | 229 ExtensionWarningSet::Set ExtensionWarningSet::Release() { |
| 224 std::set<linked_ptr<ExtensionWarning> > other; | 230 ExtensionWarningSet::Set other; |
| 225 warnings_.swap(other); | 231 warnings_.swap(other); |
| 226 return other; | 232 return other; |
| 227 } | 233 } |
| 228 | 234 |
| 229 bool ExtensionWarningSet::IsEmpty() const { | 235 bool ExtensionWarningSet::IsEmpty() const { |
| 230 return warnings_.empty(); | 236 return warnings_.empty(); |
| 231 } | 237 } |
| 232 | 238 |
| 233 ExtensionWarningService::ExtensionWarningService(Profile* profile) | 239 ExtensionWarningService::ExtensionWarningService(Profile* profile) |
| 234 : profile_(profile) { | 240 : profile_(profile) { |
| 235 DCHECK(CalledOnValidThread()); | 241 DCHECK(CalledOnValidThread()); |
| 236 } | 242 } |
| 237 | 243 |
| 238 // | 244 // |
| 239 // ExtensionWarningService | 245 // ExtensionWarningService |
| 240 // | 246 // |
| 241 | 247 |
| 242 ExtensionWarningService::~ExtensionWarningService() {} | 248 ExtensionWarningService::~ExtensionWarningService() { |
| 249 // We cannot delete elements that are still in the set because operator< |
| 250 // cannot be executed on freed pointers that are still in the set. |
| 251 std::vector<ExtensionWarning*> tmp(warnings_.begin(), warnings_.end()); |
| 252 STLDeleteContainerPointers(tmp.begin(), tmp.end()); |
| 253 } |
| 243 | 254 |
| 244 void ExtensionWarningService::ClearWarnings( | 255 void ExtensionWarningService::ClearWarnings( |
| 245 const std::set<ExtensionWarning::WarningType>& types) { | 256 const std::set<ExtensionWarning::WarningType>& types) { |
| 246 DCHECK(CalledOnValidThread()); | 257 DCHECK(CalledOnValidThread()); |
| 247 bool deleted_anything = false; | 258 bool deleted_anything = false; |
| 248 for (iterator i = warnings_.begin(); i != warnings_.end();) { | 259 for (iterator i = warnings_.begin(); i != warnings_.end();) { |
| 249 if (types.find((*i)->warning_type()) != types.end()) { | 260 if (types.find((*i)->warning_type()) != types.end()) { |
| 250 deleted_anything = true; | 261 deleted_anything = true; |
| 262 ExtensionWarning* warning = *i; |
| 251 warnings_.erase(i++); | 263 warnings_.erase(i++); |
| 264 delete warning; |
| 252 } else { | 265 } else { |
| 253 ++i; | 266 ++i; |
| 254 } | 267 } |
| 255 } | 268 } |
| 256 | 269 |
| 257 if (deleted_anything) { | 270 if (deleted_anything) { |
| 258 NotifyWarningsChanged(); | 271 NotifyWarningsChanged(); |
| 259 UpdateWarningBadge(); | 272 UpdateWarningBadge(); |
| 260 } | 273 } |
| 261 } | 274 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 284 if ((*i)->extension_id() == extension_id) | 297 if ((*i)->extension_id() == extension_id) |
| 285 result->push_back((*i)->GetMessage(extension_service)); | 298 result->push_back((*i)->GetMessage(extension_service)); |
| 286 } | 299 } |
| 287 } | 300 } |
| 288 | 301 |
| 289 void ExtensionWarningService::AddWarnings( | 302 void ExtensionWarningService::AddWarnings( |
| 290 scoped_ptr<ExtensionWarningSet> warnings) { | 303 scoped_ptr<ExtensionWarningSet> warnings) { |
| 291 DCHECK(CalledOnValidThread()); | 304 DCHECK(CalledOnValidThread()); |
| 292 size_t old_size = warnings_.size(); | 305 size_t old_size = warnings_.size(); |
| 293 | 306 |
| 294 std::set<linked_ptr<ExtensionWarning> > warning_set = warnings->Release(); | 307 ExtensionWarningSet::Set warning_set = warnings->Release(); |
| 295 warnings_.insert(warning_set.begin(), warning_set.end()); | 308 warnings_.insert(warning_set.begin(), warning_set.end()); |
| 296 | 309 |
| 297 if (old_size != warnings_.size()) { | 310 if (old_size != warnings_.size()) { |
| 298 NotifyWarningsChanged(); | 311 NotifyWarningsChanged(); |
| 299 UpdateWarningBadge(); | 312 UpdateWarningBadge(); |
| 300 } | 313 } |
| 301 } | 314 } |
| 302 | 315 |
| 303 // static | 316 // static |
| 304 void ExtensionWarningService::NotifyWarningsOnUI( | 317 void ExtensionWarningService::NotifyWarningsOnUI( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 // Activate or hide the warning badge in case the current state is incorrect. | 364 // Activate or hide the warning badge in case the current state is incorrect. |
| 352 if (error && !need_warning_badge) { | 365 if (error && !need_warning_badge) { |
| 353 service->RemoveGlobalError(error); | 366 service->RemoveGlobalError(error); |
| 354 delete error; | 367 delete error; |
| 355 } else if (!error && need_warning_badge) { | 368 } else if (!error && need_warning_badge) { |
| 356 service->AddGlobalError(new ExtensionGlobalErrorBadge); | 369 service->AddGlobalError(new ExtensionGlobalErrorBadge); |
| 357 } | 370 } |
| 358 } | 371 } |
| 359 | 372 |
| 360 } // namespace extensions | 373 } // namespace extensions |
| OLD | NEW |