Bug 1111135 - Part 2: Check for 3gpp permission. r=roc

This commit is contained in:
Eric Rahm 2015-01-05 15:15:07 -08:00
Родитель 0d14c130d0
Коммит 4f1a16baf2
2 изменённых файлов: 31 добавлений и 8 удалений

Просмотреть файл

@ -545,6 +545,33 @@ private:
} }
} }
bool Check3gppPermission()
{
nsCOMPtr<nsIDocument> doc = mRecorder->GetOwner()->GetExtantDoc();
if (!doc) {
return false;
}
uint16_t appStatus = nsIPrincipal::APP_STATUS_NOT_INSTALLED;
doc->NodePrincipal()->GetAppStatus(&appStatus);
// Certified applications can always assign AUDIO_3GPP
if (appStatus == nsIPrincipal::APP_STATUS_CERTIFIED) {
return true;
}
nsCOMPtr<nsIPermissionManager> pm =
do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
if (!pm) {
return false;
}
uint32_t perm = nsIPermissionManager::DENY_ACTION;
pm->TestExactPermissionFromPrincipal(doc->NodePrincipal(), "audio-capture:3gpp", &perm);
return perm == nsIPermissionManager::ALLOW_ACTION;
}
void InitEncoder(uint8_t aTrackTypes) void InitEncoder(uint8_t aTrackTypes)
{ {
LOG(PR_LOG_DEBUG, ("Session.InitEncoder %p", this)); LOG(PR_LOG_DEBUG, ("Session.InitEncoder %p", this));
@ -553,14 +580,8 @@ private:
// Allocate encoder and bind with union stream. // Allocate encoder and bind with union stream.
// At this stage, the API doesn't allow UA to choose the output mimeType format. // At this stage, the API doesn't allow UA to choose the output mimeType format.
nsCOMPtr<nsIDocument> doc = mRecorder->GetOwner()->GetExtantDoc(); // Make sure the application has permission to assign AUDIO_3GPP
uint16_t appStatus = nsIPrincipal::APP_STATUS_NOT_INSTALLED; if (mRecorder->mMimeType.EqualsLiteral(AUDIO_3GPP) && Check3gppPermission()) {
if (doc) {
doc->NodePrincipal()->GetAppStatus(&appStatus);
}
// Only allow certificated application can assign AUDIO_3GPP
if (appStatus == nsIPrincipal::APP_STATUS_CERTIFIED &&
mRecorder->mMimeType.EqualsLiteral(AUDIO_3GPP)) {
mEncoder = MediaEncoder::CreateEncoder(NS_LITERAL_STRING(AUDIO_3GPP), aTrackTypes); mEncoder = MediaEncoder::CreateEncoder(NS_LITERAL_STRING(AUDIO_3GPP), aTrackTypes);
} else { } else {
mEncoder = MediaEncoder::CreateEncoder(NS_LITERAL_STRING(""), aTrackTypes); mEncoder = MediaEncoder::CreateEncoder(NS_LITERAL_STRING(""), aTrackTypes);

Просмотреть файл

@ -148,6 +148,8 @@ private:
// Register MediaRecorder into Document to listen the activity changes. // Register MediaRecorder into Document to listen the activity changes.
void RegisterActivityObserver(); void RegisterActivityObserver();
void UnRegisterActivityObserver(); void UnRegisterActivityObserver();
bool Check3gppPermission();
}; };
} }