don't allow screenshots without the READ_FRAMEBUFFER permission

the recent screenshot rework allowed the older screenshot
interface to work without that permission

Change-Id: I6c4743f4591c81106e3b823d55a055f7b4907de1
This commit is contained in:
Mathias Agopian 2013-03-15 18:31:56 -07:00
parent 7670d3cb2b
commit 041a075262
2 changed files with 11 additions and 2 deletions

View File

@ -103,16 +103,23 @@ public:
uint32_t reqWidth, uint32_t reqHeight, uint32_t reqWidth, uint32_t reqHeight,
uint32_t minLayerZ, uint32_t maxLayerZ) = 0; uint32_t minLayerZ, uint32_t maxLayerZ) = 0;
/* triggers screen off and waits for it to complete */ /* triggers screen off and waits for it to complete
* requires ACCESS_SURFACE_FLINGER permission.
*/
virtual void blank(const sp<IBinder>& display) = 0; virtual void blank(const sp<IBinder>& display) = 0;
/* triggers screen on and waits for it to complete */ /* triggers screen on and waits for it to complete
* requires ACCESS_SURFACE_FLINGER permission.
*/
virtual void unblank(const sp<IBinder>& display) = 0; virtual void unblank(const sp<IBinder>& display) = 0;
/* returns information about a display /* returns information about a display
* intended to be used to get information about built-in displays */ * intended to be used to get information about built-in displays */
virtual status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info) = 0; virtual status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info) = 0;
/* Capture the specified screen. requires READ_FRAME_BUFFER permission
* This function will fail if there is a secure window on screen.
*/
virtual status_t captureScreen(const sp<IBinder>& display, virtual status_t captureScreen(const sp<IBinder>& display,
const sp<IGraphicBufferProducer>& producer, const sp<IGraphicBufferProducer>& producer,
uint32_t reqWidth, uint32_t reqHeight, uint32_t reqWidth, uint32_t reqHeight,

View File

@ -2399,6 +2399,7 @@ status_t SurfaceFlinger::onTransact(
{ {
switch (code) { switch (code) {
case CREATE_CONNECTION: case CREATE_CONNECTION:
case CREATE_DISPLAY:
case SET_TRANSACTION_STATE: case SET_TRANSACTION_STATE:
case BOOT_FINISHED: case BOOT_FINISHED:
case BLANK: case BLANK:
@ -2417,6 +2418,7 @@ status_t SurfaceFlinger::onTransact(
break; break;
} }
case CAPTURE_SCREEN: case CAPTURE_SCREEN:
case CAPTURE_SCREEN_DEPRECATED:
{ {
// codes that require permission check // codes that require permission check
IPCThreadState* ipc = IPCThreadState::self(); IPCThreadState* ipc = IPCThreadState::self();