mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 13:23:07 +00:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user