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