Bug 1637039 - Notify style preload when the loading channel synchronously fails to open, r=emilio

Differential Revision: https://phabricator.services.mozilla.com/D76365
This commit is contained in:
Honza Bambas 2020-05-25 18:39:34 +00:00
parent 07f63ad409
commit 6b93122fab
2 changed files with 12 additions and 8 deletions

View File

@ -1427,7 +1427,7 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) {
}
if (NS_FAILED(rv)) {
LOG_ERROR((" Failed to create channel"));
streamLoader->ChannelOpenFailed();
streamLoader->ChannelOpenFailed(rv);
SheetComplete(aLoadData, rv);
return rv;
}
@ -1450,7 +1450,7 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) {
if (NS_FAILED(rv)) {
LOG_ERROR((" Failed to open URI synchronously"));
streamLoader->ChannelOpenFailed();
streamLoader->ChannelOpenFailed(rv);
SheetComplete(aLoadData, rv);
return rv;
}
@ -1659,10 +1659,16 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) {
nsINetworkPredictor::LEARN_LOAD_SUBRESOURCE, mDocument);
}
auto preloadKey = PreloadHashKey::CreateAsStyle(aLoadData);
streamLoader->NotifyOpen(&preloadKey, channel, mDocument,
aLoadData.mIsPreload == IsPreload::FromLink);
rv = channel->AsyncOpen(streamLoader);
if (NS_FAILED(rv)) {
LOG_ERROR((" Failed to create stream loader"));
streamLoader->ChannelOpenFailed();
// ChannelOpenFailed makes sure that <link preload> nodes will get the
// proper notification about not being able to load this resource.
streamLoader->ChannelOpenFailed(rv);
SheetComplete(aLoadData, rv);
return rv;
}
@ -1676,10 +1682,6 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) {
mSheets->mLoadingDatas.Put(&key, &aLoadData);
aLoadData.mIsLoading = true;
auto preloadKey = PreloadHashKey::CreateAsStyle(aLoadData);
streamLoader->NotifyOpen(&preloadKey, channel, mDocument,
aLoadData.mIsPreload == IsPreload::FromLink);
return NS_OK;
}

View File

@ -30,10 +30,12 @@ class StreamLoader : public PreloaderBase, public nsIStreamListener {
explicit StreamLoader(SheetLoadData&);
void ChannelOpenFailed() {
void ChannelOpenFailed(nsresult rv) {
#ifdef NIGHTLY_BUILD
mChannelOpenFailed = true;
#endif
NotifyStart(Channel());
NotifyStop(Channel(), rv);
}
private: