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_
|