blob: f7ab2b53924032c975d865d6efff0a672db01da1 [file] [log] [blame]
// 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 NET_FIRST_PARTY_SETS_FIRST_PARTY_SET_ENTRY_OVERRIDE_H_
#define NET_FIRST_PARTY_SETS_FIRST_PARTY_SET_ENTRY_OVERRIDE_H_
#include "net/base/net_export.h"
#include "net/first_party_sets/first_party_set_entry.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace mojo {
template <typename DataViewType, typename T>
struct StructTraits;
} // namespace mojo
namespace network::mojom {
class FirstPartySetEntryOverrideDataView;
} // namespace network::mojom
namespace net {
// This class represents a single modification to be applied on top of the
// global First-Party Sets list. A modifications may be a deletion, remapping,
// or new mapping.
class NET_EXPORT FirstPartySetEntryOverride {
public:
// Creates a new modification representing a deletion.
FirstPartySetEntryOverride();
// Creates a new modification representing a remapping/additional mapping.
explicit FirstPartySetEntryOverride(FirstPartySetEntry entry);
FirstPartySetEntryOverride(FirstPartySetEntryOverride&& other);
FirstPartySetEntryOverride& operator=(FirstPartySetEntryOverride&& other);
FirstPartySetEntryOverride(const FirstPartySetEntryOverride& other);
FirstPartySetEntryOverride& operator=(
const FirstPartySetEntryOverride& other);
~FirstPartySetEntryOverride();
bool operator==(const FirstPartySetEntryOverride& other) const;
// Returns true iff this override is a deletion.
bool IsDeletion() const { return !entry_.has_value(); }
// Returns the new target entry, if this override is not a deletion. Must not
// be called if `IsDeletion()` is true.
const FirstPartySetEntry& GetEntry() const {
DCHECK(!IsDeletion());
return entry_.value();
}
private:
// mojo (de)serialization needs access to private details.
friend struct mojo::StructTraits<
network::mojom::FirstPartySetEntryOverrideDataView,
FirstPartySetEntryOverride>;
absl::optional<FirstPartySetEntry> entry_;
};
NET_EXPORT std::ostream& operator<<(std::ostream& os,
const FirstPartySetEntryOverride& override);
} // namespace net
#endif // NET_FIRST_PARTY_SETS_FIRST_PARTY_SET_ENTRY_OVERRIDE_H_