diff --git a/application/basilisk/app/moz.build b/application/basilisk/app/moz.build index dbf5d1ba25..72f34d5758 100644 --- a/application/basilisk/app/moz.build +++ b/application/basilisk/app/moz.build @@ -45,6 +45,9 @@ if CONFIG['OS_ARCH'] == 'WINNT': RCINCLUDE = 'splash.rc' DEFINES['MOZ_PHOENIX'] = True +for cdm in CONFIG['MOZ_EME_MODULES']: + DEFINES['MOZ_%s_EME' % cdm.upper()] = True + # Control the default heap size. # This is the heap returned by GetProcessHeap(). # As we use the CRT heap, the default size is too large and wastes VM. diff --git a/application/basilisk/app/profile/basilisk.js b/application/basilisk/app/profile/basilisk.js index ff695bde44..46673e9704 100644 --- a/application/basilisk/app/profile/basilisk.js +++ b/application/basilisk/app/profile/basilisk.js @@ -170,7 +170,7 @@ pref("lightweightThemes.update.enabled", true); pref("lightweightThemes.getMoreURL", "http://@AM_DOMAIN@/personas/"); pref("lightweightThemes.recommendedThemes", "[{\"id\":\"recommended-1\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/a-web-browser-renaissance/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.header.jpg\",\"footerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.footer.jpg\",\"textcolor\":\"#000000\",\"accentcolor\":\"#f2d9b1\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.icon.jpg\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.preview.jpg\",\"author\":\"Sean.Martell\",\"version\":\"0\"},{\"id\":\"recommended-2\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/space-fantasy/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.header.jpg\",\"footerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.footer.jpg\",\"textcolor\":\"#ffffff\",\"accentcolor\":\"#d9d9d9\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.icon.jpg\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.preview.jpg\",\"author\":\"fx5800p\",\"version\":\"1.0\"},{\"id\":\"recommended-3\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/linen-light/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/3.header.png\",\"footerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/3.footer.png\",\"accentcolor\":\"#ada8a8\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/3.icon.png\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/3.preview.png\",\"author\":\"DVemer\",\"version\":\"1.0\"},{\"id\":\"recommended-4\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/pastel-gradient/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.header.png\",\"footerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.footer.png\",\"textcolor\":\"#000000\",\"accentcolor\":\"#000000\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.icon.png\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.preview.png\",\"author\":\"darrinhenein\",\"version\":\"1.0\"},{\"id\":\"recommended-5\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/carbon-light/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/5.header.png\",\"footerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/5.footer.png\",\"textcolor\":\"#3b3b3b\",\"accentcolor\":\"#2e2e2e\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/5.icon.jpg\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/5.preview.jpg\",\"author\":\"Jaxivo\",\"version\":\"1.0\"}]"); -#ifdef MOZ_EME +#if defined(MOZ_WIDEVINE_EME) || defined(MOZ_ADOBE_EME) pref("browser.eme.ui.enabled", true); #else pref("browser.eme.ui.enabled", false); @@ -1178,7 +1178,6 @@ pref("media.gmp.decoder.h264", 2); // decode H.264. pref("media.gmp.trial-create.enabled", true); -#ifdef MOZ_EME // Note: when media.gmp-*.visible is true, provided we're running on a // supported platform/OS version, the corresponding CDM appears in the // plugins list, Firefox will download the GMP/CDM if enabled, and our @@ -1187,13 +1186,16 @@ pref("media.gmp.trial-create.enabled", true); // to enable the CDM if its disabled; it's as if the keysystem is completely // unsupported. +#ifdef MOZ_ADOBE_EME pref("media.gmp-eme-adobe.visible", true); // When Adobe EME is enabled in the build system, we don't actually enable // the plugin by default, so that it doesn't download and install by default. // When Adobe EME is first used, Firefox will prompt the user to enable it, // and then download the CDM. pref("media.gmp-eme-adobe.enabled", false); +#endif +#ifdef MOZ_WIDEVINE_EME pref("media.gmp-widevinecdm.visible", true); pref("media.gmp-widevinecdm.enabled", true); #endif diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index bc63eab512..f3ef20bfc7 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -1871,20 +1871,6 @@ nsresult HTMLMediaElement::LoadResource() // Set the media element's CORS mode only when loading a resource mCORSMode = AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin)); -#ifdef MOZ_EME - bool isBlob = false; - if (mMediaKeys && - Preferences::GetBool("media.eme.mse-only", true) && - // We only want mediaSource URLs, but they are BlobURL, so we have to - // check the schema and abort if they are not MediaStream or real Blob. - (NS_FAILED(mLoadingSrc->SchemeIs(BLOBURI_SCHEME, &isBlob)) || - !isBlob || - IsMediaStreamURI(mLoadingSrc) || - IsBlobURI(mLoadingSrc))) { - return NS_ERROR_DOM_NOT_SUPPORTED_ERR; - } -#endif - HTMLMediaElement* other = LookupMediaElementURITable(mLoadingSrc); if (other && other->mDecoder) { // Clone it. @@ -4014,6 +4000,7 @@ nsresult HTMLMediaElement::FinishDecoderSetup(MediaDecoder* aDecoder, return NS_ERROR_FAILURE; } } +#endif MediaEventSource* waitingForKeyProducer = mDecoder->WaitingForKeyEvent(); // Not every decoder will produce waitingForKey events, only add ones that can @@ -4021,7 +4008,6 @@ nsresult HTMLMediaElement::FinishDecoderSetup(MediaDecoder* aDecoder, mWaitingForKeyListener = waitingForKeyProducer->Connect( AbstractThread::MainThread(), this, &HTMLMediaElement::CannotDecryptWaitingForKey); } -#endif if (mChannelLoader) { mChannelLoader->Done(); @@ -6490,6 +6476,7 @@ HTMLMediaElement::GetTopLevelPrincipal() principal = doc->NodePrincipal(); return principal.forget(); } +#endif //MOZ_EME void HTMLMediaElement::CannotDecryptWaitingForKey() @@ -6508,7 +6495,6 @@ HTMLMediaElement::CannotDecryptWaitingForKey() UpdateReadyStateInternal(); } } -#endif //MOZ_EME NS_IMETHODIMP HTMLMediaElement::WindowAudioCaptureChanged(bool aCapture) { diff --git a/dom/media/AbstractMediaDecoder.h b/dom/media/AbstractMediaDecoder.h index 6babcce171..a0f04ec988 100644 --- a/dom/media/AbstractMediaDecoder.h +++ b/dom/media/AbstractMediaDecoder.h @@ -31,9 +31,7 @@ class MediaResource; class ReentrantMonitor; class VideoFrameContainer; class MediaDecoderOwner; -#ifdef MOZ_EME class CDMProxy; -#endif typedef nsDataHashtable MetadataTags; diff --git a/dom/media/MediaDecoder.cpp b/dom/media/MediaDecoder.cpp index 0cce91ccb7..223c59c3b6 100644 --- a/dom/media/MediaDecoder.cpp +++ b/dom/media/MediaDecoder.cpp @@ -387,9 +387,7 @@ MediaDecoder::MediaDecoder(MediaDecoderOwner* aOwner) , mLogicalPosition(0.0) , mDuration(std::numeric_limits::quiet_NaN()) , mResourceCallback(new ResourceCallback()) -#ifdef MOZ_EME , mCDMProxyPromise(mCDMProxyPromiseHolder.Ensure(__func__)) -#endif , mIgnoreProgressData(false) , mInfiniteStream(false) , mOwner(aOwner) @@ -474,9 +472,7 @@ MediaDecoder::Shutdown() mResourceCallback->Disconnect(); -#ifdef MOZ_EME mCDMProxyPromiseHolder.RejectIfExists(true, __func__); -#endif DiscardOngoingSeekIfExists(); @@ -1541,7 +1537,6 @@ MediaDecoder::CanPlayThrough() return GetStatistics().CanPlayThrough(); } -#ifdef MOZ_EME RefPtr MediaDecoder::RequestCDMProxy() const { @@ -1556,7 +1551,6 @@ MediaDecoder::SetCDMProxy(CDMProxy* aProxy) mCDMProxyPromiseHolder.ResolveIfExists(aProxy, __func__); } -#endif bool MediaDecoder::IsOpusEnabled() diff --git a/dom/media/MediaDecoder.h b/dom/media/MediaDecoder.h index 2985524335..05e88db8bf 100644 --- a/dom/media/MediaDecoder.h +++ b/dom/media/MediaDecoder.h @@ -8,11 +8,7 @@ #define MediaDecoder_h_ #include "mozilla/Atomics.h" - -#ifdef MOZ_EME #include "mozilla/CDMProxy.h" -#endif - #include "mozilla/MozPromise.h" #include "mozilla/ReentrantMonitor.h" #include "mozilla/StateMirroring.h" @@ -436,7 +432,6 @@ private: MediaDecoderOwner* GetOwner() const override; -#ifdef MOZ_EME typedef MozPromise, bool /* aIgnored */, /* IsExclusive = */ true> CDMProxyPromise; // Resolved when a CDMProxy is available and the capabilities are known or @@ -444,7 +439,6 @@ private: RefPtr RequestCDMProxy() const; void SetCDMProxy(CDMProxy* aProxy); -#endif static bool IsOggEnabled(); static bool IsOpusEnabled(); @@ -595,10 +589,8 @@ private: RefPtr mResourceCallback; -#ifdef MOZ_EME MozPromiseHolder mCDMProxyPromiseHolder; RefPtr mCDMProxyPromise; -#endif protected: // The promise resolving/rejection is queued as a "micro-task" which will be diff --git a/dom/media/MediaDecoderReader.h b/dom/media/MediaDecoderReader.h index f53c74689f..8a69978264 100644 --- a/dom/media/MediaDecoderReader.h +++ b/dom/media/MediaDecoderReader.h @@ -24,9 +24,7 @@ namespace mozilla { -#ifdef MOZ_EME class CDMProxy; -#endif class MediaDecoderReader; struct WaitForDataRejectValue @@ -188,9 +186,7 @@ public: // when to call SetIdle(). virtual void SetIdle() {} -#ifdef MOZ_EME virtual void SetCDMProxy(CDMProxy* aProxy) {} -#endif // Tell the reader that the data decoded are not for direct playback, so it // can accept more files, in particular those which have more channels than diff --git a/dom/media/MediaDecoderReaderWrapper.h b/dom/media/MediaDecoderReaderWrapper.h index 1a8d3a68c7..92001ca333 100644 --- a/dom/media/MediaDecoderReaderWrapper.h +++ b/dom/media/MediaDecoderReaderWrapper.h @@ -113,9 +113,7 @@ public: return mReader->CanonicalBuffered(); } -#ifdef MOZ_EME void SetCDMProxy(CDMProxy* aProxy) { mReader->SetCDMProxy(aProxy); } -#endif void SetVideoBlankDecode(bool aIsBlankDecode); diff --git a/dom/media/MediaDecoderStateMachine.cpp b/dom/media/MediaDecoderStateMachine.cpp index 63222c22cc..2ed1956c92 100644 --- a/dom/media/MediaDecoderStateMachine.cpp +++ b/dom/media/MediaDecoderStateMachine.cpp @@ -1238,12 +1238,7 @@ DecodeMetadataState::OnMetadataRead(MetadataHolder* aMetadata) // feeding in the CDM, which we need to decode the first frame (and // thus get the metadata). We could fix this if we could compute the start // time by demuxing without necessaring decoding. - bool waitingForCDM = -#ifdef MOZ_EME - mMaster->Info().IsEncrypted() && !mMaster->mCDMProxy; -#else - false; -#endif + bool waitingForCDM = Info().IsEncrypted() && !mMaster->mCDMProxy; mMaster->mNotifyMetadataBeforeFirstFrame = mMaster->mDuration.Ref().isSome() || waitingForCDM; @@ -1267,9 +1262,7 @@ DormantState::HandlePlayStateChanged(MediaDecoder::PlayState aPlayState) { if (aPlayState == MediaDecoder::PLAY_STATE_PLAYING) { // Exit dormant when the user wants to play. -#ifdef MOZ_EME MOZ_ASSERT(!Info().IsEncrypted() || mMaster->mCDMProxy); -#endif MOZ_ASSERT(mMaster->mSentFirstFrameLoadedEvent); SetState(Move(mPendingSeek), EventVisibility::Suppressed); } @@ -1582,9 +1575,7 @@ ShutdownState::Enter() // dispose of the timer. master->mVideoDecodeSuspendTimer.Reset(); -#ifdef MOZ_EME master->mCDMProxyPromise.DisconnectIfExists(); -#endif if (master->IsPlaying()) { master->StopPlayback(); @@ -2138,12 +2129,10 @@ nsresult MediaDecoderStateMachine::Init(MediaDecoder* aDecoder) mMediaSink = CreateMediaSink(mAudioCaptured); -#ifdef MOZ_EME mCDMProxyPromise.Begin(aDecoder->RequestCDMProxy()->Then( OwnerThread(), __func__, this, &MediaDecoderStateMachine::OnCDMProxyReady, &MediaDecoderStateMachine::OnCDMProxyNotReady)); -#endif nsresult rv = mReader->Init(); NS_ENSURE_SUCCESS(rv, rv); @@ -3119,7 +3108,6 @@ void MediaDecoderStateMachine::OnMediaSinkAudioError(nsresult aResult) DecodeError(MediaResult(NS_ERROR_DOM_MEDIA_MEDIASINK_ERR, __func__)); } -#ifdef MOZ_EME void MediaDecoderStateMachine::OnCDMProxyReady(RefPtr aProxy) { @@ -3136,7 +3124,6 @@ MediaDecoderStateMachine::OnCDMProxyNotReady() MOZ_ASSERT(OnTaskQueue()); mCDMProxyPromise.Complete(); } -#endif void MediaDecoderStateMachine::SetAudioCaptured(bool aCaptured) diff --git a/dom/media/MediaDecoderStateMachine.h b/dom/media/MediaDecoderStateMachine.h index f04f34983b..ff3258ff1f 100644 --- a/dom/media/MediaDecoderStateMachine.h +++ b/dom/media/MediaDecoderStateMachine.h @@ -768,12 +768,10 @@ private: // Playback will not start when audio is offloading. bool mAudioOffloading; -#ifdef MOZ_EME void OnCDMProxyReady(RefPtr aProxy); void OnCDMProxyNotReady(); RefPtr mCDMProxy; MozPromiseRequestHolder mCDMProxyPromise; -#endif private: // The buffered range. Mirrored from the decoder thread. diff --git a/dom/media/MediaFormatReader.cpp b/dom/media/MediaFormatReader.cpp index 396f31e37f..773434710e 100644 --- a/dom/media/MediaFormatReader.cpp +++ b/dom/media/MediaFormatReader.cpp @@ -4,10 +4,7 @@ * 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/. */ -#ifdef MOZ_EME #include "mozilla/CDMProxy.h" -#endif - #include "mozilla/ClearOnShutdown.h" #include "mozilla/dom/HTMLMediaElement.h" #include "mozilla/Preferences.h" @@ -614,6 +611,7 @@ private: nsTArray mInitData; nsString mInitDataType; }; +#endif void MediaFormatReader::SetCDMProxy(CDMProxy* aProxy) @@ -626,7 +624,6 @@ MediaFormatReader::SetCDMProxy(CDMProxy* aProxy) }); OwnerThread()->Dispatch(r.forget()); } -#endif // MOZ_EME bool MediaFormatReader::IsWaitingOnCDMResource() { diff --git a/dom/media/MediaFormatReader.h b/dom/media/MediaFormatReader.h index be0b7cd174..4d05ca201c 100644 --- a/dom/media/MediaFormatReader.h +++ b/dom/media/MediaFormatReader.h @@ -20,9 +20,7 @@ namespace mozilla { -#ifdef MOZ_EME class CDMProxy; -#endif class MediaFormatReader final : public MediaDecoderReader { @@ -93,9 +91,7 @@ public: return mTrackDemuxersMayBlock; } -#ifdef MOZ_EME void SetCDMProxy(CDMProxy* aProxy) override; -#endif // Returns a string describing the state of the decoder data. // Used for debugging purposes. @@ -588,9 +584,7 @@ private: RefPtr mVideoFrameContainer; layers::ImageContainer* GetImageContainer(); -#ifdef MOZ_EME RefPtr mCDMProxy; -#endif RefPtr mCrashHelper; diff --git a/dom/media/fmp4/MP4Decoder.cpp b/dom/media/fmp4/MP4Decoder.cpp index bf937241c3..b293c251b1 100644 --- a/dom/media/fmp4/MP4Decoder.cpp +++ b/dom/media/fmp4/MP4Decoder.cpp @@ -10,9 +10,7 @@ #include "MP4Demuxer.h" #include "mozilla/Preferences.h" #include "nsCharSeparatedTokenizer.h" -#ifdef MOZ_EME #include "mozilla/CDMProxy.h" -#endif #include "mozilla/Logging.h" #include "mozilla/SharedThreadPool.h" #include "nsMimeTypes.h" diff --git a/dom/media/gmp/GMPChild.cpp b/dom/media/gmp/GMPChild.cpp index fa6f2f4c83..14b06cc726 100644 --- a/dom/media/gmp/GMPChild.cpp +++ b/dom/media/gmp/GMPChild.cpp @@ -22,9 +22,7 @@ #include "GMPUtils.h" #include "prio.h" #include "base/task.h" -#ifdef MOZ_EME #include "widevine-adapter/WidevineAdapter.h" -#endif using namespace mozilla::ipc; @@ -256,13 +254,9 @@ GMPChild::AnswerStartPlugin(const nsString& aAdapter) return false; } -#ifdef MOZ_EME bool isWidevine = aAdapter.EqualsLiteral("widevine"); GMPAdapter* adapter = (isWidevine) ? new WidevineAdapter() : nullptr; -#else - GMPAdapter* adapter = nullptr; -#endif if (!mGMPLoader->Load(libPath.get(), libPath.Length(), mNodeId.BeginWriting(), diff --git a/dom/media/gmp/GMPDecryptorParent.cpp b/dom/media/gmp/GMPDecryptorParent.cpp index 4f54021605..1f8b9a7a8e 100644 --- a/dom/media/gmp/GMPDecryptorParent.cpp +++ b/dom/media/gmp/GMPDecryptorParent.cpp @@ -43,13 +43,11 @@ GMPDecryptorParent::~GMPDecryptorParent() bool GMPDecryptorParent::RecvSetDecryptorId(const uint32_t& aId) { -#ifdef MOZ_EME if (!mIsOpen) { NS_WARNING("Trying to use a dead GMP decrypter!"); return false; } mCallback->SetDecryptorId(aId); -#endif return true; } @@ -204,7 +202,6 @@ bool GMPDecryptorParent::RecvSetSessionId(const uint32_t& aCreateSessionId, const nsCString& aSessionId) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvSetSessionId(token=%u, sessionId='%s')", this, aCreateSessionId, aSessionId.get())); @@ -213,7 +210,6 @@ GMPDecryptorParent::RecvSetSessionId(const uint32_t& aCreateSessionId, return false; } mCallback->SetSessionId(aCreateSessionId, aSessionId); -#endif return true; } @@ -221,7 +217,6 @@ bool GMPDecryptorParent::RecvResolveLoadSessionPromise(const uint32_t& aPromiseId, const bool& aSuccess) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvResolveLoadSessionPromise(promiseId=%u)", this, aPromiseId)); @@ -230,14 +225,12 @@ GMPDecryptorParent::RecvResolveLoadSessionPromise(const uint32_t& aPromiseId, return false; } mCallback->ResolveLoadSessionPromise(aPromiseId, aSuccess); -#endif return true; } bool GMPDecryptorParent::RecvResolvePromise(const uint32_t& aPromiseId) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvResolvePromise(promiseId=%u)", this, aPromiseId)); @@ -246,7 +239,6 @@ GMPDecryptorParent::RecvResolvePromise(const uint32_t& aPromiseId) return false; } mCallback->ResolvePromise(aPromiseId); -#endif return true; } @@ -274,7 +266,6 @@ GMPDecryptorParent::RecvRejectPromise(const uint32_t& aPromiseId, const GMPDOMException& aException, const nsCString& aMessage) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvRejectPromise(promiseId=%u, exception=%d, msg='%s')", this, aPromiseId, aException, aMessage.get())); @@ -283,11 +274,10 @@ GMPDecryptorParent::RecvRejectPromise(const uint32_t& aPromiseId, return false; } mCallback->RejectPromise(aPromiseId, GMPExToNsresult(aException), aMessage); -#endif return true; } -#ifdef MOZ_EME + static dom::MediaKeyMessageType ToMediaKeyMessageType(GMPSessionMessageType aMessageType) { switch (aMessageType) { @@ -298,14 +288,12 @@ ToMediaKeyMessageType(GMPSessionMessageType aMessageType) { default: return dom::MediaKeyMessageType::License_request; }; }; -#endif bool GMPDecryptorParent::RecvSessionMessage(const nsCString& aSessionId, const GMPSessionMessageType& aMessageType, nsTArray&& aMessage) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvSessionMessage(sessionId='%s', type=%d, msg='%s')", this, aSessionId.get(), aMessageType, ToBase64(aMessage).get())); @@ -314,7 +302,6 @@ GMPDecryptorParent::RecvSessionMessage(const nsCString& aSessionId, return false; } mCallback->SessionMessage(aSessionId, ToMediaKeyMessageType(aMessageType), aMessage); -#endif return true; } @@ -322,7 +309,6 @@ bool GMPDecryptorParent::RecvExpirationChange(const nsCString& aSessionId, const double& aExpiryTime) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvExpirationChange(sessionId='%s', expiry=%lf)", this, aSessionId.get(), aExpiryTime)); @@ -331,14 +317,12 @@ GMPDecryptorParent::RecvExpirationChange(const nsCString& aSessionId, return false; } mCallback->ExpirationChange(aSessionId, aExpiryTime); -#endif return true; } bool GMPDecryptorParent::RecvSessionClosed(const nsCString& aSessionId) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvSessionClosed(sessionId='%s')", this, aSessionId.get())); @@ -347,7 +331,6 @@ GMPDecryptorParent::RecvSessionClosed(const nsCString& aSessionId) return false; } mCallback->SessionClosed(aSessionId); -#endif return true; } @@ -357,7 +340,6 @@ GMPDecryptorParent::RecvSessionError(const nsCString& aSessionId, const uint32_t& aSystemCode, const nsCString& aMessage) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvSessionError(sessionId='%s', exception=%d, sysCode=%d, msg='%s')", this, aSessionId.get(), aException, aSystemCode, aMessage.get())); @@ -370,11 +352,9 @@ GMPDecryptorParent::RecvSessionError(const nsCString& aSessionId, GMPExToNsresult(aException), aSystemCode, aMessage); -#endif return true; } -#ifdef MOZ_EME static dom::MediaKeyStatus ToMediaKeyStatus(GMPMediaKeyStatus aStatus) { switch (aStatus) { @@ -388,13 +368,11 @@ ToMediaKeyStatus(GMPMediaKeyStatus aStatus) { default: return dom::MediaKeyStatus::Internal_error; } } -#endif bool GMPDecryptorParent::RecvBatchedKeyStatusChanged(const nsCString& aSessionId, InfallibleTArray&& aKeyInfos) { -#ifdef MOZ_EME LOGD(("GMPDecryptorParent[%p]::RecvBatchedKeyStatusChanged(sessionId='%s', KeyInfos len='%d')", this, aSessionId.get(), aKeyInfos.Length())); @@ -414,11 +392,9 @@ GMPDecryptorParent::RecvBatchedKeyStatusChanged(const nsCString& aSessionId, } mCallback->BatchedKeyStatusChanged(aSessionId, cdmKeyInfos); } -#endif return true; } -#ifdef MOZ_EME DecryptStatus ToDecryptStatus(GMPErr aError) { @@ -429,14 +405,12 @@ ToDecryptStatus(GMPErr aError) default: return GenericErr; } } -#endif bool GMPDecryptorParent::RecvDecrypted(const uint32_t& aId, const GMPErr& aErr, InfallibleTArray&& aBuffer) { -#ifdef MOZ_EME LOGV(("GMPDecryptorParent[%p]::RecvDecrypted(id=%d, err=%d)", this, aId, aErr)); @@ -445,7 +419,6 @@ GMPDecryptorParent::RecvDecrypted(const uint32_t& aId, return false; } mCallback->Decrypted(aId, ToDecryptStatus(aErr), aBuffer); -#endif return true; } diff --git a/dom/media/gmp/GMPDecryptorProxy.h b/dom/media/gmp/GMPDecryptorProxy.h index ed16755f89..0ef31fd92d 100644 --- a/dom/media/gmp/GMPDecryptorProxy.h +++ b/dom/media/gmp/GMPDecryptorProxy.h @@ -6,9 +6,7 @@ #ifndef GMPDecryptorProxy_h_ #define GMPDecryptorProxy_h_ -#ifdef MOZ_EME #include "mozilla/DecryptorProxyCallback.h" -#endif #include "GMPCallbackBase.h" #include "gmp-decryption.h" #include "nsString.h" @@ -17,13 +15,8 @@ namespace mozilla { class CryptoSample; } // namespace mozilla -#ifdef MOZ_EME class GMPDecryptorProxyCallback : public DecryptorProxyCallback, public GMPCallbackBase { -#else -class GMPDecryptorProxyCallback : public GMPCallbackBase { -#endif - public: virtual ~GMPDecryptorProxyCallback() {} }; diff --git a/dom/media/gmp/GMPParent.cpp b/dom/media/gmp/GMPParent.cpp index 12e7499b59..418f147361 100644 --- a/dom/media/gmp/GMPParent.cpp +++ b/dom/media/gmp/GMPParent.cpp @@ -30,10 +30,8 @@ using mozilla::ipc::GeckoChildProcessHost; #include "WMFDecoderModule.h" #endif -#ifdef MOZ_EME #include "mozilla/dom/WidevineCDMManifestBinding.h" #include "widevine-adapter/WidevineAdapter.h" -#endif namespace mozilla { @@ -656,7 +654,6 @@ GMPParent::ReadGMPMetaData() return ReadGMPInfoFile(infoFile); } -#ifdef MOZ_EME // Maybe this is the Widevine adapted plugin? nsCOMPtr manifestFile; rv = mDirectory->Clone(getter_AddRefs(manifestFile)); @@ -665,9 +662,6 @@ GMPParent::ReadGMPMetaData() } manifestFile->AppendRelativePath(NS_LITERAL_STRING("manifest.json")); return ReadChromiumManifestFile(manifestFile); -#else - return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__); -#endif } RefPtr @@ -770,7 +764,6 @@ GMPParent::ReadChromiumManifestFile(nsIFile* aFile) RefPtr GMPParent::ParseChromiumManifest(nsString aJSON) { -#ifdef MOZ_EME LOGD("%s: for '%s'", __FUNCTION__, NS_LossyConvertUTF16toASCII(aJSON).get()); MOZ_ASSERT(NS_IsMainThread()); @@ -808,10 +801,6 @@ GMPParent::ParseChromiumManifest(nsString aJSON) #endif return GenericPromise::CreateAndResolve(true, __func__); -#else // !MOZ_EME - MOZ_ASSERT_UNREACHABLE("don't call me if EME isn't enabled"); - return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__); -#endif // !MOZ_EME } bool diff --git a/dom/media/gmp/moz.build b/dom/media/gmp/moz.build index 79de6e1d96..3b67fb5c91 100644 --- a/dom/media/gmp/moz.build +++ b/dom/media/gmp/moz.build @@ -35,6 +35,8 @@ EXPORTS += [ 'GMPAudioDecoderProxy.h', 'GMPAudioHost.h', 'GMPCallbackBase.h', + 'GMPCDMCallbackProxy.h', + 'GMPCDMProxy.h', 'GMPChild.h', 'GMPContentChild.h', 'GMPContentParent.h', @@ -71,12 +73,6 @@ EXPORTS += [ 'GMPVideoPlaneImpl.h', ] -if CONFIG['MOZ_EME']: - EXPORTS += [ - 'GMPCDMCallbackProxy.h', - 'GMPCDMProxy.h', - ] - # We link GMPLoader into xul on B2G/Fennec as its code does not need to be # covered by a DRM vendor's voucher. if CONFIG['OS_TARGET'] == 'Android': @@ -91,6 +87,8 @@ UNIFIED_SOURCES += [ 'GMPAudioDecoderChild.cpp', 'GMPAudioDecoderParent.cpp', 'GMPAudioHost.cpp', + 'GMPCDMCallbackProxy.cpp', + 'GMPCDMProxy.cpp', 'GMPChild.cpp', 'GMPContentChild.cpp', 'GMPContentParent.cpp', @@ -122,16 +120,10 @@ UNIFIED_SOURCES += [ 'GMPVideoPlaneImpl.cpp', ] -if CONFIG['MOZ_EME']: - UNIFIED_SOURCES += [ - 'GMPCDMCallbackProxy.cpp', - 'GMPCDMProxy.cpp', - ] - -DIRS += ['rlz'] - -if CONFIG['MOZ_EME']: - DIRS += ['widevine-adapter'] +DIRS += [ + 'rlz', + 'widevine-adapter', +] IPDL_SOURCES += [ 'GMPTypes.ipdlh', diff --git a/dom/media/gtest/MockMediaDecoderOwner.h b/dom/media/gtest/MockMediaDecoderOwner.h index 1009ca30a1..324f181416 100644 --- a/dom/media/gtest/MockMediaDecoderOwner.h +++ b/dom/media/gtest/MockMediaDecoderOwner.h @@ -34,10 +34,8 @@ public: void DownloadProgressed() override {} void UpdateReadyState() override {} void FirstFrameLoaded() override {} -#ifdef MOZ_EME void DispatchEncrypted(const nsTArray& aInitData, const nsAString& aInitDataType) override {} -#endif bool IsActive() const override { return true; } bool IsHidden() const override { return false; } void DownloadSuspended() override {} diff --git a/dom/media/gtest/moz.build b/dom/media/gtest/moz.build index ae059962c8..a7ea738073 100644 --- a/dom/media/gtest/moz.build +++ b/dom/media/gtest/moz.build @@ -28,11 +28,6 @@ UNIFIED_SOURCES += [ 'TestWebMBuffered.cpp', ] -if CONFIG['MOZ_EME']: - UNIFIED_SOURCES += [ - 'TestEME.cpp', - ] - if CONFIG['MOZ_WEBM_ENCODER']: UNIFIED_SOURCES += [ 'TestVideoTrackEncoder.cpp', diff --git a/dom/media/mediasource/TrackBuffersManager.cpp b/dom/media/mediasource/TrackBuffersManager.cpp index 9a2d00ad8d..21fb158b58 100644 --- a/dom/media/mediasource/TrackBuffersManager.cpp +++ b/dom/media/mediasource/TrackBuffersManager.cpp @@ -84,7 +84,7 @@ private: nsTArray mInitData; nsString mInitDataType; }; -#endif // MOZ_EME +#endif TrackBuffersManager::TrackBuffersManager(MediaSourceDecoder* aParentDecoder, const nsACString& aType) diff --git a/dom/media/moz.build b/dom/media/moz.build index 41267a6ef4..df8cb619dc 100644 --- a/dom/media/moz.build +++ b/dom/media/moz.build @@ -20,6 +20,7 @@ with Files('GetUserMedia*'): BUG_COMPONENT = component_av DIRS += [ + 'eme', 'encoder', 'flac', 'gmp', @@ -48,9 +49,6 @@ if CONFIG['MOZ_FMP4']: if CONFIG['MOZ_WEBRTC']: DIRS += ['bridge'] -if CONFIG['MOZ_EME']: - DIRS += ['eme'] - TEST_DIRS += [ 'gtest', ] diff --git a/dom/media/platforms/PDMFactory.cpp b/dom/media/platforms/PDMFactory.cpp index cf6f1dd45a..2680964f70 100644 --- a/dom/media/platforms/PDMFactory.cpp +++ b/dom/media/platforms/PDMFactory.cpp @@ -24,6 +24,7 @@ #endif #include "GMPDecoderModule.h" +#include "mozilla/CDMProxy.h" #include "mozilla/ClearOnShutdown.h" #include "mozilla/SharedThreadPool.h" #include "mozilla/StaticPtr.h" @@ -36,11 +37,7 @@ #include "H264Converter.h" #include "AgnosticDecoderModule.h" - -#ifdef MOZ_EME -#include "mozilla/CDMProxy.h" #include "EMEDecoderModule.h" -#endif #include "DecoderDoctorDiagnostics.h" @@ -466,13 +463,11 @@ PDMFactory::GetDecoder(const TrackInfo& aTrackInfo, return pdm.forget(); } -#ifdef MOZ_EME void PDMFactory::SetCDMProxy(CDMProxy* aProxy) { RefPtr m = new PDMFactory(); mEMEPDM = new EMEDecoderModule(aProxy, m); } -#endif } // namespace mozilla diff --git a/dom/media/platforms/PDMFactory.h b/dom/media/platforms/PDMFactory.h index 2b43fa1ab8..94be7e9283 100644 --- a/dom/media/platforms/PDMFactory.h +++ b/dom/media/platforms/PDMFactory.h @@ -11,9 +11,7 @@ #include "mozilla/Function.h" #include "mozilla/StaticMutex.h" -#ifdef MOZ_EME class CDMProxy; -#endif namespace mozilla { @@ -40,14 +38,12 @@ public: bool Supports(const TrackInfo& aTrackInfo, DecoderDoctorDiagnostics* aDiagnostics) const; -#ifdef MOZ_EME // Creates a PlatformDecoderModule that uses a CDMProxy to decrypt or // decrypt-and-decode EME encrypted content. If the CDM only decrypts and // does not decode, we create a PDM and use that to create MediaDataDecoders // that we use on on aTaskQueue to decode the decrypted stream. // This is called on the decode task queue. void SetCDMProxy(CDMProxy* aProxy); -#endif static constexpr int kYUV400 = 0; static constexpr int kYUV420 = 1; diff --git a/dom/media/platforms/moz.build b/dom/media/platforms/moz.build index c46d52e3f4..f5fb72c5de 100644 --- a/dom/media/platforms/moz.build +++ b/dom/media/platforms/moz.build @@ -30,13 +30,11 @@ UNIFIED_SOURCES += [ ] DIRS += [ + 'agnostic/eme', 'agnostic/gmp', 'omx' ] -if CONFIG['MOZ_EME']: - DIRS += ['agnostic/eme'] - if CONFIG['MOZ_WMF']: DIRS += [ 'wmf' ]; diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index faab9fc4d4..0299ea4207 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -282,7 +282,15 @@ WEBIDL_FILES = [ 'MediaDeviceInfo.webidl', 'MediaDevices.webidl', 'MediaElementAudioSourceNode.webidl', + 'MediaEncryptedEvent.webidl', 'MediaError.webidl', + 'MediaKeyError.webidl', + 'MediaKeyMessageEvent.webidl', + 'MediaKeys.webidl', + 'MediaKeySession.webidl', + 'MediaKeysRequestStatus.webidl', + 'MediaKeyStatusMap.webidl', + 'MediaKeySystemAccess.webidl', 'MediaList.webidl', 'MediaQueryList.webidl', 'MediaRecorder.webidl', @@ -546,6 +554,7 @@ WEBIDL_FILES = [ 'WebKitCSSMatrix.webidl', 'WebSocket.webidl', 'WheelEvent.webidl', + 'WidevineCDMManifest.webidl', 'WifiOptions.webidl', 'WindowOrWorkerGlobalScope.webidl', 'WindowRoot.webidl', @@ -572,19 +581,6 @@ WEBIDL_FILES = [ 'XULElement.webidl', ] -if CONFIG['MOZ_EME']: - WEBIDL_FILES += [ - 'MediaEncryptedEvent.webidl', - 'MediaKeyError.webidl', - 'MediaKeyMessageEvent.webidl', - 'MediaKeys.webidl', - 'MediaKeySession.webidl', - 'MediaKeysRequestStatus.webidl', - 'MediaKeyStatusMap.webidl', - 'MediaKeySystemAccess.webidl', - 'WidevineCDMManifest.webidl', - ] - if CONFIG['MOZ_WEBEXTENSIONS']: WEBIDL_FILES += ['AddonManager.webidl'] diff --git a/old-configure.in b/old-configure.in index 4dcb71e6fe..c613bf27a9 100644 --- a/old-configure.in +++ b/old-configure.in @@ -2901,12 +2901,25 @@ dnl ======================================================== dnl = EME support dnl ======================================================== -MOZ_ARG_ENABLE_BOOL(eme, -[ --enable-eme Enable support for Encrypted Media Extensions ], - MOZ_EME=1, - MOZ_EME=) +MOZ_ARG_ENABLE_STRING(eme, +[ --enable-eme[=widevine] Enable support for Encrypted Media Extensions ], + MOZ_EME_ARGS=$enableval) +if test "$MOZ_EME_ARGS"; then + if test "$MOZ_EME_ARGS" = "no"; then + dnl EME explicitly disabled with --disable-eme + MOZ_EME= + elif test "$MOZ_EME_ARGS" = "yes"; then + dnl EME explicitly enabled with --enable-eme + MOZ_EME=1 + else + dnl EME explicitly enabled with --enable-eme= + MOZ_EME=1 + MOZ_EME_MODULES=`echo $MOZ_EME_ARGS | sed -e 's/,/ /g'` + fi +fi +AC_SUBST_SET(MOZ_EME_MODULES) if test -n "$MOZ_EME"; then if test -z "$MOZ_FMP4"; then AC_MSG_ERROR([Encrypted Media Extension support requires Fragmented MP4 support]) @@ -2914,8 +2927,6 @@ if test -n "$MOZ_EME"; then AC_DEFINE(MOZ_EME) fi -AC_SUBST(MOZ_EME) - MOZ_LIBVPX_CFLAGS= MOZ_LIBVPX_LIBS= @@ -5287,6 +5298,7 @@ AC_SUBST(MOZ_VORBIS) AC_SUBST(MOZ_TREMOR) AC_SUBST(MOZ_FFVPX) AC_SUBST_LIST(FFVPX_ASFLAGS) +AC_SUBST(MOZ_EME) AC_SUBST(MOZ_VPX_ERROR_CONCEALMENT) AC_SUBST(VPX_USE_YASM) AC_SUBST_LIST(VPX_ASFLAGS) diff --git a/toolkit/mozapps/extensions/GMPUtils.jsm b/toolkit/mozapps/extensions/GMPUtils.jsm index 7f74b3c05e..a2be27feba 100644 --- a/toolkit/mozapps/extensions/GMPUtils.jsm +++ b/toolkit/mozapps/extensions/GMPUtils.jsm @@ -7,15 +7,16 @@ const {classes: Cc, interfaces: Ci, results: Cr, utils: Cu, manager: Cm} = Components; -this.EXPORTED_SYMBOLS = [ "EME_ADOBE_ID", - "GMP_PLUGIN_IDS", +this.EXPORTED_SYMBOLS = [ "GMP_PLUGIN_IDS", "GMPPrefs", "GMPUtils", + "EME_ADOBE_ID", "OPEN_H264_ID", "WIDEVINE_ID" ]; Cu.import("resource://gre/modules/Preferences.jsm"); Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/AppConstants.jsm"); // GMP IDs const OPEN_H264_ID = "gmp-gmpopenh264"; @@ -72,32 +73,24 @@ this.GMPUtils = { return true; } if (aPlugin.id == EME_ADOBE_ID) { -#if defined(XP_WIN) - // Windows Vista and later only supported by Adobe EME. - return true; -#else - return false; -#endif + // Windows XP and later only supported by Adobe EME. + return AppConstants.isPlatformAndVersionAtLeast("win", "5"); } else if (aPlugin.id == WIDEVINE_ID) { - -#if defined(XP_WIN) || defined(XP_LINUX) || defined(XP_MACOSX) // The Widevine plugin is available for Windows versions Vista and later, // Mac OSX, and Linux. - return true; -#else - return false; -#endif + return AppConstants.isPlatformAndVersionAtLeast("win", "6") || + AppConstants.platform == "macosx" || + AppConstants.platform == "linux"; } return true; }, _is32bitModeMacOS: function() { -#ifdef XP_MACOSX + if (AppConstants.platform != "macosx") { + return false; + } return Services.appinfo.XPCOMABI.split("-")[0] == "x86"; -#else - return false; -#endif }, /** diff --git a/toolkit/mozapps/extensions/moz.build b/toolkit/mozapps/extensions/moz.build index b65ce4c689..104e8d734d 100644 --- a/toolkit/mozapps/extensions/moz.build +++ b/toolkit/mozapps/extensions/moz.build @@ -29,13 +29,13 @@ EXTRA_PP_COMPONENTS += [ EXTRA_JS_MODULES += [ 'ChromeManifestParser.jsm', 'DeferredSave.jsm', + 'GMPUtils.jsm', 'LightweightThemeManager.jsm', ] EXTRA_PP_JS_MODULES += [ 'AddonManager.jsm', 'GMPInstallManager.jsm', - 'GMPUtils.jsm', ] # Additional debugging info is exposed in debug builds