Upload upstream chromium 76.0.3809.146
[platform/framework/web/chromium-efl.git] / apps / saved_files_service.h
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
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 "components/keyed_service/core/keyed_service.h"
17 #include "content/public/browser/notification_observer.h"
18 #include "content/public/browser/notification_registrar.h"
19 #include "extensions/browser/api/file_system/saved_files_service_interface.h"
20
21 namespace content {
22 class BrowserContext;
23 }
24
25 class SavedFilesServiceUnitTest;
26 FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, RetainTwoFilesTest);
27 FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, EvictionTest);
28 FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, SequenceNumberCompactionTest);
29
30 namespace extensions {
31 class Extension;
32 struct SavedFileEntry;
33 }
34
35 namespace apps {
36
37 // Tracks the files that apps have retained access to both while running and
38 // when suspended.
39 class SavedFilesService : public extensions::SavedFilesServiceInterface,
40                           public KeyedService,
41                           public content::NotificationObserver {
42  public:
43   explicit SavedFilesService(content::BrowserContext* context);
44   ~SavedFilesService() override;
45
46   static SavedFilesService* Get(content::BrowserContext* context);
47
48   // extensions::SavedFilesServiceInterface:
49   void RegisterFileEntry(const std::string& extension_id,
50                          const std::string& id,
51                          const base::FilePath& file_path,
52                          bool is_directory) override;
53   void EnqueueFileEntry(const std::string& extension_id,
54                         const std::string& id) override;
55   bool IsRegistered(const std::string& extension_id,
56                     const std::string& id) override;
57   const extensions::SavedFileEntry* GetFileEntry(
58       const std::string& extension_id,
59       const std::string& id) override;
60
61   // Returns all registered file entries.
62   std::vector<extensions::SavedFileEntry> GetAllFileEntries(
63       const std::string& extension_id);
64
65   // Clears all retained files if the app does not have the
66   // fileSystem.retainEntries permission.
67   void ClearQueueIfNoRetainPermission(const extensions::Extension* extension);
68
69   // Clears all retained files.
70   void ClearQueue(const extensions::Extension* extension);
71
72   // Called to notify that the application has begun to exit.
73   void OnApplicationTerminating();
74
75  private:
76   FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, RetainTwoFilesTest);
77   FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, EvictionTest);
78   FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest,
79                            SequenceNumberCompactionTest);
80   friend class ::SavedFilesServiceUnitTest;
81
82   // A container for the registered files for an app.
83   class SavedFiles;
84
85   // content::NotificationObserver.
86   void Observe(int type,
87                const content::NotificationSource& source,
88                const content::NotificationDetails& details) override;
89
90   // Returns the SavedFiles for |extension_id| or NULL if one does not exist.
91   SavedFiles* Get(const std::string& extension_id) const;
92
93   // Returns the SavedFiles for |extension_id|, creating it if necessary.
94   SavedFiles* GetOrInsert(const std::string& extension_id);
95
96   // Clears the SavedFiles for |extension_id|.
97   void Clear(const std::string& extension_id);
98
99   static void SetMaxSequenceNumberForTest(int max_value);
100   static void ClearMaxSequenceNumberForTest();
101   static void SetLruSizeForTest(int size);
102   static void ClearLruSizeForTest();
103
104   std::map<std::string, std::unique_ptr<SavedFiles>>
105       extension_id_to_saved_files_;
106   content::NotificationRegistrar registrar_;
107   content::BrowserContext* context_;
108
109   DISALLOW_COPY_AND_ASSIGN(SavedFilesService);
110 };
111
112 }  // namespace apps
113
114 #endif  // APPS_SAVED_FILES_SERVICE_H_