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:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user