summaryrefslogtreecommitdiffstats
path: root/dom/media/gmp/ChromiumCDMAdapter.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dom/media/gmp/ChromiumCDMAdapter.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/dom/media/gmp/ChromiumCDMAdapter.h b/dom/media/gmp/ChromiumCDMAdapter.h
new file mode 100644
index 0000000000..747345fb27
--- /dev/null
+++ b/dom/media/gmp/ChromiumCDMAdapter.h
@@ -0,0 +1,81 @@
+/* -*- 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 ChromiumAdapter_h_
+#define ChromiumAdapter_h_
+
+#include "GMPLoader.h"
+#include "prlink.h"
+#include "GMPUtils.h"
+#include "nsTArray.h"
+#include "content_decryption_module_ext.h"
+#include "nsString.h"
+
+#include <utility>
+
+struct GMPPlatformAPI;
+
+namespace mozilla {
+
+#if defined(XP_WIN)
+typedef nsString HostFileString;
+#else
+typedef nsCString HostFileString;
+#endif
+
+class HostFile {
+ public:
+ explicit HostFile(const nsCString& aPath);
+ HostFile(HostFile&& aOther);
+ ~HostFile();
+
+ const HostFileString& Path() const { return mPath; }
+ cdm::PlatformFile TakePlatformFile();
+
+ private:
+ const HostFileString mPath;
+ cdm::PlatformFile mFile = cdm::kInvalidPlatformFile;
+};
+
+struct HostFileData {
+ HostFileData(HostFile&& aBinary, HostFile&& aSig)
+ : mBinary(std::move(aBinary)), mSig(std::move(aSig)) {}
+
+ HostFileData(HostFileData&& aOther)
+ : mBinary(std::move(aOther.mBinary)), mSig(std::move(aOther.mSig)) {}
+
+ ~HostFileData() = default;
+
+ HostFile mBinary;
+ HostFile mSig;
+};
+
+class ChromiumCDMAdapter : public gmp::GMPAdapter {
+ public:
+ explicit ChromiumCDMAdapter(
+ nsTArray<std::pair<nsCString, nsCString>>&& aHostPathPairs);
+
+ void SetAdaptee(PRLibrary* aLib) override;
+
+ // These are called in place of the corresponding GMP API functions.
+ GMPErr GMPInit(const GMPPlatformAPI* aPlatformAPI) override;
+ GMPErr GMPGetAPI(const char* aAPIName, void* aHostAPI, void** aPluginAPI,
+ const nsACString& aKeySystem) override;
+ void GMPShutdown() override;
+
+ static bool Supports(int32_t aModuleVersion, int32_t aInterfaceVersion,
+ int32_t aHostVersion);
+
+ private:
+ void PopulateHostFiles(
+ nsTArray<std::pair<nsCString, nsCString>>&& aHostFilePaths);
+
+ PRLibrary* mLib = nullptr;
+ nsTArray<HostFileData> mHostFiles;
+};
+
+} // namespace mozilla
+
+#endif // ChromiumAdapter_h_