From 3da9d3b2166d10181cf05d3b1abffa92e03096c8 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Wed, 29 Oct 2014 12:31:43 -0400 Subject: [PATCH] Backed out changesets 62a8be146b4b, d9a9008a1e93, e6761281d389, and 913e16c2877b (bug 1071482) for causing various intermittent failures. --HG-- rename : dom/media/test/test_eme_playback.html => dom/media/test/test_encryptedMediaExtensions.html --- dom/html/HTMLMediaElement.cpp | 19 +- dom/html/HTMLMediaElement.h | 1 - dom/media/mediasource/SourceBufferDecoder.h | 12 - dom/media/mediasource/TrackBuffer.cpp | 2 +- dom/media/test/eme.js | 178 ----------- dom/media/test/mochitest.ini | 7 +- dom/media/test/test_eme_canvas_blocked.html | 67 ----- dom/media/test/test_eme_playback.html | 128 -------- .../test/test_eme_stream_capture_blocked.html | 102 ------- .../test/test_encryptedMediaExtensions.html | 278 ++++++++++++++++++ dom/media/webaudio/AudioContext.cpp | 6 - layout/base/nsLayoutUtils.cpp | 6 - 12 files changed, 281 insertions(+), 525 deletions(-) delete mode 100644 dom/media/test/eme.js delete mode 100644 dom/media/test/test_eme_canvas_blocked.html delete mode 100644 dom/media/test/test_eme_playback.html delete mode 100644 dom/media/test/test_eme_stream_capture_blocked.html create mode 100644 dom/media/test/test_encryptedMediaExtensions.html diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index 366cbcdc04c..8c0bf1b1f6e 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -1787,11 +1787,7 @@ HTMLMediaElement::CaptureStreamInternal(bool aFinishWhenEnded) if (!window) { return nullptr; } -#ifdef MOZ_EME - if (ContainsRestrictedContent()) { - return nullptr; - } -#endif + OutputMediaStream* out = mOutputStreams.AppendElement(); #ifdef DEBUG // Estimate hints based on the type of the media element @@ -3996,21 +3992,10 @@ HTMLMediaElement::GetMediaKeys() const return mMediaKeys; } -bool -HTMLMediaElement::ContainsRestrictedContent() -{ - return GetMediaKeys() != nullptr; -} - already_AddRefed HTMLMediaElement::SetMediaKeys(mozilla::dom::MediaKeys* aMediaKeys, ErrorResult& aRv) { - if (MozAudioCaptured()) { - aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR); - return nullptr; - } - nsCOMPtr global = do_QueryInterface(OwnerDoc()->GetInnerWindow()); if (!global) { @@ -4045,8 +4030,6 @@ HTMLMediaElement::SetMediaKeys(mozilla::dom::MediaKeys* aMediaKeys, if (mDecoder) { mDecoder->SetCDMProxy(mMediaKeys->GetCDMProxy()); } - // Update the same-origin status. - NotifyDecoderPrincipalChanged(); } promise->MaybeResolve(JS::UndefinedHandleValue); return promise.forget(); diff --git a/dom/html/HTMLMediaElement.h b/dom/html/HTMLMediaElement.h index 478f830a7ef..82996463149 100644 --- a/dom/html/HTMLMediaElement.h +++ b/dom/html/HTMLMediaElement.h @@ -550,7 +550,6 @@ public: // in the URL bar of the browser window. already_AddRefed GetTopLevelPrincipal(); - bool ContainsRestrictedContent(); #endif // MOZ_EME bool MozAutoplayEnabled() const diff --git a/dom/media/mediasource/SourceBufferDecoder.h b/dom/media/mediasource/SourceBufferDecoder.h index fb272162be9..b064c2aadde 100644 --- a/dom/media/mediasource/SourceBufferDecoder.h +++ b/dom/media/mediasource/SourceBufferDecoder.h @@ -84,18 +84,6 @@ public: mTaskQueue = aTaskQueue; } - void BreakCycles() - { - if (mReader) { - mReader->BreakCycles(); - mReader = nullptr; - } - mTaskQueue = nullptr; -#ifdef MOZ_EME - mCDMProxy = nullptr; -#endif - } - #ifdef MOZ_EME virtual nsresult SetCDMProxy(CDMProxy* aProxy) { diff --git a/dom/media/mediasource/TrackBuffer.cpp b/dom/media/mediasource/TrackBuffer.cpp index f8e2a40fa42..98f8b4c84a6 100644 --- a/dom/media/mediasource/TrackBuffer.cpp +++ b/dom/media/mediasource/TrackBuffer.cpp @@ -391,7 +391,7 @@ TrackBuffer::BreakCycles() MOZ_ASSERT(NS_IsMainThread()); for (uint32_t i = 0; i < mDecoders.Length(); ++i) { - mDecoders[i]->BreakCycles(); + mDecoders[i]->GetReader()->BreakCycles(); } mDecoders.Clear(); diff --git a/dom/media/test/eme.js b/dom/media/test/eme.js deleted file mode 100644 index 8f8e7822e41..00000000000 --- a/dom/media/test/eme.js +++ /dev/null @@ -1,178 +0,0 @@ -const KEYSYSTEM_TYPE = "org.w3.clearkey"; - -function bail(message) -{ - return function(err) { - ok(false, message); - if (err) { - info(err); - } - SimpleTest.finish(); - } -} - -function ArrayBufferToString(arr) -{ - var str = ''; - var view = new Uint8Array(arr); - for (var i = 0; i < view.length; i++) { - str += String.fromCharCode(view[i]); - } - return str; -} - -function StringToArrayBuffer(str) -{ - var arr = new ArrayBuffer(str.length); - var view = new Uint8Array(arr); - for (var i = 0; i < str.length; i++) { - view[i] = str.charCodeAt(i); - } - return arr; -} - -function Base64ToHex(str) -{ - var bin = window.atob(str.replace(/-/g, "+").replace(/_/g, "/")); - var res = ""; - for (var i = 0; i < bin.length; i++) { - res += ("0" + bin.charCodeAt(i).toString(16)).substr(-2); - } - return res; -} - -function HexToBase64(hex) -{ - var bin = ""; - for (var i = 0; i < hex.length; i += 2) { - bin += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); - } - return window.btoa(bin).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); -} - -function UpdateSessionFunc(test) { - return function(ev) { - var msgStr = ArrayBufferToString(ev.message); - var msg = JSON.parse(msgStr); - - info("got message from CDM: " + msgStr); - is(msg.type, test.sessionType, "Key session type should match"); - ok(msg.kids, "message event should contain key ID array"); - - var outKeys = []; - - for (var i = 0; i < msg.kids.length; i++) { - var id64 = msg.kids[i]; - var idHex = Base64ToHex(msg.kids[i]).toLowerCase(); - var key = test.keys[idHex]; - - if (key) { - info("found key " + key + " for key id " + idHex); - outKeys.push({ - "kty":"oct", - "alg":"A128KW", - "kid":id64, - "k":HexToBase64(key) - }); - } else { - bail("Couldn't find key for key id " + idHex); - } - } - - var update = JSON.stringify({ - "keys" : outKeys, - "type" : msg.type - }); - info("sending update message to CDM: " + update); - - ev.target.update(StringToArrayBuffer(update)).then(function() { - info("MediaKeySession update ok!"); - }, bail("MediaKeySession update failed")); - } -} - -function PlayFragmented(test, elem) -{ - return new Promise(function(resolve, reject) { - var ms = new MediaSource(); - elem.src = URL.createObjectURL(ms); - - var sb; - var curFragment = 0; - - function addNextFragment() { - if (curFragment >= test.fragments.length) { - ms.endOfStream(); - resolve(); - return; - } - - var fragmentFile = test.fragments[curFragment++]; - - var req = new XMLHttpRequest(); - req.open("GET", fragmentFile); - req.responseType = "arraybuffer"; - - req.addEventListener("load", function() { - sb.appendBuffer(new Uint8Array(req.response)); - }); - - info("fetching resource " + fragmentFile); - req.send(null); - } - - ms.addEventListener("sourceopen", function () { - sb = ms.addSourceBuffer(test.type); - sb.addEventListener("updateend", addNextFragment); - - addNextFragment(); - }) - }); -} - -// Returns a promise that is resovled when the media element is ready to have -// its play() function called; when it's loaded MSE fragments, or once the load -// has started for non-MSE video. -function LoadTest(test, elem) -{ - if (test.fragments) { - return PlayFragmented(test, elem); - } - - // This file isn't fragmented; set the media source normally. - return new Promise(function(resolve, reject) { - elem.src = test.name; - resolve(); - }); -} - -function SetupEME(test, token, params) -{ - var v = document.createElement("video"); - - var onSetKeysFail = (params && params.onSetKeysFail) - ? params.onSetKeysFail - : bail(token + " Failed to set MediaKeys on