1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2014 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezpackage org.chromium.mojo.system;
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport org.chromium.mojo.system.Core.WaitResult;
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport java.io.Closeable;
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez/**
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez * A generic mojo handle.
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez */
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezpublic interface Handle extends Closeable {
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * Closes the given |handle|.
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * <p>
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * Concurrent operations on |handle| may succeed (or fail as usual) if they happen before the
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * close, be cancelled with result |MojoResult.CANCELLED| if they properly overlap (this is
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * likely the case with |wait()|, etc.), or fail with |MojoResult.INVALID_ARGUMENT| if they
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * happen after.
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    @Override
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public void close();
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * @see Core#wait(Handle, Core.HandleSignals, long)
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public WaitResult wait(Core.HandleSignals signals, long deadline);
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * @return whether the handle is valid. A handle is valid until it has been explicitly closed or
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     *         send through a message pipe via |MessagePipeHandle.writeMessage|.
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public boolean isValid();
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * Converts this handle into an {@link UntypedHandle}, invalidating this handle.
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public UntypedHandle toUntypedHandle();
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * Returns the {@link Core} implementation for this handle. Can be null if this handle is
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * invalid.
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public Core getCore();
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * Passes ownership of the handle from this handle to the newly created Handle object,
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * invalidating this handle object in the process.
52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public Handle pass();
54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    /**
56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * Releases the native handle backed by this {@link Handle}. The caller owns the handle and must
57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     * close it.
58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez     */
59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    public int releaseNativeHandle();
60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
62