Loading libs/gui/WindowInfo.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const { // Ensure that the size of custom types are what we expect for writing into the parcel. static_assert(sizeof(inputConfig) == 4u); static_assert(sizeof(ownerPid.val()) == 4u); static_assert(sizeof(ownerUid.val()) == 4u); // clang-format off Loading @@ -116,7 +117,7 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const { parcel->writeFloat(transform.dsdy()) ?: parcel->writeFloat(transform.ty()) ?: parcel->writeInt32(static_cast<int32_t>(touchOcclusionMode)) ?: parcel->writeInt32(ownerPid) ?: parcel->writeInt32(ownerPid.val()) ?: parcel->writeInt32(ownerUid.val()) ?: parcel->writeUtf8AsUtf16(packageName) ?: parcel->writeInt32(inputConfig.get()) ?: Loading Loading @@ -148,7 +149,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) { } float dsdx, dtdx, tx, dtdy, dsdy, ty; int32_t lpFlags, lpType, touchOcclusionModeInt, inputConfigInt, ownerUidInt; int32_t lpFlags, lpType, touchOcclusionModeInt, inputConfigInt, ownerPidInt, ownerUidInt; sp<IBinder> touchableRegionCropHandleSp; // clang-format off Loading @@ -168,7 +169,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) { parcel->readFloat(&dsdy) ?: parcel->readFloat(&ty) ?: parcel->readInt32(&touchOcclusionModeInt) ?: parcel->readInt32(&ownerPid) ?: parcel->readInt32(&ownerPidInt) ?: parcel->readInt32(&ownerUidInt) ?: parcel->readUtf8FromUtf16(&packageName) ?: parcel->readInt32(&inputConfigInt) ?: Loading @@ -191,6 +192,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) { transform.set({dsdx, dtdx, tx, dtdy, dsdy, ty, 0, 0, 1}); touchOcclusionMode = static_cast<TouchOcclusionMode>(touchOcclusionModeInt); inputConfig = ftl::Flags<InputConfig>(inputConfigInt); ownerPid = Pid{ownerPidInt}; ownerUid = Uid{static_cast<uid_t>(ownerUidInt)}; touchableRegionCropHandle = touchableRegionCropHandleSp; Loading libs/gui/fuzzer/libgui_surfaceComposerClient_fuzzer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,7 @@ void SurfaceComposerClientFuzzer::getWindowInfo(gui::WindowInfo* windowInfo) { windowInfo->touchableRegion = Region(getRect(&mFdp)); windowInfo->replaceTouchableRegionWithCrop = mFdp.ConsumeBool(); windowInfo->touchOcclusionMode = mFdp.PickValueInArray(kMode); windowInfo->ownerPid = mFdp.ConsumeIntegral<int32_t>(); windowInfo->ownerPid = gui::Pid{mFdp.ConsumeIntegral<pid_t>()}; windowInfo->ownerUid = gui::Uid{mFdp.ConsumeIntegral<uid_t>()}; windowInfo->packageName = mFdp.ConsumeRandomLengthString(kRandomStringMaxBytes); windowInfo->inputConfig = mFdp.PickValueInArray(kFeatures); Loading libs/gui/include/gui/Uid.h→libs/gui/include/gui/PidUid.h +15 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,21 @@ namespace android::gui { // Type-safe wrapper for a PID. struct Pid : ftl::Constructible<Pid, pid_t>, ftl::Equatable<Pid>, ftl::Orderable<Pid> { using Constructible::Constructible; const static Pid INVALID; constexpr auto val() const { return ftl::to_underlying(*this); } constexpr bool isValid() const { return val() >= 0; } std::string toString() const { return std::to_string(val()); } }; const inline Pid Pid::INVALID{-1}; // Type-safe wrapper for a UID. // We treat the unsigned equivalent of -1 as a singular invalid value. struct Uid : ftl::Constructible<Uid, uid_t>, ftl::Equatable<Uid>, ftl::Orderable<Uid> { Loading libs/gui/include/gui/WindowInfo.h +2 −2 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ #include <binder/Parcelable.h> #include <ftl/flags.h> #include <ftl/mixins.h> #include <gui/Uid.h> #include <gui/PidUid.h> #include <gui/constants.h> #include <ui/Rect.h> #include <ui/Region.h> Loading Loading @@ -225,7 +225,7 @@ struct WindowInfo : public Parcelable { Region touchableRegion; TouchOcclusionMode touchOcclusionMode = TouchOcclusionMode::BLOCK_UNTRUSTED; int32_t ownerPid = -1; Pid ownerPid = Pid::INVALID; Uid ownerUid = Uid::INVALID; std::string packageName; ftl::Flags<InputConfig> inputConfig; Loading libs/gui/tests/WindowInfo_test.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ TEST(WindowInfo, Parcelling) { i.alpha = 0.7; i.transform.set({0.4, -1, 100, 0.5, 0, 40, 0, 0, 1}); i.touchOcclusionMode = TouchOcclusionMode::ALLOW; i.ownerPid = 19; i.ownerPid = gui::Pid{19}; i.ownerUid = gui::Uid{24}; i.packageName = "com.example.package"; i.inputConfig = WindowInfo::InputConfig::NOT_FOCUSABLE; Loading Loading
libs/gui/WindowInfo.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const { // Ensure that the size of custom types are what we expect for writing into the parcel. static_assert(sizeof(inputConfig) == 4u); static_assert(sizeof(ownerPid.val()) == 4u); static_assert(sizeof(ownerUid.val()) == 4u); // clang-format off Loading @@ -116,7 +117,7 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const { parcel->writeFloat(transform.dsdy()) ?: parcel->writeFloat(transform.ty()) ?: parcel->writeInt32(static_cast<int32_t>(touchOcclusionMode)) ?: parcel->writeInt32(ownerPid) ?: parcel->writeInt32(ownerPid.val()) ?: parcel->writeInt32(ownerUid.val()) ?: parcel->writeUtf8AsUtf16(packageName) ?: parcel->writeInt32(inputConfig.get()) ?: Loading Loading @@ -148,7 +149,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) { } float dsdx, dtdx, tx, dtdy, dsdy, ty; int32_t lpFlags, lpType, touchOcclusionModeInt, inputConfigInt, ownerUidInt; int32_t lpFlags, lpType, touchOcclusionModeInt, inputConfigInt, ownerPidInt, ownerUidInt; sp<IBinder> touchableRegionCropHandleSp; // clang-format off Loading @@ -168,7 +169,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) { parcel->readFloat(&dsdy) ?: parcel->readFloat(&ty) ?: parcel->readInt32(&touchOcclusionModeInt) ?: parcel->readInt32(&ownerPid) ?: parcel->readInt32(&ownerPidInt) ?: parcel->readInt32(&ownerUidInt) ?: parcel->readUtf8FromUtf16(&packageName) ?: parcel->readInt32(&inputConfigInt) ?: Loading @@ -191,6 +192,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) { transform.set({dsdx, dtdx, tx, dtdy, dsdy, ty, 0, 0, 1}); touchOcclusionMode = static_cast<TouchOcclusionMode>(touchOcclusionModeInt); inputConfig = ftl::Flags<InputConfig>(inputConfigInt); ownerPid = Pid{ownerPidInt}; ownerUid = Uid{static_cast<uid_t>(ownerUidInt)}; touchableRegionCropHandle = touchableRegionCropHandleSp; Loading
libs/gui/fuzzer/libgui_surfaceComposerClient_fuzzer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,7 @@ void SurfaceComposerClientFuzzer::getWindowInfo(gui::WindowInfo* windowInfo) { windowInfo->touchableRegion = Region(getRect(&mFdp)); windowInfo->replaceTouchableRegionWithCrop = mFdp.ConsumeBool(); windowInfo->touchOcclusionMode = mFdp.PickValueInArray(kMode); windowInfo->ownerPid = mFdp.ConsumeIntegral<int32_t>(); windowInfo->ownerPid = gui::Pid{mFdp.ConsumeIntegral<pid_t>()}; windowInfo->ownerUid = gui::Uid{mFdp.ConsumeIntegral<uid_t>()}; windowInfo->packageName = mFdp.ConsumeRandomLengthString(kRandomStringMaxBytes); windowInfo->inputConfig = mFdp.PickValueInArray(kFeatures); Loading
libs/gui/include/gui/Uid.h→libs/gui/include/gui/PidUid.h +15 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,21 @@ namespace android::gui { // Type-safe wrapper for a PID. struct Pid : ftl::Constructible<Pid, pid_t>, ftl::Equatable<Pid>, ftl::Orderable<Pid> { using Constructible::Constructible; const static Pid INVALID; constexpr auto val() const { return ftl::to_underlying(*this); } constexpr bool isValid() const { return val() >= 0; } std::string toString() const { return std::to_string(val()); } }; const inline Pid Pid::INVALID{-1}; // Type-safe wrapper for a UID. // We treat the unsigned equivalent of -1 as a singular invalid value. struct Uid : ftl::Constructible<Uid, uid_t>, ftl::Equatable<Uid>, ftl::Orderable<Uid> { Loading
libs/gui/include/gui/WindowInfo.h +2 −2 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ #include <binder/Parcelable.h> #include <ftl/flags.h> #include <ftl/mixins.h> #include <gui/Uid.h> #include <gui/PidUid.h> #include <gui/constants.h> #include <ui/Rect.h> #include <ui/Region.h> Loading Loading @@ -225,7 +225,7 @@ struct WindowInfo : public Parcelable { Region touchableRegion; TouchOcclusionMode touchOcclusionMode = TouchOcclusionMode::BLOCK_UNTRUSTED; int32_t ownerPid = -1; Pid ownerPid = Pid::INVALID; Uid ownerUid = Uid::INVALID; std::string packageName; ftl::Flags<InputConfig> inputConfig; Loading
libs/gui/tests/WindowInfo_test.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ TEST(WindowInfo, Parcelling) { i.alpha = 0.7; i.transform.set({0.4, -1, 100, 0.5, 0, 40, 0, 0, 1}); i.touchOcclusionMode = TouchOcclusionMode::ALLOW; i.ownerPid = 19; i.ownerPid = gui::Pid{19}; i.ownerUid = gui::Uid{24}; i.packageName = "com.example.package"; i.inputConfig = WindowInfo::InputConfig::NOT_FOCUSABLE; Loading