Bug 1376004. P1 - include http response code in the error.message field so the UI has more details to display a proper error message.
MozReview-Commit-ID: CHBXZZxfPc0
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -529,19 +529,23 @@ HTMLMediaElement::MediaLoadListener::OnS
element->NotifyLoadError();
}
return status;
}
nsCOMPtr<nsIHttpChannel> hc = do_QueryInterface(aRequest);
bool succeeded;
if (hc && NS_SUCCEEDED(hc->GetRequestSucceeded(&succeeded)) && !succeeded) {
- element->NotifyLoadError();
uint32_t responseStatus = 0;
Unused << hc->GetResponseStatus(&responseStatus);
+ nsAutoCString statusText;
+ Unused << hc->GetResponseStatusText(statusText);
+ element->NotifyLoadError(
+ nsPrintfCString("%u: %s", responseStatus, statusText.get()));
+
nsAutoString code;
code.AppendInt(responseStatus);
nsAutoString src;
element->GetCurrentSrc(src);
const char16_t* params[] = { code.get(), src.get() };
element->ReportLoadError("MediaLoadHttpError", params, ArrayLength(params));
return NS_BINDING_ABORTED;
}
@@ -2041,21 +2045,22 @@ void HTMLMediaElement::SelectResource()
this, &HTMLMediaElement::NoSupportedMediaSourceError, nsCString()));
} else {
// Otherwise, the source elements will be used.
mIsLoadingFromSourceChildren = true;
LoadFromSourceChildren();
}
}
-void HTMLMediaElement::NotifyLoadError()
+void
+HTMLMediaElement::NotifyLoadError(const nsACString& aErrorDetails)
{
if (!mIsLoadingFromSourceChildren) {
LOG(LogLevel::Debug, ("NotifyLoadError(), no supported media error"));
- NoSupportedMediaSourceError();
+ NoSupportedMediaSourceError(aErrorDetails);
} else if (mSourceLoadCandidate) {
DispatchAsyncSourceError(mSourceLoadCandidate);
QueueLoadFromSourceTask();
} else {
NS_WARNING("Should know the source we were loading from!");
}
}
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -326,17 +326,17 @@ public:
* may queue a task to run the select resource algorithm if appropriate.
*/
void NotifyAddedSource();
/**
* Called when there's been an error fetching the resource. This decides
* whether it's appropriate to fire an error event.
*/
- void NotifyLoadError();
+ void NotifyLoadError(const nsACString& aErrorDetails = nsCString());
/**
* Called by one of our associated MediaTrackLists (audio/video) when an
* AudioTrack is enabled or a VideoTrack is selected.
*/
void NotifyMediaTrackEnabled(MediaTrack* aTrack);
/**