forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbitmap.mojom
60 lines (54 loc) · 2.45 KB
/
bitmap.mojom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 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.
// 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;
};