blob: 2f47bb39805cc20b26022be36e8aaf98bb173f60 [file] [log] [blame]
[email protected]961745f2013-05-25 14:09:241// 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
limasdf918cc2e92015-11-20 04:28:578#include <map>
mostynbecb4a22b2016-04-04 06:08:019#include <memory>
[email protected]961745f2013-05-25 14:09:2410#include <set>
11#include <string>
12#include <vector>
13
14#include "base/files/file_path.h"
15#include "base/gtest_prod_util.h"
[email protected]12b7af32014-03-13 05:28:2016#include "components/keyed_service/core/keyed_service.h"
[email protected]961745f2013-05-25 14:09:2417#include "content/public/browser/notification_observer.h"
18#include "content/public/browser/notification_registrar.h"
michaelpg868a94be2017-06-26 16:55:2519#include "extensions/browser/api/file_system/saved_files_service_interface.h"
[email protected]961745f2013-05-25 14:09:2420
michaelpg4d80e562017-04-04 01:48:1421namespace content {
22class BrowserContext;
23}
24
[email protected]961745f2013-05-25 14:09:2425class SavedFilesServiceUnitTest;
26FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, RetainTwoFilesTest);
27FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, EvictionTest);
28FORWARD_DECLARE_TEST(SavedFilesServiceUnitTest, SequenceNumberCompactionTest);
29
30namespace extensions {
31class Extension;
michaelpg868a94be2017-06-26 16:55:2532struct SavedFileEntry;
[email protected]961745f2013-05-25 14:09:2433}
34
35namespace apps {
36
[email protected]961745f2013-05-25 14:09:2437// Tracks the files that apps have retained access to both while running and
38// when suspended.
michaelpg868a94be2017-06-26 16:55:2539class SavedFilesService : public extensions::SavedFilesServiceInterface,
40 public KeyedService,
[email protected]961745f2013-05-25 14:09:2441 public content::NotificationObserver {
42 public:
michaelpg4d80e562017-04-04 01:48:1443 explicit SavedFilesService(content::BrowserContext* context);
David Bienvenub4b5b572020-09-28 00:49:2744 SavedFilesService(const SavedFilesService&) = delete;
45 SavedFilesService& operator=(const SavedFilesService&) = delete;
dcheng2f5be412014-10-22 01:46:0846 ~SavedFilesService() override;
[email protected]961745f2013-05-25 14:09:2447
michaelpg4d80e562017-04-04 01:48:1448 static SavedFilesService* Get(content::BrowserContext* context);
[email protected]961745f2013-05-25 14:09:2449
michaelpg868a94be2017-06-26 16:55:2550 // extensions::SavedFilesServiceInterface:
[email protected]961745f2013-05-25 14:09:2451 void RegisterFileEntry(const std::string& extension_id,
52 const std::string& id,
[email protected]6b7ecdd2013-08-29 14:16:2453 const base::FilePath& file_path,
michaelpg868a94be2017-06-26 16:55:2554 bool is_directory) override;
55 void EnqueueFileEntry(const std::string& extension_id,
56 const std::string& id) override;
57 bool IsRegistered(const std::string& extension_id,
58 const std::string& id) override;
59 const extensions::SavedFileEntry* GetFileEntry(
60 const std::string& extension_id,
61 const std::string& id) override;
[email protected]961745f2013-05-25 14:09:2462
63 // Returns all registered file entries.
michaelpg868a94be2017-06-26 16:55:2564 std::vector<extensions::SavedFileEntry> GetAllFileEntries(
[email protected]961745f2013-05-25 14:09:2465 const std::string& extension_id);
66
67 // Clears all retained files if the app does not have the
[email protected]73f73a02013-07-04 02:15:1268 // fileSystem.retainEntries permission.
[email protected]961745f2013-05-25 14:09:2469 void ClearQueueIfNoRetainPermission(const extensions::Extension* extension);
70
[email protected]a2886e8b2013-06-08 05:15:0271 // Clears all retained files.
72 void ClearQueue(const extensions::Extension* extension);
73
michaelpgdbdcdcc2017-04-06 01:40:5674 // Called to notify that the application has begun to exit.
75 void OnApplicationTerminating();
76
[email protected]961745f2013-05-25 14:09:2477 private:
78 FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, RetainTwoFilesTest);
79 FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest, EvictionTest);
80 FRIEND_TEST_ALL_PREFIXES(::SavedFilesServiceUnitTest,
81 SequenceNumberCompactionTest);
82 friend class ::SavedFilesServiceUnitTest;
83
84 // A container for the registered files for an app.
85 class SavedFiles;
86
87 // content::NotificationObserver.
dcheng2f5be412014-10-22 01:46:0888 void Observe(int type,
89 const content::NotificationSource& source,
90 const content::NotificationDetails& details) override;
[email protected]961745f2013-05-25 14:09:2491
[email protected]a2886e8b2013-06-08 05:15:0292 // Returns the SavedFiles for |extension_id| or NULL if one does not exist.
93 SavedFiles* Get(const std::string& extension_id) const;
94
[email protected]961745f2013-05-25 14:09:2495 // 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
mostynbecb4a22b2016-04-04 06:08:01106 std::map<std::string, std::unique_ptr<SavedFiles>>
107 extension_id_to_saved_files_;
[email protected]961745f2013-05-25 14:09:24108 content::NotificationRegistrar registrar_;
michaelpg4d80e562017-04-04 01:48:14109 content::BrowserContext* context_;
[email protected]961745f2013-05-25 14:09:24110};
111
112} // namespace apps
113
114#endif // APPS_SAVED_FILES_SERVICE_H_