forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
event_trigger_data.cc
84 lines (62 loc) · 2.37 KB
/
event_trigger_data.cc
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
// 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.
#include "components/attribution_reporting/event_trigger_data.h"
#include <stdint.h>
#include <utility>
#include "base/types/expected.h"
#include "base/types/expected_macros.h"
#include "base/values.h"
#include "components/attribution_reporting/filters.h"
#include "components/attribution_reporting/parsing_utils.h"
#include "components/attribution_reporting/trigger_registration_error.mojom.h"
namespace attribution_reporting {
namespace {
using ::attribution_reporting::mojom::TriggerRegistrationError;
constexpr char kTriggerData[] = "trigger_data";
} // namespace
// static
base::expected<EventTriggerData, TriggerRegistrationError>
EventTriggerData::FromJSON(base::Value& value) {
base::Value::Dict* dict = value.GetIfDict();
if (!dict) {
return base::unexpected(
TriggerRegistrationError::kEventTriggerDataWrongType);
}
ASSIGN_OR_RETURN(auto filters, FilterPair::FromJSON(*dict));
absl::optional<uint64_t> data;
if (!ParseUint64(*dict, kTriggerData, data)) {
return base::unexpected(
TriggerRegistrationError::kEventTriggerDataValueInvalid);
}
absl::optional<int64_t> priority;
if (!ParsePriority(*dict, priority)) {
return base::unexpected(
TriggerRegistrationError::kEventPriorityValueInvalid);
}
absl::optional<uint64_t> dedup_key;
if (!ParseDeduplicationKey(*dict, dedup_key)) {
return base::unexpected(
TriggerRegistrationError::kEventDedupKeyValueInvalid);
}
return EventTriggerData(data.value_or(0), priority.value_or(0), dedup_key,
std::move(filters));
}
EventTriggerData::EventTriggerData() = default;
EventTriggerData::EventTriggerData(uint64_t data,
int64_t priority,
absl::optional<uint64_t> dedup_key,
FilterPair filters)
: data(data),
priority(priority),
dedup_key(dedup_key),
filters(std::move(filters)) {}
base::Value::Dict EventTriggerData::ToJson() const {
base::Value::Dict dict;
filters.SerializeIfNotEmpty(dict);
SerializeUint64(dict, kTriggerData, data);
SerializePriority(dict, priority);
SerializeDeduplicationKey(dict, dedup_key);
return dict;
}
} // namespace attribution_reporting