Bug 1318965 - Fixes a bug in the WideVineAdapter wherein session load failures were not adapted correctly r?cpearce
MozReview-Commit-ID: 2ze4d8EuHr9
--- a/dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp
+++ b/dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp
@@ -308,16 +308,27 @@ void
WidevineDecryptor::OnResolveNewSessionPromise(uint32_t aPromiseId,
const char* aSessionId,
uint32_t aSessionIdSize)
{
if (!mCallback) {
Log("Decryptor::OnResolveNewSessionPromise(aPromiseId=0x%d) FAIL; !mCallback", aPromiseId);
return;
}
+
+ // This is laid out in the API. If we fail to load a session we should
+ // call OnResolveNewSessionPromise with nullptr as the sessionId.
+ // We can safely assume this means that we have failed to load a session
+ // as the other methods specify calling 'OnRejectPromise' when they fail.
+ if (!aSessionId) {
+ Log("Decryptor::OnResolveNewSessionPromise(aPromiseId=0x%d) Failed to load session", aPromiseId);
+ mCallback->ResolveLoadSessionPromise(aPromiseId, false);
+ return;
+ }
+
Log("Decryptor::OnResolveNewSessionPromise(aPromiseId=0x%d)", aPromiseId);
auto iter = mPromiseIdToNewSessionTokens.find(aPromiseId);
if (iter == mPromiseIdToNewSessionTokens.end()) {
Log("FAIL: Decryptor::OnResolveNewSessionPromise(aPromiseId=%d) unknown aPromiseId", aPromiseId);
return;
}
mCallback->SetSessionId(iter->second, aSessionId, aSessionIdSize);
mCallback->ResolvePromise(aPromiseId);