File: content_settings_metadata.h

package info (click to toggle)
chromium 139.0.7258.127-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 6,122,156 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (155 lines) | stat: -rw-r--r-- 5,732 bytes parent folder | download | duplicates (5)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_METADATA_H_
#define COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_METADATA_H_

#include "base/time/time.h"
#include "components/content_settings/core/common/content_settings_constraints.h"
#include "components/content_settings/core/common/content_settings_enums.mojom.h"

namespace base {
class Clock;
}

namespace mojo {
template <typename DataViewType, typename T>
struct StructTraits;
}  // namespace mojo
namespace content_settings::mojom {
class RuleMetaDataDataView;
}  // namespace content_settings::mojom

namespace content_settings {

// Holds metadata for a ContentSetting rule.
class RuleMetaData {
 public:
  RuleMetaData();
  RuleMetaData(RuleMetaData&& other);
  RuleMetaData(const RuleMetaData& other) = delete;
  RuleMetaData& operator=(const RuleMetaData& other) = delete;
  RuleMetaData& operator=(RuleMetaData&& other);

  bool operator==(const RuleMetaData& other) const;

  RuleMetaData Clone() const;

  base::Time last_modified() const { return last_modified_; }
  void set_last_modified(base::Time last_modified) {
    last_modified_ = last_modified;
  }

  base::Time last_used() const { return last_used_; }
  void set_last_used(base::Time last_used) { last_used_ = last_used; }

  base::Time last_visited() const { return last_visited_; }
  void set_last_visited(base::Time visited) { last_visited_ = visited; }

  base::Time expiration() const { return expiration_; }

  mojom::SessionModel session_model() const { return session_model_; }
  void set_session_model(mojom::SessionModel session_model) {
    session_model_ = session_model;
  }

  mojom::TpcdMetadataRuleSource tpcd_metadata_rule_source() const {
    return tpcd_metadata_rule_source_;
  }
  void set_tpcd_metadata_rule_source(
      mojom::TpcdMetadataRuleSource const rule_source) {
    tpcd_metadata_rule_source_ = rule_source;
  }

  mojom::TpcdMetadataCohort tpcd_metadata_cohort() const {
    return tpcd_metadata_cohort_;
  }
  void set_tpcd_metadata_cohort(const mojom::TpcdMetadataCohort cohort) {
    tpcd_metadata_cohort_ = cohort;
  }

  uint32_t tpcd_metadata_elected_dtrp() const {
    return tpcd_metadata_elected_dtrp_;
  }
  void set_tpcd_metadata_elected_dtrp(uint32_t elected_dtrp) {
    tpcd_metadata_elected_dtrp_ = elected_dtrp;
  }

  base::TimeDelta lifetime() const { return lifetime_; }

  // Sets member variables based on `constraints`.
  void SetFromConstraints(const ContentSettingConstraints& constraints);

  // Sets the expiration and lifetime. The expiration may be zero if-and-only-if
  // the lifetime is zero; otherwise, both must be non-zero. The lifetime must
  // be nonnegative.
  void SetExpirationAndLifetime(base::Time expiration,
                                base::TimeDelta lifetime);

  // Returns whether the Rule is expired. Expiration is handled by
  // HostContentSettingsMap automatically, clients do not have to check this
  // attribute manually.
  bool IsExpired(const base::Clock* clock) const;

  // Computes the setting's lifetime, based on the lifetime and expiration that
  // were read from persistent storage.
  static base::TimeDelta ComputeLifetime(base::TimeDelta lifetime,
                                         base::Time expiration);

  bool decided_by_related_website_sets() const {
    return decided_by_related_website_sets_;
  }
  void set_decided_by_related_website_sets(
      bool decided_by_related_website_sets) {
    decided_by_related_website_sets_ = decided_by_related_website_sets;
  }

  const base::Value& rule_options() const { return rule_options_; }

  void set_rule_options(const base::Value& rule_options) {
    rule_options_ = rule_options.Clone();
  }

 private:
  // mojo (de)serialization needs access to private details.
  friend struct mojo::
      StructTraits<content_settings::mojom::RuleMetaDataDataView, RuleMetaData>;

  // Last Modified data as specified by some UserModifiableProvider
  // implementations. May be zero.
  base::Time last_modified_;
  // Date when a permission-gate feature was used the last time. Verifying
  // and/or changing the value of `ContentSetting` is not considered as `used`.
  base::Time last_used_;
  // Last visited data as specified by some UserModifiableProvider
  // implementations. Only non-zero when
  // ContentSettingsConstraint::track_last_visit_for_autoexpiration is enabled.
  base::Time last_visited_;
  // Expiration date if defined through a ContentSettingsConstraint. May be
  // zero.
  base::Time expiration_;
  // SessionModel as defined through a ContentSettingsConstraint.
  mojom::SessionModel session_model_ = mojom::SessionModel::DURABLE;
  // The lifetime of the setting. This may be zero iff `expiration_` is zero.
  base::TimeDelta lifetime_;
  // TPCD Metadata Source (go/measure3pcddtdeployment).
  // TODO(http://b/324406007): The impl is currently specific to the TPCD
  // Metadata Source and is expected to be cleaned up with the mitigation
  // cleanup.
  mojom::TpcdMetadataRuleSource tpcd_metadata_rule_source_ =
      mojom::TpcdMetadataRuleSource::SOURCE_UNSPECIFIED;
  mojom::TpcdMetadataCohort tpcd_metadata_cohort_ =
      mojom::TpcdMetadataCohort::DEFAULT;
  uint32_t tpcd_metadata_elected_dtrp_ = 0u;

  // Set to true if the storage access was decided by a Related Website Set.
  bool decided_by_related_website_sets_ = false;

  // Represents options which apply to the rule. May be empty.
  base::Value rule_options_;
};

}  // namespace content_settings

#endif  // COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_METADATA_H_