Bug 1304250 - Implement MediaKeySession.onmessage. r?smaug
MozReview-Commit-ID: FDpvsoFwy6C
--- a/dom/media/eme/MediaKeySession.cpp
+++ b/dom/media/eme/MediaKeySession.cpp
@@ -495,10 +495,27 @@ void
MediaKeySession::SetOnkeystatuseschange(EventHandlerNonNull* handler)
{
EventListenerManager *elm = GetOrCreateListenerManager();
if (elm) {
elm->SetEventHandler(nsGkAtoms::onkeystatuseschange, EmptyString(), handler);
}
}
+EventHandlerNonNull*
+MediaKeySession::GetOnmessage()
+{
+ EventListenerManager *elm = GetExistingListenerManager();
+ return elm ? elm->GetEventHandler(nsGkAtoms::onmessage, EmptyString())
+ : nullptr;
+}
+
+void
+MediaKeySession::SetOnmessage(EventHandlerNonNull* handler)
+{
+ EventListenerManager *elm = GetOrCreateListenerManager();
+ if (elm) {
+ elm->SetEventHandler(nsGkAtoms::onmessage, EmptyString(), handler);
+ }
+}
+
} // namespace dom
} // namespace mozilla
--- a/dom/media/eme/MediaKeySession.h
+++ b/dom/media/eme/MediaKeySession.h
@@ -92,16 +92,19 @@ public:
bool IsClosed() const;
void SetExpiration(double aExpiry);
mozilla::dom::EventHandlerNonNull* GetOnkeystatuseschange();
void SetOnkeystatuseschange(mozilla::dom::EventHandlerNonNull* listener);
+ mozilla::dom::EventHandlerNonNull* GetOnmessage();
+ void SetOnmessage(mozilla::dom::EventHandlerNonNull* listener);
+
// Process-unique identifier.
uint32_t Token() const;
private:
~MediaKeySession();
void UpdateKeyStatusMap();
--- a/dom/media/test/test_eme_playback.html
+++ b/dom/media/test/test_eme_playback.html
@@ -88,16 +88,25 @@ function startTest(test, token)
session.numOnkeystatuseschangeEvents = 0;
session.addEventListener("keystatuseschange", function() {
session.numKeystatuseschangeEvents += 1;
});
session.onkeystatuseschange = function() {
session.numOnkeystatuseschangeEvents += 1;
};
+
+ session.numMessageEvents = 0;
+ session.numOnMessageEvents = 0;
+ session.addEventListener("message", function() {
+ session.numMessageEvents += 1;
+ });
+ session.onmessage = function() {
+ session.numOnMessageEvents += 1;
+ };
}
}
);
document.body.appendChild(v);
var gotEncrypted = 0;
@@ -137,16 +146,20 @@ function startTest(test, token)
+ "] should have received at least one keychange event");
for (var kid in session.keyIdsReceived) {
Log(token, "session[" + session.sessionId + "] key " + kid + " = " + (session.keyIdsReceived[kid] ? "true" : "false"));
if (session.keyIdsReceived[kid]) { keyIdsReceived[kid] = true; }
}
ok(session.numKeystatuseschangeEvents > 0, TimeStamp(token) + " should get key status changes");
is(session.numKeystatuseschangeEvents, session.numOnkeystatuseschangeEvents,
TimeStamp(token) + " should get as many keystatuseschange as onkeystatuseschange");
+
+ ok(session.numMessageEvents > 0, TimeStamp(token) + " should get message events");
+ is(session.numMessageEvents, session.numOnMessageEvents,
+ TimeStamp(token) + " should get as many message as onmessage events");
}
for (var kid in keyIdsReceived) {
ok(keyIdsReceived[kid], TimeStamp(token) + " key with id " + kid + " was usable as expected");
}
v.closeSessions().then(() => manager.finished(token));
});
--- a/dom/webidl/MediaKeySession.webidl
+++ b/dom/webidl/MediaKeySession.webidl
@@ -22,16 +22,18 @@ interface MediaKeySession : EventTarget
readonly attribute unrestricted double expiration;
readonly attribute Promise<void> closed;
readonly attribute MediaKeyStatusMap keyStatuses;
attribute EventHandler onkeystatuseschange;
+ attribute EventHandler onmessage;
+
[NewObject]
Promise<void> generateRequest(DOMString initDataType, BufferSource initData);
[NewObject]
Promise<boolean> load(DOMString sessionId);
// session operations
[NewObject]
deleted file mode 100644
--- a/testing/web-platform/meta/encrypted-media/idlharness.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[idlharness.html]
- type: testharness
- [MediaKeySession interface: attribute onmessage]
- expected: FAIL
-