Bug 1811746 - Check embedderBrowser process if IsShuttingDown before re-use. r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D171222
This commit is contained in:
Jens Stutte 2023-03-02 13:03:51 +00:00
Родитель 64f4d03ec3
Коммит 9f73d70d9c
1 изменённых файлов: 9 добавлений и 3 удалений

Просмотреть файл

@ -6,6 +6,7 @@
#include "mozilla/dom/CanonicalBrowsingContext.h"
#include "ErrorList.h"
#include "mozilla/CheckedInt.h"
#include "mozilla/ErrorResult.h"
#include "mozilla/EventForwards.h"
@ -1977,7 +1978,7 @@ CanonicalBrowsingContext::ChangeRemoteness(
return RemotenessPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
}
// Ensure our embedder hasn't been destroyed already.
// Ensure our embedder hasn't been destroyed or asked to shutdown already.
RefPtr<WindowGlobalParent> embedderWindowGlobal = GetEmbedderWindowGlobal();
if (!embedderWindowGlobal) {
NS_WARNING("Non-embedded BrowsingContext");
@ -1989,6 +1990,13 @@ CanonicalBrowsingContext::ChangeRemoteness(
return RemotenessPromise::CreateAndReject(NS_ERROR_NOT_AVAILABLE, __func__);
}
RefPtr<BrowserParent> embedderBrowser =
embedderWindowGlobal->GetBrowserParent();
if (embedderBrowser && embedderBrowser->Manager()->IsShuttingDown()) {
NS_WARNING("Embedder already asked to shutdown.");
return RemotenessPromise::CreateAndReject(NS_ERROR_NOT_AVAILABLE, __func__);
}
if (aOptions.mRemoteType.IsEmpty() && (!IsTop() || !GetEmbedderElement())) {
NS_WARNING("Cannot load non-remote subframes");
return RemotenessPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
@ -2045,8 +2053,6 @@ CanonicalBrowsingContext::ChangeRemoteness(
}
// Switching a subframe to be local within it's embedding process.
RefPtr<BrowserParent> embedderBrowser =
embedderWindowGlobal->GetBrowserParent();
if (embedderBrowser &&
aOptions.mRemoteType == embedderBrowser->Manager()->GetRemoteType()) {
MOZ_DIAGNOSTIC_ASSERT(