Bug 1413484 - tighten some assertions.
mCallback->GetMediaOwner() now is always called before Close() and won't
return null. So is owner->GetMediaElement().
MozReview-Commit-ID: HbxbyuogYAB
--- a/dom/media/ChannelMediaResource.cpp
+++ b/dom/media/ChannelMediaResource.cpp
@@ -160,19 +160,20 @@ IsPayloadCompressed(nsIHttpChannel* aCha
nsresult
ChannelMediaResource::OnStartRequest(nsIRequest* aRequest,
int64_t aRequestOffset)
{
NS_ASSERTION(mChannel.get() == aRequest, "Wrong channel!");
MOZ_DIAGNOSTIC_ASSERT(!mClosed);
MediaDecoderOwner* owner = mCallback->GetMediaOwner();
- NS_ENSURE_TRUE(owner, NS_ERROR_FAILURE);
+ MOZ_DIAGNOSTIC_ASSERT(owner);
dom::HTMLMediaElement* element = owner->GetMediaElement();
- NS_ENSURE_TRUE(element, NS_ERROR_FAILURE);
+ MOZ_DIAGNOSTIC_ASSERT(element);
+
nsresult status;
nsresult rv = aRequest->GetStatus(&status);
NS_ENSURE_SUCCESS(rv, rv);
if (status == NS_BINDING_ABORTED) {
// Request was aborted before we had a chance to receive any data, or
// even an OnStartRequest(). Close the channel. This is important, as
// we don't want to mess up our state, as if we're cloned that would
@@ -517,47 +518,48 @@ ChannelMediaResource::OpenChannel(int64_
rv = SetupChannelHeaders(aOffset);
NS_ENSURE_SUCCESS(rv, rv);
rv = mChannel->AsyncOpen2(mListener);
NS_ENSURE_SUCCESS(rv, rv);
// Tell the media element that we are fetching data from a channel.
MediaDecoderOwner* owner = mCallback->GetMediaOwner();
- NS_ENSURE_TRUE(owner, NS_ERROR_FAILURE);
+ MOZ_DIAGNOSTIC_ASSERT(owner);
dom::HTMLMediaElement* element = owner->GetMediaElement();
+ MOZ_DIAGNOSTIC_ASSERT(element);
element->DownloadResumed();
return NS_OK;
}
nsresult
ChannelMediaResource::SetupChannelHeaders(int64_t aOffset)
{
+ MOZ_ASSERT(NS_IsMainThread());
MOZ_DIAGNOSTIC_ASSERT(!mClosed);
// Always use a byte range request even if we're reading from the start
// of the resource.
// This enables us to detect if the stream supports byte range
// requests, and therefore seeking, early.
nsCOMPtr<nsIHttpChannel> hc = do_QueryInterface(mChannel);
if (hc) {
// Use |mOffset| if seeking in a complete file download.
nsAutoCString rangeString("bytes=");
rangeString.AppendInt(aOffset);
rangeString.Append('-');
nsresult rv = hc->SetRequestHeader(NS_LITERAL_CSTRING("Range"), rangeString, false);
NS_ENSURE_SUCCESS(rv, rv);
// Send Accept header for video and audio types only (Bug 489071)
- NS_ASSERTION(NS_IsMainThread(), "Don't call on non-main thread");
MediaDecoderOwner* owner = mCallback->GetMediaOwner();
- NS_ENSURE_TRUE(owner, NS_ERROR_FAILURE);
+ MOZ_DIAGNOSTIC_ASSERT(owner);
dom::HTMLMediaElement* element = owner->GetMediaElement();
- NS_ENSURE_TRUE(element, NS_ERROR_FAILURE);
+ MOZ_DIAGNOSTIC_ASSERT(element);
element->SetRequestHeaders(hc);
} else {
NS_ASSERTION(aOffset == 0, "Don't know how to seek on this channel type");
return NS_ERROR_FAILURE;
}
return NS_OK;
}
@@ -677,25 +679,19 @@ ChannelMediaResource::Suspend(bool aClos
NS_ASSERTION(NS_IsMainThread(), "Don't call on non-main thread");
if (mClosed) {
// Nothing to do when we are closed.
return;
}
MediaDecoderOwner* owner = mCallback->GetMediaOwner();
- if (!owner) {
- // Shutting down; do nothing.
- return;
- }
+ MOZ_DIAGNOSTIC_ASSERT(owner);
dom::HTMLMediaElement* element = owner->GetMediaElement();
- if (!element) {
- // Shutting down; do nothing.
- return;
- }
+ MOZ_DIAGNOSTIC_ASSERT(element);
if (mChannel && aCloseImmediately && mCacheStream.IsTransportSeekable()) {
CloseChannel();
element->DownloadSuspended();
}
if (mSuspendAgent.Suspend()) {
if (mChannel) {
@@ -711,25 +707,19 @@ ChannelMediaResource::Resume()
NS_ASSERTION(NS_IsMainThread(), "Don't call on non-main thread");
if (mClosed) {
// Nothing to do when we are closed.
return;
}
MediaDecoderOwner* owner = mCallback->GetMediaOwner();
- if (!owner) {
- // Shutting down; do nothing.
- return;
- }
+ MOZ_DIAGNOSTIC_ASSERT(owner);
dom::HTMLMediaElement* element = owner->GetMediaElement();
- if (!element) {
- // Shutting down; do nothing.
- return;
- }
+ MOZ_DIAGNOSTIC_ASSERT(element);
if (mSuspendAgent.Resume()) {
if (mChannel) {
// Just wake up our existing channel
mChannelStatistics.Start();
// if an error occurs after Resume, assume it's because the server
// timed out the connection and we should reopen it.
mReopenOnError = true;
@@ -762,25 +752,20 @@ ChannelMediaResource::RecreateChannel()
MOZ_DIAGNOSTIC_ASSERT(!mClosed);
nsLoadFlags loadFlags =
nsICachingChannel::LOAD_BYPASS_LOCAL_CACHE_IF_BUSY |
nsIChannel::LOAD_CLASSIFY_URI |
(mLoadInBackground ? nsIRequest::LOAD_BACKGROUND : 0);
MediaDecoderOwner* owner = mCallback->GetMediaOwner();
- if (!owner) {
- // The decoder is being shut down, so don't bother opening a new channel
- return NS_ERROR_ABORT;
- }
+ MOZ_DIAGNOSTIC_ASSERT(owner);
dom::HTMLMediaElement* element = owner->GetMediaElement();
- if (!element) {
- // The decoder is being shut down, so don't bother opening a new channel
- return NS_ERROR_ABORT;
- }
+ MOZ_DIAGNOSTIC_ASSERT(element);
+
nsCOMPtr<nsILoadGroup> loadGroup = element->GetDocumentLoadGroup();
NS_ENSURE_TRUE(loadGroup, NS_ERROR_NULL_POINTER);
nsSecurityFlags securityFlags = element->ShouldCheckAllowOrigin()
? nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS
: nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS;
MOZ_ASSERT(element->IsAnyOfHTMLElements(nsGkAtoms::audio, nsGkAtoms::video));