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

module blink.mojom;

import "mojo/public/mojom/base/unguessable_token.mojom";

// A MessagePortDescriptor represents one end of a message channel. It
// encompasses a small bit of state used to uniquely identify a message handle
// and to provide information about it to the browser. Otherwise, this is a
// simple wrapper around a Mojo message_pipe. Messages being sent over this pipe
// are serialized versions of a TransferableMessage struct.
//
// The corresponding public Blink type for this object is a move-only type,
// ensuring that there can only ever be a single handle to a pipe endpoint (and
// its associated state) at any moment in time.
//
// TODO(crbug.com/750468): Consider using an actual Mojo interface for message
// ports.
struct MessagePortDescriptor {
  // The actual handle. Simply called |handle| on the C++ counterpart, but
  // that's a reserved name in Mojo.
  handle<message_pipe> pipe_handle;

  // The name of the handle, so that it can be tracked as it is passed along
  // from one execution context to another.
  mojo_base.mojom.UnguessableToken id;

  // The sequence number of the instrumentation messages related to this handle.
  // Since these messages can arrive out of order in the browser process (the
  // messages can be sent from multiple distinct renderer processes if the
  // endpoint is passed around), this is used to reorder them so that consistent
  // state can be maintained in the browser.
  uint64 sequence_number;
};
