From 1db73f66624e7d151710483dd58e03eed672f064 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Wed, 21 Dec 2016 12:58:51 -0800 Subject: SurfaceFlinger: Add support for non-privileged clients. Allow clients without privilege to create child layers through scoped connections. We enable this in preparation for allowing SurfaceView to bypass the WindowManager. We include support for reparenting of all of a layer's children for the WindowManager to use in cases where one surface is replacing another (while keeping its children around). Test: Tested with corresponding SurfaceView modifications. Change-Id: I9920e6730d719113522a68788e63fb59f70d3406 --- libs/gui/ISurfaceComposer.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'libs/gui/ISurfaceComposer.cpp') diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index 74c3bedf98..2a327da07d 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -64,6 +64,16 @@ public: return interface_cast(reply.readStrongBinder()); } + virtual sp createScopedConnection( + const sp& parent) + { + Parcel data, reply; + data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); + data.writeStrongBinder(IInterface::asBinder(parent)); + remote()->transact(BnSurfaceComposer::CREATE_SCOPED_CONNECTION, data, &reply); + return interface_cast(reply.readStrongBinder()); + } + virtual sp createGraphicBufferAlloc() { Parcel data, reply; @@ -489,6 +499,14 @@ status_t BnSurfaceComposer::onTransact( reply->writeStrongBinder(b); return NO_ERROR; } + case CREATE_SCOPED_CONNECTION: { + CHECK_INTERFACE(ISurfaceComposer, data, reply); + sp bufferProducer = + interface_cast(data.readStrongBinder()); + sp b = IInterface::asBinder(createScopedConnection(bufferProducer)); + reply->writeStrongBinder(b); + return NO_ERROR; + } case CREATE_GRAPHIC_BUFFER_ALLOC: { CHECK_INTERFACE(ISurfaceComposer, data, reply); sp b = IInterface::asBinder(createGraphicBufferAlloc()); -- cgit v1.2.3-59-g8ed1b