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

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

Issue 2294653002: Some linked_ptr -> unique_ptr conversion in extensions/browser. (Closed)
Patch Set: nullptr Created 4 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
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 #include <memory> 9 #include <memory>
10 10
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "base/memory/linked_ptr.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/scoped_observer.h" 14 #include "base/scoped_observer.h"
15 #include "base/threading/non_thread_safe.h" 15 #include "base/threading/non_thread_safe.h"
16 #include "components/keyed_service/core/keyed_service.h" 16 #include "components/keyed_service/core/keyed_service.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "extensions/browser/browser_context_keyed_api_factory.h" 18 #include "extensions/browser/browser_context_keyed_api_factory.h"
19 #include "extensions/browser/extension_registry.h" 19 #include "extensions/browser/extension_registry.h"
20 #include "extensions/browser/extension_registry_observer.h" 20 #include "extensions/browser/extension_registry_observer.h"
21 #include "extensions/browser/process_manager.h" 21 #include "extensions/browser/process_manager.h"
22 #include "extensions/browser/process_manager_observer.h" 22 #include "extensions/browser/process_manager_observer.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 friend class api::UDPSocketEventDispatcher; 173 friend class api::UDPSocketEventDispatcher;
174 friend class BrowserContextKeyedAPIFactory<ApiResourceManager<T> >; 174 friend class BrowserContextKeyedAPIFactory<ApiResourceManager<T> >;
175 175
176 static const bool kServiceHasOwnInstanceInIncognito = true; 176 static const bool kServiceHasOwnInstanceInIncognito = true;
177 static const bool kServiceIsNULLWhileTesting = true; 177 static const bool kServiceIsNULLWhileTesting = true;
178 178
179 // ApiResourceData class handles resource bookkeeping on a thread 179 // ApiResourceData class handles resource bookkeeping on a thread
180 // where resource lifetime is handled. 180 // where resource lifetime is handled.
181 class ApiResourceData : public base::RefCountedThreadSafe<ApiResourceData> { 181 class ApiResourceData : public base::RefCountedThreadSafe<ApiResourceData> {
182 public: 182 public:
183 typedef std::map<int, linked_ptr<T> > ApiResourceMap; 183 typedef std::map<int, std::unique_ptr<T>> ApiResourceMap;
184 // Lookup map from extension id's to allocated resource id's. 184 // Lookup map from extension id's to allocated resource id's.
185 typedef std::map<std::string, base::hash_set<int> > ExtensionToResourceMap; 185 typedef std::map<std::string, base::hash_set<int> > ExtensionToResourceMap;
186 186
187 ApiResourceData() : next_id_(1) {} 187 ApiResourceData() : next_id_(1) {}
188 188
189 int Add(T* api_resource) { 189 int Add(T* api_resource) {
Devlin 2016/08/30 19:21:53 here, too, add a TODO to make this (and Add() on l
lazyboy 2016/08/30 20:30:56 Done.
190 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 190 DCHECK(ThreadingTraits::IsCalledOnValidThread());
191 int id = GenerateId(); 191 int id = GenerateId();
192 if (id > 0) { 192 if (id > 0) {
193 linked_ptr<T> resource_ptr(api_resource); 193 api_resource_map_[id] = base::WrapUnique<T>(api_resource);
194 api_resource_map_[id] = resource_ptr;
195 194
196 const std::string& extension_id = api_resource->owner_extension_id(); 195 const std::string& extension_id = api_resource->owner_extension_id();
197 ExtensionToResourceMap::iterator it = 196 ExtensionToResourceMap::iterator it =
198 extension_resource_map_.find(extension_id); 197 extension_resource_map_.find(extension_id);
199 if (it == extension_resource_map_.end()) { 198 if (it == extension_resource_map_.end()) {
200 it = extension_resource_map_.insert( 199 it = extension_resource_map_.insert(
201 std::make_pair(extension_id, base::hash_set<int>())).first; 200 std::make_pair(extension_id, base::hash_set<int>())).first;
202 } 201 }
203 it->second.insert(id); 202 it->second.insert(id);
204 return id; 203 return id;
(...skipping 19 matching lines...) Expand all
224 // Change the resource mapped to this |extension_id| at this 223 // Change the resource mapped to this |extension_id| at this
225 // |api_resource_id| to |resource|. Returns true and succeeds unless 224 // |api_resource_id| to |resource|. Returns true and succeeds unless
226 // |api_resource_id| does not already identify a resource held by 225 // |api_resource_id| does not already identify a resource held by
227 // |extension_id|. 226 // |extension_id|.
228 bool Replace(const std::string& extension_id, 227 bool Replace(const std::string& extension_id,
229 int api_resource_id, 228 int api_resource_id,
230 T* api_resource) { 229 T* api_resource) {
231 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 230 DCHECK(ThreadingTraits::IsCalledOnValidThread());
232 T* old_resource = api_resource_map_[api_resource_id].get(); 231 T* old_resource = api_resource_map_[api_resource_id].get();
233 if (old_resource && extension_id == old_resource->owner_extension_id()) { 232 if (old_resource && extension_id == old_resource->owner_extension_id()) {
234 api_resource_map_[api_resource_id] = linked_ptr<T>(api_resource); 233 api_resource_map_[api_resource_id] = base::WrapUnique<T>(api_resource);
235 return true; 234 return true;
236 } 235 }
237 return false; 236 return false;
238 } 237 }
239 238
240 base::hash_set<int>* GetResourceIds(const std::string& extension_id) { 239 base::hash_set<int>* GetResourceIds(const std::string& extension_id) {
241 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 240 DCHECK(ThreadingTraits::IsCalledOnValidThread());
242 return GetOwnedResourceIds(extension_id); 241 return GetOwnedResourceIds(extension_id);
243 } 242 }
244 243
(...skipping 29 matching lines...) Expand all
274 FROM_HERE, base::Bind(&ApiResourceData::Cleanup, this)); 273 FROM_HERE, base::Bind(&ApiResourceData::Cleanup, this));
275 } 274 }
276 } 275 }
277 276
278 private: 277 private:
279 friend class base::RefCountedThreadSafe<ApiResourceData>; 278 friend class base::RefCountedThreadSafe<ApiResourceData>;
280 279
281 virtual ~ApiResourceData() {} 280 virtual ~ApiResourceData() {}
282 281
283 T* GetOwnedResource(const std::string& extension_id, int api_resource_id) { 282 T* GetOwnedResource(const std::string& extension_id, int api_resource_id) {
284 linked_ptr<T> ptr = api_resource_map_[api_resource_id]; 283 const std::unique_ptr<T>& ptr = api_resource_map_[api_resource_id];
285 T* resource = ptr.get(); 284 T* resource = ptr.get();
286 if (resource && extension_id == resource->owner_extension_id()) 285 if (resource && extension_id == resource->owner_extension_id())
287 return resource; 286 return resource;
288 return NULL; 287 return NULL;
289 } 288 }
290 289
291 base::hash_set<int>* GetOwnedResourceIds(const std::string& extension_id) { 290 base::hash_set<int>* GetOwnedResourceIds(const std::string& extension_id) {
292 DCHECK(ThreadingTraits::IsCalledOnValidThread()); 291 DCHECK(ThreadingTraits::IsCalledOnValidThread());
293 ExtensionToResourceMap::iterator it = 292 ExtensionToResourceMap::iterator it =
294 extension_resource_map_.find(extension_id); 293 extension_resource_map_.find(extension_id);
(...skipping 23 matching lines...) Expand all
318 317
319 // Remove all resources, or the non persistent ones only if |remove_all| 318 // Remove all resources, or the non persistent ones only if |remove_all|
320 // is false. 319 // is false.
321 base::hash_set<int>& resource_ids = it->second; 320 base::hash_set<int>& resource_ids = it->second;
322 for (base::hash_set<int>::iterator it = resource_ids.begin(); 321 for (base::hash_set<int>::iterator it = resource_ids.begin();
323 it != resource_ids.end();) { 322 it != resource_ids.end();) {
324 bool erase = false; 323 bool erase = false;
325 if (remove_all) { 324 if (remove_all) {
326 erase = true; 325 erase = true;
327 } else { 326 } else {
328 linked_ptr<T> ptr = api_resource_map_[*it]; 327 std::unique_ptr<T>& ptr = api_resource_map_[*it];
329 T* resource = ptr.get(); 328 T* resource = ptr.get();
330 erase = (resource && !resource->IsPersistent()); 329 erase = (resource && !resource->IsPersistent());
331 } 330 }
332 331
333 if (erase) { 332 if (erase) {
334 api_resource_map_.erase(*it); 333 api_resource_map_.erase(*it);
335 resource_ids.erase(it++); 334 resource_ids.erase(it++);
336 } else { 335 } else {
337 ++it; 336 ++it;
338 } 337 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 ->GetSequencedTaskRunnerWithShutdownBehavior( 428 ->GetSequencedTaskRunnerWithShutdownBehavior(
430 content::BrowserThread::GetBlockingPool()->GetNamedSequenceToken( 429 content::BrowserThread::GetBlockingPool()->GetNamedSequenceToken(
431 T::kSequenceToken), 430 T::kSequenceToken),
432 T::kShutdownBehavior); 431 T::kShutdownBehavior);
433 } 432 }
434 }; 433 };
435 434
436 } // namespace extensions 435 } // namespace extensions
437 436
438 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 437 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698