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

Side by Side Diff: apps/saved_files_service.cc

Issue 2729503007: Remove Profile usage from //apps (Closed)
Patch Set: deps Created 3 years, 8 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 | « apps/saved_files_service.h ('k') | apps/saved_files_service_factory.h » ('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 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
9 #include <algorithm> 9 #include <algorithm>
10 #include <map> 10 #include <map>
11 #include <unordered_map> 11 #include <unordered_map>
12 #include <utility> 12 #include <utility>
13 13
14 #include "apps/saved_files_service_factory.h" 14 #include "apps/saved_files_service_factory.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
16 #include "base/value_conversions.h" 16 #include "base/value_conversions.h"
17 #include "chrome/browser/chrome_notification_types.h" 17 #include "chrome/browser/chrome_notification_types.h"
18 #include "chrome/browser/profiles/profile.h" 18 #include "content/public/browser/browser_context.h"
19 #include "content/public/browser/notification_service.h" 19 #include "content/public/browser/notification_service.h"
20 #include "extensions/browser/extension_host.h" 20 #include "extensions/browser/extension_host.h"
21 #include "extensions/browser/extension_prefs.h" 21 #include "extensions/browser/extension_prefs.h"
22 #include "extensions/browser/extension_system.h" 22 #include "extensions/browser/extension_system.h"
23 #include "extensions/browser/notification_types.h" 23 #include "extensions/browser/notification_types.h"
24 #include "extensions/common/permissions/api_permission.h" 24 #include "extensions/common/permissions/api_permission.h"
25 #include "extensions/common/permissions/permission_set.h" 25 #include "extensions/common/permissions/permission_set.h"
26 #include "extensions/common/permissions/permissions_data.h" 26 #include "extensions/common/permissions/permissions_data.h"
27 27
28 namespace apps { 28 namespace apps {
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 const base::FilePath& path, 151 const base::FilePath& path,
152 bool is_directory, 152 bool is_directory,
153 int sequence_number) 153 int sequence_number)
154 : id(id), 154 : id(id),
155 path(path), 155 path(path),
156 is_directory(is_directory), 156 is_directory(is_directory),
157 sequence_number(sequence_number) {} 157 sequence_number(sequence_number) {}
158 158
159 class SavedFilesService::SavedFiles { 159 class SavedFilesService::SavedFiles {
160 public: 160 public:
161 SavedFiles(Profile* profile, const std::string& extension_id); 161 SavedFiles(content::BrowserContext* context, const std::string& extension_id);
162 ~SavedFiles(); 162 ~SavedFiles();
163 163
164 void RegisterFileEntry(const std::string& id, 164 void RegisterFileEntry(const std::string& id,
165 const base::FilePath& file_path, 165 const base::FilePath& file_path,
166 bool is_directory); 166 bool is_directory);
167 void EnqueueFileEntry(const std::string& id); 167 void EnqueueFileEntry(const std::string& id);
168 bool IsRegistered(const std::string& id) const; 168 bool IsRegistered(const std::string& id) const;
169 const SavedFileEntry* GetFileEntry(const std::string& id) const; 169 const SavedFileEntry* GetFileEntry(const std::string& id) const;
170 std::vector<SavedFileEntry> GetAllFileEntries() const; 170 std::vector<SavedFileEntry> GetAllFileEntries() const;
171 171
172 private: 172 private:
173 // Compacts sequence numbers if the largest sequence number is 173 // Compacts sequence numbers if the largest sequence number is
174 // 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
175 // will almost never do any real work. 175 // will almost never do any real work.
176 void MaybeCompactSequenceNumbers(); 176 void MaybeCompactSequenceNumbers();
177 177
178 void LoadSavedFileEntriesFromPreferences(); 178 void LoadSavedFileEntriesFromPreferences();
179 179
180 Profile* profile_; 180 content::BrowserContext* context_;
181 const std::string extension_id_; 181 const std::string extension_id_;
182 182
183 // Contains all file entries that have been registered, keyed by ID. 183 // Contains all file entries that have been registered, keyed by ID.
184 std::unordered_map<std::string, std::unique_ptr<SavedFileEntry>> 184 std::unordered_map<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
195 // static 195 // static
196 SavedFilesService* SavedFilesService::Get(Profile* profile) { 196 SavedFilesService* SavedFilesService::Get(content::BrowserContext* context) {
197 return SavedFilesServiceFactory::GetForProfile(profile); 197 return SavedFilesServiceFactory::GetForBrowserContext(context);
198 } 198 }
199 199
200 SavedFilesService::SavedFilesService(Profile* profile) : profile_(profile) { 200 SavedFilesService::SavedFilesService(content::BrowserContext* context)
201 : context_(context) {
201 registrar_.Add(this, 202 registrar_.Add(this,
202 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, 203 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
203 content::NotificationService::AllSources()); 204 content::NotificationService::AllSources());
204 registrar_.Add(this, 205 registrar_.Add(this,
205 chrome::NOTIFICATION_APP_TERMINATING, 206 chrome::NOTIFICATION_APP_TERMINATING,
206 content::NotificationService::AllSources()); 207 content::NotificationService::AllSources());
207 } 208 }
208 209
209 SavedFilesService::~SavedFilesService() {} 210 SavedFilesService::~SavedFilesService() {}
210 211
(...skipping 30 matching lines...) Expand all
241 void SavedFilesService::EnqueueFileEntry(const std::string& extension_id, 242 void SavedFilesService::EnqueueFileEntry(const std::string& extension_id,
242 const std::string& id) { 243 const std::string& id) {
243 GetOrInsert(extension_id)->EnqueueFileEntry(id); 244 GetOrInsert(extension_id)->EnqueueFileEntry(id);
244 } 245 }
245 246
246 std::vector<SavedFileEntry> SavedFilesService::GetAllFileEntries( 247 std::vector<SavedFileEntry> SavedFilesService::GetAllFileEntries(
247 const std::string& extension_id) { 248 const std::string& extension_id) {
248 SavedFiles* saved_files = Get(extension_id); 249 SavedFiles* saved_files = Get(extension_id);
249 if (saved_files) 250 if (saved_files)
250 return saved_files->GetAllFileEntries(); 251 return saved_files->GetAllFileEntries();
251 return GetSavedFileEntries(ExtensionPrefs::Get(profile_), extension_id); 252 return GetSavedFileEntries(ExtensionPrefs::Get(context_), extension_id);
252 } 253 }
253 254
254 bool SavedFilesService::IsRegistered(const std::string& extension_id, 255 bool SavedFilesService::IsRegistered(const std::string& extension_id,
255 const std::string& id) { 256 const std::string& id) {
256 return GetOrInsert(extension_id)->IsRegistered(id); 257 return GetOrInsert(extension_id)->IsRegistered(id);
257 } 258 }
258 259
259 const SavedFileEntry* SavedFilesService::GetFileEntry( 260 const SavedFileEntry* SavedFilesService::GetFileEntry(
260 const std::string& extension_id, 261 const std::string& extension_id,
261 const std::string& id) { 262 const std::string& id) {
262 return GetOrInsert(extension_id)->GetFileEntry(id); 263 return GetOrInsert(extension_id)->GetFileEntry(id);
263 } 264 }
264 265
265 void SavedFilesService::ClearQueueIfNoRetainPermission( 266 void SavedFilesService::ClearQueueIfNoRetainPermission(
266 const Extension* extension) { 267 const Extension* extension) {
267 if (!extension->permissions_data()->active_permissions().HasAPIPermission( 268 if (!extension->permissions_data()->active_permissions().HasAPIPermission(
268 APIPermission::kFileSystemRetainEntries)) { 269 APIPermission::kFileSystemRetainEntries)) {
269 ClearQueue(extension); 270 ClearQueue(extension);
270 } 271 }
271 } 272 }
272 273
273 void SavedFilesService::ClearQueue(const extensions::Extension* extension) { 274 void SavedFilesService::ClearQueue(const extensions::Extension* extension) {
274 ClearSavedFileEntries(ExtensionPrefs::Get(profile_), extension->id()); 275 ClearSavedFileEntries(ExtensionPrefs::Get(context_), extension->id());
275 Clear(extension->id()); 276 Clear(extension->id());
276 } 277 }
277 278
278 SavedFilesService::SavedFiles* SavedFilesService::Get( 279 SavedFilesService::SavedFiles* SavedFilesService::Get(
279 const std::string& extension_id) const { 280 const std::string& extension_id) const {
280 auto it = extension_id_to_saved_files_.find(extension_id); 281 auto it = extension_id_to_saved_files_.find(extension_id);
281 if (it != extension_id_to_saved_files_.end()) 282 if (it != extension_id_to_saved_files_.end())
282 return it->second.get(); 283 return it->second.get();
283 284
284 return NULL; 285 return NULL;
285 } 286 }
286 287
287 SavedFilesService::SavedFiles* SavedFilesService::GetOrInsert( 288 SavedFilesService::SavedFiles* SavedFilesService::GetOrInsert(
288 const std::string& extension_id) { 289 const std::string& extension_id) {
289 SavedFiles* saved_files = Get(extension_id); 290 SavedFiles* saved_files = Get(extension_id);
290 if (saved_files) 291 if (saved_files)
291 return saved_files; 292 return saved_files;
292 293
293 std::unique_ptr<SavedFiles> scoped_saved_files( 294 std::unique_ptr<SavedFiles> scoped_saved_files(
294 new SavedFiles(profile_, extension_id)); 295 new SavedFiles(context_, extension_id));
295 saved_files = scoped_saved_files.get(); 296 saved_files = scoped_saved_files.get();
296 extension_id_to_saved_files_.insert( 297 extension_id_to_saved_files_.insert(
297 std::make_pair(extension_id, std::move(scoped_saved_files))); 298 std::make_pair(extension_id, std::move(scoped_saved_files)));
298 return saved_files; 299 return saved_files;
299 } 300 }
300 301
301 void SavedFilesService::Clear(const std::string& extension_id) { 302 void SavedFilesService::Clear(const std::string& extension_id) {
302 extension_id_to_saved_files_.erase(extension_id); 303 extension_id_to_saved_files_.erase(extension_id);
303 } 304 }
304 305
305 SavedFilesService::SavedFiles::SavedFiles(Profile* profile, 306 SavedFilesService::SavedFiles::SavedFiles(content::BrowserContext* context,
306 const std::string& extension_id) 307 const std::string& extension_id)
307 : profile_(profile), extension_id_(extension_id) { 308 : context_(context), extension_id_(extension_id) {
308 LoadSavedFileEntriesFromPreferences(); 309 LoadSavedFileEntriesFromPreferences();
309 } 310 }
310 311
311 SavedFilesService::SavedFiles::~SavedFiles() {} 312 SavedFilesService::SavedFiles::~SavedFiles() {}
312 313
313 void SavedFilesService::SavedFiles::RegisterFileEntry( 314 void SavedFilesService::SavedFiles::RegisterFileEntry(
314 const std::string& id, 315 const std::string& id,
315 const base::FilePath& file_path, 316 const base::FilePath& file_path,
316 bool is_directory) { 317 bool is_directory) {
317 auto it = registered_file_entries_.find(id); 318 auto it = registered_file_entries_.find(id);
(...skipping 17 matching lines...) Expand all
335 if (it->second == file_entry) 336 if (it->second == file_entry)
336 return; 337 return;
337 338
338 file_entry->sequence_number = it->first + 1; 339 file_entry->sequence_number = it->first + 1;
339 } else { 340 } else {
340 // The first sequence number is 1, as 0 means the entry is not in the LRU. 341 // The first sequence number is 1, as 0 means the entry is not in the LRU.
341 file_entry->sequence_number = 1; 342 file_entry->sequence_number = 1;
342 } 343 }
343 saved_file_lru_.insert( 344 saved_file_lru_.insert(
344 std::make_pair(file_entry->sequence_number, file_entry)); 345 std::make_pair(file_entry->sequence_number, file_entry));
345 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); 346 ExtensionPrefs* prefs = ExtensionPrefs::Get(context_);
346 if (old_sequence_number) { 347 if (old_sequence_number) {
347 saved_file_lru_.erase(old_sequence_number); 348 saved_file_lru_.erase(old_sequence_number);
348 UpdateSavedFileEntry(prefs, extension_id_, *file_entry); 349 UpdateSavedFileEntry(prefs, extension_id_, *file_entry);
349 } else { 350 } else {
350 AddSavedFileEntry(prefs, extension_id_, *file_entry); 351 AddSavedFileEntry(prefs, extension_id_, *file_entry);
351 if (saved_file_lru_.size() > g_max_saved_file_entries) { 352 if (saved_file_lru_.size() > g_max_saved_file_entries) {
352 std::map<int, SavedFileEntry*>::iterator it = saved_file_lru_.begin(); 353 std::map<int, SavedFileEntry*>::iterator it = saved_file_lru_.begin();
353 it->second->sequence_number = 0; 354 it->second->sequence_number = 0;
354 RemoveSavedFileEntry(prefs, extension_id_, it->second->id); 355 RemoveSavedFileEntry(prefs, extension_id_, it->second->id);
355 saved_file_lru_.erase(it); 356 saved_file_lru_.erase(it);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 saved_file_lru_.rbegin(); 391 saved_file_lru_.rbegin();
391 if (it == saved_file_lru_.rend()) 392 if (it == saved_file_lru_.rend())
392 return; 393 return;
393 394
394 // Only compact sequence numbers if the last entry's sequence number is the 395 // Only compact sequence numbers if the last entry's sequence number is the
395 // maximum value. This should almost never be the case. 396 // maximum value. This should almost never be the case.
396 if (it->first < g_max_sequence_number) 397 if (it->first < g_max_sequence_number)
397 return; 398 return;
398 399
399 int sequence_number = 0; 400 int sequence_number = 0;
400 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); 401 ExtensionPrefs* prefs = ExtensionPrefs::Get(context_);
401 for (std::map<int, SavedFileEntry*>::iterator it = saved_file_lru_.begin(); 402 for (std::map<int, SavedFileEntry*>::iterator it = saved_file_lru_.begin();
402 it != saved_file_lru_.end(); 403 it != saved_file_lru_.end();
403 ++it) { 404 ++it) {
404 sequence_number++; 405 sequence_number++;
405 if (it->second->sequence_number == sequence_number) 406 if (it->second->sequence_number == sequence_number)
406 continue; 407 continue;
407 408
408 SavedFileEntry* file_entry = it->second; 409 SavedFileEntry* file_entry = it->second;
409 file_entry->sequence_number = sequence_number; 410 file_entry->sequence_number = sequence_number;
410 UpdateSavedFileEntry(prefs, extension_id_, *file_entry); 411 UpdateSavedFileEntry(prefs, extension_id_, *file_entry);
411 saved_file_lru_.erase(it++); 412 saved_file_lru_.erase(it++);
412 // Provide the following element as an insert hint. While optimized 413 // Provide the following element as an insert hint. While optimized
413 // insertion time with the following element as a hint is only supported by 414 // insertion time with the following element as a hint is only supported by
414 // the spec in C++11, the implementations do support this. 415 // the spec in C++11, the implementations do support this.
415 it = saved_file_lru_.insert( 416 it = saved_file_lru_.insert(
416 it, std::make_pair(file_entry->sequence_number, file_entry)); 417 it, std::make_pair(file_entry->sequence_number, file_entry));
417 } 418 }
418 } 419 }
419 420
420 void SavedFilesService::SavedFiles::LoadSavedFileEntriesFromPreferences() { 421 void SavedFilesService::SavedFiles::LoadSavedFileEntriesFromPreferences() {
421 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); 422 ExtensionPrefs* prefs = ExtensionPrefs::Get(context_);
422 std::vector<SavedFileEntry> saved_entries = 423 std::vector<SavedFileEntry> saved_entries =
423 GetSavedFileEntries(prefs, extension_id_); 424 GetSavedFileEntries(prefs, extension_id_);
424 for (std::vector<SavedFileEntry>::iterator it = saved_entries.begin(); 425 for (std::vector<SavedFileEntry>::iterator it = saved_entries.begin();
425 it != saved_entries.end(); 426 it != saved_entries.end();
426 ++it) { 427 ++it) {
427 std::unique_ptr<SavedFileEntry> file_entry(new SavedFileEntry(*it)); 428 std::unique_ptr<SavedFileEntry> file_entry(new SavedFileEntry(*it));
428 const std::string& id = file_entry->id; 429 const std::string& id = file_entry->id;
429 saved_file_lru_.insert( 430 saved_file_lru_.insert(
430 std::make_pair(file_entry->sequence_number, file_entry.get())); 431 std::make_pair(file_entry->sequence_number, file_entry.get()));
431 registered_file_entries_[id] = std::move(file_entry); 432 registered_file_entries_[id] = std::move(file_entry);
(...skipping 14 matching lines...) Expand all
446 void SavedFilesService::SetLruSizeForTest(int size) { 447 void SavedFilesService::SetLruSizeForTest(int size) {
447 g_max_saved_file_entries = size; 448 g_max_saved_file_entries = size;
448 } 449 }
449 450
450 // static 451 // static
451 void SavedFilesService::ClearLruSizeForTest() { 452 void SavedFilesService::ClearLruSizeForTest() {
452 g_max_saved_file_entries = kMaxSavedFileEntries; 453 g_max_saved_file_entries = kMaxSavedFileEntries;
453 } 454 }
454 455
455 } // namespace apps 456 } // namespace apps
OLDNEW
« no previous file with comments | « apps/saved_files_service.h ('k') | apps/saved_files_service_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698