Bug 1318965 - Fixes a bug in the WideVineAdapter wherein session load failures were not adapted correctly r?cpearce draft
authorJay Harris <jharris@mozilla.com>
Tue, 20 Dec 2016 14:35:55 +1300
changeset 459508 366f8da20f5b511eafcdcd20113d04d268f6321b
parent 459507 a2d545834d4d033073a58940416a8d26765af2af
child 462309 92876293c28896f568b6f82261d267b4b9de77d0
child 462313 67c554fca5614df175d916fe15ff42f59523d0aa
child 462317 1975ebdf7a1020c7e178e181559bdc1d9f9456d5
push id41243
push userbmo:jharris@mozilla.com
push dateThu, 12 Jan 2017 02:54:07 +0000
reviewerscpearce
bugs1318965
milestone53.0a1
Bug 1318965 - Fixes a bug in the WideVineAdapter wherein session load failures were not adapted correctly r?cpearce MozReview-Commit-ID: 2ze4d8EuHr9
dom/media/gmp/widevine-adapter/WidevineDecryptor.cpp
--- 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);