// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// TODO(fxb/39732): This should be read as "library zx".
library zz;

[Transport = "Syscall"]
protocol job {
    // TODO(ZX-2967): parent_job with ZX_RIGHT_WRITE is also accepted.
    /// Create a new job.
    /// Rights: parent_job must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_MANAGE_JOB.
    job_create(handle<job> parent_job, uint32 options) -> (status status, handle<job> out);

    /// Set job security and resource policies.
    /// Rights: handle must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_SET_POLICY.
    job_set_policy(handle<job> handle, uint32 options, uint32 topic, vector_void_u32size policy)
        -> (status status);

    /// Set a process as critical to a job.
    /// Rights: job must have ZX_RIGHT_DESTROY.
    /// Rights: process must have ZX_RIGHT_WAIT.
    job_set_critical(handle<job> job, uint32 options, handle<process> process) -> (status status);
};
