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

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

Issue 587453005: Cleanup: Remove some std::map::operator[] usage in ApiResourceManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_connection.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 #include "base/lazy_instance.h"
12 #include "base/memory/linked_ptr.h" 11 #include "base/memory/linked_ptr.h"
13 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
14 #include "base/scoped_observer.h" 13 #include "base/scoped_observer.h"
15 #include "base/threading/non_thread_safe.h" 14 #include "base/threading/non_thread_safe.h"
16 #include "components/keyed_service/core/keyed_service.h" 15 #include "components/keyed_service/core/keyed_service.h"
17 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/notification_observer.h" 17 #include "content/public/browser/notification_observer.h"
19 #include "content/public/browser/notification_registrar.h" 18 #include "content/public/browser/notification_registrar.h"
20 #include "content/public/browser/notification_service.h" 19 #include "content/public/browser/notification_service.h"
21 #include "extensions/browser/browser_context_keyed_api_factory.h" 20 #include "extensions/browser/browser_context_keyed_api_factory.h"
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 ApiResourceData() : next_id_(1) {} 222 ApiResourceData() : next_id_(1) {}
224 223
225 int Add(T* api_resource) { 224 int Add(T* api_resource) {
226 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 225 DCHECK(ThreadingTraits::IsCalledOnValidThread());
227 int id = GenerateId(); 226 int id = GenerateId();
228 if (id > 0) { 227 if (id > 0) {
229 linked_ptr<T> resource_ptr(api_resource); 228 linked_ptr<T> resource_ptr(api_resource);
230 api_resource_map_[id] = resource_ptr; 229 api_resource_map_[id] = resource_ptr;
231 230
232 const std::string& extension_id = api_resource->owner_extension_id(); 231 const std::string& extension_id = api_resource->owner_extension_id();
233 if (extension_resource_map_.find(extension_id) == 232 ExtensionToResourceMap::iterator it =
234 extension_resource_map_.end()) { 233 extension_resource_map_.find(extension_id);
235 extension_resource_map_[extension_id] = base::hash_set<int>(); 234 if (it == extension_resource_map_.end()) {
235 it = extension_resource_map_.insert(
236 std::make_pair(extension_id, base::hash_set<int>())).first;
236 } 237 }
237 extension_resource_map_[extension_id].insert(id); 238 it->second.insert(id);
238
239 return id; 239 return id;
240 } 240 }
241 return 0; 241 return 0;
242 } 242 }
243 243
244 void Remove(const std::string& extension_id, int api_resource_id) { 244 void Remove(const std::string& extension_id, int api_resource_id) {
245 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 245 DCHECK(ThreadingTraits::IsCalledOnValidThread());
246 if (GetOwnedResource(extension_id, api_resource_id) != NULL) { 246 if (GetOwnedResource(extension_id, api_resource_id)) {
247 DCHECK(extension_resource_map_.find(extension_id) != 247 ExtensionToResourceMap::iterator it =
Lei Zhang 2014/09/19 05:53:05 std::map::operator[] has the side effect of creati
Ken Rockot(use gerrit already) 2014/09/19 16:37:06 Ah. Yeah. This is less a problem with operator[] a
248 extension_resource_map_.end()); 248 extension_resource_map_.find(extension_id);
249 extension_resource_map_[extension_id].erase(api_resource_id); 249 it->second.erase(api_resource_id);
250 api_resource_map_.erase(api_resource_id); 250 api_resource_map_.erase(api_resource_id);
251 } 251 }
252 } 252 }
253 253
254 T* Get(const std::string& extension_id, int api_resource_id) { 254 T* Get(const std::string& extension_id, int api_resource_id) {
255 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 255 DCHECK(ThreadingTraits::IsCalledOnValidThread());
256 return GetOwnedResource(extension_id, api_resource_id); 256 return GetOwnedResource(extension_id, api_resource_id);
257 } 257 }
258 258
259 // Change the resource mapped to this |extension_id| at this 259 // Change the resource mapped to this |extension_id| at this
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 T* GetOwnedResource(const std::string& extension_id, int api_resource_id) { 318 T* GetOwnedResource(const std::string& extension_id, int api_resource_id) {
319 linked_ptr<T> ptr = api_resource_map_[api_resource_id]; 319 linked_ptr<T> ptr = api_resource_map_[api_resource_id];
320 T* resource = ptr.get(); 320 T* resource = ptr.get();
321 if (resource && extension_id == resource->owner_extension_id()) 321 if (resource && extension_id == resource->owner_extension_id())
322 return resource; 322 return resource;
323 return NULL; 323 return NULL;
324 } 324 }
325 325
326 base::hash_set<int>* GetOwnedResourceIds(const std::string& extension_id) { 326 base::hash_set<int>* GetOwnedResourceIds(const std::string& extension_id) {
327 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 327 DCHECK(ThreadingTraits::IsCalledOnValidThread());
328 if (extension_resource_map_.find(extension_id) == 328 ExtensionToResourceMap::iterator it =
329 extension_resource_map_.end()) 329 extension_resource_map_.find(extension_id);
330 if (it == extension_resource_map_.end())
330 return NULL; 331 return NULL;
331 332 return &(it->second);
332 return &extension_resource_map_[extension_id];
333 } 333 }
334 334
335 void CleanupResourcesFromUnloadedExtension( 335 void CleanupResourcesFromUnloadedExtension(
336 const std::string& extension_id) { 336 const std::string& extension_id) {
337 CleanupResourcesFromExtension(extension_id, true); 337 CleanupResourcesFromExtension(extension_id, true);
338 } 338 }
339 339
340 void CleanupResourcesFromSuspendedExtension( 340 void CleanupResourcesFromSuspendedExtension(
341 const std::string& extension_id) { 341 const std::string& extension_id) {
342 CleanupResourcesFromExtension(extension_id, false); 342 CleanupResourcesFromExtension(extension_id, false);
343 } 343 }
344 344
345 void CleanupResourcesFromExtension(const std::string& extension_id, 345 void CleanupResourcesFromExtension(const std::string& extension_id,
346 bool remove_all) { 346 bool remove_all) {
347 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 347 DCHECK(ThreadingTraits::IsCalledOnValidThread());
348 348
349 if (extension_resource_map_.find(extension_id) == 349 ExtensionToResourceMap::iterator it =
350 extension_resource_map_.end()) { 350 extension_resource_map_.find(extension_id);
351 if (it == extension_resource_map_.end())
351 return; 352 return;
352 }
353 353
354 // Remove all resources, or the non persistent ones only if |remove_all| 354 // Remove all resources, or the non persistent ones only if |remove_all|
355 // is false. 355 // is false.
356 base::hash_set<int>& resource_ids = extension_resource_map_[extension_id]; 356 base::hash_set<int>& resource_ids = it->second;
357 for (base::hash_set<int>::iterator it = resource_ids.begin(); 357 for (base::hash_set<int>::iterator it = resource_ids.begin();
358 it != resource_ids.end();) { 358 it != resource_ids.end();) {
359 bool erase = false; 359 bool erase = false;
360 if (remove_all) { 360 if (remove_all) {
361 erase = true; 361 erase = true;
362 } else { 362 } else {
363 linked_ptr<T> ptr = api_resource_map_[*it]; 363 linked_ptr<T> ptr = api_resource_map_[*it];
364 T* resource = ptr.get(); 364 T* resource = ptr.get();
365 erase = (resource && !resource->IsPersistent()); 365 erase = (resource && !resource->IsPersistent());
366 } 366 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 ->GetSequencedTaskRunnerWithShutdownBehavior( 462 ->GetSequencedTaskRunnerWithShutdownBehavior(
463 content::BrowserThread::GetBlockingPool()->GetNamedSequenceToken( 463 content::BrowserThread::GetBlockingPool()->GetNamedSequenceToken(
464 T::kSequenceToken), 464 T::kSequenceToken),
465 T::kShutdownBehavior); 465 T::kShutdownBehavior);
466 } 466 }
467 }; 467 };
468 468
469 } // namespace extensions 469 } // namespace extensions
470 470
471 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 471 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
OLDNEW
« no previous file with comments | « no previous file | extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698