blob: 295219733bddc34de0398c1327e2d7a1c7268ce3 [file] [log] [blame]
// Copyright 2026 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_ACTOR_TASK_SOURCE_INFO_H_
#define COMPONENTS_ACTOR_TASK_SOURCE_INFO_H_
#include <optional>
#include <string>
namespace actor {
// This object is used when creating an ActorTask to identify the source of the
// task. This is identifying the client type that created the task and, if the
// client supports it, an opaque identifier identifying the creating object in
// the client.
struct TaskSourceInfo {
using SourceDefinedId = std::string;
// These values will be persisted so can be added to but existing values must
// not be renumbered.
enum class Client {
kUnknown = 0,
// Used by internal tests.
kTest = 1,
kExperimentalActor = 2,
kGlic = 3,
};
TaskSourceInfo(Client type, std::optional<SourceDefinedId> id);
~TaskSourceInfo();
TaskSourceInfo(const TaskSourceInfo&);
TaskSourceInfo& operator=(const TaskSourceInfo&);
TaskSourceInfo(TaskSourceInfo&&);
TaskSourceInfo& operator=(TaskSourceInfo&&);
Client type;
std::optional<SourceDefinedId> id;
// Equality could mean different things in different cases. For clients that
// support SourceDefinedId callers probably expect the ids to match indicating
// a task-level equality but for clients without id equality is used only to
// compare clients. To avoid potential confusion callers should just compare
// subobjects which makes it clearer what is intended.
bool operator==(const TaskSourceInfo& other) const = delete;
bool operator!=(const TaskSourceInfo& other) const = delete;
};
} // namespace actor
#endif // COMPONENTS_ACTOR_TASK_SOURCE_INFO_H_