Bug 1605072 - Make CanonicalBrowsingContext::ChangeFrameRemoteness use async process launching;r=kmag

Differential Revision: https://phabricator.services.mozilla.com/D57775

--HG--
extra : moz-landing-system : lando
This commit is contained in:
David Teller 2019-12-20 19:56:31 +00:00
Родитель 87f9ef38db
Коммит 4f6a8429cf
1 изменённых файлов: 7 добавлений и 22 удалений

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

@ -274,26 +274,6 @@ void CanonicalBrowsingContext::LoadURI(const nsAString& aURI,
LoadURI(nullptr, loadState, true);
}
namespace {
using NewOrUsedPromise = MozPromise<RefPtr<ContentParent>, nsresult, false>;
// NOTE: This method is currently a dummy, and always actually spawns sync. It
// mostly exists so I can test out the async API right now.
RefPtr<NewOrUsedPromise> GetNewOrUsedBrowserProcessAsync(
const nsAString& aRemoteType) {
RefPtr<ContentParent> contentParent =
ContentParent::GetNewOrUsedBrowserProcess(
nullptr, aRemoteType, hal::PROCESS_PRIORITY_FOREGROUND, nullptr,
false);
if (!contentParent) {
return NewOrUsedPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
}
return NewOrUsedPromise::CreateAndResolve(contentParent, __func__);
}
} // anonymous namespace
void CanonicalBrowsingContext::PendingRemotenessChange::Complete(
ContentParent* aContentParent) {
if (!mPromise) {
@ -511,13 +491,18 @@ CanonicalBrowsingContext::ChangeFrameRemoteness(const nsAString& aRemoteType,
new PendingRemotenessChange(this, promise, aPendingSwitchId);
mPendingRemotenessChange = change;
GetNewOrUsedBrowserProcessAsync(aRemoteType)
ContentParent::GetNewOrUsedBrowserProcessAsync(
/* aFrameElement = */ nullptr,
/* aRemoteType = */ aRemoteType,
/* aPriority = */ hal::PROCESS_PRIORITY_FOREGROUND,
/* aOpener = */ nullptr,
/* aPreferUsed = */ false)
->Then(
GetMainThreadSerialEventTarget(), __func__,
[change](ContentParent* aContentParent) {
change->Complete(aContentParent);
},
[change](nsresult aRv) { change->Cancel(aRv); });
[change](LaunchError aError) { change->Cancel(NS_ERROR_FAILURE); });
return promise.forget();
}