Switch media fw permissions checks to AttributionSource (av)
Attribution source is the abstraction to capture the data
flows for private data across apps. Checking permissions
for an attribution source does this for all apps in the
chain that would receive the data as well as the relevant
app ops are checked/noted/started as needed.
bug: 158792096
Test: atest CtsMediaTestCases
atest CtsPermissionTestCases
atest CtsPermission2TestCases
atest CtsPermission3TestCases
atest CtsPermission4TestCases
atest CtsPermission5TestCases
atest CtsAppOpsTestCases
atest CtsAppOps2TestCases
Merged-In: I1c5a4321dd3b2d458372058c99604a6ec208717c
Change-Id: I1c5a4321dd3b2d458372058c99604a6ec208717c
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index 6eb33f6..48da40c 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -1,3 +1,4 @@
+
/*
* Copyright (C) 2009 The Android Open Source Project
*
@@ -38,12 +39,14 @@
#include "CaptureStateNotifier.h"
#include <AudioPolicyInterface.h>
#include <android/hardware/BnSensorPrivacyListener.h>
-#include <android/media/permission/Identity.h>
+#include <android/content/AttributionSourceState.h>
#include <unordered_map>
namespace android {
+using content::AttributionSourceState;
+
// ----------------------------------------------------------------------------
class AudioPolicyService :
@@ -81,7 +84,7 @@
media::AudioPolicyForcedConfig* _aidl_return) override;
binder::Status getOutput(media::AudioStreamType stream, int32_t* _aidl_return) override;
binder::Status getOutputForAttr(const media::AudioAttributesInternal& attr, int32_t session,
- const media::permission::Identity &identity,
+ const AttributionSourceState &attributionSource,
const media::AudioConfig& config,
int32_t flags, int32_t selectedDeviceId,
media::GetOutputForAttrResponse* _aidl_return) override;
@@ -90,7 +93,7 @@
binder::Status releaseOutput(int32_t portId) override;
binder::Status getInputForAttr(const media::AudioAttributesInternal& attr, int32_t input,
int32_t riid, int32_t session,
- const media::permission::Identity &identity,
+ const AttributionSourceState &attributionSource,
const media::AudioConfigBase& config, int32_t flags,
int32_t selectedDeviceId,
media::GetInputForAttrResponse* _aidl_return) override;
@@ -344,7 +347,7 @@
bool isSupportedSystemUsage(audio_usage_t usage);
status_t validateUsage(audio_usage_t usage);
- status_t validateUsage(audio_usage_t usage, const media::permission::Identity& identity);
+ status_t validateUsage(audio_usage_t usage, const AttributionSourceState& attributionSource);
void updateUidStates();
void updateUidStates_l() REQUIRES(mLock);
@@ -791,17 +794,18 @@
public:
AudioClient(const audio_attributes_t attributes,
const audio_io_handle_t io,
- const media::permission::Identity& identity,
+ const AttributionSourceState& attributionSource,
const audio_session_t session, audio_port_handle_t portId,
const audio_port_handle_t deviceId) :
- attributes(attributes), io(io), identity(identity),
- session(session), portId(portId), deviceId(deviceId), active(false) {}
+ attributes(attributes), io(io), attributionSource(
+ attributionSource), session(session), portId(portId),
+ deviceId(deviceId), active(false) {}
~AudioClient() override = default;
const audio_attributes_t attributes; // source, flags ...
const audio_io_handle_t io; // audio HAL stream IO handle
- const media::permission::Identity& identity; //client identity
+ const AttributionSourceState& attributionSource; //client attributionsource
const audio_session_t session; // audio session ID
const audio_port_handle_t portId;
const audio_port_handle_t deviceId; // selected input device port ID
@@ -817,14 +821,15 @@
const audio_io_handle_t io,
const audio_session_t session, audio_port_handle_t portId,
const audio_port_handle_t deviceId,
- const media::permission::Identity& identity,
+ const AttributionSourceState& attributionSource,
bool canCaptureOutput, bool canCaptureHotword) :
- AudioClient(attributes, io, identity,
- session, portId, deviceId), identity(identity), startTimeNs(0),
- canCaptureOutput(canCaptureOutput), canCaptureHotword(canCaptureHotword) {}
+ AudioClient(attributes, io, attributionSource,
+ session, portId, deviceId), attributionSource(attributionSource),
+ startTimeNs(0), canCaptureOutput(canCaptureOutput),
+ canCaptureHotword(canCaptureHotword) {}
~AudioRecordClient() override = default;
- const media::permission::Identity identity; // identity of client
+ const AttributionSourceState attributionSource; // attribution source of client
nsecs_t startTimeNs;
const bool canCaptureOutput;
const bool canCaptureHotword;
@@ -836,10 +841,10 @@
class AudioPlaybackClient : public AudioClient {
public:
AudioPlaybackClient(const audio_attributes_t attributes,
- const audio_io_handle_t io, media::permission::Identity identity,
+ const audio_io_handle_t io, AttributionSourceState attributionSource,
const audio_session_t session, audio_port_handle_t portId,
audio_port_handle_t deviceId, audio_stream_type_t stream) :
- AudioClient(attributes, io, identity, session, portId,
+ AudioClient(attributes, io, attributionSource, session, portId,
deviceId), stream(stream) {}
~AudioPlaybackClient() override = default;