зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
87f9ef38db
Коммит
4f6a8429cf
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче