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

Side by Side Diff: apps/saved_files_service.cc

Issue 2599153002: Remove base::ScopedPtrHashMap from apps/. (Closed)
Patch Set: fix Created 3 years, 12 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 | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stdint.h> 7 #include <stdint.h>
8
8 #include <algorithm> 9 #include <algorithm>
9 #include <map> 10 #include <map>
11 #include <unordered_map>
10 #include <utility> 12 #include <utility>
11 13
12 #include "apps/saved_files_service_factory.h" 14 #include "apps/saved_files_service_factory.h"
13 #include "base/containers/scoped_ptr_hash_map.h"
14 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
15 #include "base/value_conversions.h" 16 #include "base/value_conversions.h"
16 #include "chrome/browser/chrome_notification_types.h" 17 #include "chrome/browser/chrome_notification_types.h"
17 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
18 #include "content/public/browser/notification_service.h" 19 #include "content/public/browser/notification_service.h"
19 #include "extensions/browser/extension_host.h" 20 #include "extensions/browser/extension_host.h"
20 #include "extensions/browser/extension_prefs.h" 21 #include "extensions/browser/extension_prefs.h"
21 #include "extensions/browser/extension_system.h" 22 #include "extensions/browser/extension_system.h"
22 #include "extensions/browser/notification_types.h" 23 #include "extensions/browser/notification_types.h"
23 #include "extensions/common/permissions/api_permission.h" 24 #include "extensions/common/permissions/api_permission.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 // Compacts sequence numbers if the largest sequence number is 173 // Compacts sequence numbers if the largest sequence number is
173 // g_max_sequence_number. Outside of testing, it is set to kint32max, so this 174 // g_max_sequence_number. Outside of testing, it is set to kint32max, so this
174 // will almost never do any real work. 175 // will almost never do any real work.
175 void MaybeCompactSequenceNumbers(); 176 void MaybeCompactSequenceNumbers();
176 177
177 void LoadSavedFileEntriesFromPreferences(); 178 void LoadSavedFileEntriesFromPreferences();
178 179
179 Profile* profile_; 180 Profile* profile_;
180 const std::string extension_id_; 181 const std::string extension_id_;
181 182
182 // Contains all file entries that have been registered, keyed by ID. Owns 183 // Contains all file entries that have been registered, keyed by ID.
183 // values. 184 std::unordered_map<std::string, std::unique_ptr<SavedFileEntry>>
184 base::ScopedPtrHashMap<std::string, std::unique_ptr<SavedFileEntry>>
185 registered_file_entries_; 185 registered_file_entries_;
186 186
187 // The queue of file entries that have been retained, keyed by 187 // The queue of file entries that have been retained, keyed by
188 // sequence_number. Values are a subset of values in registered_file_entries_. 188 // sequence_number. Values are a subset of values in registered_file_entries_.
189 // This should be kept in sync with file entries stored in extension prefs. 189 // This should be kept in sync with file entries stored in extension prefs.
190 std::map<int, SavedFileEntry*> saved_file_lru_; 190 std::map<int, SavedFileEntry*> saved_file_lru_;
191 191
192 DISALLOW_COPY_AND_ASSIGN(SavedFiles); 192 DISALLOW_COPY_AND_ASSIGN(SavedFiles);
193 }; 193 };
194 194
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 : profile_(profile), extension_id_(extension_id) { 307 : profile_(profile), extension_id_(extension_id) {
308 LoadSavedFileEntriesFromPreferences(); 308 LoadSavedFileEntriesFromPreferences();
309 } 309 }
310 310
311 SavedFilesService::SavedFiles::~SavedFiles() {} 311 SavedFilesService::SavedFiles::~SavedFiles() {}
312 312
313 void SavedFilesService::SavedFiles::RegisterFileEntry( 313 void SavedFilesService::SavedFiles::RegisterFileEntry(
314 const std::string& id, 314 const std::string& id,
315 const base::FilePath& file_path, 315 const base::FilePath& file_path,
316 bool is_directory) { 316 bool is_directory) {
317 if (ContainsKey(registered_file_entries_, id)) 317 auto it = registered_file_entries_.find(id);
318 if (it != registered_file_entries_.end())
318 return; 319 return;
319 320
320 registered_file_entries_.add( 321 registered_file_entries_[id] =
321 id, base::MakeUnique<SavedFileEntry>(id, file_path, is_directory, 0)); 322 base::MakeUnique<SavedFileEntry>(id, file_path, is_directory, 0);
322 } 323 }
323 324
324 void SavedFilesService::SavedFiles::EnqueueFileEntry(const std::string& id) { 325 void SavedFilesService::SavedFiles::EnqueueFileEntry(const std::string& id) {
325 auto it = registered_file_entries_.find(id); 326 auto it = registered_file_entries_.find(id);
326 DCHECK(it != registered_file_entries_.end()); 327 DCHECK(it != registered_file_entries_.end());
327 328
328 SavedFileEntry* file_entry = it->second; 329 SavedFileEntry* file_entry = it->second.get();
329 int old_sequence_number = file_entry->sequence_number; 330 int old_sequence_number = file_entry->sequence_number;
330 if (!saved_file_lru_.empty()) { 331 if (!saved_file_lru_.empty()) {
331 // Get the sequence number after the last file entry in the LRU. 332 // Get the sequence number after the last file entry in the LRU.
332 std::map<int, SavedFileEntry*>::reverse_iterator it = 333 std::map<int, SavedFileEntry*>::reverse_iterator it =
333 saved_file_lru_.rbegin(); 334 saved_file_lru_.rbegin();
334 if (it->second == file_entry) 335 if (it->second == file_entry)
335 return; 336 return;
336 337
337 file_entry->sequence_number = it->first + 1; 338 file_entry->sequence_number = it->first + 1;
338 } else { 339 } else {
(...skipping 12 matching lines...) Expand all
351 std::map<int, SavedFileEntry*>::iterator it = saved_file_lru_.begin(); 352 std::map<int, SavedFileEntry*>::iterator it = saved_file_lru_.begin();
352 it->second->sequence_number = 0; 353 it->second->sequence_number = 0;
353 RemoveSavedFileEntry(prefs, extension_id_, it->second->id); 354 RemoveSavedFileEntry(prefs, extension_id_, it->second->id);
354 saved_file_lru_.erase(it); 355 saved_file_lru_.erase(it);
355 } 356 }
356 } 357 }
357 MaybeCompactSequenceNumbers(); 358 MaybeCompactSequenceNumbers();
358 } 359 }
359 360
360 bool SavedFilesService::SavedFiles::IsRegistered(const std::string& id) const { 361 bool SavedFilesService::SavedFiles::IsRegistered(const std::string& id) const {
361 return ContainsKey(registered_file_entries_, id); 362 auto it = registered_file_entries_.find(id);
363 return it != registered_file_entries_.end();
362 } 364 }
363 365
364 const SavedFileEntry* SavedFilesService::SavedFiles::GetFileEntry( 366 const SavedFileEntry* SavedFilesService::SavedFiles::GetFileEntry(
365 const std::string& id) const { 367 const std::string& id) const {
366 auto it = registered_file_entries_.find(id); 368 auto it = registered_file_entries_.find(id);
367 if (it == registered_file_entries_.end()) 369 if (it == registered_file_entries_.end())
368 return NULL; 370 return NULL;
369 371
370 return it->second; 372 return it->second.get();
371 } 373 }
372 374
373 std::vector<SavedFileEntry> SavedFilesService::SavedFiles::GetAllFileEntries() 375 std::vector<SavedFileEntry> SavedFilesService::SavedFiles::GetAllFileEntries()
374 const { 376 const {
375 std::vector<SavedFileEntry> result; 377 std::vector<SavedFileEntry> result;
376 for (auto it = registered_file_entries_.begin(); 378 for (auto it = registered_file_entries_.begin();
377 it != registered_file_entries_.end(); ++it) { 379 it != registered_file_entries_.end(); ++it) {
378 result.push_back(*it->second); 380 result.push_back(*it->second.get());
379 } 381 }
380 return result; 382 return result;
381 } 383 }
382 384
383 void SavedFilesService::SavedFiles::MaybeCompactSequenceNumbers() { 385 void SavedFilesService::SavedFiles::MaybeCompactSequenceNumbers() {
384 DCHECK_GE(g_max_sequence_number, 0); 386 DCHECK_GE(g_max_sequence_number, 0);
385 DCHECK_GE(static_cast<size_t>(g_max_sequence_number), 387 DCHECK_GE(static_cast<size_t>(g_max_sequence_number),
386 g_max_saved_file_entries); 388 g_max_saved_file_entries);
387 std::map<int, SavedFileEntry*>::reverse_iterator it = 389 std::map<int, SavedFileEntry*>::reverse_iterator it =
388 saved_file_lru_.rbegin(); 390 saved_file_lru_.rbegin();
(...skipping 30 matching lines...) Expand all
419 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); 421 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
420 std::vector<SavedFileEntry> saved_entries = 422 std::vector<SavedFileEntry> saved_entries =
421 GetSavedFileEntries(prefs, extension_id_); 423 GetSavedFileEntries(prefs, extension_id_);
422 for (std::vector<SavedFileEntry>::iterator it = saved_entries.begin(); 424 for (std::vector<SavedFileEntry>::iterator it = saved_entries.begin();
423 it != saved_entries.end(); 425 it != saved_entries.end();
424 ++it) { 426 ++it) {
425 std::unique_ptr<SavedFileEntry> file_entry(new SavedFileEntry(*it)); 427 std::unique_ptr<SavedFileEntry> file_entry(new SavedFileEntry(*it));
426 const std::string& id = file_entry->id; 428 const std::string& id = file_entry->id;
427 saved_file_lru_.insert( 429 saved_file_lru_.insert(
428 std::make_pair(file_entry->sequence_number, file_entry.get())); 430 std::make_pair(file_entry->sequence_number, file_entry.get()));
429 registered_file_entries_.add(id, std::move(file_entry)); 431 registered_file_entries_[id] = std::move(file_entry);
430 } 432 }
431 } 433 }
432 434
433 // static 435 // static
434 void SavedFilesService::SetMaxSequenceNumberForTest(int max_value) { 436 void SavedFilesService::SetMaxSequenceNumberForTest(int max_value) {
435 g_max_sequence_number = max_value; 437 g_max_sequence_number = max_value;
436 } 438 }
437 439
438 // static 440 // static
439 void SavedFilesService::ClearMaxSequenceNumberForTest() { 441 void SavedFilesService::ClearMaxSequenceNumberForTest() {
440 g_max_sequence_number = kMaxSequenceNumber; 442 g_max_sequence_number = kMaxSequenceNumber;
441 } 443 }
442 444
443 // static 445 // static
444 void SavedFilesService::SetLruSizeForTest(int size) { 446 void SavedFilesService::SetLruSizeForTest(int size) {
445 g_max_saved_file_entries = size; 447 g_max_saved_file_entries = size;
446 } 448 }
447 449
448 // static 450 // static
449 void SavedFilesService::ClearLruSizeForTest() { 451 void SavedFilesService::ClearLruSizeForTest() {
450 g_max_saved_file_entries = kMaxSavedFileEntries; 452 g_max_saved_file_entries = kMaxSavedFileEntries;
451 } 453 }
452 454
453 } // namespace apps 455 } // namespace apps
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698