Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90b8ef0b authored by Galia Peycheva's avatar Galia Peycheva Committed by Android (Google) Code Review
Browse files

Merge "Add permission check for blurs in SurfaceFlinger"

parents 156d1104 700342fb
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -276,6 +276,7 @@ const String16 sHardwareTest("android.permission.HARDWARE_TEST");
const String16 sAccessSurfaceFlinger("android.permission.ACCESS_SURFACE_FLINGER");
const String16 sRotateSurfaceFlinger("android.permission.ROTATE_SURFACE_FLINGER");
const String16 sReadFramebuffer("android.permission.READ_FRAME_BUFFER");
const String16 sUseBackgroundBlur("android.permission.USE_BACKGROUND_BLUR");
const String16 sDump("android.permission.DUMP");
const char* KERNEL_IDLE_TIMER_PROP = "graphics.display.kernel_idle_timer.enabled";

@@ -333,6 +334,10 @@ bool callingThreadHasRotateSurfaceFlingerAccess() {
            PermissionCache::checkPermission(sRotateSurfaceFlinger, pid, uid);
}

bool originalCallerCanUseBlurs(int originPid, int originUid) {
    return PermissionCache::checkPermission(sUseBackgroundBlur, originPid, originUid);
}

SurfaceFlingerBE::SurfaceFlingerBE() : mHwcServiceName(getHwcServiceName()) {}

SurfaceFlinger::SurfaceFlinger(Factory& factory, SkipInitializationTag)
@@ -3438,9 +3443,10 @@ void SurfaceFlinger::applyTransactionState(
    std::unordered_set<ListenerCallbacks, ListenerCallbacksHash> listenerCallbacksWithSurfaces;
    uint32_t clientStateFlags = 0;
    for (const ComposerState& state : states) {
        clientStateFlags |= setClientStateLocked(frameTimelineVsyncId, state, desiredPresentTime,
        clientStateFlags |=
                setClientStateLocked(frameTimelineVsyncId, state, desiredPresentTime,
                                     isAutoTimestamp, postTime, privileged,
                                                 listenerCallbacksWithSurfaces);
                                     listenerCallbacksWithSurfaces, originPid, originUid);
        if ((flags & eAnimation) && state.state.surface) {
            if (const auto layer = fromHandleLocked(state.state.surface).promote(); layer) {
                mScheduler->recordLayerHistory(layer.get(),
@@ -3620,7 +3626,8 @@ bool SurfaceFlinger::callingThreadHasUnscopedSurfaceFlingerAccess(bool usePermis
uint32_t SurfaceFlinger::setClientStateLocked(
        int64_t frameTimelineVsyncId, const ComposerState& composerState,
        int64_t desiredPresentTime, bool isAutoTimestamp, int64_t postTime, bool privileged,
        std::unordered_set<ListenerCallbacks, ListenerCallbacksHash>& listenerCallbacks) {
        std::unordered_set<ListenerCallbacks, ListenerCallbacksHash>& listenerCallbacks,
        int originPid, int originUid) {
    const layer_state_t& s = composerState.state;

    for (auto& listener : s.listeners) {
@@ -3764,10 +3771,14 @@ uint32_t SurfaceFlinger::setClientStateLocked(
        if (layer->setCornerRadius(s.cornerRadius))
            flags |= eTraversalNeeded;
    }
    if (what & layer_state_t::eBackgroundBlurRadiusChanged && !mDisableBlurs && mSupportsBlur) {

    if (what & layer_state_t::eBackgroundBlurRadiusChanged && !mDisableBlurs && mSupportsBlur &&
        originalCallerCanUseBlurs(originPid, originUid)) {
        if (layer->setBackgroundBlurRadius(s.backgroundBlurRadius)) flags |= eTraversalNeeded;
    }
    if (what & layer_state_t::eBlurRegionsChanged) {

    if (what & layer_state_t::eBlurRegionsChanged &&
        originalCallerCanUseBlurs(originPid, originUid)) {
        if (layer->setBlurRegions(s.blurRegions)) flags |= eTraversalNeeded;
    }
    if (what & layer_state_t::eLayerStackChanged) {
+2 −2
Original line number Diff line number Diff line
@@ -344,8 +344,8 @@ protected:
    virtual uint32_t setClientStateLocked(
            int64_t frameTimelineVsyncId, const ComposerState& composerState,
            int64_t desiredPresentTime, bool isAutoTimestamp, int64_t postTime, bool privileged,
            std::unordered_set<ListenerCallbacks, ListenerCallbacksHash>& listenerCallbacks)
            REQUIRES(mStateLock);
            std::unordered_set<ListenerCallbacks, ListenerCallbacksHash>& listenerCallbacks,
            int originPid, int originUid) REQUIRES(mStateLock);
    virtual void commitTransactionLocked();

    // Used internally by computeLayerBounds() to gets the clip rectangle to use for the