saved_files_service.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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
  3. // found in the LICENSE file.
  4. #ifndef APPS_SAVED_FILES_SERVICE_H_
  5. #define APPS_SAVED_FILES_SERVICE_H_
  6. #include <map>
  7. #include <memory>
  8. #include <set>
  9. #include <string>
  10. #include <vector>
  11. #include "base/files/file_path.h"
  12. #include "base/gtest_prod_util.h"
  13. #include "base/memory/raw_ptr.h"
  14. #include "base/scoped_observation.h"
  15. #include "components/keyed_service/core/keyed_service.h"
  16. #include "extensions/browser/api/file_system/saved_files_service_interface.h"
  17. #include "extensions/browser/extension_host_registry.h"
  18. namespace content {
  19. class BrowserContext;
  20. }
  21. class SavedFilesServiceUnitTest;
  22. FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, RetainTwoFilesTest);
  23. FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, EvictionTest);
  24. FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, SequenceNumberCompactionTest);
  25. namespace extensions {
  26. class Extension;
  27. struct SavedFileEntry;
  28. }
  29. namespace apps {
  30. // Tracks the files that apps have retained access to both while running and
  31. // when suspended.
  32. class SavedFilesService : public extensions::SavedFilesServiceInterface,
  33. public KeyedService,
  34. public extensions::ExtensionHostRegistry::Observer {
  35. public:
  36. explicit SavedFilesService(content::BrowserContext* context);
  37. SavedFilesService(const SavedFilesService&) = delete;
  38. SavedFilesService& operator=(const SavedFilesService&) = delete;
  39. ~SavedFilesService() override;
  40. static SavedFilesService* Get(content::BrowserContext* context);
  41. // extensions::SavedFilesServiceInterface:
  42. void RegisterFileEntry(const std::string& extension_id,
  43. const std::string& id,
  44. const base::FilePath& file_path,
  45. bool is_directory) override;
  46. void EnqueueFileEntry(const std::string& extension_id,
  47. const std::string& id) override;
  48. bool IsRegistered(const std::string& extension_id,
  49. const std::string& id) override;
  50. const extensions::SavedFileEntry* GetFileEntry(
  51. const std::string& extension_id,
  52. const std::string& id) override;
  53. // Returns all registered file entries.
  54. std::vector<extensions::SavedFileEntry> GetAllFileEntries(
  55. const std::string& extension_id);
  56. // Clears all retained files if the app does not have the
  57. // fileSystem.retainEntries permission.
  58. void ClearQueueIfNoRetainPermission(const extensions::Extension* extension);
  59. // Clears all retained files.
  60. void ClearQueue(const extensions::Extension* extension);
  61. // Called to notify that the application has begun to exit.
  62. void OnApplicationTerminating();
  63. private:
  64. FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, RetainTwoFilesTest);
  65. FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, EvictionTest);
  66. FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest,
  67. SequenceNumberCompactionTest);
  68. friend class ::SavedFilesServiceUnitTest;
  69. // A container for the registered files for an app.
  70. class SavedFiles;
  71. // extensions::ExtensionHostRegistry::Observer:
  72. void OnExtensionHostDestroyed(content::BrowserContext* browser_context,
  73. extensions::ExtensionHost* host) override;
  74. // Returns the SavedFiles for |extension_id| or NULL if one does not exist.
  75. SavedFiles* Get(const std::string& extension_id) const;
  76. // Returns the SavedFiles for |extension_id|, creating it if necessary.
  77. SavedFiles* GetOrInsert(const std::string& extension_id);
  78. // Clears the SavedFiles for |extension_id|.
  79. void Clear(const std::string& extension_id);
  80. static void SetMaxSequenceNumberForTest(int max_value);
  81. static void ClearMaxSequenceNumberForTest();
  82. static void SetLruSizeForTest(int size);
  83. static void ClearLruSizeForTest();
  84. std::map<std::string, std::unique_ptr<SavedFiles>>
  85. extension_id_to_saved_files_;
  86. raw_ptr<content::BrowserContext> context_;
  87. base::ScopedObservation<extensions::ExtensionHostRegistry,
  88. extensions::ExtensionHostRegistry::Observer>
  89. extension_host_registry_observation_{this};
  90. };
  91. } // namespace apps
  92. #endif // APPS_SAVED_FILES_SERVICE_H_