File: DirectoryMetadata.h

package info (click to toggle)
firefox 143.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,617,328 kB
  • sloc: cpp: 7,478,492; javascript: 6,417,157; ansic: 3,720,058; python: 1,396,372; xml: 627,523; asm: 438,677; java: 186,156; sh: 63,477; makefile: 19,171; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,405; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (103 lines) | stat: -rw-r--r-- 3,638 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef DOM_QUOTA_DIRECTORYMETADATA_H_
#define DOM_QUOTA_DIRECTORYMETADATA_H_

#include <cstdint>

enum class nsresult : uint32_t;

class nsIBinaryInputStream;
class nsIBinaryOutputStream;
class nsIFile;

namespace mozilla {

template <typename V, typename E>
class Result;

}

namespace mozilla::dom::quota {

struct OriginStateMetadata;

/**
 * Directory Metadata File Format (.metadata-v2)
 *
 * The metadata file is a binary file containing metadata information for an
 * origin directory. It consists of a header and several additional fields,
 * some of which are maintained only for backward compatibility.
 *
 * Header (OriginStateMetadata):
 * - int64_t mLastAccessTime
 *     The last access time of the origin in microseconds since the epoch.
 * - bool mPersisted
 *     True if the origin is marked as persisted and should survive origin
 *     eviction.
 * - uint32_t flags
 *     A bitfield of DirectoryMetadataFlags used to store boolean state flags.
 *     This field currently maps only to mAccessed. The defined flags are:
 *       - Initialized: Always set when writing metadata; indicates that this
 *         field contains valid flag bits. Older files written before this
 *         flag was introduced will have this field set to zero.
 *       - Accessed: Indicates whether the origin has been accessed by a quota
 *         client. This maps directly to the mAccessed field in memory.
 *
 *     If the Initialized flag is not set, the flags field is considered
 *     invalid and mAccessed is conservatively set to true to ensure a full
 *     initialization scan.
 * - int32_t mLastMaintenanceDate
 *     The last maintenance date of the origin in days since the epoch.
 *
 * Legacy fields (still written and read for backward compatibility, but no
 * longer used):
 * - nsCString mSuffix
 *     Originally used for origin attributes. Still written to preserve
 *     compatibility.
 * - nsCString mGroup
 *     Originally used for quota group. Still written to preserve
 *     compatibility.
 *
 * Storage fields:
 * - nsCString mStorageOrigin
 *     Storage origin string (actively used for reconstructing the principal).
 *
 * Legacy fields (continued):
 * - bool mIsPrivate
 *     Flag originally used for private browsing contexts or apps. Still
 *     written.
 *
 * Validation check:
 * - After reading all expected fields, any additional data (even a single
 *   32-bit value) is treated as an error.
 *
 * Notes:
 * - OriginStateMetadata is loaded first and interpreted independently. This
 *   allows fast and safe updates to the metadata header on disk without
 *   rewriting the full file.
 * - The header is intentionally designed to contain only fixed-size fields.
 *   This allows updating the header in-place without creating a temporary
 *   file.
 */

Result<OriginStateMetadata, nsresult> ReadDirectoryMetadataHeader(
    nsIBinaryInputStream& aStream);

nsresult WriteDirectoryMetadataHeader(
    nsIBinaryOutputStream& aStream,
    const OriginStateMetadata& aOriginStateMetadata);

Result<OriginStateMetadata, nsresult> LoadDirectoryMetadataHeader(
    nsIFile& aDirectory);

nsresult SaveDirectoryMetadataHeader(
    nsIFile& aDirectory, const OriginStateMetadata& aOriginStateMetadata);

}  // namespace mozilla::dom::quota

#endif  // DOM_QUOTA_NOTIFYUTILS_H_