diff --git a/devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js b/devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js index f2525044adba..f81a4b01db4a 100644 --- a/devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js +++ b/devtools/client/netmonitor/src/har/test/browser_net_har_copy_all_as_har.js @@ -91,15 +91,17 @@ async function testManyReloads({ tab, monitor, toolbox }) { ); // Requests may come out of order, so try to find the bogus cancelled request let entry = har.log.entries.find(e => e.response.status == 0); - ok(entry, "Found the cancelled request"); - is(entry.request.method, "GET", "Method is set"); - is(entry.request.url, SIMPLE_URL, "URL is set"); - // We always get the following headers: - // "Host", "User-agent", "Accept", "Accept-Language", "Accept-Encoding", "Connection" - // but are missing the three last headers: - // "Upgrade-Insecure-Requests", "Pragma", "Cache-Control" - is(entry.request.headers.length, 6, "But headers are partialy populated"); - is(entry.response.status, 0, "And status is set to 0"); + if (entry) { + ok(entry, "Found the cancelled request"); + is(entry.request.method, "GET", "Method is set"); + is(entry.request.url, SIMPLE_URL, "URL is set"); + // We always get the following headers: + // "Host", "User-agent", "Accept", "Accept-Language", "Accept-Encoding", "Connection" + // but are missing the three last headers: + // "Upgrade-Insecure-Requests", "Pragma", "Cache-Control" + is(entry.request.headers.length, 6, "But headers are partialy populated"); + is(entry.response.status, 0, "And status is set to 0"); + } entry = har.log.entries.find(e => e.response.status != 0); assertNavigationRequestEntry(entry); diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 9f84ff264a3e..0c99f9d6b515 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -4122,12 +4122,29 @@ nsDocShell::Reload(uint32_t aReloadFlags) { RefPtr browsingContext(mBrowsingContext); nsCOMPtr currentURI(mCurrentURI); nsCOMPtr referrerInfo(mReferrerInfo); + RefPtr stopDetector = new StopDetector(); + nsCOMPtr loadGroup; + GetLoadGroup(getter_AddRefs(loadGroup)); + if (loadGroup) { + // loadGroup may be null in theory. In that case stopDetector just + // doesn't do anything. + loadGroup->AddRequest(stopDetector, nullptr); + } ContentChild::GetSingleton()->SendNotifyOnHistoryReload( mBrowsingContext, forceReload, - [docShell, doc, loadType, browsingContext, currentURI, referrerInfo]( + [docShell, doc, loadType, browsingContext, currentURI, referrerInfo, + loadGroup, stopDetector]( Tuple>, Maybe>&& aResult) { + auto scopeExit = MakeScopeExit([loadGroup, stopDetector]() { + if (loadGroup) { + loadGroup->RemoveRequest(stopDetector, nullptr, NS_OK); + } + }); + if (stopDetector->Canceled()) { + return; + } bool canReload; Maybe> loadState; Maybe reloadingActiveEntry; diff --git a/docshell/test/mochitest/file_load_during_reload.html b/docshell/test/mochitest/file_load_during_reload.html new file mode 100644 index 000000000000..600d5c17289b --- /dev/null +++ b/docshell/test/mochitest/file_load_during_reload.html @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/docshell/test/mochitest/mochitest.ini b/docshell/test/mochitest/mochitest.ini index 63b0cbe06b09..b18e1afb164b 100644 --- a/docshell/test/mochitest/mochitest.ini +++ b/docshell/test/mochitest/mochitest.ini @@ -155,6 +155,8 @@ support-files = [test_forceinheritprincipal_overrule_owner.html] [test_framedhistoryframes.html] support-files = file_framedhistoryframes.html +[test_load_during_reload.html] +support-files = file_load_during_reload.html [test_pushState_after_document_open.html] [test_navigate_after_pagehide.html] [test_redirect_history.html] diff --git a/docshell/test/mochitest/test_load_during_reload.html b/docshell/test/mochitest/test_load_during_reload.html new file mode 100644 index 000000000000..24eb4091106c --- /dev/null +++ b/docshell/test/mochitest/test_load_during_reload.html @@ -0,0 +1,35 @@ + + + + + Test loading a new page after calling reload() + + + + + +

+ +

+
+