Bug 1315850 - Stub out ChromiumCDMProxy. r=gerald draft
authorChris Pearce <cpearce@mozilla.com>
Wed, 22 Feb 2017 14:42:32 +1300
changeset 504159 df41a20a0fefaf26a63ed18f1ccdf7fa5a3a1e89
parent 504158 94dacb5107e7f098c7dde88e6d246edb9deb6a35
child 504160 76937006b9e424f2588e7d06f8f7b0c3a68b5af2
push id50748
push userbmo:cpearce@mozilla.com
push dateFri, 24 Mar 2017 01:10:17 +0000
reviewersgerald
bugs1315850
milestone55.0a1
Bug 1315850 - Stub out ChromiumCDMProxy. r=gerald This will eventually replace GMPCDMProxy. Methods will be implemented in later patches. MozReview-Commit-ID: 86pwo81tFZv
dom/media/gmp/ChromiumCDMProxy.cpp
dom/media/gmp/ChromiumCDMProxy.h
dom/media/gmp/moz.build
new file mode 100644
--- /dev/null
+++ b/dom/media/gmp/ChromiumCDMProxy.cpp
@@ -0,0 +1,203 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#include "ChromiumCDMProxy.h"
+#include "GMPUtils.h"
+
+namespace mozilla {
+
+ChromiumCDMProxy::ChromiumCDMProxy(dom::MediaKeys* aKeys,
+                                   const nsAString& aKeySystem,
+                                   GMPCrashHelper* aCrashHelper,
+                                   bool aDistinctiveIdentifierRequired,
+                                   bool aPersistentStateRequired,
+                                   nsIEventTarget* aMainThread)
+  : CDMProxy(aKeys,
+             aKeySystem,
+             aDistinctiveIdentifierRequired,
+             aPersistentStateRequired,
+             aMainThread)
+  , mCrashHelper(aCrashHelper)
+  , mCDM(nullptr)
+  , mGMPThread(GetGMPAbstractThread())
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  MOZ_COUNT_CTOR(ChromiumCDMProxy);
+}
+
+ChromiumCDMProxy::~ChromiumCDMProxy()
+{
+  MOZ_COUNT_DTOR(ChromiumCDMProxy);
+}
+
+void
+ChromiumCDMProxy::Init(PromiseId aPromiseId,
+                       const nsAString& aOrigin,
+                       const nsAString& aTopLevelOrigin,
+                       const nsAString& aGMPName)
+{
+}
+
+#ifdef DEBUG
+bool
+ChromiumCDMProxy::IsOnOwnerThread()
+{
+  return mGMPThread->IsCurrentThreadIn();
+}
+#endif
+
+void
+ChromiumCDMProxy::CreateSession(uint32_t aCreateSessionToken,
+                                dom::MediaKeySessionType aSessionType,
+                                PromiseId aPromiseId,
+                                const nsAString& aInitDataType,
+                                nsTArray<uint8_t>& aInitData)
+{
+}
+
+void
+ChromiumCDMProxy::LoadSession(PromiseId aPromiseId, const nsAString& aSessionId)
+{
+}
+
+void
+ChromiumCDMProxy::SetServerCertificate(PromiseId aPromiseId,
+                                       nsTArray<uint8_t>& aCert)
+{
+}
+
+void
+ChromiumCDMProxy::UpdateSession(const nsAString& aSessionId,
+                                PromiseId aPromiseId,
+                                nsTArray<uint8_t>& aResponse)
+{
+}
+
+void
+ChromiumCDMProxy::CloseSession(const nsAString& aSessionId,
+                               PromiseId aPromiseId)
+{
+}
+
+void
+ChromiumCDMProxy::RemoveSession(const nsAString& aSessionId,
+                                PromiseId aPromiseId)
+{
+}
+
+void
+ChromiumCDMProxy::Shutdown()
+{
+}
+
+void
+ChromiumCDMProxy::RejectPromise(PromiseId aId,
+                                nsresult aCode,
+                                const nsCString& aReason)
+{
+}
+
+void
+ChromiumCDMProxy::ResolvePromise(PromiseId aId)
+{
+}
+
+const nsCString&
+ChromiumCDMProxy::GetNodeId() const
+{
+  return mNodeId;
+}
+
+void
+ChromiumCDMProxy::OnSetSessionId(uint32_t aCreateSessionToken,
+                                 const nsAString& aSessionId)
+{
+}
+
+void
+ChromiumCDMProxy::OnResolveLoadSessionPromise(uint32_t aPromiseId,
+                                              bool aSuccess)
+{
+}
+
+void
+ChromiumCDMProxy::OnSessionMessage(const nsAString& aSessionId,
+                                   dom::MediaKeyMessageType aMessageType,
+                                   nsTArray<uint8_t>& aMessage)
+{
+}
+
+void
+ChromiumCDMProxy::OnKeyStatusesChange(const nsAString& aSessionId)
+{
+}
+
+void
+ChromiumCDMProxy::OnExpirationChange(const nsAString& aSessionId,
+                                     GMPTimestamp aExpiryTime)
+{
+}
+
+void
+ChromiumCDMProxy::OnSessionClosed(const nsAString& aSessionId)
+{
+}
+
+void
+ChromiumCDMProxy::OnDecrypted(uint32_t aId,
+                              DecryptStatus aResult,
+                              const nsTArray<uint8_t>& aDecryptedData)
+{
+}
+
+void
+ChromiumCDMProxy::OnSessionError(const nsAString& aSessionId,
+                                 nsresult aException,
+                                 uint32_t aSystemCode,
+                                 const nsAString& aMsg)
+{
+}
+
+void
+ChromiumCDMProxy::OnRejectPromise(uint32_t aPromiseId,
+                                  nsresult aDOMException,
+                                  const nsCString& aMsg)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  RejectPromise(aPromiseId, aDOMException, aMsg);
+}
+
+const nsString&
+ChromiumCDMProxy::KeySystem() const
+{
+  return mKeySystem;
+}
+
+CDMCaps&
+ChromiumCDMProxy::Capabilites()
+{
+  return mCapabilites;
+}
+
+RefPtr<DecryptPromise>
+ChromiumCDMProxy::Decrypt(MediaRawData* aSample)
+{
+  return DecryptPromise::CreateAndReject(DecryptResult(GenericErr, nullptr),
+                                         __func__);
+}
+
+void
+ChromiumCDMProxy::GetSessionIdsForKeyId(const nsTArray<uint8_t>& aKeyId,
+                                        nsTArray<nsCString>& aSessionIds)
+{
+}
+
+void
+ChromiumCDMProxy::Terminated()
+{
+}
+
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/dom/media/gmp/ChromiumCDMProxy.h
@@ -0,0 +1,121 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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 ChromiumCDMProxy_h_
+#define ChromiumCDMProxy_h_
+
+#include "mozilla/CDMProxy.h"
+#include "mozilla/AbstractThread.h"
+#include "ChromiumCDMParent.h"
+
+namespace mozilla {
+
+class MediaRawData;
+class DecryptJob;
+
+class ChromiumCDMProxy : public CDMProxy
+{
+public:
+  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ChromiumCDMProxy, override)
+
+  ChromiumCDMProxy(dom::MediaKeys* aKeys,
+                   const nsAString& aKeySystem,
+                   GMPCrashHelper* aCrashHelper,
+                   bool aAllowDistinctiveIdentifier,
+                   bool aAllowPersistentState,
+                   nsIEventTarget* aMainThread);
+
+  void Init(PromiseId aPromiseId,
+            const nsAString& aOrigin,
+            const nsAString& aTopLevelOrigin,
+            const nsAString& aGMPName) override;
+
+  void CreateSession(uint32_t aCreateSessionToken,
+                     dom::MediaKeySessionType aSessionType,
+                     PromiseId aPromiseId,
+                     const nsAString& aInitDataType,
+                     nsTArray<uint8_t>& aInitData) override;
+
+  void LoadSession(PromiseId aPromiseId, const nsAString& aSessionId) override;
+
+  void SetServerCertificate(PromiseId aPromiseId,
+                            nsTArray<uint8_t>& aCert) override;
+
+  void UpdateSession(const nsAString& aSessionId,
+                     PromiseId aPromiseId,
+                     nsTArray<uint8_t>& aResponse) override;
+
+  void CloseSession(const nsAString& aSessionId, PromiseId aPromiseId) override;
+
+  void RemoveSession(const nsAString& aSessionId,
+                     PromiseId aPromiseId) override;
+
+  void Shutdown() override;
+
+  void Terminated() override;
+
+  const nsCString& GetNodeId() const override;
+
+  void OnSetSessionId(uint32_t aCreateSessionToken,
+                      const nsAString& aSessionId) override;
+
+  void OnResolveLoadSessionPromise(uint32_t aPromiseId, bool aSuccess) override;
+
+  void OnSessionMessage(const nsAString& aSessionId,
+                        dom::MediaKeyMessageType aMessageType,
+                        nsTArray<uint8_t>& aMessage) override;
+
+  void OnExpirationChange(const nsAString& aSessionId,
+                          GMPTimestamp aExpiryTime) override;
+
+  void OnSessionClosed(const nsAString& aSessionId) override;
+
+  void OnSessionError(const nsAString& aSessionId,
+                      nsresult aException,
+                      uint32_t aSystemCode,
+                      const nsAString& aMsg) override;
+
+  void OnRejectPromise(uint32_t aPromiseId,
+                       nsresult aDOMException,
+                       const nsCString& aMsg) override;
+
+  RefPtr<DecryptPromise> Decrypt(MediaRawData* aSample) override;
+
+  void OnDecrypted(uint32_t aId,
+                   DecryptStatus aResult,
+                   const nsTArray<uint8_t>& aDecryptedData) override;
+
+  void RejectPromise(PromiseId aId,
+                     nsresult aExceptionCode,
+                     const nsCString& aReason) override;
+
+  void ResolvePromise(PromiseId aId) override;
+
+  const nsString& KeySystem() const override;
+
+  CDMCaps& Capabilites() override;
+
+  void OnKeyStatusesChange(const nsAString& aSessionId) override;
+
+  void GetSessionIdsForKeyId(const nsTArray<uint8_t>& aKeyId,
+                             nsTArray<nsCString>& aSessionIds) override;
+
+#ifdef DEBUG
+  bool IsOnOwnerThread() override;
+#endif
+
+private:
+  ~ChromiumCDMProxy();
+
+  GMPCrashHelper* mCrashHelper;
+
+  RefPtr<gmp::ChromiumCDMParent> mCDM;
+  RefPtr<AbstractThread> mGMPThread;
+};
+
+} // namespace mozilla
+
+#endif // GMPCDMProxy_h_
--- a/dom/media/gmp/moz.build
+++ b/dom/media/gmp/moz.build
@@ -8,16 +8,17 @@ XPIDL_MODULE = 'content_geckomediaplugin
 
 XPIDL_SOURCES += [
     'mozIGeckoMediaPluginChromeService.idl',
     'mozIGeckoMediaPluginService.idl',
 ]
 
 EXPORTS += [
     'ChromiumCDMParent.h',
+    'ChromiumCDMProxy.h',
     'DecryptJob.h',
     'gmp-api/gmp-decryption.h',
     'gmp-api/gmp-entrypoints.h',
     'gmp-api/gmp-errors.h',
     'gmp-api/gmp-platform.h',
     'gmp-api/gmp-storage.h',
     'gmp-api/gmp-video-codec.h',
     'gmp-api/gmp-video-decode.h',
@@ -67,16 +68,17 @@ EXPORTS += [
     'GMPVideoPlaneImpl.h',
     'widevine-adapter/content_decryption_module.h',
 ]
 
 UNIFIED_SOURCES += [
     'ChromiumCDMAdapter.cpp',
     'ChromiumCDMChild.cpp',
     'ChromiumCDMParent.cpp',
+    'ChromiumCDMProxy.cpp',
     'DecryptJob.cpp',
     'GMPCDMCallbackProxy.cpp',
     'GMPCDMProxy.cpp',
     'GMPChild.cpp',
     'GMPContentChild.cpp',
     'GMPContentParent.cpp',
     'GMPCrashHelper.cpp',
     'GMPCrashHelperHolder.cpp',