// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file contains structures used to represent SkBitmaps in Mojo.
module skia.mojom;

import "mojo/public/mojom/base/big_buffer.mojom";
import "skia/public/mojom/image_info.mojom";

// The most common way to transfer an SkBitmap over IPC. This struct enforces
// that the bitmap is 32bpp to prevent buffer-overflow problems when reading/
// writing the pixel buffer.
struct BitmapN32 {
  BitmapN32ImageInfo image_info;
  mojo_base.mojom.BigBuffer pixel_data;
};

// Marked stable as this is used in the crosapi. This struct should be
// avoided whenever possible. If used, extreme care must be taken when
// manipulating the pixels in the bitmap, either only using SkBitmap methods to
// read and write to them, or taking care to not assume that there are 32 bits-
// per-pixel.
[Stable, RenamedFrom="skia.mojom.Bitmap"]
struct BitmapWithArbitraryBpp {
  ImageInfo image_info;
  uint64 UNUSED_row_bytes;
  mojo_base.mojom.BigBuffer pixel_data;
};

// Similar to above, but the generated bindings avoid copying pixel data on the
// receiving side of an IPC message. That can be a valuable optimization for
// large bitmaps. However, this is DANGEROUS as it leaves open the possibility
// for the sender to continue to modify the pixel data, which could lead to
// TOCTOU issues. Use this type *only* when the sender is fully trusted (and
// a compromise there would already mean system compromise), such as from the
// browser process.
//
// NOTE: It is important that the fields of this struct exactly match the
// fields of the Bitmap struct. This enables stable interfaces to freely
// migrate between these two types in a compatible fashion.
[Stable, RenamedFrom="skia.mojom.UnsafeBitmap"]
struct BitmapMappedFromTrustedProcess {
  ImageInfo image_info;
  uint64 UNUSED_row_bytes;
  mojo_base.mojom.BigBuffer pixel_data;
};

// Encode an N32 SkBitmap for transport without relying on shared memory.
// Normally, it is preferable to use shared memory and this mojom type should
// NOT be used for IPC.
//
// This type is useful, however, for de/serialization to a string (via
// skia::mojom::InlineBitmap::Serialize() and Deserialize()) since it will not
// attempt to use a shared memory handle and will encode the actual pixel
// content always.
struct InlineBitmap {
  BitmapN32ImageInfo image_info;
  array<uint8> pixel_data;
};
