import changes from `dev' branch of rmottola/Arctic-Fox:

- Bug 1199289 - r=valentin,dao (bfaf064b19)
- Bug 1202312 - Remove an old forward declaration and typedef. r=kats (1fc905fe5d)
- Bug 1170894 - Implement nsIFrameLoader::SwitchProcessAndLoadURI. r=smaug (194b0e81f6)
- Bug 1199765 - Add support to TabParent for querying the active state of remote browsers. r=Mossop (a9b24d4083)
- Bug 1165796 - Part 1: Make PrefEnabledRunnable usable for other preference names. r=baku (2e83d3ecc7)
- Bug 1168933 - Send referrer when downloading worker script. r=khuey (69e48dea42)
- Bug 1165796 - Part 2: Implement PerformanceObserver.r=baku (9f16f01051)
- Bug 1165796 - Part 0: Unified build fix. r=baku (0605bf4397)
- Bug 1165796 - Part 3: Fix PerformanceObserverEntryList::GetEntries filtering for initiatorType. r=baku (12d07cee20)
- Bug 1192787 - Readd performance enabled test to ResponseEndHighRes; r=baku (f75fbaba13)
- Bug 1197003 - Part 1 - PerformanceObserver::Disconenct() should be called before mPerformance is destroyed. r=baku (d4dd3a960b)
- Bug 1195700 - Disconnect performance observer before being destroyed to avoid crash. r=baku (e9e743d4d2)
- Bug 1197003 - Part 2 - Implement processing algorithm for PerformanceObserver to notify a batch of entries. r=baku (4a0432765f)
- Bug 1155761 followup: Annotate nsPerformance::InsertUserEntry as 'override'. rs=ehsan (0552b7f75f)
This commit is contained in:
2022-03-31 10:32:03 +08:00
parent 0b39daa429
commit 359792367d
43 changed files with 1704 additions and 59 deletions
+87
View File
@@ -273,6 +273,42 @@ nsFrameLoader::LoadURI(nsIURI* aURI)
return rv;
}
NS_IMETHODIMP
nsFrameLoader::SwitchProcessAndLoadURI(nsIURI* aURI)
{
nsCOMPtr<nsIURI> URIToLoad = aURI;
nsRefPtr<TabParent> tp = nullptr;
MutableTabContext context;
nsCOMPtr<mozIApplication> ownApp = GetOwnApp();
nsCOMPtr<mozIApplication> containingApp = GetContainingApp();
bool tabContextUpdated = true;
if (ownApp) {
tabContextUpdated = context.SetTabContextForAppFrame(ownApp, containingApp);
} else if (OwnerIsBrowserFrame()) {
// The |else| above is unnecessary; OwnerIsBrowserFrame() implies !ownApp.
tabContextUpdated = context.SetTabContextForBrowserFrame(containingApp);
} else {
tabContextUpdated = context.SetTabContextForNormalFrame();
}
NS_ENSURE_STATE(tabContextUpdated);
nsCOMPtr<Element> ownerElement = mOwnerContent;
tp = ContentParent::CreateBrowserOrApp(context, ownerElement, nullptr);
if (!tp) {
return NS_ERROR_FAILURE;
}
mRemoteBrowserShown = false;
nsresult rv = SwapRemoteBrowser(tp);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
LoadURI(URIToLoad);
return NS_OK;
}
NS_IMETHODIMP
nsFrameLoader::SetIsPrerendered()
{
@@ -2573,6 +2609,57 @@ nsFrameLoader::SetRemoteBrowser(nsITabParent* aTabParent)
ShowRemoteFrame(ScreenIntSize(0, 0));
}
nsresult
nsFrameLoader::SwapRemoteBrowser(nsITabParent* aTabParent)
{
nsRefPtr<TabParent> newParent = TabParent::GetFrom(aTabParent);
if (!newParent || !mRemoteBrowser) {
return NS_ERROR_DOM_INVALID_STATE_ERR;
}
if (!IsRemoteFrame()) {
NS_WARNING("Switching from in-process to out-of-process is not supported.");
return NS_ERROR_NOT_IMPLEMENTED;
}
if (!OwnerIsBrowserOrAppFrame()) {
NS_WARNING("Switching process for non-mozbrowser/app frame is not supported.");
return NS_ERROR_NOT_IMPLEMENTED;
}
if (newParent == mRemoteBrowser) {
return NS_OK;
}
nsCOMPtr<nsIObserverService> os = services::GetObserverService();
if (os) {
os->NotifyObservers(NS_ISUPPORTS_CAST(nsIFrameLoader*, this),
"frameloader-message-manager-will-change", nullptr);
}
mRemoteBrowser->CacheFrameLoader(nullptr);
mRemoteBrowser->SetOwnerElement(nullptr);
mRemoteBrowser->Detach();
mRemoteBrowser->Destroy();
if (mMessageManager) {
mMessageManager->Disconnect();
mMessageManager = nullptr;
}
mRemoteBrowser = newParent;
mRemoteBrowser->Attach(this);
mChildID = mRemoteBrowser->Manager()->ChildID();
ReallyLoadFrameScripts();
InitializeBrowserAPI();
if (os) {
os->NotifyObservers(NS_ISUPPORTS_CAST(nsIFrameLoader*, this),
"frameloader-message-manager-changed", nullptr);
}
if (!mRemoteBrowserShown) {
ShowRemoteFrame(ScreenIntSize(0, 0));
}
return NS_OK;
}
void
nsFrameLoader::SetDetachedSubdocFrame(nsIFrame* aDetachedFrame,
nsIDocument* aContainerDoc)