123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // Copyright 2013 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef APPS_SAVED_FILES_SERVICE_H_
- #define APPS_SAVED_FILES_SERVICE_H_
- #include <map>
- #include <memory>
- #include <set>
- #include <string>
- #include <vector>
- #include "base/files/file_path.h"
- #include "base/gtest_prod_util.h"
- #include "base/memory/raw_ptr.h"
- #include "base/scoped_observation.h"
- #include "components/keyed_service/core/keyed_service.h"
- #include "extensions/browser/api/file_system/saved_files_service_interface.h"
- #include "extensions/browser/extension_host_registry.h"
- namespace content {
- class BrowserContext;
- }
- class SavedFilesServiceUnitTest;
- FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, RetainTwoFilesTest);
- FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, EvictionTest);
- FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, SequenceNumberCompactionTest);
- namespace extensions {
- class Extension;
- struct SavedFileEntry;
- }
- namespace apps {
- // Tracks the files that apps have retained access to both while running and
- // when suspended.
- class SavedFilesService : public extensions::SavedFilesServiceInterface,
- public KeyedService,
- public extensions::ExtensionHostRegistry::Observer {
- public:
- explicit SavedFilesService(content::BrowserContext* context);
- SavedFilesService(const SavedFilesService&) = delete;
- SavedFilesService& operator=(const SavedFilesService&) = delete;
- ~SavedFilesService() override;
- static SavedFilesService* Get(content::BrowserContext* context);
- // extensions::SavedFilesServiceInterface:
- void RegisterFileEntry(const std::string& extension_id,
- const std::string& id,
- const base::FilePath& file_path,
- bool is_directory) override;
- void EnqueueFileEntry(const std::string& extension_id,
- const std::string& id) override;
- bool IsRegistered(const std::string& extension_id,
- const std::string& id) override;
- const extensions::SavedFileEntry* GetFileEntry(
- const std::string& extension_id,
- const std::string& id) override;
- // Returns all registered file entries.
- std::vector<extensions::SavedFileEntry> GetAllFileEntries(
- const std::string& extension_id);
- // Clears all retained files if the app does not have the
- // fileSystem.retainEntries permission.
- void ClearQueueIfNoRetainPermission(const extensions::Extension* extension);
- // Clears all retained files.
- void ClearQueue(const extensions::Extension* extension);
- // Called to notify that the application has begun to exit.
- void OnApplicationTerminating();
- private:
- FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, RetainTwoFilesTest);
- FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, EvictionTest);
- FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest,
- SequenceNumberCompactionTest);
- friend class ::SavedFilesServiceUnitTest;
- // A container for the registered files for an app.
- class SavedFiles;
- // extensions::ExtensionHostRegistry::Observer:
- void OnExtensionHostDestroyed(content::BrowserContext* browser_context,
- extensions::ExtensionHost* host) override;
- // Returns the SavedFiles for |extension_id| or NULL if one does not exist.
- SavedFiles* Get(const std::string& extension_id) const;
- // Returns the SavedFiles for |extension_id|, creating it if necessary.
- SavedFiles* GetOrInsert(const std::string& extension_id);
- // Clears the SavedFiles for |extension_id|.
- void Clear(const std::string& extension_id);
- static void SetMaxSequenceNumberForTest(int max_value);
- static void ClearMaxSequenceNumberForTest();
- static void SetLruSizeForTest(int size);
- static void ClearLruSizeForTest();
- std::map<std::string, std::unique_ptr<SavedFiles>>
- extension_id_to_saved_files_;
- raw_ptr<content::BrowserContext> context_;
- base::ScopedObservation<extensions::ExtensionHostRegistry,
- extensions::ExtensionHostRegistry::Observer>
- extension_host_registry_observation_{this};
- };
- } // namespace apps
- #endif // APPS_SAVED_FILES_SERVICE_H_
|