1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.process_launcher;
6 
7 import android.os.Parcel;
8 import android.os.ParcelFileDescriptor;
9 import android.os.Parcelable;
10 
11 import org.chromium.base.annotations.MainDex;
12 import org.chromium.base.annotations.UsedByReflection;
13 
14 import javax.annotation.concurrent.Immutable;
15 
16 /**
17  * Parcelable class that contains file descriptor and file region information to
18  * be passed to child processes.
19  */
20 @Immutable
21 @MainDex
22 @UsedByReflection("child_process_launcher_helper_android.cc")
23 public final class FileDescriptorInfo implements Parcelable {
24     public final int id;
25     public final ParcelFileDescriptor fd;
26     public final long offset;
27     public final long size;
28 
FileDescriptorInfo(int id, ParcelFileDescriptor fd, long offset, long size)29     public FileDescriptorInfo(int id, ParcelFileDescriptor fd, long offset, long size) {
30         this.id = id;
31         this.fd = fd;
32         this.offset = offset;
33         this.size = size;
34     }
35 
FileDescriptorInfo(Parcel in)36     FileDescriptorInfo(Parcel in) {
37         id = in.readInt();
38         fd = in.readParcelable(ParcelFileDescriptor.class.getClassLoader());
39         offset = in.readLong();
40         size = in.readLong();
41     }
42 
43     @Override
describeContents()44     public int describeContents() {
45         return CONTENTS_FILE_DESCRIPTOR;
46     }
47 
48     @Override
writeToParcel(Parcel dest, int flags)49     public void writeToParcel(Parcel dest, int flags) {
50         dest.writeInt(id);
51         dest.writeParcelable(fd, CONTENTS_FILE_DESCRIPTOR);
52         dest.writeLong(offset);
53         dest.writeLong(size);
54     }
55 
56     public static final Parcelable.Creator<FileDescriptorInfo> CREATOR =
57             new Parcelable.Creator<FileDescriptorInfo>() {
58                 @Override
59                 public FileDescriptorInfo createFromParcel(Parcel in) {
60                     return new FileDescriptorInfo(in);
61                 }
62 
63                 @Override
64                 public FileDescriptorInfo[] newArray(int size) {
65                     return new FileDescriptorInfo[size];
66                 }
67             };
68 }
69