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
|
/* 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 "WMFCDMProxyCallback.h"
#include "mozilla/WMFCDMProxy.h"
#define RETURN_IF_NULL(proxy) \
if (!proxy) { \
return; \
}
namespace mozilla {
WMFCDMProxyCallback::WMFCDMProxyCallback(WMFCDMProxy* aProxy) : mProxy(aProxy) {
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(mProxy);
}
WMFCDMProxyCallback::~WMFCDMProxyCallback() { MOZ_ASSERT(!mProxy); }
void WMFCDMProxyCallback::OnSessionMessage(const MFCDMKeyMessage& aMessage) {
NS_DispatchToMainThread(NS_NewRunnableFunction(
"WMFCDMProxyCallback::OnSessionMessage",
[self = RefPtr{this}, this, message = aMessage]() {
RETURN_IF_NULL(mProxy);
mProxy->OnSessionMessage(message.sessionId(), message.type(),
std::move(message.message()));
}));
}
void WMFCDMProxyCallback::OnSessionKeyStatusesChange(
const MFCDMKeyStatusChange& aKeyStatuses) {
NS_DispatchToMainThread(NS_NewRunnableFunction(
"WMFCDMProxyCallback::OnSessionKeyStatusesChange",
[self = RefPtr{this}, this, keyStatuses = aKeyStatuses]() {
RETURN_IF_NULL(mProxy);
bool keyStatusesChange = false;
{
auto caps = mProxy->Capabilites().Lock();
for (const auto& keyInfo : keyStatuses.keyInfo()) {
keyStatusesChange |= caps->SetKeyStatus(
keyInfo.keyId(), keyStatuses.sessionId(),
dom::Optional<dom::MediaKeyStatus>(keyInfo.status()));
}
}
if (keyStatusesChange) {
mProxy->OnKeyStatusesChange(keyStatuses.sessionId());
}
}));
}
void WMFCDMProxyCallback::OnSessionKeyExpiration(
const MFCDMKeyExpiration& aExpiration) {
NS_DispatchToMainThread(NS_NewRunnableFunction(
"WMFCDMProxyCallback::OnSessionKeyExpiration",
[self = RefPtr{this}, this, expiration = aExpiration]() {
RETURN_IF_NULL(mProxy);
mProxy->OnExpirationChange(
expiration.sessionId(),
expiration.expiredTimeMilliSecondsSinceEpoch());
}));
}
void WMFCDMProxyCallback::Shutdown() {
MOZ_ASSERT(NS_IsMainThread());
mProxy = nullptr;
}
#undef RETURN_IF_NULL
} // namespace mozilla
|