Index: Mk/bsd.gecko.mk =================================================================== --- Mk/bsd.gecko.mk +++ Mk/bsd.gecko.mk @@ -381,7 +381,7 @@ .endif .if ${PORT_OPTIONS:MRUST} || ${MOZILLA_VER:R:R} >= 54 -BUILD_DEPENDS+= ${RUST_PORT:T}>=1.24:${RUST_PORT} +BUILD_DEPENDS+= ${RUST_PORT:T}>=1.27:${RUST_PORT} RUST_PORT?= lang/rust . if ${MOZILLA_VER:R:R} < 54 MOZ_OPTIONS+= --enable-rust Index: www/firefox/Makefile =================================================================== --- www/firefox/Makefile +++ www/firefox/Makefile @@ -2,13 +2,12 @@ # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 62.0b10 +DISTVERSION= 63.0a1.427619 PORTEPOCH= 1 CATEGORIES= www ipv6 -MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source -DISTNAME= ${PORTNAME}-${PORTVERSION:R} -DISTFILES= ${DISTNAME}${PORTVERSION:E}.source${EXTRACT_SUFX} +MASTER_SITES= https://hg.mozilla.org/mozilla-central/archive/ +DIST_SUBDIR= ${PORTNAME} +DISTNAME= 9daa53881b7ae80bf6b093dac5d7744cf7fd18b1 MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla @@ -17,7 +16,7 @@ nss>=3.38:security/nss \ icu>=59.1,1:devel/icu \ libevent>=2.1.8:devel/libevent \ - harfbuzz>=1.7.6:print/harfbuzz \ + harfbuzz>=1.8.4:print/harfbuzz \ graphite2>=1.3.11:graphics/graphite2 \ png>=1.6.34:graphics/png \ libvorbis>=1.3.6,3:audio/libvorbis \ @@ -34,9 +33,10 @@ CONFLICTS_INSTALL= firefox-esr MOZ_PKGCONFIG_FILES= # empty USE_MOZILLA= -cairo -hunspell -soundtouch +WRKSRC= ${WRKDIR}/${MASTER_SITES:M*hg*:S,/archive/,,:T}-${DISTNAME} USE_GL= gl -USES= tar:xz +USES= tar:bzip2 FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png @@ -49,6 +49,8 @@ .include "${.CURDIR}/../../www/firefox/Makefile.options" post-patch: + @${REINPLACE_CMD} -e '/AM_PATH_NSS/s/3\.39/3.38/' \ + ${WRKSRC}/old-configure.in @${REINPLACE_CMD} -e 's/%u/%U/' -e '/X-MultipleArgs/d' \ -e '/^Icon/s/=.*/=${FIREFOX_ICON:R}/' \ ${FIREFOX_DESKTOP} Index: www/firefox/distinfo =================================================================== --- www/firefox/distinfo +++ www/firefox/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1532021256 -SHA256 (firefox-62.0b10.source.tar.xz) = 8c12cb161bb5857d3709b4019c9f464e8eab0251fa48d92cfb0a1ce9f44afa4d -SIZE (firefox-62.0b10.source.tar.xz) = 258691348 +TIMESTAMP = 1532127112 +SHA256 (firefox/9daa53881b7ae80bf6b093dac5d7744cf7fd18b1.tar.bz2) = 29962a34671489b7b9dff33a3e6436cf1ee42198ddfdb5d36acc44f5703bf019 +SIZE (firefox/9daa53881b7ae80bf6b093dac5d7744cf7fd18b1.tar.bz2) = 322449081 Index: www/firefox/files/patch-bug1288587 =================================================================== --- www/firefox/files/patch-bug1288587 +++ www/firefox/files/patch-bug1288587 @@ -43,13 +43,13 @@ topobjdir = topobjdir[:-7] with LineIO(lambda l: log.info(l)) as out: -@@ -219,17 +226,20 @@ def virtualenv_python(env_python, build_env, mozconfig, help): +@@ -255,17 +262,20 @@ def virtualenv_python(env_python, build_env, mozconfig log.info('Creating Python environment') manager.build(python) python = normsep(manager.python_path) - if python != normsep(sys.executable): + if not normsep(sys.executable).startswith(normsep(virtualenvs_root)): log.info('Reexecuting in the virtualenv') if env_python: - del os.environ['PYTHON'] Index: www/firefox/files/patch-bug1448770 =================================================================== --- www/firefox/files/patch-bug1448770 +++ www/firefox/files/patch-bug1448770 @@ -1,10 +1,10 @@ Disable GL_EXT_debug_marker due to crashes on x86 with Mesa drivers. -diff --git gfx/webrender/src/query.rs gfx/webrender/src/query.rs +diff --git gfx/webrender/src/device/query_gl.rs gfx/webrender/src/device/query_gl.rs index 999abc749115..68850ef025e4 100644 ---- gfx/webrender/src/query.rs -+++ gfx/webrender/src/query.rs -@@ -274,17 +274,20 @@ pub struct GpuMarker { +--- gfx/webrender/src/device/query_gl.rs ++++ gfx/webrender/src/device/query_gl.rs +@@ -278,17 +278,20 @@ pub struct GpuMarker { impl GpuMarker { fn new(gl: &Rc, message: &str) -> Self { Index: www/firefox/files/patch-bug1473732 =================================================================== --- /dev/null +++ www/firefox/files/patch-bug1473732 @@ -0,0 +1,39 @@ +Base default number of OMTP workers on the number of logical CPU cores. + +system-info is a stub on Tier3 platforms while physical vs. logical +difference only matters for hyper-threading. As hyper-threading +is usually available on CPUs with more than 2 physical cores this +change has no impact there as the default is clamped to [1, 4]. +However, on Intel i3-* CPUs with 2 physical and 4 logical cores this +bumps the default from 1 to 3. + +diff --git gfx/layers/PaintThread.cpp gfx/layers/PaintThread.cpp +index ef268f47651b6..f8929d11ae156 100644 +--- gfx/layers/PaintThread.cpp ++++ gfx/layers/PaintThread.cpp +@@ -22,7 +22,7 @@ + #include "mozilla/SyncRunnable.h" + #include "nsIPropertyBag2.h" + #include "nsServiceManagerUtils.h" +-#include "nsSystemInfo.h" ++#include "prsystem.h" + + // Uncomment the following line to dispatch sync runnables when + // painting so that rasterization happens synchronously from +@@ -156,15 +156,7 @@ PaintThread::AddRef() + /* static */ int32_t + PaintThread::CalculatePaintWorkerCount() + { +- int32_t cpuCores = 1; +- nsCOMPtr systemInfo = do_GetService(NS_SYSTEMINFO_CONTRACTID); +- if (systemInfo) { +- nsresult rv = systemInfo->GetPropertyAsInt32(NS_LITERAL_STRING("cpucores"), &cpuCores); +- if (NS_FAILED(rv)) { +- cpuCores = 1; +- } +- } +- ++ int32_t cpuCores = PR_GetNumberOfProcessors(); + int32_t workerCount = gfxPrefs::LayersOMTPPaintWorkers(); + + // If not manually specified, default to (cpuCores * 3) / 4, and clamp Index: www/firefox/files/patch-bug1477129 =================================================================== --- /dev/null +++ www/firefox/files/patch-bug1477129 @@ -0,0 +1,504 @@ +commit fa3b659a54dc +Author: Kris Maglione +Date: Thu Jul 19 18:14:13 2018 -0700 + + Bug 1477129: Part 1 - Handle BlobImpls when move constructing StructuredCloneData. r?baku + + MozReview-Commit-ID: F1pm9qTpGCV +--- + dom/ipc/StructuredCloneData.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git dom/ipc/StructuredCloneData.cpp dom/ipc/StructuredCloneData.cpp +index 7e15fc7d79cb9..5502659c08db7 100644 +--- dom/ipc/StructuredCloneData.cpp ++++ dom/ipc/StructuredCloneData.cpp +@@ -58,6 +58,7 @@ StructuredCloneData::~StructuredCloneData() + StructuredCloneData& + StructuredCloneData::operator=(StructuredCloneData&& aOther) + { ++ mBlobImplArray = std::move(aOther.mBlobImplArray); + mExternalData = std::move(aOther.mExternalData); + mSharedData = std::move(aOther.mSharedData); + mIPCStreams = std::move(aOther.mIPCStreams); + +commit d5f75845a151 +Author: Kris Maglione +Date: Fri Jul 20 14:44:00 2018 -0700 + + Bug 1477129: Part 2 - Fix SharedMap blob handling, and add tests. r?erahm + + We were previously failing to send blobs to new content processes, which was a + problem for those processes. But we were also attempting to extract blobs for + new entries that we were serializing after we'd extracted their structured + clone data, and their blob array had been thrown away (which was a problem for + all processes). + + This patch fixes both problems. + + MozReview-Commit-ID: 3qbAmUTA85g +--- + dom/ipc/ContentChild.cpp | 20 ++++----- + dom/ipc/ContentChild.h | 4 +- + dom/ipc/ContentParent.cpp | 8 ++-- + dom/ipc/PContent.ipdl | 4 +- + dom/ipc/SharedMap.cpp | 49 ++++++++++++--------- + dom/ipc/SharedMap.h | 12 +++++- + dom/ipc/tests/test_sharedMap.js | 92 +++++++++++++++++++++++++++++++++++++++- + js/xpconnect/loader/AutoMemMap.h | 2 +- + 8 files changed, 145 insertions(+), 46 deletions(-) + +diff --git dom/ipc/ContentChild.cpp dom/ipc/ContentChild.cpp +index a13c2ba0156d7..b6f212d1c4018 100644 +--- dom/ipc/ContentChild.cpp ++++ dom/ipc/ContentChild.cpp +@@ -593,9 +593,7 @@ mozilla::ipc::IPCResult + ContentChild::RecvSetXPCOMProcessAttributes(const XPCOMInitData& aXPCOMInit, + const StructuredCloneData& aInitialData, + nsTArray&& aLookAndFeelIntCache, +- nsTArray&& aFontList, +- const FileDescriptor& aSharedDataMapFile, +- const uint32_t& aSharedDataMapSize) ++ nsTArray&& aFontList) + { + if (!sShutdownCanary) { + return IPC_OK(); +@@ -607,9 +605,6 @@ ContentChild::RecvSetXPCOMProcessAttributes(const XPCOMInitData& aXPCOMInit, + InitXPCOM(aXPCOMInit, aInitialData); + InitGraphicsDeviceData(aXPCOMInit.contentDeviceData()); + +- mSharedData = new SharedMap(ProcessGlobal::Get(), aSharedDataMapFile, +- aSharedDataMapSize); +- + return IPC_OK(); + } + +@@ -2573,15 +2568,18 @@ ContentChild::RecvUpdateSharedData(const FileDescriptor& aMapFile, + nsTArray&& aBlobs, + nsTArray&& aChangedKeys) + { +- if (mSharedData) { +- nsTArray> blobImpls(aBlobs.Length()); +- for (auto& ipcBlob : aBlobs) { +- blobImpls.AppendElement(IPCBlobUtils::Deserialize(ipcBlob)); +- } ++ nsTArray> blobImpls(aBlobs.Length()); ++ for (auto& ipcBlob : aBlobs) { ++ blobImpls.AppendElement(IPCBlobUtils::Deserialize(ipcBlob)); ++ } + ++ if (mSharedData) { + mSharedData->Update(aMapFile, aMapSize, + std::move(blobImpls), + std::move(aChangedKeys)); ++ } else { ++ mSharedData = new SharedMap(ProcessGlobal::Get(), aMapFile, ++ aMapSize, std::move(blobImpls)); + } + + return IPC_OK(); +diff --git dom/ipc/ContentChild.h dom/ipc/ContentChild.h +index 0fe1b6069bd39..a775ee13c64b0 100644 +--- dom/ipc/ContentChild.h ++++ dom/ipc/ContentChild.h +@@ -626,9 +626,7 @@ public: + RecvSetXPCOMProcessAttributes(const XPCOMInitData& aXPCOMInit, + const StructuredCloneData& aInitialData, + nsTArray&& aLookAndFeelIntCache, +- nsTArray&& aFontList, +- const FileDescriptor& aSharedDataMapFile, +- const uint32_t& aSharedDataMapSize) override; ++ nsTArray&& aFontList) override; + + virtual mozilla::ipc::IPCResult + RecvProvideAnonymousTemporaryFile(const uint64_t& aID, const FileDescOrError& aFD) override; +diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp +index da362e1a40d99..56a668ed57edd 100644 +--- dom/ipc/ContentParent.cpp ++++ dom/ipc/ContentParent.cpp +@@ -2339,12 +2339,12 @@ ContentParent::InitInternal(ProcessPriority aInitialPriority) + ScreenManager& screenManager = ScreenManager::GetSingleton(); + screenManager.CopyScreensToRemote(this); + ++ Unused << SendSetXPCOMProcessAttributes(xpcomInit, initialData, lnfCache, ++ fontList); ++ + ipc::WritableSharedMap* sharedData = nsFrameMessageManager::sParentProcessManager->SharedData(); + sharedData->Flush(); +- +- Unused << SendSetXPCOMProcessAttributes(xpcomInit, initialData, lnfCache, +- fontList, sharedData->CloneMapFile(), +- sharedData->MapSize()); ++ sharedData->SendTo(this); + + nsCOMPtr registrySvc = nsChromeRegistry::GetService(); + nsChromeRegistryChrome* chromeRegistry = +diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl +index 9e61cadbdb151..2013e8e64b055 100644 +--- dom/ipc/PContent.ipdl ++++ dom/ipc/PContent.ipdl +@@ -517,9 +517,7 @@ child: + StructuredCloneData initialData, + LookAndFeelInt[] lookAndFeelIntCache, + /* used on MacOSX and Linux only: */ +- SystemFontListEntry[] systemFontList, +- FileDescriptor sharedDataMapFile, +- uint32_t sharedDataMapSize); ++ SystemFontListEntry[] systemFontList); + + // Notify child that last-pb-context-exited notification was observed + async LastPrivateDocShellDestroyed(); +diff --git dom/ipc/SharedMap.cpp dom/ipc/SharedMap.cpp +index b028281315bdc..23e12185ebf58 100644 +--- dom/ipc/SharedMap.cpp ++++ dom/ipc/SharedMap.cpp +@@ -43,8 +43,9 @@ SharedMap::SharedMap() + {} + + SharedMap::SharedMap(nsIGlobalObject* aGlobal, const FileDescriptor& aMapFile, +- size_t aMapSize) ++ size_t aMapSize, nsTArray>&& aBlobs) + : DOMEventTargetHelper(aGlobal) ++ , mBlobImpls(std::move(aBlobs)) + { + mMapFile.reset(new FileDescriptor(aMapFile)); + mMapSize = aMapSize; +@@ -107,7 +108,7 @@ SharedMap::Entry::Read(JSContext* aCx, + } + + FileDescriptor +-SharedMap::CloneMapFile() ++SharedMap::CloneMapFile() const + { + if (mMap.initialized()) { + return mMap.cloneHandle(); +@@ -283,8 +284,9 @@ SharedMap* + WritableSharedMap::GetReadOnly() + { + if (!mReadOnly) { ++ nsTArray> blobs(mBlobImpls); + mReadOnly = new SharedMap(ProcessGlobal::Get(), CloneMapFile(), +- MapSize()); ++ MapSize(), std::move(blobs)); + } + return mReadOnly; + } +@@ -349,14 +351,15 @@ WritableSharedMap::Serialize() + for (auto& entry : IterHash(mEntries)) { + AlignTo(&offset, kStructuredCloneAlign); + +- entry->ExtractData(&ptr[offset], offset, blobImpls.Length()); ++ size_t blobOffset = blobImpls.Length(); ++ if (entry->BlobCount()) { ++ blobImpls.AppendElements(entry->Blobs()); ++ } ++ ++ entry->ExtractData(&ptr[offset], offset, blobOffset); + entry->Code(header); + + offset += entry->Size(); +- +- if (entry->BlobCount()) { +- mBlobImpls.AppendElements(entry->Blobs()); +- } + } + + mBlobImpls = std::move(blobImpls); +@@ -374,6 +377,23 @@ WritableSharedMap::Serialize() + return Ok(); + } + ++void ++WritableSharedMap::SendTo(ContentParent* aParent) const ++{ ++ nsTArray blobs(mBlobImpls.Length()); ++ ++ for (auto& blobImpl : mBlobImpls) { ++ nsresult rv = IPCBlobUtils::Serialize(blobImpl, aParent, ++ *blobs.AppendElement()); ++ if (NS_WARN_IF(NS_FAILED(rv))) { ++ continue; ++ } ++ } ++ ++ Unused << aParent->SendUpdateSharedData(CloneMapFile(), mMap.size(), ++ blobs, mChangedKeys); ++} ++ + void + WritableSharedMap::BroadcastChanges() + { +@@ -388,18 +408,7 @@ WritableSharedMap::BroadcastChanges() + nsTArray parents; + ContentParent::GetAll(parents); + for (auto& parent : parents) { +- nsTArray blobs(mBlobImpls.Length()); +- +- for (auto& blobImpl : mBlobImpls) { +- nsresult rv = IPCBlobUtils::Serialize(blobImpl, parent, +- *blobs.AppendElement()); +- if (NS_WARN_IF(NS_FAILED(rv))) { +- continue; +- } +- } +- +- Unused << parent->SendUpdateSharedData(CloneMapFile(), mMap.size(), +- blobs, mChangedKeys); ++ SendTo(parent); + } + + if (mReadOnly) { +diff --git dom/ipc/SharedMap.h dom/ipc/SharedMap.h +index c89c42de0a848..70971d7376809 100644 +--- dom/ipc/SharedMap.h ++++ dom/ipc/SharedMap.h +@@ -22,6 +22,9 @@ class nsIGlobalObject; + + namespace mozilla { + namespace dom { ++ ++class ContentParent; ++ + namespace ipc { + + /** +@@ -58,7 +61,8 @@ public: + + SharedMap(); + +- SharedMap(nsIGlobalObject* aGlobal, const FileDescriptor&, size_t); ++ SharedMap(nsIGlobalObject* aGlobal, const FileDescriptor&, size_t, ++ nsTArray>&& aBlobs); + + // Returns true if the map contains the given (UTF-8) key. + bool Has(const nsACString& name); +@@ -105,7 +109,7 @@ public: + * memory region for this map. The file descriptor may be passed between + * processes, and used to update corresponding instances in child processes. + */ +- FileDescriptor CloneMapFile(); ++ FileDescriptor CloneMapFile() const; + + /** + * Returns the size of the memory mapped region that backs this map. Must be +@@ -346,6 +350,10 @@ public: + void Flush(); + + ++ // Sends the current set of shared map data to the given content process. ++ void SendTo(ContentParent* aContentParent) const; ++ ++ + /** + * Returns the read-only SharedMap instance corresponding to this + * WritableSharedMap for use in the parent process. +diff --git dom/ipc/tests/test_sharedMap.js dom/ipc/tests/test_sharedMap.js +index a53db5d0f8668..af7858be6e4b5 100644 +--- dom/ipc/tests/test_sharedMap.js ++++ dom/ipc/tests/test_sharedMap.js +@@ -2,14 +2,30 @@ + + ChromeUtils.import("resource://gre/modules/AppConstants.jsm"); + ChromeUtils.import("resource://gre/modules/Services.jsm"); ++ChromeUtils.import("resource://gre/modules/ExtensionUtils.jsm"); + ChromeUtils.import("resource://testing-common/ExtensionXPCShellUtils.jsm"); + ++const PROCESS_COUNT_PREF = "dom.ipc.processCount"; ++ + const remote = AppConstants.platform !== "android"; + + ExtensionTestUtils.init(this); + + let contentPage; + ++Cu.importGlobalProperties(["Blob", "FileReader"]); ++ ++async function readBlob(key, sharedData = Services.cpmm.sharedData) { ++ let reader = new FileReader(); ++ reader.readAsText(sharedData.get(key)); ++ await ExtensionUtils.promiseEvent(reader, "loadend"); ++ return reader.result; ++} ++ ++function getKey(key, sharedData = Services.cpmm.sharedData) { ++ return sharedData.get(key); ++} ++ + function getContents(sharedMap = Services.cpmm.sharedData) { + return { + keys: Array.from(sharedMap.keys()), +@@ -60,9 +76,23 @@ async function checkContentMaps(expected, parentOnly = false) { + } + } + ++async function loadContentPage() { ++ let page = await ExtensionTestUtils.loadContentPage("about:blank", {remote}); ++ registerCleanupFunction(() => page.close()); ++ ++ page.addFrameScriptHelper(` ++ ChromeUtils.import("resource://gre/modules/ExtensionUtils.jsm"); ++ Cu.importGlobalProperties(["FileReader"]); ++ `); ++ return page; ++} ++ + add_task(async function setup() { +- contentPage = await ExtensionTestUtils.loadContentPage("about:blank", {remote}); +- registerCleanupFunction(() => contentPage.close()); ++ // Start with one content process so that we can increase the number ++ // later and test the behavior of a fresh content process. ++ Services.prefs.setIntPref(PROCESS_COUNT_PREF, 1); ++ ++ contentPage = await loadContentPage(); + }); + + add_task(async function test_sharedMap() { +@@ -160,3 +190,61 @@ add_task(async function test_sharedMap() { + checkParentMap(expected); + await checkContentMaps(expected); + }); ++ ++add_task(async function test_blobs() { ++ let {sharedData} = Services.ppmm; ++ ++ let text = [ ++ "The quick brown fox jumps over the lazy dog", ++ "Lorem ipsum dolor sit amet, consectetur adipiscing elit", ++ "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", ++ ]; ++ let blobs = text.map(str => new Blob([str])); ++ ++ let data = {foo: {bar: "baz"}}; ++ ++ sharedData.set("blob0", blobs[0]); ++ sharedData.set("blob1", blobs[1]); ++ sharedData.set("data", data); ++ ++ equal(await readBlob("blob0", sharedData), text[0], "Expected text for blob0 in parent ppmm"); ++ ++ sharedData.flush(); ++ ++ equal(await readBlob("blob0", sharedData), text[0], "Expected text for blob0 in parent ppmm"); ++ equal(await readBlob("blob1", sharedData), text[1], "Expected text for blob1 in parent ppmm"); ++ ++ equal(await readBlob("blob0"), text[0], "Expected text for blob0 in parent cpmm"); ++ equal(await readBlob("blob1"), text[1], "Expected text for blob1 in parent cpmm"); ++ ++ equal(await contentPage.spawn("blob0", readBlob), text[0], "Expected text for blob0 in child 1 cpmm"); ++ equal(await contentPage.spawn("blob1", readBlob), text[1], "Expected text for blob1 in child 1 cpmm"); ++ ++ // Start a second child process ++ Services.prefs.setIntPref(PROCESS_COUNT_PREF, 2); ++ ++ let page2 = await loadContentPage(); ++ ++ equal(await page2.spawn("blob0", readBlob), text[0], "Expected text for blob0 in child 2 cpmm"); ++ equal(await page2.spawn("blob1", readBlob), text[1], "Expected text for blob1 in child 2 cpmm"); ++ ++ sharedData.set("blob0", blobs[2]); ++ ++ equal(await readBlob("blob0", sharedData), text[2], "Expected text for blob0 in parent ppmm"); ++ ++ sharedData.flush(); ++ ++ equal(await readBlob("blob0", sharedData), text[2], "Expected text for blob0 in parent ppmm"); ++ equal(await readBlob("blob1", sharedData), text[1], "Expected text for blob1 in parent ppmm"); ++ ++ equal(await readBlob("blob0"), text[2], "Expected text for blob0 in parent cpmm"); ++ equal(await readBlob("blob1"), text[1], "Expected text for blob1 in parent cpmm"); ++ ++ equal(await contentPage.spawn("blob0", readBlob), text[2], "Expected text for blob0 in child 1 cpmm"); ++ equal(await contentPage.spawn("blob1", readBlob), text[1], "Expected text for blob1 in child 1 cpmm"); ++ ++ equal(await page2.spawn("blob0", readBlob), text[2], "Expected text for blob0 in child 2 cpmm"); ++ equal(await page2.spawn("blob1", readBlob), text[1], "Expected text for blob1 in child 2 cpmm"); ++ ++ deepEqual(await page2.spawn("data", getKey), data, "Expected data for data key in child 2 cpmm"); ++}); +diff --git js/xpconnect/loader/AutoMemMap.h js/xpconnect/loader/AutoMemMap.h +index e1b0bf6d75c4f..9d1f02255ac24 100644 +--- js/xpconnect/loader/AutoMemMap.h ++++ js/xpconnect/loader/AutoMemMap.h +@@ -51,7 +51,7 @@ class AutoMemMap + + void reset(); + +- bool initialized() { return addr; } ++ bool initialized() const { return addr; } + + uint32_t size() const { return size_; } + + +commit e8827d892d6f +Author: Kris Maglione +Date: Thu Jul 19 18:18:27 2018 -0700 + + Bug 1477129: Part 3 - Re-enable e10s on FreeBSD. r?froydnj + + Backed out changeset 197fcba26a38 + + MozReview-Commit-ID: 4OOmP91hKXQ +--- + toolkit/content/aboutSupport.js | 5 ++++- + toolkit/locales/en-US/chrome/global/aboutSupport.properties | 2 +- + toolkit/xre/nsAppRunner.cpp | 8 +------- + 3 files changed, 6 insertions(+), 9 deletions(-) + +diff --git toolkit/content/aboutSupport.js toolkit/content/aboutSupport.js +index 3c44097d20295..35a40f0344bd9 100644 +--- toolkit/content/aboutSupport.js ++++ toolkit/content/aboutSupport.js +@@ -60,9 +60,12 @@ var snapshotFormatters = { + case 6: + case 7: + case 8: +- case 10: + statusText = strings.GetStringFromName("multiProcessStatus." + data.autoStartStatus); + break; ++ ++ case 10: ++ statusText = (Services.appinfo.OS == "Darwin" ? "OS X 10.6 - 10.8" : "Windows XP"); ++ break; + } + + $("multiprocess-box").textContent = strings.formatStringFromName("multiProcessWindows", +diff --git toolkit/locales/en-US/chrome/global/aboutSupport.properties toolkit/locales/en-US/chrome/global/aboutSupport.properties +index c04743a3e3394..96b8f9660ca8f 100644 +--- toolkit/locales/en-US/chrome/global/aboutSupport.properties ++++ toolkit/locales/en-US/chrome/global/aboutSupport.properties +@@ -138,8 +138,8 @@ multiProcessStatus.5 = Disabled by lack of graphics hardware acceleration on Mac + multiProcessStatus.6 = Disabled by unsupported text input + multiProcessStatus.7 = Disabled by add-ons + multiProcessStatus.8 = Disabled forcibly ++# No longer in use (bug 1296353) but we might bring this back. + multiProcessStatus.9 = Disabled by graphics hardware acceleration on Windows XP +-multiProcessStatus.10 = Disabled by operating system bug + multiProcessStatus.unknown = Unknown status + + asyncPanZoom = Asynchronous Pan/Zoom +diff --git toolkit/xre/nsAppRunner.cpp toolkit/xre/nsAppRunner.cpp +index 2d0aa2ba804d9..5df9d811d3f20 100644 +--- toolkit/xre/nsAppRunner.cpp ++++ toolkit/xre/nsAppRunner.cpp +@@ -5155,7 +5155,7 @@ enum { + // kE10sDisabledForAddons = 7, removed in bug 1406212 + kE10sForceDisabled = 8, + // kE10sDisabledForXPAcceleration = 9, removed in bug 1296353 +- kE10sDisabledForOperatingSystem = 10, ++ // kE10sDisabledForOperatingSystem = 10, removed due to xp-eol + }; + + const char* kForceEnableE10sPref = "browser.tabs.remote.force-enable"; +@@ -5186,12 +5186,6 @@ BrowserTabsRemoteAutostart() + status = kE10sDisabledByUser; + } + +-#if defined(__FreeBSD__) +- // sendmsg() packet loss gotten worse, see bug 1475970 +- gBrowserTabsRemoteAutostart = false; +- status = kE10sDisabledForOperatingSystem; +-#endif +- + // Uber override pref for manual testing purposes + if (Preferences::GetBool(kForceEnableE10sPref, false)) { + gBrowserTabsRemoteAutostart = true; Index: www/firefox/files/patch-bug847568 =================================================================== --- www/firefox/files/patch-bug847568 +++ www/firefox/files/patch-bug847568 @@ -249,7 +249,7 @@ +option('--with-system-harfbuzz', + help="Use system harfbuzz (located with pkgconfig)") + -+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.7.4', ++system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.8.4', + when='--with-system-harfbuzz') + +set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True))