[M108 Migration] Support standard build for armv7hl architecture
[platform/framework/web/chromium-efl.git] / apps / saved_files_service.h
1 // Copyright 2013 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef APPS_SAVED_FILES_SERVICE_H_
6 #define APPS_SAVED_FILES_SERVICE_H_
7
8 #include <map>
9 #include <memory>
10 #include <set>
11 #include <string>
12 #include <vector>
13
14 #include "base/files/file_path.h"
15 #include "base/gtest_prod_util.h"
16 #include "base/memory/raw_ptr.h"
17 #include "base/scoped_observation.h"
18 #include "components/keyed_service/core/keyed_service.h"
19 #include "extensions/browser/api/file_system/saved_files_service_interface.h"
20 #include "extensions/browser/extension_host_registry.h"
21
22 namespace content {
23 class BrowserContext;
24 }
25
26 class SavedFilesServiceUnitTest;
27 FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, RetainTwoFilesTest);
28 FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, EvictionTest);
29 FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, SequenceNumberCompactionTest);
30
31 namespace extensions {
32 class Extension;
33 struct SavedFileEntry;
34 }
35
36 namespace apps {
37
38 // Tracks the files that apps have retained access to both while running and
39 // when suspended.
40 class SavedFilesService : public extensions::SavedFilesServiceInterface,
41                           public KeyedService,
42                           public extensions::ExtensionHostRegistry::Observer {
43  public:
44   explicit SavedFilesService(content::BrowserContext* context);
45   SavedFilesService(const SavedFilesService&) = delete;
46   SavedFilesService& operator=(const SavedFilesService&) = delete;
47   ~SavedFilesService() override;
48
49   static SavedFilesService* Get(content::BrowserContext* context);
50
51   // extensions::SavedFilesServiceInterface:
52   void RegisterFileEntry(const std::string& extension_id,
53                          const std::string& id,
54                          const base::FilePath& file_path,
55                          bool is_directory) override;
56   void EnqueueFileEntry(const std::string& extension_id,
57                         const std::string& id) override;
58   bool IsRegistered(const std::string& extension_id,
59                     const std::string& id) override;
60   const extensions::SavedFileEntry* GetFileEntry(
61       const std::string& extension_id,
62       const std::string& id) override;
63
64   // Returns all registered file entries.
65   std::vector<extensions::SavedFileEntry> GetAllFileEntries(
66       const std::string& extension_id);
67
68   // Clears all retained files if the app does not have the
69   // fileSystem.retainEntries permission.
70   void ClearQueueIfNoRetainPermission(const extensions::Extension* extension);
71
72   // Clears all retained files.
73   void ClearQueue(const extensions::Extension* extension);
74
75   // Called to notify that the application has begun to exit.
76   void OnApplicationTerminating();
77
78  private:
79   FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, RetainTwoFilesTest);
80   FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, EvictionTest);
81   FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest,
82                            SequenceNumberCompactionTest);
83   friend class ::SavedFilesServiceUnitTest;
84
85   // A container for the registered files for an app.
86   class SavedFiles;
87
88   // extensions::ExtensionHostRegistry::Observer:
89   void OnExtensionHostDestroyed(content::BrowserContext* browser_context,
90                                 extensions::ExtensionHost* host) override;
91
92   // Returns the SavedFiles for |extension_id| or NULL if one does not exist.
93   SavedFiles* Get(const std::string& extension_id) const;
94
95   // Returns the SavedFiles for |extension_id|, creating it if necessary.
96   SavedFiles* GetOrInsert(const std::string& extension_id);
97
98   // Clears the SavedFiles for |extension_id|.
99   void Clear(const std::string& extension_id);
100
101   static void SetMaxSequenceNumberForTest(int max_value);
102   static void ClearMaxSequenceNumberForTest();
103   static void SetLruSizeForTest(int size);
104   static void ClearLruSizeForTest();
105
106   std::map<std::string, std::unique_ptr<SavedFiles>>
107       extension_id_to_saved_files_;
108   raw_ptr<content::BrowserContext> context_;
109
110   base::ScopedObservation<extensions::ExtensionHostRegistry,
111                           extensions::ExtensionHostRegistry::Observer>
112       extension_host_registry_observation_{this};
113 };
114
115 }  // namespace apps
116
117 #endif  // APPS_SAVED_FILES_SERVICE_H_