Skip to content

Commit 8cc4c66

Browse files
committed
Bug 1980967 - Handle iframes going away when firing navigate event. r=jjaschke,smaug
Differential Revision: https://phabricator.services.mozilla.com/D259825
1 parent 07174a2 commit 8cc4c66

File tree

8 files changed

+17
-44
lines changed

8 files changed

+17
-44
lines changed

dom/navigation/Navigation.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,8 @@ bool Navigation::InnerFireNavigateEvent(
891891
already_AddRefed<FormData> aFormDataEntryList,
892892
nsIStructuredCloneContainer* aClassicHistoryAPIState,
893893
const nsAString& aDownloadRequestFilename) {
894+
nsCOMPtr<nsIGlobalObject> globalObject = GetOwnerGlobal();
895+
894896
// Step 1
895897
if (HasEntriesAndEventsDisabled()) {
896898
// Step 1.1 to step 1.3
@@ -971,8 +973,7 @@ bool Navigation::InnerFireNavigateEvent(
971973
init.mSourceElement = aSourceElement;
972974

973975
// Step 19
974-
RefPtr<AbortController> abortController =
975-
new AbortController(GetOwnerGlobal());
976+
RefPtr<AbortController> abortController = new AbortController(globalObject);
976977

977978
// Step 20
978979
init.mSignal = abortController->Signal();
@@ -1052,9 +1053,9 @@ bool Navigation::InnerFireNavigateEvent(
10521053
MOZ_DIAGNOSTIC_ASSERT(fromNHE);
10531054

10541055
// Step 33.4
1055-
RefPtr<Promise> promise = Promise::CreateInfallible(GetOwnerGlobal());
1056+
RefPtr<Promise> promise = Promise::CreateInfallible(globalObject);
10561057
mTransition = MakeAndAddRef<NavigationTransition>(
1057-
GetOwnerGlobal(), aNavigationType, fromNHE, promise);
1058+
globalObject, aNavigationType, fromNHE, promise);
10581059

10591060
// Step 33.5
10601061
MOZ_ALWAYS_TRUE(promise->SetAnyPromiseIsHandled());
@@ -1094,17 +1095,22 @@ bool Navigation::InnerFireNavigateEvent(
10941095
// Step 34.2
10951096
for (auto& handler : event->NavigationHandlerList().Clone()) {
10961097
// Step 34.2.1
1097-
promiseList.AppendElement(MOZ_KnownLive(handler)->Call());
1098+
RefPtr promise = MOZ_KnownLive(handler)->Call();
1099+
if (promise) {
1100+
promiseList.AppendElement(promise);
1101+
}
10981102
}
10991103

11001104
// Step 34.3
11011105
if (promiseList.IsEmpty()) {
1102-
promiseList.AppendElement(Promise::CreateResolvedWithUndefined(
1103-
GetOwnerGlobal(), IgnoredErrorResult()));
1106+
RefPtr promise = Promise::CreateResolvedWithUndefined(
1107+
globalObject, IgnoredErrorResult());
1108+
if (promise) {
1109+
promiseList.AppendElement(promise);
1110+
}
11041111
}
11051112

11061113
// Step 34.4
1107-
nsCOMPtr<nsIGlobalObject> globalObject = GetOwnerGlobal();
11081114
// We capture the scope which we wish to keep alive in the lambdas passed to
11091115
// Promise::WaitForAll. We pass it as the cycle collected argument to
11101116
// Promise::WaitForAll, which makes it stay alive until all promises
@@ -1310,7 +1316,9 @@ void Navigation::AbortOngoingNavigation(JSContext* aCx,
13101316

13111317
// Step 6
13121318
if (event->IsBeingDispatched()) {
1313-
event->PreventDefault();
1319+
// Here NonSystem is needed since it needs to be the same as what we
1320+
// dispatch with.
1321+
event->PreventDefault(aCx, CallerType::NonSystem);
13141322
}
13151323

13161324
// Step 7

testing/web-platform/meta/navigation-api/navigate-event/signal-abort-detach-in-onnavigate.html.ini

Lines changed: 0 additions & 4 deletions
This file was deleted.

testing/web-platform/meta/navigation-api/navigate-event/signal-abort-window-stop-in-onnavigate.html.ini

Lines changed: 0 additions & 4 deletions
This file was deleted.

testing/web-platform/meta/navigation-api/navigation-methods/return-value/navigate-detach-in-onnavigate.html.ini

Lines changed: 0 additions & 4 deletions
This file was deleted.

testing/web-platform/meta/navigation-api/navigation-methods/return-value/navigate-interrupted-within-onnavigate.html.ini

Lines changed: 0 additions & 4 deletions
This file was deleted.

testing/web-platform/meta/navigation-api/navigation-methods/return-value/reload-detach-in-onnavigate.html.ini

Lines changed: 0 additions & 4 deletions
This file was deleted.

testing/web-platform/meta/navigation-api/ordering-and-transition/location-href-intercept-reentrant.html.ini

Lines changed: 0 additions & 7 deletions
This file was deleted.

testing/web-platform/meta/navigation-api/ordering-and-transition/navigate-same-document-intercept-reentrant.html.ini

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)