DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (d38398e5144e)

VCS Links

GMPDecryptorChild

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
/* -*- 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/. */

#ifndef GMPDecryptorChild_h_
#define GMPDecryptorChild_h_

#include "mozilla/gmp/PGMPDecryptorChild.h"
#include "gmp-decryption.h"
#include "mozilla/gmp/GMPTypes.h"
#include "GMPEncryptedBufferDataImpl.h"
#include <string>

namespace mozilla {
namespace gmp {

class GMPContentChild;

class GMPDecryptorChild : public GMPDecryptorCallback
                        , public PGMPDecryptorChild
{
public:
  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GMPDecryptorChild);

  explicit GMPDecryptorChild(GMPContentChild* aPlugin);

  void Init(GMPDecryptor* aSession);

  // GMPDecryptorCallback
  void SetSessionId(uint32_t aCreateSessionToken,
                    const char* aSessionId,
                    uint32_t aSessionIdLength) override;
  void ResolveLoadSessionPromise(uint32_t aPromiseId,
                                 bool aSuccess) override;
  void ResolvePromise(uint32_t aPromiseId) override;

  void RejectPromise(uint32_t aPromiseId,
                     GMPDOMException aException,
                     const char* aMessage,
                     uint32_t aMessageLength) override;

  void SessionMessage(const char* aSessionId,
                      uint32_t aSessionIdLength,
                      GMPSessionMessageType aMessageType,
                      const uint8_t* aMessage,
                      uint32_t aMessageLength) override;

  void ExpirationChange(const char* aSessionId,
                        uint32_t aSessionIdLength,
                        GMPTimestamp aExpiryTime) override;

  void SessionClosed(const char* aSessionId,
                     uint32_t aSessionIdLength) override;

  void SessionError(const char* aSessionId,
                    uint32_t aSessionIdLength,
                    GMPDOMException aException,
                    uint32_t aSystemCode,
                    const char* aMessage,
                    uint32_t aMessageLength) override;

  void KeyStatusChanged(const char* aSessionId,
                        uint32_t aSessionIdLength,
                        const uint8_t* aKeyId,
                        uint32_t aKeyIdLength,
                        GMPMediaKeyStatus aStatus) override;

  void SetCapabilities(uint64_t aCaps) override;

  void Decrypted(GMPBuffer* aBuffer, GMPErr aResult) override;

  void BatchedKeyStatusChanged(const char* aSessionId,
                               uint32_t aSessionIdLength,
                               const GMPMediaKeyInfo* aKeyInfos,
                               uint32_t aKeyInfosLength) override;

  uint32_t DecryptorId() const { return mDecryptorId; }
private:
  ~GMPDecryptorChild();

  // GMPDecryptorChild
  mozilla::ipc::IPCResult RecvInit(const bool& aDistinctiveIdentifierRequired,
                                   const bool& aPersistentStateRequired) override;

  mozilla::ipc::IPCResult RecvCreateSession(const uint32_t& aCreateSessionToken,
                                            const uint32_t& aPromiseId,
                                            const nsCString& aInitDataType,
                                            InfallibleTArray<uint8_t>&& aInitData,
                                            const GMPSessionType& aSessionType) override;

  mozilla::ipc::IPCResult RecvLoadSession(const uint32_t& aPromiseId,
                                          const nsCString& aSessionId) override;

  mozilla::ipc::IPCResult RecvUpdateSession(const uint32_t& aPromiseId,
                                            const nsCString& aSessionId,
                                            InfallibleTArray<uint8_t>&& aResponse) override;

  mozilla::ipc::IPCResult RecvCloseSession(const uint32_t& aPromiseId,
                                           const nsCString& aSessionId) override;

  mozilla::ipc::IPCResult RecvRemoveSession(const uint32_t& aPromiseId,
                                            const nsCString& aSessionId) override;

  mozilla::ipc::IPCResult RecvDecrypt(const uint32_t& aId,
                                      InfallibleTArray<uint8_t>&& aBuffer,
                                      const GMPDecryptionData& aMetadata) override;

  // Resolve/reject promise on completion.
  mozilla::ipc::IPCResult RecvSetServerCertificate(const uint32_t& aPromiseId,
                                                   InfallibleTArray<uint8_t>&& aServerCert) override;

  mozilla::ipc::IPCResult RecvDecryptingComplete() override;

  template <typename MethodType, typename... ParamType>
  void CallMethod(MethodType, ParamType&&...);

  template<typename MethodType, typename... ParamType>
  void CallOnGMPThread(MethodType, ParamType&&...);

  // GMP's GMPDecryptor implementation.
  // Only call into this on the (GMP process) main thread.
  GMPDecryptor* mSession;
  GMPContentChild* mPlugin;

  const uint32_t mDecryptorId;
};

} // namespace gmp
} // namespace mozilla

#endif // GMPDecryptorChild_h_