| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/error_map.h" | 5 #include "extensions/browser/error_map.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 ~ExtensionEntry(); | 91 ~ExtensionEntry(); |
| 92 | 92 |
| 93 // Delete any errors in the entry that match the given ids and type, if | 93 // Delete any errors in the entry that match the given ids and type, if |
| 94 // provided. | 94 // provided. |
| 95 // Returns true if any errors were deleted. | 95 // Returns true if any errors were deleted. |
| 96 bool DeleteErrors(const ErrorMap::Filter& filter); | 96 bool DeleteErrors(const ErrorMap::Filter& filter); |
| 97 // Delete all errors in the entry. | 97 // Delete all errors in the entry. |
| 98 void DeleteAllErrors(); | 98 void DeleteAllErrors(); |
| 99 | 99 |
| 100 // Add the error to the list, and return a weak reference. | 100 // Add the error to the list, and return a weak reference. |
| 101 const ExtensionError* AddError(scoped_ptr<ExtensionError> error); | 101 const ExtensionError* AddError(std::unique_ptr<ExtensionError> error); |
| 102 | 102 |
| 103 const ErrorList* list() const { return &list_; } | 103 const ErrorList* list() const { return &list_; } |
| 104 | 104 |
| 105 private: | 105 private: |
| 106 // The list of all errors associated with the extension. The errors are | 106 // The list of all errors associated with the extension. The errors are |
| 107 // owned by the Entry (in turn owned by the ErrorMap) and are deleted upon | 107 // owned by the Entry (in turn owned by the ErrorMap) and are deleted upon |
| 108 // destruction. | 108 // destruction. |
| 109 ErrorList list_; | 109 ErrorList list_; |
| 110 | 110 |
| 111 DISALLOW_COPY_AND_ASSIGN(ExtensionEntry); | 111 DISALLOW_COPY_AND_ASSIGN(ExtensionEntry); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 131 } | 131 } |
| 132 return deleted; | 132 return deleted; |
| 133 } | 133 } |
| 134 | 134 |
| 135 void ErrorMap::ExtensionEntry::DeleteAllErrors() { | 135 void ErrorMap::ExtensionEntry::DeleteAllErrors() { |
| 136 STLDeleteContainerPointers(list_.begin(), list_.end()); | 136 STLDeleteContainerPointers(list_.begin(), list_.end()); |
| 137 list_.clear(); | 137 list_.clear(); |
| 138 } | 138 } |
| 139 | 139 |
| 140 const ExtensionError* ErrorMap::ExtensionEntry::AddError( | 140 const ExtensionError* ErrorMap::ExtensionEntry::AddError( |
| 141 scoped_ptr<ExtensionError> error) { | 141 std::unique_ptr<ExtensionError> error) { |
| 142 for (ErrorList::iterator iter = list_.begin(); iter != list_.end(); ++iter) { | 142 for (ErrorList::iterator iter = list_.begin(); iter != list_.end(); ++iter) { |
| 143 // If we find a duplicate error, remove the old error and add the new one, | 143 // If we find a duplicate error, remove the old error and add the new one, |
| 144 // incrementing the occurrence count of the error. We use the new error | 144 // incrementing the occurrence count of the error. We use the new error |
| 145 // for runtime errors, so we can link to the latest context, inspectable | 145 // for runtime errors, so we can link to the latest context, inspectable |
| 146 // view, etc. | 146 // view, etc. |
| 147 if (error->IsEqual(*iter)) { | 147 if (error->IsEqual(*iter)) { |
| 148 error->set_occurrences((*iter)->occurrences() + 1); | 148 error->set_occurrences((*iter)->occurrences() + 1); |
| 149 error->set_id((*iter)->id()); | 149 error->set_id((*iter)->id()); |
| 150 delete *iter; | 150 delete *iter; |
| 151 list_.erase(iter); | 151 list_.erase(iter); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 175 ErrorMap::~ErrorMap() { | 175 ErrorMap::~ErrorMap() { |
| 176 RemoveAllErrors(); | 176 RemoveAllErrors(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 const ErrorList& ErrorMap::GetErrorsForExtension( | 179 const ErrorList& ErrorMap::GetErrorsForExtension( |
| 180 const std::string& extension_id) const { | 180 const std::string& extension_id) const { |
| 181 EntryMap::const_iterator iter = map_.find(extension_id); | 181 EntryMap::const_iterator iter = map_.find(extension_id); |
| 182 return iter != map_.end() ? *iter->second->list() : g_empty_error_list.Get(); | 182 return iter != map_.end() ? *iter->second->list() : g_empty_error_list.Get(); |
| 183 } | 183 } |
| 184 | 184 |
| 185 const ExtensionError* ErrorMap::AddError(scoped_ptr<ExtensionError> error) { | 185 const ExtensionError* ErrorMap::AddError( |
| 186 std::unique_ptr<ExtensionError> error) { |
| 186 EntryMap::iterator iter = map_.find(error->extension_id()); | 187 EntryMap::iterator iter = map_.find(error->extension_id()); |
| 187 if (iter == map_.end()) { | 188 if (iter == map_.end()) { |
| 188 iter = map_.insert(std::pair<std::string, ExtensionEntry*>( | 189 iter = map_.insert(std::pair<std::string, ExtensionEntry*>( |
| 189 error->extension_id(), new ExtensionEntry)).first; | 190 error->extension_id(), new ExtensionEntry)).first; |
| 190 } | 191 } |
| 191 return iter->second->AddError(std::move(error)); | 192 return iter->second->AddError(std::move(error)); |
| 192 } | 193 } |
| 193 | 194 |
| 194 void ErrorMap::RemoveErrors(const Filter& filter, | 195 void ErrorMap::RemoveErrors(const Filter& filter, |
| 195 std::set<std::string>* affected_ids) { | 196 std::set<std::string>* affected_ids) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 207 } | 208 } |
| 208 } | 209 } |
| 209 | 210 |
| 210 void ErrorMap::RemoveAllErrors() { | 211 void ErrorMap::RemoveAllErrors() { |
| 211 for (EntryMap::iterator iter = map_.begin(); iter != map_.end(); ++iter) | 212 for (EntryMap::iterator iter = map_.begin(); iter != map_.end(); ++iter) |
| 212 delete iter->second; | 213 delete iter->second; |
| 213 map_.clear(); | 214 map_.clear(); |
| 214 } | 215 } |
| 215 | 216 |
| 216 } // namespace extensions | 217 } // namespace extensions |
| OLD | NEW |