Page MenuHomeFreeBSD

D16356.id45654.diff
No OneTemporary

D16356.id45654.diff

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<gl::Gl>, 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<nsIPropertyBag2> 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 <maglione.k@gmail.com>
+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 <maglione.k@gmail.com>
+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<LookAndFeelInt>&& aLookAndFeelIntCache,
+- nsTArray<SystemFontListEntry>&& aFontList,
+- const FileDescriptor& aSharedDataMapFile,
+- const uint32_t& aSharedDataMapSize)
++ nsTArray<SystemFontListEntry>&& 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<IPCBlob>&& aBlobs,
+ nsTArray<nsCString>&& aChangedKeys)
+ {
+- if (mSharedData) {
+- nsTArray<RefPtr<BlobImpl>> blobImpls(aBlobs.Length());
+- for (auto& ipcBlob : aBlobs) {
+- blobImpls.AppendElement(IPCBlobUtils::Deserialize(ipcBlob));
+- }
++ nsTArray<RefPtr<BlobImpl>> 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<LookAndFeelInt>&& aLookAndFeelIntCache,
+- nsTArray<SystemFontListEntry>&& aFontList,
+- const FileDescriptor& aSharedDataMapFile,
+- const uint32_t& aSharedDataMapSize) override;
++ nsTArray<SystemFontListEntry>&& 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<nsIChromeRegistry> 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<RefPtr<BlobImpl>>&& 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<RefPtr<BlobImpl>> 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<IPCBlob> 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<ContentParent*> parents;
+ ContentParent::GetAll(parents);
+ for (auto& parent : parents) {
+- nsTArray<IPCBlob> 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<RefPtr<BlobImpl>>&& 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 <maglione.k@gmail.com>
+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))

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 11, 6:03 AM (19 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28639421
Default Alt Text
D16356.id45654.diff (25 KB)

Event Timeline