Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/media/gmp/ChromiumCDMCallbackProxy.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#include "ChromiumCDMCallbackProxy.h"
7
8
#include "ChromiumCDMProxy.h"
9
#include "content_decryption_module.h"
10
11
namespace mozilla {
12
13
template<class Func, class... Args>
14
void ChromiumCDMCallbackProxy::DispatchToMainThread(const char* const aLabel,
15
                                                    Func aFunc,
16
                                                    Args&&... aArgs)
17
0
{
18
0
  mMainThread->Dispatch(
19
0
    // Use Decay to ensure all the types are passed by value not by reference.
20
0
    NewRunnableMethod<typename Decay<Args>::Type...>(
21
0
      aLabel,
22
0
      mProxy,
23
0
      aFunc,
24
0
      std::forward<Args>(aArgs)...),
25
0
    NS_DISPATCH_NORMAL);
26
0
}
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(unsigned int, nsTSubstring<char16_t> const&), unsigned int&, NS_ConvertUTF8toUTF16>(char const*, void (mozilla::ChromiumCDMProxy::*)(unsigned int, nsTSubstring<char16_t> const&), unsigned int&, NS_ConvertUTF8toUTF16&&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(unsigned int, bool), unsigned int&, bool&>(char const*, void (mozilla::ChromiumCDMProxy::*)(unsigned int, bool), unsigned int&, bool&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(unsigned int), unsigned int&>(char const*, void (mozilla::ChromiumCDMProxy::*)(unsigned int), unsigned int&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(unsigned int, nsresult, nsTString<char> const&), unsigned int&, nsresult&, nsTString<char> const&>(char const*, void (mozilla::ChromiumCDMProxy::*)(unsigned int, nsresult, nsTString<char> const&), unsigned int&, nsresult&, nsTString<char> const&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(nsTSubstring<char16_t> const&, mozilla::dom::MediaKeyMessageType, nsTArray<unsigned char> const&), NS_ConvertUTF8toUTF16, mozilla::dom::MediaKeyMessageType, nsTArray<unsigned char> >(char const*, void (mozilla::ChromiumCDMProxy::*)(nsTSubstring<char16_t> const&, mozilla::dom::MediaKeyMessageType, nsTArray<unsigned char> const&), NS_ConvertUTF8toUTF16&&, mozilla::dom::MediaKeyMessageType&&, nsTArray<unsigned char>&&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(unsigned int, mozilla::dom::MediaKeyStatus), unsigned int&, mozilla::dom::MediaKeyStatus>(char const*, void (mozilla::ChromiumCDMProxy::*)(unsigned int, mozilla::dom::MediaKeyStatus), unsigned int&, mozilla::dom::MediaKeyStatus&&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(nsTSubstring<char16_t> const&), NS_ConvertUTF8toUTF16>(char const*, void (mozilla::ChromiumCDMProxy::*)(nsTSubstring<char16_t> const&), NS_ConvertUTF8toUTF16&&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)(nsTSubstring<char16_t> const&, long), NS_ConvertUTF8toUTF16, long>(char const*, void (mozilla::ChromiumCDMProxy::*)(nsTSubstring<char16_t> const&, long), NS_ConvertUTF8toUTF16&&, long&&)
Unexecuted instantiation: void mozilla::ChromiumCDMCallbackProxy::DispatchToMainThread<void (mozilla::ChromiumCDMProxy::*)()>(char const*, void (mozilla::ChromiumCDMProxy::*)())
27
28
void
29
ChromiumCDMCallbackProxy::SetSessionId(uint32_t aPromiseId,
30
                                       const nsCString& aSessionId)
31
0
{
32
0
  DispatchToMainThread("ChromiumCDMProxy::OnSetSessionId",
33
0
                       &ChromiumCDMProxy::OnSetSessionId,
34
0
                       aPromiseId,
35
0
                       NS_ConvertUTF8toUTF16(aSessionId));
36
0
}
37
38
void
39
ChromiumCDMCallbackProxy::ResolveLoadSessionPromise(uint32_t aPromiseId,
40
                                                    bool aSuccessful)
41
0
{
42
0
  DispatchToMainThread("ChromiumCDMProxy::OnResolveLoadSessionPromise",
43
0
                       &ChromiumCDMProxy::OnResolveLoadSessionPromise,
44
0
                       aPromiseId,
45
0
                       aSuccessful);
46
0
}
47
48
void
49
ChromiumCDMCallbackProxy::ResolvePromise(uint32_t aPromiseId)
50
0
{
51
0
  DispatchToMainThread("ChromiumCDMProxy::ResolvePromise",
52
0
                       &ChromiumCDMProxy::ResolvePromise,
53
0
                       aPromiseId);
54
0
}
55
56
void
57
ChromiumCDMCallbackProxy::RejectPromise(uint32_t aPromiseId,
58
                                        nsresult aException,
59
                                        const nsCString& aErrorMessage)
60
0
{
61
0
  DispatchToMainThread("ChromiumCDMProxy::RejectPromise",
62
0
                       &ChromiumCDMProxy::RejectPromise,
63
0
                       aPromiseId,
64
0
                       aException,
65
0
                       aErrorMessage);
66
0
}
67
68
69
static dom::MediaKeyMessageType
70
ToDOMMessageType(uint32_t aMessageType)
71
0
{
72
0
  switch (static_cast<cdm::MessageType>(aMessageType)) {
73
0
    case cdm::kLicenseRequest:
74
0
      return dom::MediaKeyMessageType::License_request;
75
0
    case cdm::kLicenseRenewal:
76
0
      return dom::MediaKeyMessageType::License_renewal;
77
0
    case cdm::kLicenseRelease:
78
0
      return dom::MediaKeyMessageType::License_release;
79
0
    case cdm::kIndividualizationRequest:
80
0
      return dom::MediaKeyMessageType::Individualization_request;
81
0
  }
82
0
  MOZ_ASSERT_UNREACHABLE("Invalid cdm::MessageType enum value.");
83
0
  return dom::MediaKeyMessageType::License_request;
84
0
}
85
86
void
87
ChromiumCDMCallbackProxy::SessionMessage(const nsACString& aSessionId,
88
                                         uint32_t aMessageType,
89
                                         nsTArray<uint8_t>&& aMessage)
90
0
{
91
0
  DispatchToMainThread("ChromiumCDMProxy::OnSessionMessage",
92
0
                       &ChromiumCDMProxy::OnSessionMessage,
93
0
                       NS_ConvertUTF8toUTF16(aSessionId),
94
0
                       ToDOMMessageType(aMessageType),
95
0
                       std::move(aMessage));
96
0
}
97
98
static dom::MediaKeyStatus
99
ToDOMMediaKeyStatus(uint32_t aStatus)
100
0
{
101
0
  switch (static_cast<cdm::KeyStatus>(aStatus)) {
102
0
    case cdm::kUsable:
103
0
      return dom::MediaKeyStatus::Usable;
104
0
    case cdm::kInternalError:
105
0
      return dom::MediaKeyStatus::Internal_error;
106
0
    case cdm::kExpired:
107
0
      return dom::MediaKeyStatus::Expired;
108
0
    case cdm::kOutputRestricted:
109
0
      return dom::MediaKeyStatus::Output_restricted;
110
0
    case cdm::kOutputDownscaled:
111
0
      return dom::MediaKeyStatus::Output_downscaled;
112
0
    case cdm::kStatusPending:
113
0
      return dom::MediaKeyStatus::Status_pending;
114
0
    case cdm::kReleased:
115
0
      return dom::MediaKeyStatus::Released;
116
0
  }
117
0
  MOZ_ASSERT_UNREACHABLE("Invalid cdm::KeyStatus enum value.");
118
0
  return dom::MediaKeyStatus::Internal_error;
119
0
}
120
121
void
122
ChromiumCDMCallbackProxy::ResolvePromiseWithKeyStatus(uint32_t aPromiseId,
123
                                                      uint32_t aKeyStatus)
124
0
{
125
0
  DispatchToMainThread("ChromiumCDMProxy::OnResolvePromiseWithKeyStatus",
126
0
                       &ChromiumCDMProxy::OnResolvePromiseWithKeyStatus,
127
0
                       aPromiseId,
128
0
                       ToDOMMediaKeyStatus(aKeyStatus));
129
0
}
130
131
void
132
ChromiumCDMCallbackProxy::SessionKeysChange(const nsCString& aSessionId,
133
                                            nsTArray<mozilla::gmp::CDMKeyInformation> && aKeysInfo)
134
0
{
135
0
  bool keyStatusesChange = false;
136
0
  {
137
0
    auto caps = mProxy->Capabilites().Lock();
138
0
    for (const auto& keyInfo : aKeysInfo) {
139
0
      keyStatusesChange |=
140
0
        caps->SetKeyStatus(keyInfo.mKeyId(),
141
0
                           NS_ConvertUTF8toUTF16(aSessionId),
142
0
                           dom::Optional<dom::MediaKeyStatus>(
143
0
                             ToDOMMediaKeyStatus(keyInfo.mStatus())));
144
0
    }
145
0
  }
146
0
  if (keyStatusesChange) {
147
0
    DispatchToMainThread("ChromiumCDMProxy::OnKeyStatusesChange",
148
0
                         &ChromiumCDMProxy::OnKeyStatusesChange,
149
0
                         NS_ConvertUTF8toUTF16(aSessionId));
150
0
  }
151
0
}
152
153
void
154
ChromiumCDMCallbackProxy::ExpirationChange(const nsCString& aSessionId,
155
                                           double aSecondsSinceEpoch)
156
0
{
157
0
  DispatchToMainThread("ChromiumCDMProxy::OnExpirationChange",
158
0
                       &ChromiumCDMProxy::OnExpirationChange,
159
0
                       NS_ConvertUTF8toUTF16(aSessionId),
160
0
                       UnixTime(aSecondsSinceEpoch * 1000));
161
0
162
0
}
163
164
void
165
ChromiumCDMCallbackProxy::SessionClosed(const nsCString& aSessionId)
166
0
{
167
0
  DispatchToMainThread("ChromiumCDMProxy::OnSessionClosed",
168
0
                       &ChromiumCDMProxy::OnSessionClosed ,
169
0
                       NS_ConvertUTF8toUTF16(aSessionId));
170
0
}
171
172
void
173
ChromiumCDMCallbackProxy::Terminated()
174
0
{
175
0
  DispatchToMainThread("ChromiumCDMProxy::Terminated",
176
0
                       &ChromiumCDMProxy::Terminated);
177
0
}
178
179
void
180
ChromiumCDMCallbackProxy::Shutdown()
181
0
{
182
0
  DispatchToMainThread("ChromiumCDMProxy::Shutdown",
183
0
                       &ChromiumCDMProxy::Shutdown);
184
0
}
185
186
} //namespace mozilla