Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(623)

Side by Side Diff: extensions/browser/api/api_resource_manager.h

Issue 216513002: Replace DCHECK(BrowserThread::CurrentlyOn) with DCHECK_CURRENTLY_ON in extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #ifndef EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 5 #ifndef EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
6 #define EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 6 #define EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 class ApiResourceData : public base::RefCountedThreadSafe<ApiResourceData> { 169 class ApiResourceData : public base::RefCountedThreadSafe<ApiResourceData> {
170 public: 170 public:
171 typedef std::map<int, linked_ptr<T> > ApiResourceMap; 171 typedef std::map<int, linked_ptr<T> > ApiResourceMap;
172 // Lookup map from extension id's to allocated resource id's. 172 // Lookup map from extension id's to allocated resource id's.
173 typedef std::map<std::string, base::hash_set<int> > ExtensionToResourceMap; 173 typedef std::map<std::string, base::hash_set<int> > ExtensionToResourceMap;
174 174
175 explicit ApiResourceData(const content::BrowserThread::ID thread_id) 175 explicit ApiResourceData(const content::BrowserThread::ID thread_id)
176 : next_id_(1), thread_id_(thread_id) {} 176 : next_id_(1), thread_id_(thread_id) {}
177 177
178 int Add(T* api_resource) { 178 int Add(T* api_resource) {
179 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 179 DCHECK_CURRENTLY_ON(thread_id_);
180 int id = GenerateId(); 180 int id = GenerateId();
181 if (id > 0) { 181 if (id > 0) {
182 linked_ptr<T> resource_ptr(api_resource); 182 linked_ptr<T> resource_ptr(api_resource);
183 api_resource_map_[id] = resource_ptr; 183 api_resource_map_[id] = resource_ptr;
184 184
185 const std::string& extension_id = api_resource->owner_extension_id(); 185 const std::string& extension_id = api_resource->owner_extension_id();
186 if (extension_resource_map_.find(extension_id) == 186 if (extension_resource_map_.find(extension_id) ==
187 extension_resource_map_.end()) { 187 extension_resource_map_.end()) {
188 extension_resource_map_[extension_id] = base::hash_set<int>(); 188 extension_resource_map_[extension_id] = base::hash_set<int>();
189 } 189 }
190 extension_resource_map_[extension_id].insert(id); 190 extension_resource_map_[extension_id].insert(id);
191 191
192 return id; 192 return id;
193 } 193 }
194 return 0; 194 return 0;
195 } 195 }
196 196
197 void Remove(const std::string& extension_id, int api_resource_id) { 197 void Remove(const std::string& extension_id, int api_resource_id) {
198 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 198 DCHECK_CURRENTLY_ON(thread_id_);
199 if (GetOwnedResource(extension_id, api_resource_id) != NULL) { 199 if (GetOwnedResource(extension_id, api_resource_id) != NULL) {
200 DCHECK(extension_resource_map_.find(extension_id) != 200 DCHECK(extension_resource_map_.find(extension_id) !=
201 extension_resource_map_.end()); 201 extension_resource_map_.end());
202 extension_resource_map_[extension_id].erase(api_resource_id); 202 extension_resource_map_[extension_id].erase(api_resource_id);
203 api_resource_map_.erase(api_resource_id); 203 api_resource_map_.erase(api_resource_id);
204 } 204 }
205 } 205 }
206 206
207 T* Get(const std::string& extension_id, int api_resource_id) { 207 T* Get(const std::string& extension_id, int api_resource_id) {
208 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 208 DCHECK_CURRENTLY_ON(thread_id_);
209 return GetOwnedResource(extension_id, api_resource_id); 209 return GetOwnedResource(extension_id, api_resource_id);
210 } 210 }
211 211
212 base::hash_set<int>* GetResourceIds(const std::string& extension_id) { 212 base::hash_set<int>* GetResourceIds(const std::string& extension_id) {
213 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 213 DCHECK_CURRENTLY_ON(thread_id_);
214 return GetOwnedResourceIds(extension_id); 214 return GetOwnedResourceIds(extension_id);
215 } 215 }
216 216
217 void InitiateExtensionUnloadedCleanup(const std::string& extension_id) { 217 void InitiateExtensionUnloadedCleanup(const std::string& extension_id) {
218 content::BrowserThread::PostTask( 218 content::BrowserThread::PostTask(
219 thread_id_, 219 thread_id_,
220 FROM_HERE, 220 FROM_HERE,
221 base::Bind(&ApiResourceData::CleanupResourcesFromUnloadedExtension, 221 base::Bind(&ApiResourceData::CleanupResourcesFromUnloadedExtension,
222 this, 222 this,
223 extension_id)); 223 extension_id));
(...skipping 20 matching lines...) Expand all
244 244
245 T* GetOwnedResource(const std::string& extension_id, int api_resource_id) { 245 T* GetOwnedResource(const std::string& extension_id, int api_resource_id) {
246 linked_ptr<T> ptr = api_resource_map_[api_resource_id]; 246 linked_ptr<T> ptr = api_resource_map_[api_resource_id];
247 T* resource = ptr.get(); 247 T* resource = ptr.get();
248 if (resource && extension_id == resource->owner_extension_id()) 248 if (resource && extension_id == resource->owner_extension_id())
249 return resource; 249 return resource;
250 return NULL; 250 return NULL;
251 } 251 }
252 252
253 base::hash_set<int>* GetOwnedResourceIds(const std::string& extension_id) { 253 base::hash_set<int>* GetOwnedResourceIds(const std::string& extension_id) {
254 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 254 DCHECK_CURRENTLY_ON(thread_id_);
255 if (extension_resource_map_.find(extension_id) == 255 if (extension_resource_map_.find(extension_id) ==
256 extension_resource_map_.end()) 256 extension_resource_map_.end())
257 return NULL; 257 return NULL;
258 258
259 return &extension_resource_map_[extension_id]; 259 return &extension_resource_map_[extension_id];
260 } 260 }
261 261
262 void CleanupResourcesFromUnloadedExtension( 262 void CleanupResourcesFromUnloadedExtension(
263 const std::string& extension_id) { 263 const std::string& extension_id) {
264 CleanupResourcesFromExtension(extension_id, true); 264 CleanupResourcesFromExtension(extension_id, true);
265 } 265 }
266 266
267 void CleanupResourcesFromSuspendedExtension( 267 void CleanupResourcesFromSuspendedExtension(
268 const std::string& extension_id) { 268 const std::string& extension_id) {
269 CleanupResourcesFromExtension(extension_id, false); 269 CleanupResourcesFromExtension(extension_id, false);
270 } 270 }
271 271
272 void CleanupResourcesFromExtension(const std::string& extension_id, 272 void CleanupResourcesFromExtension(const std::string& extension_id,
273 bool remove_all) { 273 bool remove_all) {
274 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 274 DCHECK_CURRENTLY_ON(thread_id_);
275 275
276 if (extension_resource_map_.find(extension_id) == 276 if (extension_resource_map_.find(extension_id) ==
277 extension_resource_map_.end()) { 277 extension_resource_map_.end()) {
278 return; 278 return;
279 } 279 }
280 280
281 // Remove all resources, or the non persistent ones only if |remove_all| 281 // Remove all resources, or the non persistent ones only if |remove_all|
282 // is false. 282 // is false.
283 base::hash_set<int>& resource_ids = extension_resource_map_[extension_id]; 283 base::hash_set<int>& resource_ids = extension_resource_map_[extension_id];
284 for (base::hash_set<int>::iterator it = resource_ids.begin(); 284 for (base::hash_set<int>::iterator it = resource_ids.begin();
(...skipping 15 matching lines...) Expand all
300 } 300 }
301 } // end for 301 } // end for
302 302
303 // Remove extension entry if we removed all its resources. 303 // Remove extension entry if we removed all its resources.
304 if (resource_ids.size() == 0) { 304 if (resource_ids.size() == 0) {
305 extension_resource_map_.erase(extension_id); 305 extension_resource_map_.erase(extension_id);
306 } 306 }
307 } 307 }
308 308
309 void Cleanup() { 309 void Cleanup() {
310 DCHECK(content::BrowserThread::CurrentlyOn(thread_id_)); 310 DCHECK_CURRENTLY_ON(thread_id_);
311 311
312 api_resource_map_.clear(); 312 api_resource_map_.clear();
313 extension_resource_map_.clear(); 313 extension_resource_map_.clear();
314 } 314 }
315 315
316 int GenerateId() { return next_id_++; } 316 int GenerateId() { return next_id_++; }
317 317
318 int next_id_; 318 int next_id_;
319 const content::BrowserThread::ID thread_id_; 319 const content::BrowserThread::ID thread_id_;
320 ApiResourceMap api_resource_map_; 320 ApiResourceMap api_resource_map_;
321 ExtensionToResourceMap extension_resource_map_; 321 ExtensionToResourceMap extension_resource_map_;
322 }; 322 };
323 323
324 content::BrowserThread::ID thread_id_; 324 content::BrowserThread::ID thread_id_;
325 content::NotificationRegistrar registrar_; 325 content::NotificationRegistrar registrar_;
326 scoped_refptr<ApiResourceData> data_; 326 scoped_refptr<ApiResourceData> data_;
327 }; 327 };
328 328
329 } // namespace extensions 329 } // namespace extensions
330 330
331 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 331 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
OLDNEW
« no previous file with comments | « chrome/browser/extensions/webstore_installer.cc ('k') | extensions/browser/api/async_api_function.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698