aboutsummaryrefslogtreecommitdiff
path: root/www/waterfox
diff options
context:
space:
mode:
authorJan Beich <jbeich@FreeBSD.org>2018-04-11 23:42:56 +0000
committerJan Beich <jbeich@FreeBSD.org>2018-04-11 23:42:56 +0000
commit4d78b321882c4a205ddf3498fa5b4392bfa30a21 (patch)
tree3d6c3f54144501aa5e07ebba5c17db8675e89462 /www/waterfox
parent1143d9c38e7d0f4306d41b4369efc3b67349e303 (diff)
downloadports-4d78b321882c4a205ddf3498fa5b4392bfa30a21.tar.gz
ports-4d78b321882c4a205ddf3498fa5b4392bfa30a21.zip
Notes
Diffstat (limited to 'www/waterfox')
-rw-r--r--www/waterfox/Makefile2
-rw-r--r--www/waterfox/files/patch-bug1388020550
-rw-r--r--www/waterfox/files/patch-bug1444668126
-rw-r--r--www/waterfox/files/patch-bug144523485
-rw-r--r--www/waterfox/files/patch-bug145137648
5 files changed, 395 insertions, 416 deletions
diff --git a/www/waterfox/Makefile b/www/waterfox/Makefile
index 589cac024143..ae408cdc3644 100644
--- a/www/waterfox/Makefile
+++ b/www/waterfox/Makefile
@@ -2,7 +2,7 @@
PORTNAME= waterfox
DISTVERSION= 56.1.0
-PORTREVISION= 8
+PORTREVISION= 9
CATEGORIES= www ipv6
MAINTAINER= jbeich@FreeBSD.org
diff --git a/www/waterfox/files/patch-bug1388020 b/www/waterfox/files/patch-bug1388020
index 744cc3b99e49..5f1b30cd64f6 100644
--- a/www/waterfox/files/patch-bug1388020
+++ b/www/waterfox/files/patch-bug1388020
@@ -1,438 +1,158 @@
-commit 56cb3a82e6f1
+commit fde468da7b64
Author: Andrew Osmond <aosmond@mozilla.com>
-Date: Wed Feb 7 09:33:12 2018 -0500
+Date: Tue Apr 10 09:40:02 2018 -0400
- Bug 1388020. r=nical a=RyanVM
-
- --HG--
- extra : source : fd15c14e5efb1874591f4e113c1ae1c49154804f
+ Bug 1388020. r=nical, a=RyanVM
---
- gfx/layers/client/TextureClient.h | 2 +-
- gfx/layers/composite/TextureHost.cpp | 65 +++++++++++++++++++-----
- gfx/layers/composite/X11TextureHost.cpp | 13 +++--
- gfx/layers/d3d11/TextureD3D11.cpp | 6 +--
- gfx/layers/opengl/MacIOSurfaceTextureHostOGL.cpp | 8 +++
- gfx/layers/opengl/TextureHostOGL.cpp | 25 ++-------
- gfx/tests/gtest/TestLayers.h | 16 ++++++
- gfx/tests/gtest/TestTextureCompatibility.cpp | 12 +++--
- gfx/tests/gtest/TestTextures.cpp | 7 ++-
- gfx/tests/gtest/TextureHelper.h | 3 +-
- 10 files changed, 108 insertions(+), 49 deletions(-)
+ gfx/gl/GLTextureImage.cpp | 3 +++
+ gfx/gl/GLUploadHelpers.cpp | 31 ++++++++++++++++++++++++++++++-
+ gfx/gl/GLUploadHelpers.h | 2 ++
+ gfx/gl/TextureImageEGL.cpp | 4 ++++
+ gfx/layers/composite/TextureHost.cpp | 3 +--
+ gfx/layers/opengl/TextureHostOGL.cpp | 4 +---
+ 6 files changed, 41 insertions(+), 6 deletions(-)
-diff --git gfx/layers/client/TextureClient.h gfx/layers/client/TextureClient.h
-index e56ea21841ad..81be2867ca7a 100644
---- gfx/layers/client/TextureClient.h
-+++ gfx/layers/client/TextureClient.h
-@@ -761,7 +761,7 @@ protected:
- friend void TestTextureClientSurface(TextureClient*, gfxImageSurface*);
- friend void TestTextureClientYCbCr(TextureClient*, PlanarYCbCrData&);
- friend already_AddRefed<TextureHost> CreateTextureHostWithBackend(
-- TextureClient*, LayersBackend&);
-+ TextureClient*, ISurfaceAllocator*, LayersBackend&);
-
- #ifdef GFX_DEBUG_TRACK_CLIENTS_IN_POOL
- public:
-diff --git gfx/layers/composite/TextureHost.cpp gfx/layers/composite/TextureHost.cpp
-index a48a9081e155..e0a74920fbe5 100644
---- gfx/layers/composite/TextureHost.cpp
-+++ gfx/layers/composite/TextureHost.cpp
-@@ -116,15 +116,9 @@ TextureHost::CreateIPDLActor(HostIPCAllocator* aAllocator,
- uint64_t aSerial,
- const wr::MaybeExternalImageId& aExternalImageId)
- {
-- if (aSharedData.type() == SurfaceDescriptor::TSurfaceDescriptorBuffer &&
-- aSharedData.get_SurfaceDescriptorBuffer().data().type() == MemoryOrShmem::Tuintptr_t &&
-- !aAllocator->IsSameProcess())
-- {
-- NS_ERROR("A client process is trying to peek at our address space using a MemoryTexture!");
-- return nullptr;
-- }
- TextureParent* actor = new TextureParent(aAllocator, aSerial, aExternalImageId);
- if (!actor->Init(aSharedData, aLayersBackend, aFlags)) {
-+ actor->ActorDestroy(ipc::IProtocol::ActorDestroyReason::FailedConstructor);
- delete actor;
- return nullptr;
- }
-@@ -232,6 +226,11 @@ TextureHost::Create(const SurfaceDescriptor& aDesc,
-
- #ifdef MOZ_X11
- case SurfaceDescriptor::TSurfaceDescriptorX11: {
-+ if (!aDeallocator->IsSameProcess()) {
-+ NS_ERROR("A client process is trying to peek at our address space using a X11Texture!");
-+ return nullptr;
-+ }
-+
- const SurfaceDescriptorX11& desc = aDesc.get_SurfaceDescriptorX11();
- result = MakeAndAddRef<X11TextureHost>(aFlags, desc);
- break;
-@@ -248,7 +247,7 @@ TextureHost::Create(const SurfaceDescriptor& aDesc,
- MOZ_CRASH("GFX: Unsupported Surface type host");
- }
-
-- if (WrapWithWebRenderTextureHost(aDeallocator, aBackend, aFlags)) {
-+ if (result && WrapWithWebRenderTextureHost(aDeallocator, aBackend, aFlags)) {
- MOZ_ASSERT(aExternalImageId.isSome());
- result = new WebRenderTextureHost(aDesc, aFlags, result, aExternalImageId.ref());
- }
-@@ -269,13 +268,49 @@ CreateBackendIndependentTextureHost(const SurfaceDescriptor& aDesc,
- const MemoryOrShmem& data = bufferDesc.data();
- switch (data.type()) {
- case MemoryOrShmem::TShmem: {
-- result = new ShmemTextureHost(data.get_Shmem(),
-- bufferDesc.desc(),
-- aDeallocator,
-- aFlags);
-+ const ipc::Shmem& shmem = data.get_Shmem();
-+ const BufferDescriptor& desc = bufferDesc.desc();
-+ if (!shmem.IsReadable()) {
-+ // We failed to map the shmem so we can't verify its size. This
-+ // should not be a fatal error, so just create the texture with
-+ // nothing backing it.
-+ result = new ShmemTextureHost(shmem, desc, aDeallocator, aFlags);
-+ break;
-+ }
-+
-+ size_t bufSize = shmem.Size<char>();
-+ size_t reqSize = SIZE_MAX;
-+ switch (desc.type()) {
-+ case BufferDescriptor::TYCbCrDescriptor: {
-+ const YCbCrDescriptor& ycbcr = desc.get_YCbCrDescriptor();
-+ reqSize =
-+ ImageDataSerializer::ComputeYCbCrBufferSize(ycbcr.ySize(), ycbcr.cbCrSize());
-+ break;
-+ }
-+ case BufferDescriptor::TRGBDescriptor: {
-+ const RGBDescriptor& rgb = desc.get_RGBDescriptor();
-+ reqSize = ImageDataSerializer::ComputeRGBBufferSize(rgb.size(), rgb.format());
-+ break;
-+ }
-+ default:
-+ gfxCriticalError() << "Bad buffer host descriptor " << (int)desc.type();
-+ MOZ_CRASH("GFX: Bad descriptor");
-+ }
-+
-+ if (bufSize < reqSize) {
-+ NS_ERROR("A client process gave a shmem too small to fit for its descriptor!");
-+ return nullptr;
-+ }
-+
-+ result = new ShmemTextureHost(shmem, desc, aDeallocator, aFlags);
- break;
- }
- case MemoryOrShmem::Tuintptr_t: {
-+ if (!aDeallocator->IsSameProcess()) {
-+ NS_ERROR("A client process is trying to peek at our address space using a MemoryTexture!");
-+ return nullptr;
-+ }
-+
- result = new MemoryTextureHost(reinterpret_cast<uint8_t*>(data.get_uintptr_t()),
- bufferDesc.desc(),
- aFlags);
-@@ -293,6 +329,11 @@ CreateBackendIndependentTextureHost(const SurfaceDescriptor& aDesc,
- }
- #ifdef XP_WIN
- case SurfaceDescriptor::TSurfaceDescriptorDIB: {
-+ if (!aDeallocator->IsSameProcess()) {
-+ NS_ERROR("A client process is trying to peek at our address space using a DIBTexture!");
-+ return nullptr;
-+ }
-+
- result = new DIBTextureHost(aFlags, aDesc);
- break;
- }
-diff --git gfx/layers/composite/X11TextureHost.cpp gfx/layers/composite/X11TextureHost.cpp
-index e2251f0c531a..94cb3f2f9594 100644
---- gfx/layers/composite/X11TextureHost.cpp
-+++ gfx/layers/composite/X11TextureHost.cpp
-@@ -23,10 +23,9 @@ X11TextureHost::X11TextureHost(TextureFlags aFlags,
- const SurfaceDescriptorX11& aDescriptor)
- : TextureHost(aFlags)
- {
-- RefPtr<gfxXlibSurface> surface = aDescriptor.OpenForeign();
-- mSurface = surface.get();
-+ mSurface = aDescriptor.OpenForeign();
+diff --git gfx/gl/GLTextureImage.cpp gfx/gl/GLTextureImage.cpp
+index c91d558af441..65678432dace 100644
+--- gfx/gl/GLTextureImage.cpp
++++ gfx/gl/GLTextureImage.cpp
+@@ -149,6 +149,9 @@ BasicTextureImage::DirectUpdate(gfx::DataSourceSurface* aSurf, const nsIntRegion
+ &uploadSize,
+ needInit,
+ aFrom);
++ if (mTextureFormat == SurfaceFormat::UNKNOWN) {
++ return false;
++ }
-- if (!(aFlags & TextureFlags::DEALLOCATE_CLIENT)) {
-+ if (mSurface && !(aFlags & TextureFlags::DEALLOCATE_CLIENT)) {
- mSurface->TakePixmap();
- }
+ if (uploadSize > 0) {
+ UpdateUploadSize(uploadSize);
+diff --git gfx/gl/GLUploadHelpers.cpp gfx/gl/GLUploadHelpers.cpp
+index 75165eedf787..ca1c890a486d 100644
+--- gfx/gl/GLUploadHelpers.cpp
++++ gfx/gl/GLUploadHelpers.cpp
+@@ -27,6 +27,23 @@ DataOffset(const IntPoint& aPoint, int32_t aStride, SurfaceFormat aFormat)
+ return data;
}
-@@ -34,7 +33,7 @@ X11TextureHost::X11TextureHost(TextureFlags aFlags,
- bool
- X11TextureHost::Lock()
- {
-- if (!mCompositor) {
-+ if (!mCompositor || !mSurface) {
- return false;
- }
-@@ -75,6 +74,9 @@ X11TextureHost::SetTextureSourceProvider(TextureSourceProvider* aProvider)
- SurfaceFormat
- X11TextureHost::GetFormat() const
- {
-+ if (!mSurface) {
-+ return SurfaceFormat::UNKNOWN;
++static bool
++CheckUploadBounds(const IntSize& aDst, const IntSize& aSrc, const IntPoint& aOffset)
++{
++ if (aOffset.x < 0 || aOffset.y < 0 ||
++ aOffset.x >= aSrc.width ||
++ aOffset.y >= aSrc.height) {
++ MOZ_ASSERT_UNREACHABLE("Offset outside source bounds");
++ return false;
+ }
- gfxContentType type = mSurface->GetContentType();
- #ifdef GL_PROVIDER_GLX
- if (mCompositor->GetBackendType() == LayersBackend::LAYERS_OPENGL) {
-@@ -87,6 +89,9 @@ X11TextureHost::GetFormat() const
- IntSize
- X11TextureHost::GetSize() const
- {
-+ if (!mSurface) {
-+ return IntSize();
++ if (aDst.width > (aSrc.width - aOffset.x) ||
++ aDst.height > (aSrc.height - aOffset.y)) {
++ MOZ_ASSERT_UNREACHABLE("Source has insufficient data");
++ return false;
+ }
- return mSurface->GetSize();
- }
-
-diff --git gfx/layers/d3d11/TextureD3D11.cpp gfx/layers/d3d11/TextureD3D11.cpp
-index 379686418ef0..4ad758849b93 100644
---- gfx/layers/d3d11/TextureD3D11.cpp
-+++ gfx/layers/d3d11/TextureD3D11.cpp
-@@ -763,10 +763,6 @@ CreateTextureHostD3D11(const SurfaceDescriptor& aDesc,
- {
- RefPtr<TextureHost> result;
- switch (aDesc.type()) {
-- case SurfaceDescriptor::TSurfaceDescriptorBuffer: {
-- result = CreateBackendIndependentTextureHost(aDesc, aDeallocator, aBackend, aFlags);
-- break;
-- }
- case SurfaceDescriptor::TSurfaceDescriptorD3D10: {
- result = new DXGITextureHostD3D11(aFlags,
- aDesc.get_SurfaceDescriptorD3D10());
-@@ -778,7 +774,7 @@ CreateTextureHostD3D11(const SurfaceDescriptor& aDesc,
- break;
- }
- default: {
-- NS_WARNING("Unsupported SurfaceDescriptor type");
-+ MOZ_ASSERT_UNREACHABLE("Unsupported SurfaceDescriptor type");
- }
- }
- return result.forget();
-diff --git gfx/layers/opengl/MacIOSurfaceTextureHostOGL.cpp gfx/layers/opengl/MacIOSurfaceTextureHostOGL.cpp
-index 291b0eb3d0dc..f363bb5a7cf7 100644
---- gfx/layers/opengl/MacIOSurfaceTextureHostOGL.cpp
-+++ gfx/layers/opengl/MacIOSurfaceTextureHostOGL.cpp
-@@ -32,6 +32,8 @@ MacIOSurfaceTextureHostOGL::~MacIOSurfaceTextureHostOGL()
- GLTextureSource*
- MacIOSurfaceTextureHostOGL::CreateTextureSourceForPlane(size_t aPlane)
++ return true;
++}
++
+ static GLint GetAddressAlignment(ptrdiff_t aAddress)
{
-+ MOZ_ASSERT(mSurface);
+ if (!(aAddress & 0x7)) {
+@@ -375,6 +392,7 @@ TexImage2DHelper(GLContext* gl,
+ SurfaceFormat
+ UploadImageDataToTexture(GLContext* gl,
+ unsigned char* aData,
++ const gfx::IntSize& aDataSize,
+ int32_t aStride,
+ SurfaceFormat aFormat,
+ const nsIntRegion& aDstRegion,
+@@ -498,6 +516,10 @@ UploadImageDataToTexture(GLContext* gl,
+ // Upload each rect in the region to the texture
+ for (auto iter = aDstRegion.RectIter(); !iter.Done(); iter.Next()) {
+ const IntRect& rect = iter.Get();
++ if (!CheckUploadBounds(rect.Size(), aDataSize, rect.TopLeft())) {
++ return SurfaceFormat::UNKNOWN;
++ }
+
- GLuint textureHandle;
- gl::GLContext* gl = mProvider->GetGLContext();
- gl->fGenTextures(1, &textureHandle);
-@@ -94,11 +96,17 @@ MacIOSurfaceTextureHostOGL::SetTextureSourceProvider(TextureSourceProvider* aPro
+ const unsigned char* rectData =
+ aData + DataOffset(rect.TopLeft(), aStride, aFormat);
- gfx::SurfaceFormat
- MacIOSurfaceTextureHostOGL::GetFormat() const {
-+ if (!mSurface) {
-+ return gfx::SurfaceFormat::UNKNOWN;
-+ }
- return mSurface->GetFormat();
- }
+@@ -534,10 +556,17 @@ UploadSurfaceToTexture(GLContext* gl,
+ int32_t stride = aSurface->Stride();
+ SurfaceFormat format = aSurface->GetFormat();
++ gfx::IntSize size = aSurface->GetSize();
++ if (!CheckUploadBounds(aSize, size, aSrcPoint)) {
++ return SurfaceFormat::UNKNOWN;
++ }
++
+ unsigned char* data = aSurface->GetData() +
+ DataOffset(aSrcPoint, stride, format);
++ size.width -= aSrcPoint.x;
++ size.height -= aSrcPoint.y;
+
+- return UploadImageDataToTexture(gl, data, stride, format,
++ return UploadImageDataToTexture(gl, data, size, stride, format,
+ aDstRegion, aTexture, aSize,
+ aOutUploadSize, aNeedInit,
+ aTextureUnit, aTextureTarget);
+diff --git gfx/gl/GLUploadHelpers.h gfx/gl/GLUploadHelpers.h
+index 866d44adbed0..f732d2b3834f 100644
+--- gfx/gl/GLUploadHelpers.h
++++ gfx/gl/GLUploadHelpers.h
+@@ -28,6 +28,7 @@ class GLContext;
+ * \param gl The GL Context to use.
+ * \param aData Start of image data of surface to upload.
+ * Corresponds to the first pixel of the texture.
++ * \param aDataSize The image data's size.
+ * \param aStride The image data's stride.
+ * \param aFormat The image data's format.
+ * \param aDstRegion Region of the texture to upload.
+@@ -46,6 +47,7 @@ class GLContext;
gfx::SurfaceFormat
- MacIOSurfaceTextureHostOGL::GetReadFormat() const {
-+ if (!mSurface) {
-+ return gfx::SurfaceFormat::UNKNOWN;
-+ }
- return mSurface->GetReadFormat();
- }
+ UploadImageDataToTexture(GLContext* gl,
+ unsigned char* aData,
++ const gfx::IntSize& aDataSize,
+ int32_t aStride,
+ gfx::SurfaceFormat aFormat,
+ const nsIntRegion& aDstRegion,
+diff --git gfx/gl/TextureImageEGL.cpp gfx/gl/TextureImageEGL.cpp
+index 87a547c26925..3bb2987d1da5 100644
+--- gfx/gl/TextureImageEGL.cpp
++++ gfx/gl/TextureImageEGL.cpp
+@@ -119,6 +119,10 @@ TextureImageEGL::DirectUpdate(gfx::DataSourceSurface* aSurf, const nsIntRegion&
+ &uploadSize,
+ needInit,
+ aFrom);
++ if (mTextureFormat == SurfaceFormat::UNKNOWN) {
++ return false;
++ }
++
+ if (uploadSize > 0) {
+ UpdateUploadSize(uploadSize);
+ }
+diff --git gfx/layers/composite/TextureHost.cpp gfx/layers/composite/TextureHost.cpp
+index e7d87e238913..c93037384744 100644
+--- gfx/layers/composite/TextureHost.cpp
++++ gfx/layers/composite/TextureHost.cpp
+@@ -888,8 +888,7 @@ BufferTextureHost::Upload(nsIntRegion *aRegion)
+ mFirstSource = mCompositor->CreateDataTextureSource(mFlags|TextureFlags::RGB_FROM_YCBCR);
+ mFirstSource->SetOwner(this);
+ }
+- mFirstSource->Update(surf, aRegion);
+- return true;
++ return mFirstSource->Update(surf, aRegion);
+ }
+ RefPtr<DataTextureSource> srcY;
diff --git gfx/layers/opengl/TextureHostOGL.cpp gfx/layers/opengl/TextureHostOGL.cpp
-index bdcd8778c10d..2b28c19a126d 100644
+index 02c398b51fe7..ec6ba913123f 100644
--- gfx/layers/opengl/TextureHostOGL.cpp
+++ gfx/layers/opengl/TextureHostOGL.cpp
-@@ -26,10 +26,6 @@
- #include "mozilla/layers/MacIOSurfaceTextureHostOGL.h"
- #endif
-
--#ifdef GL_PROVIDER_GLX
--#include "mozilla/layers/X11TextureHost.h"
--#endif
--
- using namespace mozilla::gl;
- using namespace mozilla::gfx;
-
-@@ -46,14 +42,6 @@ CreateTextureHostOGL(const SurfaceDescriptor& aDesc,
- {
- RefPtr<TextureHost> result;
- switch (aDesc.type()) {
-- case SurfaceDescriptor::TSurfaceDescriptorBuffer: {
-- result = CreateBackendIndependentTextureHost(aDesc,
-- aDeallocator,
-- aBackend,
-- aFlags);
-- break;
-- }
--
- #ifdef MOZ_WIDGET_ANDROID
- case SurfaceDescriptor::TSurfaceTextureDescriptor: {
- const SurfaceTextureDescriptor& desc = aDesc.get_SurfaceTextureDescriptor();
-@@ -88,14 +76,6 @@ CreateTextureHostOGL(const SurfaceDescriptor& aDesc,
- }
- #endif
-
--#ifdef GL_PROVIDER_GLX
-- case SurfaceDescriptor::TSurfaceDescriptorX11: {
-- const auto& desc = aDesc.get_SurfaceDescriptorX11();
-- result = new X11TextureHost(aFlags, desc);
-- break;
-- }
--#endif
--
- case SurfaceDescriptor::TSurfaceDescriptorSharedGLTexture: {
- const auto& desc = aDesc.get_SurfaceDescriptorSharedGLTexture();
- result = new GLTextureHost(aFlags, desc.texture(),
-@@ -105,7 +85,10 @@ CreateTextureHostOGL(const SurfaceDescriptor& aDesc,
- desc.hasAlpha());
- break;
+@@ -161,9 +161,7 @@ TextureImageTextureSourceOGL::Update(gfx::DataSourceSurface* aSurface,
}
-- default: return nullptr;
-+ default: {
-+ MOZ_ASSERT_UNREACHABLE("Unsupported SurfaceDescriptor type");
-+ break;
-+ }
- }
- return result.forget();
- }
-diff --git gfx/tests/gtest/TestLayers.h gfx/tests/gtest/TestLayers.h
-index 18e351f7718c..fc6b750f1c62 100644
---- gfx/tests/gtest/TestLayers.h
-+++ gfx/tests/gtest/TestLayers.h
-@@ -8,6 +8,22 @@
-
- #include "Layers.h"
- #include "nsTArray.h"
-+#include "mozilla/layers/ISurfaceAllocator.h"
-+
-+namespace mozilla {
-+namespace layers {
-+
-+class TestSurfaceAllocator final : public ISurfaceAllocator
-+{
-+public:
-+ TestSurfaceAllocator() {}
-+ ~TestSurfaceAllocator() override {}
-+
-+ bool IsSameProcess() const override { return true; }
-+};
-+
-+} // layers
-+} // mozilla
-
- /* Create layer tree from a simple layer tree description syntax.
- * Each index is either the first letter of the layer type or
-diff --git gfx/tests/gtest/TestTextureCompatibility.cpp gfx/tests/gtest/TestTextureCompatibility.cpp
-index 45db4943ed1c..0815823b81ce 100644
---- gfx/tests/gtest/TestTextureCompatibility.cpp
-+++ gfx/tests/gtest/TestTextureCompatibility.cpp
-@@ -14,6 +14,7 @@
- #include "mozilla/layers/TextureClient.h"
- #include "mozilla/layers/TextureHost.h"
- #include "mozilla/RefPtr.h"
-+#include "TestLayers.h"
- #include "TextureHelper.h"
-
- using mozilla::gfx::Feature;
-@@ -22,6 +23,7 @@ using mozilla::layers::BasicCompositor;
- using mozilla::layers::Compositor;
- using mozilla::layers::CompositorOptions;
- using mozilla::layers::LayersBackend;
-+using mozilla::layers::TestSurfaceAllocator;
- using mozilla::layers::TextureClient;
- using mozilla::layers::TextureHost;
- using mozilla::widget::CompositorWidget;
-@@ -31,8 +33,9 @@ using mozilla::widget::InProcessCompositorWidget;
- * This function will create the possible TextureClient and TextureHost pairs
- * according to the given backend.
- */
--void
-+static void
- CreateTextureWithBackend(LayersBackend& aLayersBackend,
-+ ISurfaceAllocator* aDeallocator,
- nsTArray<RefPtr<TextureClient>>& aTextureClients,
- nsTArray<RefPtr<TextureHost>>& aTextureHosts)
- {
-@@ -43,7 +46,8 @@ CreateTextureWithBackend(LayersBackend& aLayersBackend,
-
- for (uint32_t i = 0; i < aTextureClients.Length(); i++) {
- aTextureHosts.AppendElement(
-- CreateTextureHostWithBackend(aTextureClients[i], aLayersBackend));
-+ CreateTextureHostWithBackend(aTextureClients[i], aDeallocator,
-+ aLayersBackend));
- }
- }
-
-@@ -115,13 +119,15 @@ CheckCompatibilityWithBasicCompositor(LayersBackend aBackends,
- TEST(Gfx, TestTextureCompatibility)
- {
- nsTArray<LayersBackend> backendHints;
-+ RefPtr<TestSurfaceAllocator> deallocator = new TestSurfaceAllocator();
-
- GetPlatformBackends(backendHints);
- for (uint32_t i = 0; i < backendHints.Length(); i++) {
- nsTArray<RefPtr<TextureClient>> textureClients;
- nsTArray<RefPtr<TextureHost>> textureHosts;
-
-- CreateTextureWithBackend(backendHints[i], textureClients, textureHosts);
-+ CreateTextureWithBackend(backendHints[i], deallocator,
-+ textureClients, textureHosts);
- CheckCompatibilityWithBasicCompositor(backendHints[i], textureHosts);
}
- }
-diff --git gfx/tests/gtest/TestTextures.cpp gfx/tests/gtest/TestTextures.cpp
-index 19b94b867117..291eb55ca7e5 100644
---- gfx/tests/gtest/TestTextures.cpp
-+++ gfx/tests/gtest/TestTextures.cpp
-@@ -5,6 +5,7 @@
-
- #include "gtest/gtest.h"
- #include "gmock/gmock.h"
-+#include "TestLayers.h"
-
- #include "mozilla/gfx/2D.h"
- #include "mozilla/gfx/Tools.h"
-@@ -147,7 +148,8 @@ void TestTextureClientSurface(TextureClient* texture, gfxImageSurface* surface)
- ASSERT_NE(descriptor.type(), SurfaceDescriptor::Tnull_t);
-
- // host deserialization
-- RefPtr<TextureHost> host = CreateBackendIndependentTextureHost(descriptor, nullptr,
-+ RefPtr<TestSurfaceAllocator> deallocator = new TestSurfaceAllocator();
-+ RefPtr<TextureHost> host = CreateBackendIndependentTextureHost(descriptor, deallocator,
- LayersBackend::LAYERS_NONE,
- texture->GetFlags());
-@@ -193,7 +195,8 @@ void TestTextureClientYCbCr(TextureClient* client, PlanarYCbCrData& ycbcrData) {
- ASSERT_EQ(ycbcrDesc.stereoMode(), ycbcrData.mStereoMode);
-
- // host deserialization
-- RefPtr<TextureHost> textureHost = CreateBackendIndependentTextureHost(descriptor, nullptr,
-+ RefPtr<TestSurfaceAllocator> deallocator = new TestSurfaceAllocator();
-+ RefPtr<TextureHost> textureHost = CreateBackendIndependentTextureHost(descriptor, deallocator,
- LayersBackend::LAYERS_NONE,
- client->GetFlags());
-
-diff --git gfx/tests/gtest/TextureHelper.h gfx/tests/gtest/TextureHelper.h
-index 144a237b17d4..770f7464f829 100644
---- gfx/tests/gtest/TextureHelper.h
-+++ gfx/tests/gtest/TextureHelper.h
-@@ -140,6 +140,7 @@ CreateTextureClientWithBackend(LayersBackend aLayersBackend)
- */
- already_AddRefed<TextureHost>
- CreateTextureHostWithBackend(TextureClient* aClient,
-+ ISurfaceAllocator* aDeallocator,
- LayersBackend& aLayersBackend)
- {
- if (!aClient) {
-@@ -153,7 +154,7 @@ CreateTextureHostWithBackend(TextureClient* aClient,
- aClient->ToSurfaceDescriptor(descriptor);
-
- wr::MaybeExternalImageId id = Nothing();
-- return TextureHost::Create(descriptor, nullptr, aLayersBackend,
-+ return TextureHost::Create(descriptor, aDeallocator, aLayersBackend,
- aClient->GetFlags(), id);
+- mTexImage->UpdateFromDataSource(aSurface, aDestRegion, aSrcOffset);
+-
+- return true;
++ return mTexImage->UpdateFromDataSource(aSurface, aDestRegion, aSrcOffset);
}
+ void
diff --git a/www/waterfox/files/patch-bug1444668 b/www/waterfox/files/patch-bug1444668
new file mode 100644
index 000000000000..1cec3789db0e
--- /dev/null
+++ b/www/waterfox/files/patch-bug1444668
@@ -0,0 +1,126 @@
+commit cd8b6897bc4b
+Author: Jan de Mooij <jdemooij@mozilla.com>
+Date: Tue Apr 10 15:00:49 2018 +0200
+
+ Bug 1444668 - Avoid allocating large AssemblerBuffers. r=luke, r=bbouvier, a=RyanVM
+
+ --HG--
+ extra : source : d4aad468062493810bdc58e6a18f7322d59d4066
+---
+ js/src/jit/MacroAssembler.cpp | 6 ++++
+ js/src/jit/shared/IonAssemblerBuffer.h | 12 +++-----
+ js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h | 32 +++++++++++++++++++++-
+ 3 files changed, 41 insertions(+), 9 deletions(-)
+
+diff --git js/src/jit/MacroAssembler.cpp js/src/jit/MacroAssembler.cpp
+index bf6d47bebfa0..fed23892021a 100644
+--- js/src/jit/MacroAssembler.cpp
++++ js/src/jit/MacroAssembler.cpp
+@@ -2677,6 +2677,12 @@ MacroAssembler::finish()
+ }
+
+ MacroAssemblerSpecific::finish();
++
++ MOZ_RELEASE_ASSERT(size() <= MaxCodeBytesPerProcess,
++ "AssemblerBuffer should ensure we don't exceed MaxCodeBytesPerProcess");
++
++ if (bytesNeeded() > MaxCodeBytesPerProcess)
++ setOOM();
+ }
+
+ void
+diff --git js/src/jit/shared/IonAssemblerBuffer.h js/src/jit/shared/IonAssemblerBuffer.h
+index b37b7518fdb6..6d4bf405b5ca 100644
+--- js/src/jit/shared/IonAssemblerBuffer.h
++++ js/src/jit/shared/IonAssemblerBuffer.h
+@@ -189,6 +189,10 @@ class AssemblerBuffer
+
+ protected:
+ virtual Slice* newSlice(LifoAlloc& a) {
++ if (size() > MaxCodeBytesPerProcess - sizeof(Slice)) {
++ fail_oom();
++ return nullptr;
++ }
+ Slice* tmp = static_cast<Slice*>(a.alloc(sizeof(Slice)));
+ if (!tmp) {
+ fail_oom();
+@@ -298,6 +297,9 @@ class AssemblerBuffer
+ return bufferSize + tail->length();
+ return bufferSize;
+ }
++ BufferOffset nextOffset() const {
++ return BufferOffset(size());
++ }
+
+ bool oom() const { return m_oom || m_bail; }
+ bool bail() const { return m_bail; }
+@@ -413,12 +415,6 @@ class AssemblerBuffer
+ return getInstBackwards(off, prev, bufferSize - prev->length());
+ }
+
+- BufferOffset nextOffset() const {
+- if (tail)
+- return BufferOffset(bufferSize + tail->length());
+- return BufferOffset(bufferSize);
+- }
+-
+ typedef AssemblerBuffer<SliceSize, Inst> ThisClass;
+
+ class AssemblerBufferInstIterator
+diff --git js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h
+index fa921d91db26..f9a6f5a3ea50 100644
+--- js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h
++++ js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h
+@@ -67,6 +67,33 @@ namespace js {
+
+ namespace jit {
+
++ // AllocPolicy for AssemblerBuffer. OOMs when trying to allocate more than
++ // MaxCodeBytesPerProcess bytes. Use private inheritance to make sure we
++ // explicitly have to expose SystemAllocPolicy methods.
++ class AssemblerBufferAllocPolicy : private SystemAllocPolicy
++ {
++ public:
++ using SystemAllocPolicy::checkSimulatedOOM;
++ using SystemAllocPolicy::reportAllocOverflow;
++ using SystemAllocPolicy::free_;
++
++ template <typename T> T* pod_realloc(T* p, size_t oldSize, size_t newSize) {
++ static_assert(sizeof(T) == 1,
++ "AssemblerBufferAllocPolicy should only be used with byte vectors");
++ MOZ_ASSERT(oldSize <= MaxCodeBytesPerProcess);
++ if (MOZ_UNLIKELY(newSize > MaxCodeBytesPerProcess))
++ return nullptr;
++ return SystemAllocPolicy::pod_realloc<T>(p, oldSize, newSize);
++ }
++ template <typename T> T* pod_malloc(size_t numElems) {
++ static_assert(sizeof(T) == 1,
++ "AssemblerBufferAllocPolicy should only be used with byte vectors");
++ if (MOZ_UNLIKELY(numElems > MaxCodeBytesPerProcess))
++ return nullptr;
++ return SystemAllocPolicy::pod_malloc<T>(numElems);
++ }
++ };
++
+ class AssemblerBuffer
+ {
+ template<size_t size, typename T>
+@@ -87,6 +114,9 @@ namespace jit {
+
+ void ensureSpace(size_t space)
+ {
++ // This should only be called with small |space| values to ensure
++ // we don't overflow below.
++ MOZ_ASSERT(space <= 16);
+ if (MOZ_UNLIKELY(!m_buffer.reserve(m_buffer.length() + space)))
+ oomDetected();
+ }
+@@ -164,7 +194,7 @@ namespace jit {
+ m_buffer.clear();
+ }
+
+- mozilla::Vector<unsigned char, 256, SystemAllocPolicy> m_buffer;
++ mozilla::Vector<unsigned char, 256, AssemblerBufferAllocPolicy> m_buffer;
+ bool m_oom;
+ };
+
diff --git a/www/waterfox/files/patch-bug1445234 b/www/waterfox/files/patch-bug1445234
new file mode 100644
index 000000000000..cbe2fff7e521
--- /dev/null
+++ b/www/waterfox/files/patch-bug1445234
@@ -0,0 +1,85 @@
+commit 66fbcba45541
+Author: Alex Gaynor <agaynor@mozilla.com>
+Date: Mon Apr 9 10:48:09 2018 -0400
+
+ Bug 1445234 - Use ContiguousEnumSerializer for serializing nsCursor. r=smaug, a=RyanVM
+
+ --HG--
+ extra : source : a2385811ffdc30f153b8d5853f198c89020bf5ce
+ extra : amend_source : bc18c122db5db07a99a839f5421b49e9c5229160
+---
+ dom/ipc/PBrowser.ipdl | 3 ++-
+ dom/ipc/TabParent.cpp | 4 ++--
+ dom/ipc/TabParent.h | 4 ++--
+ widget/WidgetMessageUtils.h | 6 ++++++
+ 4 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git dom/ipc/PBrowser.ipdl dom/ipc/PBrowser.ipdl
+index b1cf9efbe964..024ebc5b6cf7 100644
+--- dom/ipc/PBrowser.ipdl
++++ dom/ipc/PBrowser.ipdl
+@@ -69,6 +69,7 @@ using mozilla::CommandInt from "mozilla/EventForwards.h";
+ using mozilla::WritingMode from "mozilla/WritingModes.h";
+ using mozilla::layers::TouchBehaviorFlags from "mozilla/layers/APZUtils.h";
+ using nsIWidget::TouchPointerState from "nsIWidget.h";
++using nsCursor from "nsIWidget.h";
+ using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h";
+ using class mozilla::dom::MessagePort from "mozilla/dom/MessagePort.h";
+ using class mozilla::dom::ipc::StructuredCloneData from "mozilla/dom/ipc/StructuredCloneData.h";
+@@ -366,7 +367,7 @@ parent:
+ * Invalidate any locally cached cursor settings and force an
+ * update.
+ */
+- async SetCursor(uint32_t value, bool force);
++ async SetCursor(nsCursor value, bool force);
+
+ /**
+ * Set the native cursor using a custom image.
+diff --git dom/ipc/TabParent.cpp dom/ipc/TabParent.cpp
+index ae43c24e8891..86bb854962be 100644
+--- dom/ipc/TabParent.cpp
++++ dom/ipc/TabParent.cpp
+@@ -1723,9 +1723,9 @@ TabParent::RecvAsyncMessage(const nsString& aMessage,
+ }
+
+ mozilla::ipc::IPCResult
+-TabParent::RecvSetCursor(const uint32_t& aCursor, const bool& aForce)
++TabParent::RecvSetCursor(const nsCursor& aCursor, const bool& aForce)
+ {
+- mCursor = static_cast<nsCursor>(aCursor);
++ mCursor = aCursor;
+ mCustomCursor = nullptr;
+
+ nsCOMPtr<nsIWidget> widget = GetWidget();
+diff --git dom/ipc/TabParent.h dom/ipc/TabParent.h
+index e3c2601ce0b4..7d62663835d7 100644
+--- dom/ipc/TabParent.h
++++ dom/ipc/TabParent.h
+@@ -274,8 +274,8 @@ public:
+ nsTArray<nsCString>&& aEnabledCommands,
+ nsTArray<nsCString>&& aDisabledCommands) override;
+
+- virtual mozilla::ipc::IPCResult
+- RecvSetCursor(const uint32_t& aValue, const bool& aForce) override;
++ virtual mozilla::ipc::IPCResult RecvSetCursor(const nsCursor& aValue,
++ const bool& aForce) override;
+
+ virtual mozilla::ipc::IPCResult RecvSetCustomCursor(const nsCString& aUri,
+ const uint32_t& aWidth,
+diff --git widget/WidgetMessageUtils.h widget/WidgetMessageUtils.h
+index 8ab831a206da..2add8fd9533e 100644
+--- widget/WidgetMessageUtils.h
++++ widget/WidgetMessageUtils.h
+@@ -34,6 +34,12 @@ struct ParamTraits<LookAndFeelInt>
+ }
+ };
+
++template<>
++struct ParamTraits<nsCursor>
++ : public ContiguousEnumSerializer<nsCursor, eCursor_standard, eCursorCount>
++{
++};
++
+ } // namespace IPC
+
+ #endif // WidgetMessageUtils_h
diff --git a/www/waterfox/files/patch-bug1451376 b/www/waterfox/files/patch-bug1451376
new file mode 100644
index 000000000000..0513c770f78e
--- /dev/null
+++ b/www/waterfox/files/patch-bug1451376
@@ -0,0 +1,48 @@
+commit 1a02eb4cc78c
+Author: Bob Owen <bobowencode@gmail.com>
+Date: Tue Apr 10 15:36:26 2018 +0100
+
+ Bug 1451376 - Properly enforce single PrintingParent per content process. r=jld, a=RyanVM
+
+ --HG--
+ extra : source : 6e0fe40d8a55a986a26844393853722824918ffe
+---
+ dom/ipc/ContentParent.cpp | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp
+index 3c3d2fbc3735..538b8edf121b 100644
+--- dom/ipc/ContentParent.cpp
++++ dom/ipc/ContentParent.cpp
+@@ -3347,11 +3347,15 @@ PPrintingParent*
+ ContentParent::AllocPPrintingParent()
+ {
+ #ifdef NS_PRINTING
+- MOZ_ASSERT(!mPrintingParent,
+- "Only one PrintingParent should be created per process.");
++ MOZ_RELEASE_ASSERT(!mPrintingParent,
++ "Only one PrintingParent should be created per process.");
+
+ // Create the printing singleton for this process.
+ mPrintingParent = new PrintingParent();
++
++ // Take another reference for IPDL code.
++ mPrintingParent.get()->AddRef();
++
+ return mPrintingParent.get();
+ #else
+ MOZ_ASSERT_UNREACHABLE("Should never be created if no printing.");
+@@ -3363,8 +3367,11 @@ bool
+ ContentParent::DeallocPPrintingParent(PPrintingParent* printing)
+ {
+ #ifdef NS_PRINTING
+- MOZ_ASSERT(mPrintingParent == printing,
+- "Only one PrintingParent should have been created per process.");
++ MOZ_RELEASE_ASSERT(mPrintingParent == printing,
++ "Only one PrintingParent should have been created per process.");
++
++ // Release reference taken for IPDL code.
++ static_cast<PrintingParent*>(printing)->Release();
+
+ mPrintingParent = nullptr;
+ #else