diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index b9d4be58b..caef26fa2 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -6024,11 +6024,6 @@ nsDocShell::SetIsActive(bool aIsActive) nsresult nsDocShell::SetIsActiveInternal(bool aIsActive, bool aIsHidden) { - // We disallow setting active on chrome docshells. - if (mItemType == nsIDocShellTreeItem::typeChrome) { - return NS_ERROR_INVALID_ARG; - } - // Keep track ourselves. mIsActive = aIsActive; diff --git a/layout/base/nsRefreshDriver.cpp b/layout/base/nsRefreshDriver.cpp index 78520753b..befadc81e 100644 --- a/layout/base/nsRefreshDriver.cpp +++ b/layout/base/nsRefreshDriver.cpp @@ -426,9 +426,11 @@ private: void OnTimerStart() { +#if(0) if (!XRE_IsParentProcess()) { mLastChildTick = TimeStamp::Now(); } +#endif } private: @@ -436,6 +438,7 @@ private: void RecordTelemetryProbes(TimeStamp aVsyncTimestamp) { +#if(0) MOZ_ASSERT(NS_IsMainThread()); #ifndef ANDROID /* bug 1142079 */ if (XRE_IsParentProcess()) { @@ -463,20 +466,21 @@ private: mVsyncRate = mVsyncRefreshDriverTimer->mVsyncChild->GetVsyncRate(); } #endif +#endif } void TickRefreshDriver(TimeStamp aVsyncTimestamp) { MOZ_ASSERT(NS_IsMainThread()); - RecordTelemetryProbes(aVsyncTimestamp); - if (XRE_IsParentProcess()) { + //RecordTelemetryProbes(aVsyncTimestamp); + //if (XRE_IsParentProcess()) { MonitorAutoLock lock(mRefreshTickLock); aVsyncTimestamp = mRecentVsync; mProcessedVsync = true; - } else { - mLastChildTick = TimeStamp::Now(); - } + //} else { + // mLastChildTick = TimeStamp::Now(); + //} MOZ_ASSERT(aVsyncTimestamp <= TimeStamp::Now()); // We might have a problem that we call ~VsyncRefreshDriverTimer() before @@ -500,9 +504,10 @@ private: virtual ~VsyncRefreshDriverTimer() { - if (XRE_IsParentProcess()) { + //if (XRE_IsParentProcess()) { mVsyncDispatcher->SetParentRefreshTimer(nullptr); mVsyncDispatcher = nullptr; +#if(0) } else { // Since the PVsyncChild actors live through the life of the process, just // send the unobserveVsync message to disable vsync event. We don't need @@ -512,6 +517,7 @@ private: mVsyncChild->SetVsyncObserver(nullptr); mVsyncChild = nullptr; } +#endif // Detach current vsync timer from this VsyncObserver. The observer will no // longer tick this timer. @@ -542,11 +548,11 @@ private: // Protect updates to `sActiveVsyncTimers`. MOZ_ASSERT(NS_IsMainThread()); - if (XRE_IsParentProcess()) { + //if (XRE_IsParentProcess()) { mVsyncDispatcher->SetParentRefreshTimer(nullptr); - } else { - Unused << mVsyncChild->SendUnobserve(); - } + //} else { + // Unused << mVsyncChild->SendUnobserve(); + //} MOZ_ASSERT(sActiveVsyncTimers > 0); --sActiveVsyncTimers; @@ -679,6 +685,8 @@ protected: virtual void ScheduleNextTick(TimeStamp aNowTime) { + return; // speculative from bug 1352205 and TenFourFox issue 446 + if (mDisableAfterMilliseconds > 0.0 && mNextTickDuration > mDisableAfterMilliseconds) { @@ -828,14 +836,14 @@ CreateVsyncRefreshTimer() return; } - if (XRE_IsParentProcess()) { + //if (XRE_IsParentProcess()) { // Make sure all vsync systems are ready. gfxPlatform::GetPlatform(); // In parent process, we don't need to use ipc. We can create the // VsyncRefreshDriverTimer directly. sRegularRateTimer = new VsyncRefreshDriverTimer(); return; - } + //} #ifdef MOZ_NUWA_PROCESS // NUWA process will just use software timer. Use NuwaAddFinalConstructor() @@ -935,7 +943,7 @@ nsRefreshDriver::GetThrottledTimerInterval() if (rate <= 0) { rate = DEFAULT_THROTTLED_FRAME_RATE; } - return 1000.0 / rate; + return 3000.0 / rate; } /* static */ mozilla::TimeDuration @@ -1874,7 +1882,7 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, TimeStamp aNowTime) } } -#ifndef ANDROID /* bug 1142079 */ +#if(0) mozilla::Telemetry::AccumulateTimeDelta(mozilla::Telemetry::REFRESH_DRIVER_TICK, mTickStart); #endif diff --git a/toolkit/xre/nsEmbedFunctions.cpp b/toolkit/xre/nsEmbedFunctions.cpp index e735bf626..2c1433919 100644 --- a/toolkit/xre/nsEmbedFunctions.cpp +++ b/toolkit/xre/nsEmbedFunctions.cpp @@ -237,6 +237,12 @@ XRE_SetProcessType(const char* aProcessTypeString) i < (int) ArrayLength(kGeckoProcessTypeString); ++i) { if (!strcmp(kGeckoProcessTypeString[i], aProcessTypeString)) { + // For purposes of TenFourFox issue 441, assert that we never, ever + // launch a child process (it would immediately crash anyway due to + // defective IPC, but let's be paranoid and make it crash predictably). + if (MOZ_UNLIKELY(static_cast(i) != GeckoProcessType_Default)) + MOZ_CRASH("TenFourFox does not support E10S child processes."); + sChildProcessType = static_cast(i); return; } diff --git a/xpfe/appshell/nsAppShellService.cpp b/xpfe/appshell/nsAppShellService.cpp index 5632ae8b2..7e5d81753 100644 --- a/xpfe/appshell/nsAppShellService.cpp +++ b/xpfe/appshell/nsAppShellService.cpp @@ -132,33 +132,30 @@ nsAppShellService::CreateHiddenWindowHelper(bool aIsPrivate) rv = NS_NewURI(getter_AddRefs(url), hiddenWindowURL); NS_ENSURE_SUCCESS(rv, rv); - RefPtr newWindow; - if (!aIsPrivate) { - rv = JustCreateTopWindow(nullptr, url, - chromeMask, initialWidth, initialHeight, - true, nullptr, getter_AddRefs(newWindow)); - NS_ENSURE_SUCCESS(rv, rv); - - mHiddenWindow.swap(newWindow); - } else { - // Create the hidden private window + if (aIsPrivate) { chromeMask |= nsIWebBrowserChrome::CHROME_PRIVATE_WINDOW; - - rv = JustCreateTopWindow(nullptr, url, - chromeMask, initialWidth, initialHeight, - true, nullptr, getter_AddRefs(newWindow)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr docShell; - newWindow->GetDocShell(getter_AddRefs(docShell)); - if (docShell) { - docShell->SetAffectPrivateSessionLifetime(false); - } - - mHiddenPrivateWindow.swap(newWindow); } - // RegisterTopLevelWindow(newWindow); -- Mac only + RefPtr newWindow; + rv = JustCreateTopWindow(nullptr, url, + chromeMask, initialWidth, initialHeight, + true, nullptr, getter_AddRefs(newWindow)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr docShell; + newWindow->GetDocShell(getter_AddRefs(docShell)); + if (docShell) { + docShell->SetIsActive(false); + if (aIsPrivate) { + docShell->SetAffectPrivateSessionLifetime(false); + } + } + + if (aIsPrivate) { + mHiddenPrivateWindow.swap(newWindow); + } else { + mHiddenWindow.swap(newWindow); + } return NS_OK; }