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

Commit de50968a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Restore ability of system to screenshot secure layers."

parents cdd574e1 03480e23
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -4400,6 +4400,9 @@ status_t SurfaceFlinger::captureScreenCommon(RenderArea& renderArea,
    int syncFd = -1;
    std::optional<status_t> captureResult;

    const int uid = IPCThreadState::self()->getCallingUid();
    const bool forSystem = uid == AID_GRAPHICS || uid == AID_SYSTEM;

    sp<LambdaMessage> message = new LambdaMessage([&]() {
        // If there is a refresh pending, bug out early and tell the binder thread to try again
        // after the refresh.
@@ -4416,7 +4419,7 @@ status_t SurfaceFlinger::captureScreenCommon(RenderArea& renderArea,
        {
            Mutex::Autolock _l(mStateLock);
            result = captureScreenImplLocked(renderArea, traverseLayers, (*outBuffer).get(),
                                             useIdentityTransform, &fd);
                                             useIdentityTransform, forSystem, &fd);
        }

        {
@@ -4513,6 +4516,7 @@ status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea,
                                                 TraverseLayersFunction traverseLayers,
                                                 ANativeWindowBuffer* buffer,
                                                 bool useIdentityTransform,
                                                 bool forSystem,
                                                 int* outSyncFd) {
    ATRACE_CALL();

@@ -4522,7 +4526,10 @@ status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea,
        secureLayerIsVisible = secureLayerIsVisible || (layer->isVisible() && layer->isSecure());
    });

    if (secureLayerIsVisible) {
    // We allow the system server to take screenshots of secure layers for
    // use in situations like the Screen-rotation animation and place
    // the impetus on WindowManager to not persist them.
    if (secureLayerIsVisible && !forSystem) {
        ALOGW("FB is protected: PERMISSION_DENIED");
        return PERMISSION_DENIED;
    }
+1 −1
Original line number Diff line number Diff line
@@ -524,7 +524,7 @@ private:
    status_t captureScreenImplLocked(const RenderArea& renderArea,
                                     TraverseLayersFunction traverseLayers,
                                     ANativeWindowBuffer* buffer, bool useIdentityTransform,
                                     int* outSyncFd);
                                     bool forSystem, int* outSyncFd);
    void traverseLayersInDisplay(const sp<const DisplayDevice>& display, int32_t minLayerZ,
                                 int32_t maxLayerZ, const LayerVector::Visitor& visitor);