gecko-dev/dom/media/gmp/PChromiumCDM.ipdl
Bryce Van Dyk 2b1313aa34 Bug 1491889 - Update chromium CDM interface to accommodate async init. r=cpearce
Starting at the Widevine CDM10 interface, the CDM is expected to make a callback
to an `OnInititalized` function to signal initialization has taken place. Prior
to this, it was sufficient to call the init function on the CDM, with no waiting
for a callback.

This changeset puts in place the IPDL to support async init, as well as the
handling for the ChromiumCDMParent and ChromiumCDMProxy. The code is not fully
updated to handle CDM10, so CDM9 is the only compatible CDM. Because CDM9 does
not perform the init callback, we immediately call our IPDL to signal init has
taken place. This also accommodates the clearkey case, which uses the CDM9
interface.

Further changesets will put in place more elaborate handling to accommodate the
possible failure of init, as well as implementing the handling `OnInitialized`
function explicitly.

Differential Revision: https://phabricator.services.mozilla.com/D6061

--HG--
extra : moz-landing-system : lando
2018-09-25 13:33:09 +00:00

116 lines
3.3 KiB
Plaintext

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PGMPContent;
include GMPTypes;
namespace mozilla {
namespace gmp {
async protocol PChromiumCDM
{
manager PGMPContent;
child:
// cdm::ContentDecryptionModule9+10
async Init(bool aAllowDistinctiveIdentifier,
bool aAllowPersistentState) returns (bool unused);
async GetStatusForPolicy(uint32_t aPromiseId,
nsCString aMinHdcpVersion);
async SetServerCertificate(uint32_t aPromiseId,
uint8_t[] aServerCert);
async CreateSessionAndGenerateRequest(uint32_t aPromiseId,
uint32_t aSessionType,
uint32_t aInitDataType,
uint8_t[] aInitData);
async LoadSession(uint32_t aPromiseId,
uint32_t aSessionType,
nsCString aSessionId);
async UpdateSession(uint32_t aPromiseId,
nsCString aSessionId,
uint8_t[] aResponse);
async CloseSession(uint32_t aPromiseId,
nsCString aSessionId);
async RemoveSession(uint32_t aPromiseId,
nsCString aSessionId);
async Decrypt(uint32_t aId, CDMInputBuffer aBuffer);
async InitializeVideoDecoder(CDMVideoDecoderConfig aConfig);
async DeinitializeVideoDecoder();
async ResetVideoDecoder();
async DecryptAndDecodeFrame(CDMInputBuffer aBuffer);
async Drain();
async Destroy();
async GiveBuffer(Shmem aShmem);
async PurgeShmems();
parent:
async __delete__();
// cdm::Host9+10
async OnResolvePromiseWithKeyStatus(uint32_t aPromiseId, uint32_t aKeyStatus);
async OnResolveNewSessionPromise(uint32_t aPromiseId, nsCString aSessionId);
async OnResolvePromise(uint32_t aPromiseId);
async OnRejectPromise(uint32_t aPromiseId,
uint32_t aException,
uint32_t aSystemCode,
nsCString aErrorMessage);
async OnSessionMessage(nsCString aSessionId,
uint32_t aMessageType,
uint8_t[] aMessage);
async OnSessionKeysChange(nsCString aSessionId,
CDMKeyInformation[] aKeysInfo);
async OnExpirationChange(nsCString aSessionId,
double aSecondsSinceEpoch);
async OnSessionClosed(nsCString aSessionId);
async ResolveLoadSessionPromise(uint32_t aPromiseId, bool aSuccessful);
// Return values of cdm::ContentDecryptionModule9::Decrypt
async Decrypted(uint32_t aId, uint32_t aStatus, Shmem aDecryptedData);
async DecryptFailed(uint32_t aId, uint32_t aStatus);
async OnDecoderInitDone(uint32_t aStatus);
// Return values of cdm::ContentDecryptionModule9::DecryptAndDecodeFrame
async DecodedShmem(CDMVideoFrame aFrame, Shmem aData);
async DecodedData(CDMVideoFrame aFrame, uint8_t[] aData);
async DecodeFailed(uint32_t aStatus);
async ResetVideoDecoderComplete();
async DrainComplete();
async Shutdown();
async IncreaseShmemPoolSize();
};
} // namespace gmp
} // namespace mozilla