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

Side by Side Diff: apps/saved_files_service.cc

Issue 1096983002: Update usages of std::map to use ScopedPtrMap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@passwordmanager-scopedmemory
Patch Set: Fix Mac compile. Created 5 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "apps/saved_files_service.h" 5 #include "apps/saved_files_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map>
8 9
9 #include "apps/saved_files_service_factory.h" 10 #include "apps/saved_files_service_factory.h"
10 #include "base/basictypes.h" 11 #include "base/basictypes.h"
11 #include "base/containers/hash_tables.h" 12 #include "base/containers/scoped_ptr_hash_map.h"
12 #include "base/value_conversions.h" 13 #include "base/value_conversions.h"
13 #include "chrome/browser/chrome_notification_types.h" 14 #include "chrome/browser/chrome_notification_types.h"
14 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
15 #include "content/public/browser/notification_service.h" 16 #include "content/public/browser/notification_service.h"
16 #include "extensions/browser/extension_host.h" 17 #include "extensions/browser/extension_host.h"
17 #include "extensions/browser/extension_prefs.h" 18 #include "extensions/browser/extension_prefs.h"
18 #include "extensions/browser/extension_system.h" 19 #include "extensions/browser/extension_system.h"
19 #include "extensions/browser/extension_util.h" 20 #include "extensions/browser/extension_util.h"
20 #include "extensions/browser/notification_types.h" 21 #include "extensions/browser/notification_types.h"
21 #include "extensions/common/permissions/api_permission.h" 22 #include "extensions/common/permissions/api_permission.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 // will almost never do any real work. 171 // will almost never do any real work.
171 void MaybeCompactSequenceNumbers(); 172 void MaybeCompactSequenceNumbers();
172 173
173 void LoadSavedFileEntriesFromPreferences(); 174 void LoadSavedFileEntriesFromPreferences();
174 175
175 Profile* profile_; 176 Profile* profile_;
176 const std::string extension_id_; 177 const std::string extension_id_;
177 178
178 // Contains all file entries that have been registered, keyed by ID. Owns 179 // Contains all file entries that have been registered, keyed by ID. Owns
179 // values. 180 // values.
180 base::hash_map<std::string, SavedFileEntry*> registered_file_entries_; 181 base::ScopedPtrHashMap<std::string, scoped_ptr<SavedFileEntry>>
181 STLValueDeleter<base::hash_map<std::string, SavedFileEntry*> > 182 registered_file_entries_;
182 registered_file_entries_deleter_;
183 183
184 // The queue of file entries that have been retained, keyed by 184 // The queue of file entries that have been retained, keyed by
185 // sequence_number. Values are a subset of values in registered_file_entries_. 185 // sequence_number. Values are a subset of values in registered_file_entries_.
186 // This should be kept in sync with file entries stored in extension prefs. 186 // This should be kept in sync with file entries stored in extension prefs.
187 std::map<int, SavedFileEntry*> saved_file_lru_; 187 std::map<int, SavedFileEntry*> saved_file_lru_;
188 188
189 DISALLOW_COPY_AND_ASSIGN(SavedFiles); 189 DISALLOW_COPY_AND_ASSIGN(SavedFiles);
190 }; 190 };
191 191
192 // static 192 // static
193 SavedFilesService* SavedFilesService::Get(Profile* profile) { 193 SavedFilesService* SavedFilesService::Get(Profile* profile) {
194 return SavedFilesServiceFactory::GetForProfile(profile); 194 return SavedFilesServiceFactory::GetForProfile(profile);
195 } 195 }
196 196
197 SavedFilesService::SavedFilesService(Profile* profile) 197 SavedFilesService::SavedFilesService(Profile* profile) : profile_(profile) {
198 : extension_id_to_saved_files_deleter_(&extension_id_to_saved_files_),
199 profile_(profile) {
200 registrar_.Add(this, 198 registrar_.Add(this,
201 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, 199 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
202 content::NotificationService::AllSources()); 200 content::NotificationService::AllSources());
203 registrar_.Add(this, 201 registrar_.Add(this,
204 chrome::NOTIFICATION_APP_TERMINATING, 202 chrome::NOTIFICATION_APP_TERMINATING,
205 content::NotificationService::AllSources()); 203 content::NotificationService::AllSources());
206 } 204 }
207 205
208 SavedFilesService::~SavedFilesService() {} 206 SavedFilesService::~SavedFilesService() {}
209 207
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 } 268 }
271 } 269 }
272 270
273 void SavedFilesService::ClearQueue(const extensions::Extension* extension) { 271 void SavedFilesService::ClearQueue(const extensions::Extension* extension) {
274 ClearSavedFileEntries(ExtensionPrefs::Get(profile_), extension->id()); 272 ClearSavedFileEntries(ExtensionPrefs::Get(profile_), extension->id());
275 Clear(extension->id()); 273 Clear(extension->id());
276 } 274 }
277 275
278 SavedFilesService::SavedFiles* SavedFilesService::Get( 276 SavedFilesService::SavedFiles* SavedFilesService::Get(
279 const std::string& extension_id) const { 277 const std::string& extension_id) const {
280 std::map<std::string, SavedFiles*>::const_iterator it = 278 ScopedPtrMap<std::string, scoped_ptr<SavedFiles>>::const_iterator it =
281 extension_id_to_saved_files_.find(extension_id); 279 extension_id_to_saved_files_.find(extension_id);
282 if (it != extension_id_to_saved_files_.end()) 280 if (it != extension_id_to_saved_files_.end())
283 return it->second; 281 return it->second;
284 282
285 return NULL; 283 return NULL;
286 } 284 }
287 285
288 SavedFilesService::SavedFiles* SavedFilesService::GetOrInsert( 286 SavedFilesService::SavedFiles* SavedFilesService::GetOrInsert(
289 const std::string& extension_id) { 287 const std::string& extension_id) {
290 SavedFiles* saved_files = Get(extension_id); 288 SavedFiles* saved_files = Get(extension_id);
291 if (saved_files) 289 if (saved_files)
292 return saved_files; 290 return saved_files;
293 291
294 saved_files = new SavedFiles(profile_, extension_id); 292 scoped_ptr<SavedFiles> scoped_saved_files(
295 extension_id_to_saved_files_.insert( 293 new SavedFiles(profile_, extension_id));
296 std::make_pair(extension_id, saved_files)); 294 saved_files = scoped_saved_files.get();
295 extension_id_to_saved_files_.insert(extension_id, scoped_saved_files.Pass());
297 return saved_files; 296 return saved_files;
298 } 297 }
299 298
300 void SavedFilesService::Clear(const std::string& extension_id) { 299 void SavedFilesService::Clear(const std::string& extension_id) {
301 std::map<std::string, SavedFiles*>::iterator it = 300 extension_id_to_saved_files_.erase(extension_id);
302 extension_id_to_saved_files_.find(extension_id);
303 if (it != extension_id_to_saved_files_.end()) {
304 delete it->second;
305 extension_id_to_saved_files_.erase(it);
306 }
307 } 301 }
308 302
309 SavedFilesService::SavedFiles::SavedFiles(Profile* profile, 303 SavedFilesService::SavedFiles::SavedFiles(Profile* profile,
310 const std::string& extension_id) 304 const std::string& extension_id)
311 : profile_(profile), 305 : profile_(profile), extension_id_(extension_id) {
312 extension_id_(extension_id),
313 registered_file_entries_deleter_(&registered_file_entries_) {
314 LoadSavedFileEntriesFromPreferences(); 306 LoadSavedFileEntriesFromPreferences();
315 } 307 }
316 308
317 SavedFilesService::SavedFiles::~SavedFiles() {} 309 SavedFilesService::SavedFiles::~SavedFiles() {}
318 310
319 void SavedFilesService::SavedFiles::RegisterFileEntry( 311 void SavedFilesService::SavedFiles::RegisterFileEntry(
320 const std::string& id, 312 const std::string& id,
321 const base::FilePath& file_path, 313 const base::FilePath& file_path,
322 bool is_directory) { 314 bool is_directory) {
323 if (ContainsKey(registered_file_entries_, id)) 315 if (ContainsKey(registered_file_entries_, id))
324 return; 316 return;
325 317
326 registered_file_entries_.insert( 318 registered_file_entries_.add(
327 std::make_pair(id, new SavedFileEntry(id, file_path, is_directory, 0))); 319 id, make_scoped_ptr(new SavedFileEntry(id, file_path, is_directory, 0)));
328 } 320 }
329 321
330 void SavedFilesService::SavedFiles::EnqueueFileEntry(const std::string& id) { 322 void SavedFilesService::SavedFiles::EnqueueFileEntry(const std::string& id) {
331 base::hash_map<std::string, SavedFileEntry*>::iterator it = 323 auto it = registered_file_entries_.find(id);
tapted 2015/06/19 00:12:01 `it` becomes a shadowed variable just below, which
Matt Giuca 2015/06/19 04:03:25 I'm hesitant to use get() because there's no get()
332 registered_file_entries_.find(id);
333 DCHECK(it != registered_file_entries_.end()); 324 DCHECK(it != registered_file_entries_.end());
334 325
335 SavedFileEntry* file_entry = it->second; 326 SavedFileEntry* file_entry = it->second;
336 int old_sequence_number = file_entry->sequence_number; 327 int old_sequence_number = file_entry->sequence_number;
337 if (!saved_file_lru_.empty()) { 328 if (!saved_file_lru_.empty()) {
338 // Get the sequence number after the last file entry in the LRU. 329 // Get the sequence number after the last file entry in the LRU.
339 std::map<int, SavedFileEntry*>::reverse_iterator it = 330 std::map<int, SavedFileEntry*>::reverse_iterator it =
340 saved_file_lru_.rbegin(); 331 saved_file_lru_.rbegin();
341 if (it->second == file_entry) 332 if (it->second == file_entry)
342 return; 333 return;
(...skipping 20 matching lines...) Expand all
363 } 354 }
364 MaybeCompactSequenceNumbers(); 355 MaybeCompactSequenceNumbers();
365 } 356 }
366 357
367 bool SavedFilesService::SavedFiles::IsRegistered(const std::string& id) const { 358 bool SavedFilesService::SavedFiles::IsRegistered(const std::string& id) const {
368 return ContainsKey(registered_file_entries_, id); 359 return ContainsKey(registered_file_entries_, id);
369 } 360 }
370 361
371 const SavedFileEntry* SavedFilesService::SavedFiles::GetFileEntry( 362 const SavedFileEntry* SavedFilesService::SavedFiles::GetFileEntry(
372 const std::string& id) const { 363 const std::string& id) const {
373 base::hash_map<std::string, SavedFileEntry*>::const_iterator it = 364 auto it = registered_file_entries_.find(id);
tapted 2015/06/19 00:12:01 nit: just `return registered_file_entries_.get(id)
Matt Giuca 2015/06/19 04:03:25 As above, I think we should consider get() to be d
374 registered_file_entries_.find(id);
375 if (it == registered_file_entries_.end()) 365 if (it == registered_file_entries_.end())
376 return NULL; 366 return NULL;
377 367
378 return it->second; 368 return it->second;
379 } 369 }
380 370
381 std::vector<SavedFileEntry> SavedFilesService::SavedFiles::GetAllFileEntries() 371 std::vector<SavedFileEntry> SavedFilesService::SavedFiles::GetAllFileEntries()
382 const { 372 const {
383 std::vector<SavedFileEntry> result; 373 std::vector<SavedFileEntry> result;
384 for (base::hash_map<std::string, SavedFileEntry*>::const_iterator it = 374 for (auto it = registered_file_entries_.begin();
385 registered_file_entries_.begin(); 375 it != registered_file_entries_.end(); ++it) {
386 it != registered_file_entries_.end();
387 ++it) {
388 result.push_back(*it->second); 376 result.push_back(*it->second);
389 } 377 }
390 return result; 378 return result;
391 } 379 }
392 380
393 void SavedFilesService::SavedFiles::MaybeCompactSequenceNumbers() { 381 void SavedFilesService::SavedFiles::MaybeCompactSequenceNumbers() {
394 DCHECK_GE(g_max_sequence_number, 0); 382 DCHECK_GE(g_max_sequence_number, 0);
395 DCHECK_GE(static_cast<size_t>(g_max_sequence_number), 383 DCHECK_GE(static_cast<size_t>(g_max_sequence_number),
396 g_max_saved_file_entries); 384 g_max_saved_file_entries);
397 std::map<int, SavedFileEntry*>::reverse_iterator it = 385 std::map<int, SavedFileEntry*>::reverse_iterator it =
(...skipping 27 matching lines...) Expand all
425 } 413 }
426 } 414 }
427 415
428 void SavedFilesService::SavedFiles::LoadSavedFileEntriesFromPreferences() { 416 void SavedFilesService::SavedFiles::LoadSavedFileEntriesFromPreferences() {
429 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); 417 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
430 std::vector<SavedFileEntry> saved_entries = 418 std::vector<SavedFileEntry> saved_entries =
431 GetSavedFileEntries(prefs, extension_id_); 419 GetSavedFileEntries(prefs, extension_id_);
432 for (std::vector<SavedFileEntry>::iterator it = saved_entries.begin(); 420 for (std::vector<SavedFileEntry>::iterator it = saved_entries.begin();
433 it != saved_entries.end(); 421 it != saved_entries.end();
434 ++it) { 422 ++it) {
435 SavedFileEntry* file_entry = new SavedFileEntry(*it); 423 scoped_ptr<SavedFileEntry> file_entry(new SavedFileEntry(*it));
436 registered_file_entries_.insert(std::make_pair(file_entry->id, file_entry)); 424 const std::string& id = file_entry->id;
437 saved_file_lru_.insert( 425 saved_file_lru_.insert(
438 std::make_pair(file_entry->sequence_number, file_entry)); 426 std::make_pair(file_entry->sequence_number, file_entry.get()));
427 registered_file_entries_.add(id, file_entry.Pass());
439 } 428 }
440 } 429 }
441 430
442 // static 431 // static
443 void SavedFilesService::SetMaxSequenceNumberForTest(int max_value) { 432 void SavedFilesService::SetMaxSequenceNumberForTest(int max_value) {
444 g_max_sequence_number = max_value; 433 g_max_sequence_number = max_value;
445 } 434 }
446 435
447 // static 436 // static
448 void SavedFilesService::ClearMaxSequenceNumberForTest() { 437 void SavedFilesService::ClearMaxSequenceNumberForTest() {
449 g_max_sequence_number = kMaxSequenceNumber; 438 g_max_sequence_number = kMaxSequenceNumber;
450 } 439 }
451 440
452 // static 441 // static
453 void SavedFilesService::SetLruSizeForTest(int size) { 442 void SavedFilesService::SetLruSizeForTest(int size) {
454 g_max_saved_file_entries = size; 443 g_max_saved_file_entries = size;
455 } 444 }
456 445
457 // static 446 // static
458 void SavedFilesService::ClearLruSizeForTest() { 447 void SavedFilesService::ClearLruSizeForTest() {
459 g_max_saved_file_entries = kMaxSavedFileEntries; 448 g_max_saved_file_entries = kMaxSavedFileEntries;
460 } 449 }
461 450
462 } // namespace apps 451 } // namespace apps
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698