tor-browser

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

ChromiumCDMProxy.h (4923B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef ChromiumCDMProxy_h_
      8 #define ChromiumCDMProxy_h_
      9 
     10 #include "ChromiumCDMParent.h"
     11 #include "mozilla/AbstractThread.h"
     12 #include "mozilla/CDMProxy.h"
     13 
     14 namespace mozilla {
     15 
     16 class ErrorResult;
     17 class MediaRawData;
     18 class DecryptJob;
     19 class ChromiumCDMCallbackProxy;
     20 class ChromiumCDMProxy : public CDMProxy {
     21 public:
     22  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ChromiumCDMProxy, override)
     23 
     24  ChromiumCDMProxy(dom::MediaKeys* aKeys, const nsAString& aKeySystem,
     25                   GMPCrashHelper* aCrashHelper,
     26                   bool aAllowDistinctiveIdentifier,
     27                   bool aAllowPersistentState);
     28 
     29  void Init(PromiseId aPromiseId, const nsAString& aOrigin,
     30            const nsAString& aTopLevelOrigin,
     31            const nsAString& aGMPName) override;
     32 
     33  void CreateSession(uint32_t aCreateSessionToken,
     34                     dom::MediaKeySessionType aSessionType,
     35                     PromiseId aPromiseId, const nsAString& aInitDataType,
     36                     nsTArray<uint8_t>& aInitData) override;
     37 
     38  void LoadSession(PromiseId aPromiseId, dom::MediaKeySessionType aSessionType,
     39                   const nsAString& aSessionId) override;
     40 
     41  void SetServerCertificate(PromiseId aPromiseId,
     42                            nsTArray<uint8_t>& aCert) override;
     43 
     44  void UpdateSession(const nsAString& aSessionId, PromiseId aPromiseId,
     45                     nsTArray<uint8_t>& aResponse) override;
     46 
     47  void CloseSession(const nsAString& aSessionId, PromiseId aPromiseId) override;
     48 
     49  void RemoveSession(const nsAString& aSessionId,
     50                     PromiseId aPromiseId) override;
     51 
     52  void QueryOutputProtectionStatus() override;
     53 
     54  void NotifyOutputProtectionStatus(
     55      OutputProtectionCheckStatus aCheckStatus,
     56      OutputProtectionCaptureStatus aCaptureStatus) override;
     57 
     58  void Shutdown() override;
     59 
     60  void Terminated() override;
     61 
     62  void OnSetSessionId(uint32_t aCreateSessionToken,
     63                      const nsAString& aSessionId) override;
     64 
     65  void OnResolveLoadSessionPromise(uint32_t aPromiseId, bool aSuccess) override;
     66 
     67  void OnSessionMessage(const nsAString& aSessionId,
     68                        dom::MediaKeyMessageType aMessageType,
     69                        const nsTArray<uint8_t>& aMessage) override;
     70 
     71  void OnExpirationChange(const nsAString& aSessionId,
     72                          UnixTime aExpiryTime) override;
     73 
     74  void OnSessionClosed(const nsAString& aSessionId,
     75                       dom::MediaKeySessionClosedReason aReason) override;
     76 
     77  void OnSessionError(const nsAString& aSessionId, nsresult aException,
     78                      uint32_t aSystemCode, const nsAString& aMsg) override;
     79 
     80  void OnRejectPromise(uint32_t aPromiseId, ErrorResult&& aException,
     81                       const nsCString& aMsg) override;
     82 
     83  RefPtr<DecryptPromise> Decrypt(MediaRawData* aSample) override;
     84 
     85  void OnDecrypted(uint32_t aId, DecryptStatus aResult,
     86                   const nsTArray<uint8_t>& aDecryptedData) override;
     87 
     88  void RejectPromise(PromiseId aId, ErrorResult&& aException,
     89                     const nsCString& aReason) override;
     90  // Reject promise with an InvalidStateError and the given message.
     91  void RejectPromiseWithStateError(PromiseId aId, const nsCString& aReason);
     92  // For use for moving rejections from off-main thread.
     93  void RejectPromiseOnMainThread(PromiseId aId,
     94                                 CopyableErrorResult&& aException,
     95                                 const nsCString& aReason);
     96 
     97  void ResolvePromise(PromiseId aId) override;
     98 
     99  void OnKeyStatusesChange(const nsAString& aSessionId) override;
    100 
    101  void GetStatusForPolicy(PromiseId aPromiseId,
    102                          const dom::HDCPVersion& aMinHdcpVersion) override;
    103 
    104 #ifdef DEBUG
    105  bool IsOnOwnerThread() override;
    106 #endif
    107 
    108  ChromiumCDMProxy* AsChromiumCDMProxy() override { return this; }
    109 
    110  // Threadsafe. Note this may return a reference to a shutdown
    111  // CDM, which will fail on all operations.
    112  already_AddRefed<gmp::ChromiumCDMParent> GetCDMParent();
    113 
    114  void OnResolvePromiseWithKeyStatus(uint32_t aPromiseId,
    115                                     dom::MediaKeyStatus aKeyStatus);
    116 
    117 private:
    118  void OnCDMCreated(uint32_t aPromiseId);
    119  void ShutdownCDMIfExists();
    120 
    121  ~ChromiumCDMProxy();
    122 
    123  // True if Shutdown() has been called. Should only be read and written on
    124  // main thread.
    125  bool mIsShutdown = false;
    126 
    127  RefPtr<GMPCrashHelper> mCrashHelper;
    128 
    129  Mutex mCDMMutex MOZ_UNANNOTATED;
    130  RefPtr<gmp::ChromiumCDMParent> mCDM;
    131  nsCOMPtr<nsISerialEventTarget> mGMPThread;
    132  UniquePtr<ChromiumCDMCallbackProxy> mCallback;
    133 };
    134 
    135 }  // namespace mozilla
    136 
    137 #endif  // ChromiumCDMProxy_h_