Bug 1350842 - part1 : remove external app logic in media element.
Since we've had native HLS support, we can remove all these hacks.
MozReview-Commit-ID: EXCWHpOIQW
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -1318,17 +1318,16 @@ private:
bool mCancelled = false;
};
class HTMLMediaElement::ErrorSink
{
public:
explicit ErrorSink(HTMLMediaElement* aOwner)
: mOwner(aOwner)
- , mSrcIsUnsupportedTypeMedia(false)
{
MOZ_ASSERT(mOwner);
}
void SetError(uint16_t aErrorCode, const nsACString& aErrorDetails)
{
// Since we have multiple paths calling into DecodeError, e.g.
// MediaKeys::Terminated and EMEH264Decoder::Error. We should take the 1st
@@ -1337,93 +1336,51 @@ public:
return;
}
if (!IsValidErrorCode(aErrorCode)) {
NS_ASSERTION(false, "Undefined MediaError codes!");
return;
}
- // TODO : remove unsupported type related codes after finishing native
- // support for HLS, see bug 1350842.
- if (CanOwnerPlayUnsupportedTypeMedia() &&
- aErrorCode == MEDIA_ERR_SRC_NOT_SUPPORTED) {
- // On Fennec, we do some hack for unsupported type media, we don't set
- // its error state in order to open it with external app.
- mSrcIsUnsupportedTypeMedia = true;
+ mError = new MediaError(mOwner, aErrorCode, aErrorDetails);
+ mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("error"));
+ if (mOwner->ReadyState() == HAVE_NOTHING &&
+ aErrorCode == MEDIA_ERR_ABORTED) {
+ // https://html.spec.whatwg.org/multipage/embedded-content.html#media-data-processing-steps-list
+ // "If the media data fetching process is aborted by the user"
+ mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("abort"));
+ mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY);
+ mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("emptied"));
+ } else if (aErrorCode == MEDIA_ERR_SRC_NOT_SUPPORTED) {
mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_NO_SOURCE);
- MaybeOpenUnsupportedMediaForOwner();
} else {
- mError = new MediaError(mOwner, aErrorCode, aErrorDetails);
- mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("error"));
- if (mOwner->ReadyState() == HAVE_NOTHING &&
- aErrorCode == MEDIA_ERR_ABORTED) {
- // https://html.spec.whatwg.org/multipage/embedded-content.html#media-data-processing-steps-list
- // "If the media data fetching process is aborted by the user"
- mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("abort"));
- mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY);
- mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("emptied"));
- } else if (aErrorCode == MEDIA_ERR_SRC_NOT_SUPPORTED) {
- mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_NO_SOURCE);
- } else {
- mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
- }
+ mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
}
}
void ResetError()
{
mError = nullptr;
- mSrcIsUnsupportedTypeMedia = false;
- }
-
- void MaybeOpenUnsupportedMediaForOwner() const
- {
- // Src is supported type or we don't open the pref for external app.
- if (!mSrcIsUnsupportedTypeMedia ||
- !CanOwnerPlayUnsupportedTypeMedia()) {
- return;
- }
-
- // If media doesn't start playing, we don't need to open it.
- if (mOwner->Paused()) {
- return;
- }
-
- nsContentUtils::DispatchTrustedEvent(mOwner->OwnerDoc(),
- static_cast<nsIContent*>(mOwner),
- NS_LITERAL_STRING("OpenMediaWithExternalApp"),
- true,
- true);
}
RefPtr<MediaError> mError;
private:
bool IsValidErrorCode(const uint16_t& aErrorCode) const
{
return (aErrorCode == MEDIA_ERR_DECODE ||
aErrorCode == MEDIA_ERR_NETWORK ||
aErrorCode == MEDIA_ERR_ABORTED ||
aErrorCode == MEDIA_ERR_SRC_NOT_SUPPORTED);
}
- bool CanOwnerPlayUnsupportedTypeMedia() const
- {
-#if defined(MOZ_WIDGET_ANDROID)
- // On Fennec, we will use an external app to open unsupported media types.
- return Preferences::GetBool("media.openUnsupportedTypeWithExternalApp");
-#endif
- return false;
- }
-
// Media elememt's life cycle would be longer than error sink, so we use the
// raw pointer and this class would only be referenced by media element.
HTMLMediaElement* mOwner;
- bool mSrcIsUnsupportedTypeMedia;
};
NS_IMPL_ADDREF_INHERITED(HTMLMediaElement, nsGenericHTMLElement)
NS_IMPL_RELEASE_INHERITED(HTMLMediaElement, nsGenericHTMLElement)
NS_IMPL_CYCLE_COLLECTION_CLASS(HTMLMediaElement)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(HTMLMediaElement, nsGenericHTMLElement)
@@ -6645,22 +6602,16 @@ MediaStream* HTMLMediaElement::GetSrcMed
}
MediaError*
HTMLMediaElement::GetError() const
{
return mErrorSink->mError;
}
-void
-HTMLMediaElement::OpenUnsupportedMediaWithExternalAppIfNeeded() const
-{
- mErrorSink->MaybeOpenUnsupportedMediaForOwner();
-}
-
void HTMLMediaElement::GetCurrentSpec(nsCString& aString)
{
if (mLoadingSrc) {
mLoadingSrc->GetSpec(aString);
} else {
aString.Truncate();
}
}
@@ -7401,17 +7352,16 @@ HTMLMediaElement::MarkAsContentSource(Ca
("%p Log VIDEO_AS_CONTENT_SOURCE_IN_TREE_OR_NOT: inTree = %u, API: '%d' and 'All'",
this, IsInUncomposedDoc(), static_cast<int>(aAPI)));
}
}
void
HTMLMediaElement::UpdateCustomPolicyAfterPlayed()
{
- OpenUnsupportedMediaWithExternalAppIfNeeded();
if (mAudioChannelWrapper) {
mAudioChannelWrapper->NotifyPlayStateChanged();
}
}
AbstractThread*
HTMLMediaElement::AbstractMainThread() const
{