tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WMFCDMProxyCallback.cpp (3568B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "WMFCDMProxyCallback.h"
      6 
      7 #include "GMPUtils.h"
      8 #include "mozilla/EMEUtils.h"
      9 #include "mozilla/WMFCDMProxy.h"
     10 
     11 namespace mozilla {
     12 
     13 #define RETURN_IF_NULL(proxy) \
     14  if (!proxy) {               \
     15    return;                   \
     16  }
     17 
     18 #define LOG(msg, ...) \
     19  EME_LOG("WMFCDMProxyCallback[%p]@%s: " msg, this, __func__, ##__VA_ARGS__)
     20 
     21 WMFCDMProxyCallback::WMFCDMProxyCallback(WMFCDMProxy* aProxy) : mProxy(aProxy) {
     22  MOZ_ASSERT(NS_IsMainThread());
     23  MOZ_ASSERT(mProxy);
     24 }
     25 
     26 WMFCDMProxyCallback::~WMFCDMProxyCallback() { MOZ_ASSERT(!mProxy); }
     27 
     28 void WMFCDMProxyCallback::OnSessionMessage(const MFCDMKeyMessage& aMessage) {
     29  NS_DispatchToMainThread(NS_NewRunnableFunction(
     30      "WMFCDMProxyCallback::OnSessionMessage",
     31      [self = RefPtr{this}, this, message = aMessage]() {
     32        RETURN_IF_NULL(mProxy);
     33        mProxy->OnSessionMessage(message.sessionId(), message.type(),
     34                                 std::move(message.message()));
     35      }));
     36 }
     37 
     38 void WMFCDMProxyCallback::OnSessionKeyStatusesChange(
     39    const MFCDMKeyStatusChange& aKeyStatuses) {
     40  NS_DispatchToMainThread(NS_NewRunnableFunction(
     41      "WMFCDMProxyCallback::OnSessionKeyStatusesChange",
     42      [self = RefPtr{this}, this, keyStatuses = aKeyStatuses]() {
     43        RETURN_IF_NULL(mProxy);
     44        bool keyStatusesChange = false;
     45        {
     46          auto caps = mProxy->Capabilites().Lock();
     47          for (const auto& keyInfo : keyStatuses.keyInfo()) {
     48            bool statusChanged = caps->SetKeyStatus(
     49                keyInfo.keyId(), keyStatuses.sessionId(),
     50                dom::Optional<dom::MediaKeyStatus>(keyInfo.status()));
     51            keyStatusesChange |= statusChanged;
     52            LOG("Session ID: %s, Key ID: %s, Status changed: %s",
     53                NS_ConvertUTF16toUTF8(keyStatuses.sessionId()).get(),
     54                ToHexString(keyInfo.keyId()).get(),
     55                statusChanged ? "true" : "false");
     56          }
     57        }
     58        if (keyStatusesChange) {
     59          mProxy->OnKeyStatusesChange(keyStatuses.sessionId());
     60        }
     61      }));
     62 }
     63 
     64 void WMFCDMProxyCallback::OnSessionKeyExpiration(
     65    const MFCDMKeyExpiration& aExpiration) {
     66  NS_DispatchToMainThread(NS_NewRunnableFunction(
     67      "WMFCDMProxyCallback::OnSessionKeyExpiration",
     68      [self = RefPtr{this}, this, expiration = aExpiration]() {
     69        RETURN_IF_NULL(mProxy);
     70        mProxy->OnExpirationChange(
     71            expiration.sessionId(),
     72            expiration.expiredTimeMilliSecondsSinceEpoch());
     73      }));
     74 }
     75 
     76 void WMFCDMProxyCallback::OnSessionClosed(
     77    const MFCDMSessionClosedResult& aResult) {
     78  NS_DispatchToMainThread(NS_NewRunnableFunction(
     79      "WMFCDMProxyCallback::OnSessionClosed",
     80      [self = RefPtr{this}, this, result = aResult]() {
     81        RETURN_IF_NULL(mProxy);
     82        mProxy->OnSessionClosed(result.sessionId(), result.reason());
     83      }));
     84 }
     85 
     86 void WMFCDMProxyCallback::OnRemoteProcessCrashed() {
     87  NS_DispatchToMainThread(
     88      NS_NewRunnableFunction("WMFCDMProxyCallback::OnRemoteProcessCrashed",
     89                             [self = RefPtr{this}, this]() {
     90                               RETURN_IF_NULL(mProxy);
     91                               mProxy->Terminated();
     92                             }));
     93 }
     94 
     95 void WMFCDMProxyCallback::Shutdown() {
     96  MOZ_ASSERT(NS_IsMainThread());
     97  mProxy = nullptr;
     98 }
     99 
    100 #undef RETURN_IF_NULL
    101 #undef LOG
    102 }  // namespace mozilla