Backed out 3 changesets (bug 1729458) for causing multiple dt failures. CLOSED TREE

Backed out changeset 16b385e15fad (bug 1729458)
Backed out changeset 72b7a9c7bf30 (bug 1729458)
Backed out changeset 704dd03288b1 (bug 1729458)
This commit is contained in:
Sandor Molnar
2021-09-13 21:08:44 +03:00
parent 718a055fdb
commit 4643c284c0
7 changed files with 62 additions and 76 deletions

View File

@@ -29,7 +29,6 @@
#include "mozilla/StaticPrefs_docshell.h"
#include "mozilla/StaticPrefs_fission.h"
#include "mozilla/Telemetry.h"
#include "nsISupports.h"
#include "nsIWebNavigation.h"
#include "mozilla/MozPromiseInlines.h"
#include "nsDocShell.h"
@@ -1389,17 +1388,20 @@ void CanonicalBrowsingContext::PendingRemotenessChange::ProcessReady() {
return;
}
MOZ_ASSERT(!mProcessReady);
mProcessReady = true;
MaybeFinish();
}
void CanonicalBrowsingContext::PendingRemotenessChange::MaybeFinish() {
if (!mPromise) {
// Wait for our blocker promise to resolve, if present.
if (mPrepareToChangePromise) {
mPrepareToChangePromise->Then(
GetMainThreadSerialEventTarget(), __func__,
[self = RefPtr{this}](bool) { self->Finish(); },
[self = RefPtr{this}](nsresult aRv) { self->Cancel(aRv); });
return;
}
if (!mProcessReady || mWaitingForPrepareToChange) {
Finish();
}
void CanonicalBrowsingContext::PendingRemotenessChange::Finish() {
if (!mPromise) {
return;
}
@@ -1701,6 +1703,7 @@ void CanonicalBrowsingContext::PendingRemotenessChange::Clear() {
mPromise = nullptr;
mTarget = nullptr;
mPrepareToChangePromise = nullptr;
}
CanonicalBrowsingContext::PendingRemotenessChange::PendingRemotenessChange(
@@ -1712,7 +1715,8 @@ CanonicalBrowsingContext::PendingRemotenessChange::PendingRemotenessChange(
mOptions(aOptions) {}
CanonicalBrowsingContext::PendingRemotenessChange::~PendingRemotenessChange() {
MOZ_ASSERT(!mPromise && !mTarget && !mContentParent && !mSpecificGroup,
MOZ_ASSERT(!mPromise && !mTarget && !mContentParent && !mSpecificGroup &&
!mPrepareToChangePromise,
"should've already been Cancel() or Complete()-ed");
}
@@ -1784,8 +1788,6 @@ CanonicalBrowsingContext::ChangeRemoteness(
}
auto promise = MakeRefPtr<RemotenessPromise::Private>(__func__);
promise->UseDirectTaskDispatch(__func__);
RefPtr<PendingRemotenessChange> change =
new PendingRemotenessChange(this, promise, aPendingSwitchId, aOptions);
mPendingRemotenessChange = change;
@@ -1813,18 +1815,7 @@ CanonicalBrowsingContext::ChangeRemoteness(
change->Cancel(rv);
return promise.forget();
}
// Mark prepareToChange as unresolved, and wait for it to become resolved.
if (blocker && blocker->State() != Promise::PromiseState::Resolved) {
change->mWaitingForPrepareToChange = true;
RefPtr<DomPromiseListener> listener = new DomPromiseListener(
[change](JSContext* aCx, JS::HandleValue aValue) {
change->mWaitingForPrepareToChange = false;
change->MaybeFinish();
},
[change](nsresult aRv) { change->Cancel(aRv); });
blocker->AppendNativeHandler(listener);
}
change->mPrepareToChangePromise = GenericPromise::FromDomPromise(blocker);
}
// Switching a subframe to be local within it's embedding process.
@@ -1839,7 +1830,7 @@ CanonicalBrowsingContext::ChangeRemoteness(
"their embedder");
MOZ_DIAGNOSTIC_ASSERT(!aOptions.mReplaceBrowsingContext);
MOZ_DIAGNOSTIC_ASSERT(!aOptions.mRemoteType.IsEmpty());
MOZ_DIAGNOSTIC_ASSERT(!change->mWaitingForPrepareToChange);
MOZ_DIAGNOSTIC_ASSERT(!change->mPrepareToChangePromise);
MOZ_DIAGNOSTIC_ASSERT(!change->mSpecificGroup);
// Switching to local, so we don't need to create a new process, and will
@@ -1884,14 +1875,10 @@ CanonicalBrowsingContext::ChangeRemoteness(
// the change is complete. This should prevent the process dying before
// we're ready to use it.
change->mContentParent->AddKeepAlive();
if (change->mContentParent->IsLaunching()) {
change->mContentParent->WaitForLaunchAsync()->Then(
GetMainThreadSerialEventTarget(), __func__,
[change](ContentParent*) { change->ProcessLaunched(); },
[change](LaunchError) { change->Cancel(NS_ERROR_FAILURE); });
} else {
change->ProcessLaunched();
}
change->mContentParent->WaitForLaunchAsync()->Then(
GetMainThreadSerialEventTarget(), __func__,
[change](ContentParent*) { change->ProcessLaunched(); },
[change](LaunchError) { change->Cancel(NS_ERROR_FAILURE); });
return promise.forget();
}