// Copyright 2015 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.

[JavaPackage="org.chromium.mojo.bindings.interfacecontrol"]
module mojo.interface_control2;

// For each user-defined interface, some control functions are provided by the
// interface endpoints at both sides.

////////////////////////////////////////////////////////////////////////////////
// Run@0xFFFFFFFF(RunInput input) => (RunOutput? output);
//
// This control function runs the input command. If the command is not
// supported, |output| is set to null; otherwise |output| stores the result,
// whose type depends on the input.

const uint32 kRunMessageId = 0xFFFFFFFF;

struct RunMessageParams {
  RunInput input;
};
union RunInput {
  QueryVersion query_version;
  FlushForTesting flush_for_testing;
};

struct RunResponseMessageParams {
  RunOutput? output;
};
union RunOutput {
  QueryVersionResult query_version_result;
};

// Queries the max supported version of the user-defined interface.
// Sent by the interface client side.
struct QueryVersion {
};
struct QueryVersionResult {
  uint32 version;
};

// Sent by either side of the interface.
struct FlushForTesting {
};

////////////////////////////////////////////////////////////////////////////////
// RunOrClosePipe@0xFFFFFFFE(RunOrClosePipeInput input);
//
// This control function runs the input command. If the operation fails or the
// command is not supported, the message pipe is closed.

const uint32 kRunOrClosePipeMessageId = 0xFFFFFFFE;

struct RunOrClosePipeMessageParams {
  RunOrClosePipeInput input;
};
union RunOrClosePipeInput {
  RequireVersion require_version;
};

// If the specified version of the user-defined interface is not supported, the
// function fails and the pipe is closed.
// Sent by the interface client side.
struct RequireVersion {
  uint32 version;
};
