blob: 79eed579db35235a9f46ba8f6b811312603dc163 [file] [log] [blame]
// Copyright 2014 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.
package org.chromium.mojo.system;
import java.nio.ByteBuffer;
/**
* A buffer that can be shared between applications.
*/
public interface SharedBufferHandle extends Handle {
/**
* Flags for the shared buffer creation operation.
*/
public static class CreateFlags extends Flags<CreateFlags> {
private static final int FLAG_NONE = 0;
/**
* Immutable flag with not bit set.
*/
public static final CreateFlags NONE = CreateFlags.none().immutable();
/**
* Dedicated constructor.
*
* @param flags initial value of the flags.
*/
protected CreateFlags(int flags) {
super(flags);
}
/**
* @return flags with no bit set.
*/
public static CreateFlags none() {
return new CreateFlags(FLAG_NONE);
}
}
/**
* Used to specify creation parameters for a shared buffer to |Core#createSharedBuffer()|.
*/
public static class CreateOptions {
private CreateFlags mFlags = CreateFlags.NONE;
/**
* @return the flags
*/
public CreateFlags getFlags() {
return mFlags;
}
}
/**
* Flags for the shared buffer duplication operation.
*/
public static class DuplicateFlags extends Flags<DuplicateFlags> {
private static final int FLAG_NONE = 0;
/**
* Immutable flag with not bit set.
*/
public static final DuplicateFlags NONE = DuplicateFlags.none().immutable();
/**
* Dedicated constructor.
*
* @param flags initial value of the flags.
*/
protected DuplicateFlags(int flags) {
super(flags);
}
/**
* @return flags with no bit set.
*/
public static DuplicateFlags none() {
return new DuplicateFlags(FLAG_NONE);
}
}
/**
* Used to specify parameters in duplicating access to a shared buffer to
* |SharedBufferHandle#duplicate|
*/
public static class DuplicateOptions {
private DuplicateFlags mFlags = DuplicateFlags.NONE;
/**
* @return the flags
*/
public DuplicateFlags getFlags() {
return mFlags;
}
}
/**
* Flags for the shared buffer map operation.
*/
public static class MapFlags extends Flags<MapFlags> {
private static final int FLAG_NONE = 0;
/**
* Immutable flag with not bit set.
*/
public static final MapFlags NONE = MapFlags.none().immutable();
/**
* Dedicated constructor.
*
* @param flags initial value of the flags.
*/
protected MapFlags(int flags) {
super(flags);
}
/**
* @return flags with no bit set.
*/
public static MapFlags none() {
return new MapFlags(FLAG_NONE);
}
}
/**
* Flags for the shared buffer information operation.
*/
public static class BufferInformationFlags extends Flags<BufferInformationFlags> {
private static final int FLAG_NONE = 0;
/**
* Immutable flag with not bit set.
*/
public static final BufferInformationFlags NONE = BufferInformationFlags.none().immutable();
/**
* Dedicated constructor.
*
* @param flags initial value of the flags.
*/
public BufferInformationFlags(int flags) {
super(flags);
}
/**
* @return flags with no bit set.
*/
public static BufferInformationFlags none() {
return new BufferInformationFlags(FLAG_NONE);
}
}
/**
* Used to receive information for a shared buffer.
*/
public static class BufferInformation {
private final BufferInformationFlags mFlags;
private final long mBufferSize;
public BufferInformation(BufferInformationFlags flags, long bufferSize) {
this.mFlags = flags;
this.mBufferSize = bufferSize;
}
public BufferInformationFlags getFlags() {
return mFlags;
}
public long getBufferSize() {
return mBufferSize;
}
}
/**
* @see org.chromium.mojo.system.Handle#pass()
*/
@Override
public SharedBufferHandle pass();
/**
* Duplicates the handle. This creates another handle (returned on success), which can then be
* sent to another application over a message pipe, while retaining access to this handle (and
* any mappings that it may have).
*/
public SharedBufferHandle duplicate(DuplicateOptions options);
/**
* Map the part (at offset |offset| of length |numBytes|) of the buffer given by this handle
* into memory. |offset + numBytes| must be less than or equal to the size of the buffer. On
* success, the returned buffer points to memory with the requested part of the buffer. A single
* buffer handle may have multiple active mappings (possibly depending on the buffer type). The
* permissions (e.g., writable or executable) of the returned memory may depend on the
* properties of the buffer and properties attached to the buffer handle as well as |flags|.
*/
public ByteBuffer map(long offset, long numBytes, MapFlags flags);
/**
* Unmap a buffer pointer that was mapped by |map()|.
*/
public void unmap(ByteBuffer buffer);
/**
* Retrieves information about the shared buffer.
*/
public BufferInformation getBufferInformation();
}