forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_task_traits_extension.h
74 lines (58 loc) · 2.43 KB
/
test_task_traits_extension.h
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
// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_TASK_TEST_TASK_TRAITS_EXTENSION_H_
#define BASE_TASK_TEST_TASK_TRAITS_EXTENSION_H_
#include <utility>
#include "base/task/task_traits.h"
namespace base {
enum class TestExtensionEnumTrait { kA, kB, kC };
struct TestExtensionBoolTrait {};
// Example TaskTraits extension for use in tests.
class TestTaskTraitsExtension {
public:
static constexpr uint8_t kExtensionId =
TaskTraitsExtensionStorage::kFirstEmbedderExtensionId;
struct ValidTrait : public TaskTraits::ValidTrait {
using TaskTraits::ValidTrait::ValidTrait;
ValidTrait(TestExtensionEnumTrait);
ValidTrait(TestExtensionBoolTrait);
};
template <class... ArgTypes,
class CheckArgumentsAreValid = std::enable_if_t<
trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr TestTaskTraitsExtension(ArgTypes... args)
: enum_trait_(
trait_helpers::GetEnum<TestExtensionEnumTrait,
TestExtensionEnumTrait::kA>(args...)),
bool_trait_(
trait_helpers::HasTrait<TestExtensionBoolTrait, ArgTypes...>()) {}
constexpr TaskTraitsExtensionStorage Serialize() const {
return {kExtensionId, {{static_cast<uint8_t>(enum_trait_), bool_trait_}}};
}
static const TestTaskTraitsExtension Parse(
const TaskTraitsExtensionStorage& extension) {
if (extension.data[1]) {
return TestTaskTraitsExtension(
static_cast<TestExtensionEnumTrait>(extension.data[0]),
TestExtensionBoolTrait());
} else {
return TestTaskTraitsExtension(
static_cast<TestExtensionEnumTrait>(extension.data[0]));
}
}
constexpr TestExtensionEnumTrait enum_trait() const { return enum_trait_; }
constexpr bool bool_trait() const { return bool_trait_; }
private:
TestExtensionEnumTrait enum_trait_;
bool bool_trait_;
};
template <class... ArgTypes,
class = std::enable_if_t<
trait_helpers::AreValidTraits<TestTaskTraitsExtension::ValidTrait,
ArgTypes...>::value>>
constexpr TaskTraitsExtensionStorage MakeTaskTraitsExtension(ArgTypes... args) {
return TestTaskTraitsExtension(std::forward<ArgTypes>(args)...).Serialize();
}
} // namespace base
#endif // BASE_TASK_TEST_TASK_TRAITS_EXTENSION_H_