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 #include "mozilla/EMEUtils.h"
8 
9 #include "jsfriendapi.h"
10 #include "mozilla/dom/UnionTypes.h"
11 
12 namespace mozilla {
13 
GetEMELog()14 LogModule* GetEMELog() {
15   static LazyLogModule log("EME");
16   return log;
17 }
18 
GetEMEVerboseLog()19 LogModule* GetEMEVerboseLog() {
20   static LazyLogModule log("EMEV");
21   return log;
22 }
23 
GetArrayBufferViewOrArrayBufferData(const dom::ArrayBufferViewOrArrayBuffer & aBufferOrView)24 ArrayData GetArrayBufferViewOrArrayBufferData(
25     const dom::ArrayBufferViewOrArrayBuffer& aBufferOrView) {
26   MOZ_ASSERT(aBufferOrView.IsArrayBuffer() ||
27              aBufferOrView.IsArrayBufferView());
28   JS::AutoCheckCannotGC nogc;
29   if (aBufferOrView.IsArrayBuffer()) {
30     const dom::ArrayBuffer& buffer = aBufferOrView.GetAsArrayBuffer();
31     buffer.ComputeState();
32     return ArrayData(buffer.Data(), buffer.Length());
33   } else if (aBufferOrView.IsArrayBufferView()) {
34     const dom::ArrayBufferView& bufferview =
35         aBufferOrView.GetAsArrayBufferView();
36     bufferview.ComputeState();
37     return ArrayData(bufferview.Data(), bufferview.Length());
38   }
39   return ArrayData(nullptr, 0);
40 }
41 
CopyArrayBufferViewOrArrayBufferData(const dom::ArrayBufferViewOrArrayBuffer & aBufferOrView,nsTArray<uint8_t> & aOutData)42 void CopyArrayBufferViewOrArrayBufferData(
43     const dom::ArrayBufferViewOrArrayBuffer& aBufferOrView,
44     nsTArray<uint8_t>& aOutData) {
45   JS::AutoCheckCannotGC nogc;
46   ArrayData data = GetArrayBufferViewOrArrayBufferData(aBufferOrView);
47   aOutData.Clear();
48   if (!data.IsValid()) {
49     return;
50   }
51   aOutData.AppendElements(data.mData, data.mLength);
52 }
53 
IsClearkeyKeySystem(const nsAString & aKeySystem)54 bool IsClearkeyKeySystem(const nsAString& aKeySystem) {
55   return aKeySystem.EqualsLiteral(EME_KEY_SYSTEM_CLEARKEY);
56 }
57 
IsWidevineKeySystem(const nsAString & aKeySystem)58 bool IsWidevineKeySystem(const nsAString& aKeySystem) {
59   return aKeySystem.EqualsLiteral(EME_KEY_SYSTEM_WIDEVINE);
60 }
61 
KeySystemToGMPName(const nsAString & aKeySystem)62 nsString KeySystemToGMPName(const nsAString& aKeySystem) {
63   if (IsClearkeyKeySystem(aKeySystem)) {
64     return u"gmp-clearkey"_ns;
65   }
66   if (IsWidevineKeySystem(aKeySystem)) {
67     return u"gmp-widevinecdm"_ns;
68   }
69   MOZ_ASSERT(false, "We should only call this for known GMPs");
70   return u""_ns;
71 }
72 
73 }  // namespace mozilla
74