svn commit: r461193 - in head/www/waterfox: . files
Jan Beich
jbeich at FreeBSD.org
Thu Feb 8 00:59:06 UTC 2018
Author: jbeich
Date: Thu Feb 8 00:59:04 2018
New Revision: 461193
URL: https://svnweb.freebsd.org/changeset/ports/461193
Log:
www/waterfox: apply some FF57/FF59 fixes
Added:
head/www/waterfox/files/patch-bug1261175 (contents, props changed)
head/www/waterfox/files/patch-bug1275062 (contents, props changed)
head/www/waterfox/files/patch-bug1321960 (contents, props changed)
head/www/waterfox/files/patch-bug1347984 (contents, props changed)
head/www/waterfox/files/patch-bug1370791 (contents, props changed)
head/www/waterfox/files/patch-bug1383501 (contents, props changed)
head/www/waterfox/files/patch-bug1397114 (contents, props changed)
head/www/waterfox/files/patch-bug1399939 (contents, props changed)
head/www/waterfox/files/patch-bug1402025 (contents, props changed)
head/www/waterfox/files/patch-bug1402218 (contents, props changed)
head/www/waterfox/files/patch-bug1402377 (contents, props changed)
head/www/waterfox/files/patch-bug1402766 (contents, props changed)
head/www/waterfox/files/patch-bug1402951 (contents, props changed)
head/www/waterfox/files/patch-bug1402981 (contents, props changed)
head/www/waterfox/files/patch-bug1403721 (contents, props changed)
head/www/waterfox/files/patch-bug1403998 (contents, props changed)
head/www/waterfox/files/patch-bug1404057 (contents, props changed)
head/www/waterfox/files/patch-bug1404180 (contents, props changed)
head/www/waterfox/files/patch-bug1404323 (contents, props changed)
head/www/waterfox/files/patch-bug1404714 (contents, props changed)
head/www/waterfox/files/patch-bug1404760 (contents, props changed)
head/www/waterfox/files/patch-bug1405267 (contents, props changed)
head/www/waterfox/files/patch-bug1405377 (contents, props changed)
head/www/waterfox/files/patch-bug1405635 (contents, props changed)
head/www/waterfox/files/patch-bug1405720 (contents, props changed)
head/www/waterfox/files/patch-bug1416523 (contents, props changed)
head/www/waterfox/files/patch-bug1418757 (contents, props changed)
head/www/waterfox/files/patch-bug1422036 (contents, props changed)
head/www/waterfox/files/patch-bug1424469 (contents, props changed)
head/www/waterfox/files/patch-bug1426087 (contents, props changed)
head/www/waterfox/files/patch-bug1431192 (contents, props changed)
head/www/waterfox/files/patch-bug1431370 (contents, props changed)
head/www/waterfox/files/patch-bug1432870 (contents, props changed)
head/www/waterfox/files/patch-bug1432915 (contents, props changed)
head/www/waterfox/files/patch-bug1433671 (contents, props changed)
head/www/waterfox/files/patch-bug1435098 (contents, props changed)
head/www/waterfox/files/patch-bug1435286 (contents, props changed)
Modified:
head/www/waterfox/Makefile (contents, props changed)
Modified: head/www/waterfox/Makefile
==============================================================================
--- head/www/waterfox/Makefile Thu Feb 8 00:58:39 2018 (r461192)
+++ head/www/waterfox/Makefile Thu Feb 8 00:59:04 2018 (r461193)
@@ -2,7 +2,7 @@
PORTNAME= waterfox
DISTVERSION= 56.0.4
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= www ipv6
MAINTAINER= jbeich at FreeBSD.org
Added: head/www/waterfox/files/patch-bug1261175
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1261175 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,31 @@
+commit 315fe73694f9
+Author: Matt Woodrow <mwoodrow at mozilla.com>
+Date: Tue Nov 14 10:31:36 2017 +1300
+
+ Bug 1261175. r=bobowen a=gchang
+
+ MozReview-Commit-ID: B9yAN0F01rj
+
+ --HG--
+ extra : amend_source : 7585df8257930896070ddcb64c93a28a39fbbee7
+---
+ layout/base/nsDocumentViewer.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git layout/base/nsDocumentViewer.cpp layout/base/nsDocumentViewer.cpp
+index be33cf990d91..4fe03d3f7f88 100644
+--- layout/base/nsDocumentViewer.cpp
++++ layout/base/nsDocumentViewer.cpp
+@@ -549,6 +549,12 @@ nsDocumentViewer::~nsDocumentViewer()
+ mDocument->Destroy();
+ }
+
++ if (mPrintEngine) {
++ mPrintEngine->Destroy();
++ mPrintEngine = nullptr;
++ }
++
++ MOZ_RELEASE_ASSERT(mDestroyRefCount == 0);
+ NS_ASSERTION(!mPresShell && !mPresContext,
+ "User did not call nsIContentViewer::Destroy");
+ if (mPresShell || mPresContext) {
Added: head/www/waterfox/files/patch-bug1275062
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1275062 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,344 @@
+commit 7b030826befa
+Author: Andrea Marchesini <amarchesini at mozilla.com>
+Date: Sat Jan 27 13:40:58 2018 +0100
+
+ Bug 1275062 - Introduce a size check of IPC messages for IndexedDB. r=asuth, a=lizzard
+
+ --HG--
+ extra : source : ca73f9471eded208cbf1206f22e0fe9f10550497
+---
+ dom/indexedDB/ActorsParent.cpp | 78 +++++++++++++++++++++++++++-------
+ dom/indexedDB/IndexedDatabase.h | 4 ++
+ dom/indexedDB/IndexedDatabaseInlines.h | 14 ++++++
+ 3 files changed, 80 insertions(+), 16 deletions(-)
+
+diff --git dom/indexedDB/ActorsParent.cpp dom/indexedDB/ActorsParent.cpp
+index b9eb1744b8b6..aef19c8379be 100644
+--- dom/indexedDB/ActorsParent.cpp
++++ dom/indexedDB/ActorsParent.cpp
+@@ -8173,7 +8173,7 @@ protected:
+
+ // Subclasses use this override to set the IPDL response value.
+ virtual void
+- GetResponse(RequestResponse& aResponse) = 0;
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) = 0;
+
+ private:
+ nsresult
+@@ -8237,7 +8237,7 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override;
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override;
+
+ void
+ Cleanup() override;
+@@ -8359,7 +8359,7 @@ private:
+ GetPreprocessParams(PreprocessParams& aParams) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override;
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override;
+ };
+
+ class ObjectStoreGetKeyRequestOp final
+@@ -8385,7 +8385,7 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override;
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override;
+ };
+
+ class ObjectStoreDeleteRequestOp final
+@@ -8407,9 +8407,10 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override
+ {
+ aResponse = Move(mResponse);
++ *aResponseSize = 0;
+ }
+ };
+
+@@ -8432,9 +8433,10 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override
+ {
+ aResponse = Move(mResponse);
++ *aResponseSize = 0;
+ }
+ };
+
+@@ -8459,9 +8461,10 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override
+ {
+ aResponse = Move(mResponse);
++ *aResponseSize = sizeof(uint64_t);
+ }
+ };
+
+@@ -8511,7 +8514,7 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override;
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override;
+ };
+
+ class IndexGetKeyRequestOp final
+@@ -8536,7 +8539,7 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override;
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override;
+ };
+
+ class IndexCountRequestOp final
+@@ -8561,9 +8564,10 @@ private:
+ DoDatabaseWork(DatabaseConnection* aConnection) override;
+
+ void
+- GetResponse(RequestResponse& aResponse) override
++ GetResponse(RequestResponse& aResponse, size_t* aResponseSize) override
+ {
+ aResponse = Move(mResponse);
++ *aResponseSize = sizeof(uint64_t);
+ }
+ };
+
+@@ -25726,8 +25730,22 @@ NormalTransactionOp::SendSuccessResult()
+ AssertIsOnOwningThread();
+
+ if (!IsActorDestroyed()) {
++ static const size_t kMaxIDBMsgOverhead = 1024 * 1024 * 10; // 10MB
++ const uint32_t maximalSizeFromPref =
++ IndexedDatabaseManager::MaxSerializedMsgSize();
++ MOZ_ASSERT(maximalSizeFromPref > kMaxIDBMsgOverhead);
++ const size_t kMaxMessageSize = maximalSizeFromPref - kMaxIDBMsgOverhead;
++
+ RequestResponse response;
+- GetResponse(response);
++ size_t responseSize = kMaxMessageSize;
++ GetResponse(response, &responseSize);
++
++ if (responseSize >= kMaxMessageSize) {
++ nsPrintfCString("The serialized value is too large"
++ " (size=%zu bytes, max=%zu bytes).",
++ responseSize, kMaxMessageSize);
++ return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
++ }
+
+ MOZ_ASSERT(response.type() != RequestResponse::T__None);
+
+@@ -26387,14 +26405,17 @@ ObjectStoreAddOrPutRequestOp::DoDatabaseWork(DatabaseConnection* aConnection)
+ }
+
+ void
+-ObjectStoreAddOrPutRequestOp::GetResponse(RequestResponse& aResponse)
++ObjectStoreAddOrPutRequestOp::GetResponse(RequestResponse& aResponse,
++ size_t* aResponseSize)
+ {
+ AssertIsOnOwningThread();
+
+ if (mOverwrite) {
+ aResponse = ObjectStorePutResponse(mResponse);
++ *aResponseSize = mResponse.GetBuffer().Length();
+ } else {
+ aResponse = ObjectStoreAddResponse(mResponse);
++ *aResponseSize = mResponse.GetBuffer().Length();
+ }
+ }
+
+@@ -26688,12 +26709,14 @@ ObjectStoreGetRequestOp::GetPreprocessParams(PreprocessParams& aParams)
+ }
+
+ void
+-ObjectStoreGetRequestOp::GetResponse(RequestResponse& aResponse)
++ObjectStoreGetRequestOp::GetResponse(RequestResponse& aResponse,
++ size_t* aResponseSize)
+ {
+ MOZ_ASSERT_IF(mLimit, mResponse.Length() <= mLimit);
+
+ if (mGetAll) {
+ aResponse = ObjectStoreGetAllResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
+ FallibleTArray<SerializedStructuredCloneReadInfo> fallibleCloneInfos;
+@@ -26706,6 +26729,7 @@ ObjectStoreGetRequestOp::GetResponse(RequestResponse& aResponse)
+ for (uint32_t count = mResponse.Length(), index = 0;
+ index < count;
+ index++) {
++ *aResponseSize += mResponse[index].Size();
+ nsresult rv =
+ ConvertResponse<false>(mResponse[index], fallibleCloneInfos[index]);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+@@ -26724,11 +26748,13 @@ ObjectStoreGetRequestOp::GetResponse(RequestResponse& aResponse)
+ }
+
+ aResponse = ObjectStoreGetResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
+ SerializedStructuredCloneReadInfo& serializedInfo =
+ aResponse.get_ObjectStoreGetResponse().cloneInfo();
+
++ *aResponseSize += mResponse[0].Size();
+ nsresult rv = ConvertResponse<false>(mResponse[0], serializedInfo);
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ aResponse = rv;
+@@ -26834,25 +26860,33 @@ ObjectStoreGetKeyRequestOp::DoDatabaseWork(DatabaseConnection* aConnection)
+ }
+
+ void
+-ObjectStoreGetKeyRequestOp::GetResponse(RequestResponse& aResponse)
++ObjectStoreGetKeyRequestOp::GetResponse(RequestResponse& aResponse,
++ size_t* aResponseSize)
+ {
+ MOZ_ASSERT_IF(mLimit, mResponse.Length() <= mLimit);
+
+ if (mGetAll) {
+ aResponse = ObjectStoreGetAllKeysResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
+ nsTArray<Key>& response =
+ aResponse.get_ObjectStoreGetAllKeysResponse().keys();
++
+ mResponse.SwapElements(response);
++ for (uint32_t i = 0; i < mResponse.Length(); ++i) {
++ *aResponseSize += mResponse[i].GetBuffer().Length();
++ }
+ }
+
+ return;
+ }
+
+ aResponse = ObjectStoreGetKeyResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
++ *aResponseSize = mResponse[0].GetBuffer().Length();
+ aResponse.get_ObjectStoreGetKeyResponse().key() = Move(mResponse[0]);
+ }
+ }
+@@ -27284,12 +27318,14 @@ IndexGetRequestOp::DoDatabaseWork(DatabaseConnection* aConnection)
+ }
+
+ void
+-IndexGetRequestOp::GetResponse(RequestResponse& aResponse)
++IndexGetRequestOp::GetResponse(RequestResponse& aResponse,
++ size_t* aResponseSize)
+ {
+ MOZ_ASSERT_IF(!mGetAll, mResponse.Length() <= 1);
+
+ if (mGetAll) {
+ aResponse = IndexGetAllResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
+ FallibleTArray<SerializedStructuredCloneReadInfo> fallibleCloneInfos;
+@@ -27303,6 +27339,7 @@ IndexGetRequestOp::GetResponse(RequestResponse& aResponse)
+ index < count;
+ index++) {
+ StructuredCloneReadInfo& info = mResponse[index];
++ *aResponseSize += info.Size();
+
+ SerializedStructuredCloneReadInfo& serializedInfo =
+ fallibleCloneInfos[index];
+@@ -27335,9 +27372,11 @@ IndexGetRequestOp::GetResponse(RequestResponse& aResponse)
+ }
+
+ aResponse = IndexGetResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
+ StructuredCloneReadInfo& info = mResponse[0];
++ *aResponseSize += info.Size();
+
+ SerializedStructuredCloneReadInfo& serializedInfo =
+ aResponse.get_IndexGetResponse().cloneInfo();
+@@ -27467,23 +27506,30 @@ IndexGetKeyRequestOp::DoDatabaseWork(DatabaseConnection* aConnection)
+ }
+
+ void
+-IndexGetKeyRequestOp::GetResponse(RequestResponse& aResponse)
++IndexGetKeyRequestOp::GetResponse(RequestResponse& aResponse,
++ size_t* aResponseSize)
+ {
+ MOZ_ASSERT_IF(!mGetAll, mResponse.Length() <= 1);
+
+ if (mGetAll) {
+ aResponse = IndexGetAllKeysResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
+ mResponse.SwapElements(aResponse.get_IndexGetAllKeysResponse().keys());
++ for (uint32_t i = 0; i < mResponse.Length(); ++i) {
++ *aResponseSize += mResponse[i].GetBuffer().Length();
++ }
+ }
+
+ return;
+ }
+
+ aResponse = IndexGetKeyResponse();
++ *aResponseSize = 0;
+
+ if (!mResponse.IsEmpty()) {
++ *aResponseSize = mResponse[0].GetBuffer().Length();
+ aResponse.get_IndexGetKeyResponse().key() = Move(mResponse[0]);
+ }
+ }
+diff --git dom/indexedDB/IndexedDatabase.h dom/indexedDB/IndexedDatabase.h
+index b0c4cb877a9c..9165758bcd62 100644
+--- dom/indexedDB/IndexedDatabase.h
++++ dom/indexedDB/IndexedDatabase.h
+@@ -83,6 +83,10 @@ struct StructuredCloneReadInfo
+ // In IndexedDatabaseInlines.h
+ inline
+ MOZ_IMPLICIT StructuredCloneReadInfo(SerializedStructuredCloneReadInfo&& aOther);
++
++ // In IndexedDatabaseInlines.h
++ inline
++ size_t Size() const;
+ };
+
+ } // namespace indexedDB
+diff --git dom/indexedDB/IndexedDatabaseInlines.h dom/indexedDB/IndexedDatabaseInlines.h
+index 830c2f11009d..48cc4f9b3ced 100644
+--- dom/indexedDB/IndexedDatabaseInlines.h
++++ dom/indexedDB/IndexedDatabaseInlines.h
+@@ -99,6 +99,20 @@ StructuredCloneReadInfo::operator=(StructuredCloneReadInfo&& aCloneReadInfo)
+ return *this;
+ }
+
++inline size_t
++StructuredCloneReadInfo::Size() const
++{
++ size_t size = mData.Size();
++
++ for (uint32_t i = 0, count = mFiles.Length(); i < count; ++i) {
++ // We don't want to calculate the size of files and so on, because are mainly
++ // file descriptors.
++ size += sizeof(uint64_t);
++ }
++
++ return size;
++}
++
+ } // namespace indexedDB
+ } // namespace dom
+ } // namespace mozilla
Added: head/www/waterfox/files/patch-bug1321960
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1321960 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,134 @@
+commit 8721b8f42bc0
+Author: Alexander Surkov <surkov.alexander at gmail.com>
+Date: Tue Sep 26 16:25:12 2017 -0400
+
+ Bug 1321960 - Rename nsIPresShell::mSuppressInterruptibleReflows to mWasLastReflowInterrupted to reflect better its purpose. r=dholbert, a=sledru
+
+ --HG--
+ extra : source : c65fce03b9e0a1a7591668f727b846675cffa44a
+---
+ layout/base/PresShell.cpp | 8 ++++----
+ layout/base/nsIPresShell.h | 18 +++++++++++++++++-
+ layout/base/nsRefreshDriver.cpp | 2 +-
+ 3 files changed, 22 insertions(+), 6 deletions(-)
+
+diff --git layout/base/PresShell.cpp layout/base/PresShell.cpp
+index 4ca35ffe1466..a1660ac30de7 100644
+--- layout/base/PresShell.cpp
++++ layout/base/PresShell.cpp
+@@ -762,7 +762,7 @@ nsIPresShell::nsIPresShell()
+ , mFrozen(false)
+ , mIsFirstPaint(false)
+ , mObservesMutationsForPrint(false)
+- , mSuppressInterruptibleReflows(false)
++ , mWasLastReflowInterrupted(false)
+ , mScrollPositionClampingScrollPortSizeSet(false)
+ , mNeedLayoutFlush(true)
+ , mNeedStyleFlush(true)
+@@ -4197,7 +4197,7 @@ PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush aFlush)
+ // worry about them. They can't be triggered during reflow, so we should
+ // be good.
+
+- if (flushType >= (mSuppressInterruptibleReflows
++ if (flushType >= (SuppressInterruptibleReflows()
+ ? FlushType::Layout
+ : FlushType::InterruptibleLayout) &&
+ !mIsDestroying) {
+@@ -4232,7 +4232,7 @@ PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush aFlush)
+ if (!didLayoutFlush && flushType >= FlushType::InterruptibleLayout &&
+ !mIsDestroying) {
+ // We suppressed this flush either due to it not being safe to flush,
+- // or due to mSuppressInterruptibleReflows. Either way, the
++ // or due to SuppressInterruptibleReflows(). Either way, the
+ // mNeedLayoutFlush flag needs to be re-set.
+ SetNeedLayoutFlush();
+ }
+@@ -9484,7 +9484,7 @@ PresShell::DoReflow(nsIFrame* target, bool aInterruptible)
+ // Any FlushPendingNotifications with interruptible reflows
+ // should be suppressed now. We don't want to do extra reflow work
+ // before our reflow event happens.
+- mSuppressInterruptibleReflows = true;
++ mWasLastReflowInterrupted = true;
+ MaybeScheduleReflow();
+ }
+
+diff --git layout/base/nsIPresShell.h layout/base/nsIPresShell.h
+index 9f65bad1b4d7..885bc0bc699a 100644
+--- layout/base/nsIPresShell.h
++++ layout/base/nsIPresShell.h
+@@ -1581,6 +1581,21 @@ public:
+ mFontSizeInflationEnabledIsDirty = true;
+ }
+
++ /**
++ * Return true if the most recent interruptible reflow was interrupted.
++ */
++ bool IsReflowInterrupted() const {
++ return mWasLastReflowInterrupted;
++ }
++
++ /**
++ * Return true if the the interruptible reflows have to be suppressed.
++ * This may happen only if if the most recent reflow was interrupted.
++ */
++ bool SuppressInterruptibleReflows() const {
++ return mWasLastReflowInterrupted;
++ }
++
+ //////////////////////////////////////////////////////////////////////////////
+ // Approximate frame visibility tracking public API.
+ //////////////////////////////////////////////////////////////////////////////
+@@ -1794,7 +1809,8 @@ protected:
+ bool mIsFirstPaint : 1;
+ bool mObservesMutationsForPrint : 1;
+
+- bool mSuppressInterruptibleReflows : 1;
++ // Whether the most recent interruptible reflow was actually interrupted:
++ bool mWasLastReflowInterrupted : 1;
+ bool mScrollPositionClampingScrollPortSizeSet : 1;
+
+ // True if a layout flush might not be a no-op
+diff --git layout/base/nsRefreshDriver.cpp layout/base/nsRefreshDriver.cpp
+index 4dbe56952ccf..4ca4783561c6 100644
+--- layout/base/nsRefreshDriver.cpp
++++ layout/base/nsRefreshDriver.cpp
+@@ -1949,7 +1949,7 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, TimeStamp aNowTime)
+
+ nsCOMPtr<nsIPresShell> shellKungFuDeathGrip(shell);
+ shell->mObservingLayoutFlushes = false;
+- shell->mSuppressInterruptibleReflows = false;
++ shell->mWasLastReflowInterrupted = false;
+ FlushType flushType = HasPendingAnimations(shell)
+ ? FlushType::Layout
+ : FlushType::InterruptibleLayout;
+commit 5ee10fd6f2e4
+Author: Alexander Surkov <surkov.alexander at gmail.com>
+Date: Tue Sep 26 16:27:02 2017 -0400
+
+ Bug 1321960 - Let an interrupted reflow finish before processing a11y. r=eeejay, f=dholbert, a=sledru
+
+ --HG--
+ extra : source : c845865489652eadaa3f9a12736c1db56c0e6f12
+---
+ accessible/base/NotificationController.cpp | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git accessible/base/NotificationController.cpp accessible/base/NotificationController.cpp
+index d08500458221..8263c7b54d83 100644
+--- accessible/base/NotificationController.cpp
++++ accessible/base/NotificationController.cpp
+@@ -601,9 +601,13 @@ NotificationController::WillRefresh(mozilla::TimeStamp aTime)
+ if (!mDocument)
+ return;
+
++ // Wait until an update, we have started, or an interruptible reflow is
++ // finished.
+ if (mObservingState == eRefreshProcessing ||
+- mObservingState == eRefreshProcessingForUpdate)
++ mObservingState == eRefreshProcessingForUpdate ||
++ mPresShell->IsReflowInterrupted()) {
+ return;
++ }
+
+ // Any generic notifications should be queued if we're processing content
+ // insertions or generic notifications.
Added: head/www/waterfox/files/patch-bug1347984
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1347984 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,96 @@
+commit d40956eaa7d8
+Author: Jan de Mooij <jdemooij at mozilla.com>
+Date: Fri Oct 6 20:11:07 2017 +0200
+
+ Bug 1347984 - Check for dead object proxies in TriggerPromiseReactions. r=till, a=ritu
+
+ --HG--
+ extra : source : 754a3e12321c8656a83759adf297e61b0e188368
+---
+ js/src/builtin/Promise.cpp | 6 +++++-
+ js/src/jit-test/tests/basic/bug908915.js | 1 +
+ js/src/jit-test/tests/promise/bug1347984.js | 6 ++++++
+ js/src/shell/js.cpp | 21 +++++++++++++++++++++
+ 4 files changed, 33 insertions(+), 1 deletion(-)
+
+diff --git js/src/builtin/Promise.cpp js/src/builtin/Promise.cpp
+index 2462f1f07853..1cb1cff0682e 100644
+--- js/src/builtin/Promise.cpp
++++ js/src/builtin/Promise.cpp
+@@ -1017,8 +1017,12 @@ TriggerPromiseReactions(JSContext* cx, HandleValue reactionsVal, JS::PromiseStat
+ RootedObject reactions(cx, &reactionsVal.toObject());
+ RootedObject reaction(cx);
+
+- if (reactions->is<PromiseReactionRecord>() || IsWrapper(reactions))
++ if (reactions->is<PromiseReactionRecord>() ||
++ IsWrapper(reactions) ||
++ JS_IsDeadWrapper(reactions))
++ {
+ return EnqueuePromiseReactionJob(cx, reactions, valueOrReason, state);
++ }
+
+ RootedNativeObject reactionsList(cx, &reactions->as<NativeObject>());
+ size_t reactionsCount = reactionsList->getDenseInitializedLength();
+diff --git js/src/jit-test/tests/basic/bug908915.js js/src/jit-test/tests/basic/bug908915.js
+index 5077801b1b67..f0213296e769 100644
+--- js/src/jit-test/tests/basic/bug908915.js
++++ js/src/jit-test/tests/basic/bug908915.js
+@@ -11,6 +11,7 @@ var blacklist = {
+ 'readline': true,
+ 'terminate': true,
+ 'nestedShell': true,
++ 'nukeAllCCWs': true,
+ };
+
+ function f(y) {}
+diff --git js/src/jit-test/tests/promise/bug1347984.js js/src/jit-test/tests/promise/bug1347984.js
+new file mode 100644
+index 000000000000..5fc458cd452e
+--- /dev/null
++++ js/src/jit-test/tests/promise/bug1347984.js
+@@ -0,0 +1,6 @@
++// |jit-test| error:dead object
++var g = newGlobal();
++var p = new Promise(() => {});
++g.Promise.prototype.then.call(p, () => void 0);
++g.eval("nukeAllCCWs()");
++resolvePromise(p, 9);
+diff --git js/src/shell/js.cpp js/src/shell/js.cpp
+index 2bb7e97120a7..8e9aee7c854a 100644
+--- js/src/shell/js.cpp
++++ js/src/shell/js.cpp
+@@ -5049,6 +5049,23 @@ NukeCCW(JSContext* cx, unsigned argc, Value* vp)
+ return true;
+ }
+
++static bool
++NukeAllCCWs(JSContext* cx, unsigned argc, Value* vp)
++{
++ CallArgs args = CallArgsFromVp(argc, vp);
++
++ if (args.length() != 0) {
++ JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_INVALID_ARGS,
++ "nukeAllCCWs");
++ return false;
++ }
++
++ NukeCrossCompartmentWrappers(cx, AllCompartments(), cx->compartment(),
++ NukeWindowReferences, NukeAllReferences);
++ args.rval().setUndefined();
++ return true;
++}
++
+ static bool
+ GetMaxArgs(JSContext* cx, unsigned argc, Value* vp)
+ {
+@@ -6552,6 +6569,10 @@ static const JSFunctionSpecWithHelp shell_functions[] = {
+ "nukeCCW(wrapper)",
+ " Nuke a CrossCompartmentWrapper, which turns it into a DeadProxyObject."),
+
++ JS_FN_HELP("nukeAllCCWs", NukeAllCCWs, 0, 0,
++"nukeAllCCWs()",
++" Like nukeCCW, but for all CrossCompartmentWrappers targeting the current compartment."),
++
+ JS_FN_HELP("createMappedArrayBuffer", CreateMappedArrayBuffer, 1, 0,
+ "createMappedArrayBuffer(filename, [offset, [size]])",
+ " Create an array buffer that mmaps the given file."),
Added: head/www/waterfox/files/patch-bug1370791
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1370791 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,104 @@
+commit 4ab22d92be00
+Author: Gijs Kruitbosch <gijskruitbosch at gmail.com>
+Date: Wed Oct 4 19:12:40 2017 +0100
+
+ Bug 1370791 - Use CUI listener and an attribute to toggle hiding/showing the new tab button. r=jaws, a=ritu
+
+ MozReview-Commit-ID: DaKohSCnrJn
+
+ --HG--
+ extra : source : 3894d341fe1631dc755e5b16b3a286ec4e741991
+ extra : amend_source : 14a18fd29a60434f84664ee21eb245397a87f160
+---
+ browser/base/content/browser.css | 4 +--
+ browser/base/content/tabbrowser.xml | 49 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 51 insertions(+), 2 deletions(-)
+
+diff --git browser/base/content/browser.css browser/base/content/browser.css
+index 8afcbf4a5f48..4527cd480fb0 100644
+--- browser/base/content/browser.css
++++ browser/base/content/browser.css
+@@ -114,9 +114,9 @@ tabbrowser {
+ }
+
+ #tabbrowser-tabs:not([overflow="true"]) ~ #alltabs-button,
+-#tabbrowser-tabs:not([overflow="true"]) + #new-tab-button,
++#tabbrowser-tabs[hasadjacentnewtabbutton]:not([overflow="true"]) ~ #new-tab-button,
+ #tabbrowser-tabs[overflow="true"] > .tabbrowser-arrowscrollbox > .tabs-newtab-button,
+-#TabsToolbar[currentset]:not([currentset*="tabbrowser-tabs,new-tab-button"]) > #tabbrowser-tabs > .tabbrowser-arrowscrollbox > .tabs-newtab-button,
++#tabbrowser-tabs:not([hasadjacentnewtabbutton]) > .tabbrowser-arrowscrollbox > .tabs-newtab-button,
+ #TabsToolbar[customizing="true"] > #tabbrowser-tabs > .tabbrowser-arrowscrollbox > .tabs-newtab-button {
+ visibility: collapse;
+ }
+diff --git browser/base/content/tabbrowser.xml browser/base/content/tabbrowser.xml
+index 7575a985eeba..7e6c321e5dee 100644
+--- browser/base/content/tabbrowser.xml
++++ browser/base/content/tabbrowser.xml
+@@ -5808,11 +5808,58 @@
+ ]]></body>
+ </method>
+
++ <method name="_updateNewTabVisibility">
++ <body><![CDATA[
++ let sib = this.tabContainer.nextElementSibling;
++ while (sib && sib.hidden) {
++ sib = sib.nextElementSibling;
++ }
++ const kAttr = "hasadjacentnewtabbutton";
++ if (sib && sib.id == "new-tab-button") {
++ this.tabContainer.setAttribute(kAttr, "true");
++ } else {
++ this.tabContainer.removeAttribute(kAttr);
++ }
++ ]]></body>
++ </method>
++
++ <method name="onWidgetAfterDOMChange">
++ <parameter name="aNode"/>
++ <parameter name="aNextNode"/>
++ <parameter name="aContainer"/>
++ <body><![CDATA[
++ if (aContainer.ownerDocument == document &&
++ aContainer.id == "TabsToolbar") {
++ this._updateNewTabVisibility();
++ }
++ ]]></body>
++ </method>
++ <method name="onAreaNodeRegistered">
++ <parameter name="aArea"/>
++ <parameter name="aContainer"/>
++ <body><![CDATA[
++ if (aContainer.ownerDocument == document &&
++ aArea == "TabsToolbar") {
++ this._updateNewTabVisibility();
++ }
++ ]]></body>
++ </method>
++ <method name="onAreaReset">
++ <parameter name="aArea"/>
++ <parameter name="aContainer"/>
++ <body><![CDATA[
++ this.onAreaNodeRegistered(aArea, aContainer);
++ ]]></body>
++ </method>
++
+ <constructor>
+ <![CDATA[
+ this.mCurrentBrowser = document.getAnonymousElementByAttribute(this, "anonid", "initialBrowser");
+ this.mCurrentBrowser.permanentKey = {};
+
++ CustomizableUI.addListener(this);
++ this._updateNewTabVisibility();
++
+ Services.obs.addObserver(this, "contextual-identity-updated");
+
+ this.mCurrentTab = this.tabContainer.firstChild;
+@@ -5922,6 +5969,8 @@
+ <![CDATA[
+ Services.obs.removeObserver(this, "contextual-identity-updated");
+
++ CustomizableUI.removeListener(this);
++
+ for (let tab of this.tabs) {
+ let browser = tab.linkedBrowser;
+ if (browser.registeredOpenURI) {
Added: head/www/waterfox/files/patch-bug1383501
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1383501 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,83 @@
+commit 8ba0e2ee02b0
+Author: Aaron Klotz <aklotz at mozilla.com>
+Date: Wed Oct 4 09:12:25 2017 -0600
+
+ Bug 1383501 - Do not crash when TabParent::RecvPDocAccessibleConstructor receives a null COM proxy sent to the parent process. r=jimm, a=ritu
+
+ MozReview-Commit-ID: 5IOuLXc375T
+
+ --HG--
+ extra : source : e2a6e2ddfa184b5a1f410408d7232ed0041a360f
+---
+ accessible/ipc/win/ProxyAccessible.cpp | 2 +-
+ accessible/ipc/win/ProxyAccessible.h | 13 ++++++++++++-
+ dom/ipc/TabParent.cpp | 2 ++
+ 3 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git accessible/ipc/win/ProxyAccessible.cpp accessible/ipc/win/ProxyAccessible.cpp
+index 0942e280ea30..383ece99fb0c 100644
+--- accessible/ipc/win/ProxyAccessible.cpp
++++ accessible/ipc/win/ProxyAccessible.cpp
+@@ -34,7 +34,7 @@ ProxyAccessible::GetCOMInterface(void** aOutAccessible) const
+ return false;
+ }
+
+- if (!mCOMProxy) {
++ if (!mCOMProxy && mSafeToRecurse) {
+ // See if we can lazily obtain a COM proxy
+ AccessibleWrap* wrap = WrapperFor(this);
+ bool isDefunct = false;
+diff --git accessible/ipc/win/ProxyAccessible.h accessible/ipc/win/ProxyAccessible.h
+index 83f1e6093253..4fd897e588fe 100644
+--- accessible/ipc/win/ProxyAccessible.h
++++ accessible/ipc/win/ProxyAccessible.h
+@@ -27,6 +27,7 @@ public:
+ ProxyAccessible(uint64_t aID, ProxyAccessible* aParent,
+ DocAccessibleParent* aDoc, role aRole, uint32_t aInterfaces)
+ : ProxyAccessibleBase(aID, aParent, aDoc, aRole, aInterfaces)
++ , mSafeToRecurse(true)
+ {
+ MOZ_COUNT_CTOR(ProxyAccessible);
+ }
+@@ -40,7 +41,16 @@ public:
+
+ bool GetCOMInterface(void** aOutAccessible) const;
+ void SetCOMInterface(const RefPtr<IAccessible>& aIAccessible)
+- { mCOMProxy = aIAccessible; }
++ {
++ if (aIAccessible) {
++ mCOMProxy = aIAccessible;
++ } else {
++ // If we were supposed to be receiving an interface (hence the call to
++ // this function), but the interface turns out to be null, then we're
++ // broken for some reason.
++ mSafeToRecurse = false;
++ }
++ }
+
+ protected:
+ explicit ProxyAccessible(DocAccessibleParent* aThisAsDoc)
+@@ -49,6 +59,7 @@ protected:
+
+ private:
+ RefPtr<IAccessible> mCOMProxy;
++ bool mSafeToRecurse;
+ };
+
+ }
+diff --git dom/ipc/TabParent.cpp dom/ipc/TabParent.cpp
+index 7fc5689e6211..d8733a377219 100644
+--- dom/ipc/TabParent.cpp
++++ dom/ipc/TabParent.cpp
+@@ -972,9 +972,11 @@ TabParent::RecvPDocAccessibleConstructor(PDocAccessibleParent* aDoc,
+ #ifdef XP_WIN
+ a11y::WrapperFor(doc)->SetID(aMsaaID);
+ MOZ_ASSERT(!aDocCOMProxy.IsNull());
++#ifdef NIGHTLY_BUILD
+ if (aDocCOMProxy.IsNull()) {
+ return IPC_FAIL(this, "Constructing a top-level PDocAccessible with null COM proxy");
+ }
++#endif
+
+ RefPtr<IAccessible> proxy(aDocCOMProxy.Get());
+ doc->SetCOMInterface(proxy);
Added: head/www/waterfox/files/patch-bug1397114
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1397114 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,105 @@
+commit 92b82f64e587
+Author: Scott Wu <scottcwwu at gmail.com>
+Date: Wed Sep 20 16:45:03 2017 +0800
+
+ Bug 1397114 - Disable smooth scrolling when value changes come from input box. r=mconley, a=ritu
+
+ MozReview-Commit-ID: 9ZLSB2HQvcu
+
+ --HG--
+ extra : source : f215f88437f1db1884858be2c78582ab2b11bbb0
+---
+ toolkit/content/widgets/datepicker.js | 11 ++++++-----
+ toolkit/content/widgets/spinner.js | 16 ++--------------
+ 2 files changed, 8 insertions(+), 19 deletions(-)
+
+diff --git toolkit/content/widgets/datepicker.js toolkit/content/widgets/datepicker.js
+index 31651dc63665..b125c5103a9a 100644
+--- toolkit/content/widgets/datepicker.js
++++ toolkit/content/widgets/datepicker.js
+@@ -133,7 +133,7 @@ function DatePicker(context) {
+ /**
+ * Update date picker and its components.
+ */
+- _update() {
++ _update(options = {}) {
+ const { dateKeeper, isMonthPickerVisible } = this.state;
+
+ if (isMonthPickerVisible) {
+@@ -148,7 +148,8 @@ function DatePicker(context) {
+ dateObj: dateKeeper.state.dateObj,
+ months: this.state.months,
+ years: this.state.years,
+- toggleMonthPicker: this.state.toggleMonthPicker
++ toggleMonthPicker: this.state.toggleMonthPicker,
++ noSmoothScroll: options.noSmoothScroll
+ });
+ this.components.calendar.setProps({
+ isVisible: !isMonthPickerVisible,
+@@ -269,7 +270,7 @@ function DatePicker(context) {
+ dateKeeper.setSelection({
+ year, month, day
+ });
+- this._update();
++ this._update({ noSmoothScroll: true });
+ }
+ };
+
+@@ -350,14 +351,14 @@ function DatePicker(context) {
+ items: props.months,
+ isInfiniteScroll: true,
+ isValueSet: this.state.isMonthSet,
+- smoothScroll: !this.state.firstOpened
++ smoothScroll: !(this.state.firstOpened || props.noSmoothScroll)
+ });
+ this.components.year.setState({
+ value: props.dateObj.getUTCFullYear(),
+ items: props.years,
+ isInfiniteScroll: false,
+ isValueSet: this.state.isYearSet,
+- smoothScroll: !this.state.firstOpened
++ smoothScroll: !(this.state.firstOpened || props.noSmoothScroll)
+ });
+ this.state.firstOpened = false;
+ } else {
+diff --git toolkit/content/widgets/spinner.js toolkit/content/widgets/spinner.js
+index 101cb01658a0..0a30766f8d13 100644
+--- toolkit/content/widgets/spinner.js
++++ toolkit/content/widgets/spinner.js
+@@ -124,8 +124,6 @@ function Spinner(props, context) {
+ /**
+ * Whenever scroll event is detected:
+ * - Update the index state
+- * - If a smooth scroll has reached its destination, set [isScrolling] state
+- * to false
+ * - If the value has changed, update the [value] state and call [setValue]
+ * - If infinite scrolling is on, reset the scrolling position if necessary
+ */
+@@ -138,14 +136,8 @@ function Spinner(props, context) {
+
+ const value = itemsView[this.state.index + viewportTopOffset].value;
+
+- // Check if smooth scrolling has reached its destination.
+- // This prevents input box jump when input box changes values.
+- if (this.state.value == value && this.state.isScrolling) {
+- this.state.isScrolling = false;
+- }
+-
+- // Call setValue if value has changed, and is not smooth scrolling
+- if (this.state.value != value && !this.state.isScrolling) {
++ // Call setValue if value has changed
++ if (this.state.value != value) {
+ this.state.value = value;
+ this.props.setValue(value);
+ }
+@@ -444,10 +436,6 @@ function Spinner(props, context) {
+ _smoothScrollToIndex(index) {
+ const element = this.elements.spinner.children[index];
+ if (element) {
+- // Set the isScrolling flag before smooth scrolling begins
+- // and remove it when it has reached the destination.
+- // This prevents input box jump when input box changes values
+- this.state.isScrolling = true;
+ element.scrollIntoView({
+ behavior: "smooth", block: "start"
+ });
Added: head/www/waterfox/files/patch-bug1399939
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1399939 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,36 @@
+commit b0369ebbca69
+Author: Gijs Kruitbosch <gijskruitbosch at gmail.com>
+Date: Thu Sep 28 12:00:22 2017 +0100
+
+ Bug 1399939 - Switch to highly restrictive profile for IDN. r=dveditz, r=jfkthame, a=sledru
+
+ MozReview-Commit-ID: E5LRuQVfIZP
+
+ --HG--
+ extra : source : e1c1ebf60808e5e94b9a03d8cb577990ac0b9ca1
+---
+ modules/libpref/init/all.js | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git modules/libpref/init/all.js modules/libpref/init/all.js
+index c74659f8d4a5..c796df0fef1d 100644
+--- modules/libpref/init/all.js
++++ modules/libpref/init/all.js
+@@ -1913,7 +1913,7 @@ pref("network.IDN_show_punycode", false);
+ // IDN-safe. Otherwise, they're treated as unsafe and punycode will be used
+ // for displaying them in the UI (e.g. URL bar), unless they conform to one of
+ // the profiles specified in
+-// http://www.unicode.org/reports/tr36/proposed.html#Security_Levels_and_Alerts
++// https://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+ // If "network.IDN.restriction_profile" is "high", the Highly Restrictive
+ // profile is used.
+ // If "network.IDN.restriction_profile" is "moderate", the Moderately
+@@ -1922,7 +1922,7 @@ pref("network.IDN_show_punycode", false);
+ // Note that these preferences are referred to ONLY when
+ // "network.IDN_show_punycode" is false. In other words, all IDNs will be shown
+ // in punycode if "network.IDN_show_punycode" is true.
+-pref("network.IDN.restriction_profile", "moderate");
++pref("network.IDN.restriction_profile", "high");
+ pref("network.IDN.use_whitelist", false);
+
+ // ccTLDs
Added: head/www/waterfox/files/patch-bug1402025
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/www/waterfox/files/patch-bug1402025 Thu Feb 8 00:59:04 2018 (r461193)
@@ -0,0 +1,201 @@
+commit a80cfb448ce3
+Author: Kirk Steuber <ksteuber at mozilla.com>
+Date: Thu Sep 28 12:09:56 2017 -0700
+
+ Bug 1402025 - Ensure form submission flush when unsetting relevant attributes. r=bz, a=ritu
+
+ It seems that we were flushing any pending submission when changing the action or target attributes of a form, but not when unsetting those attributes.
+
+ MozReview-Commit-ID: E6aUnokg54k
+
+ --HG--
+ extra : source : 32fa20aaa56cfb063433ff46f202e99eb35043d7
+---
+ dom/html/HTMLFormElement.cpp | 25 ++++-----
+ dom/html/test/browser.ini | 3 ++
+ dom/html/test/browser_submission_flush.js | 85 +++++++++++++++++++++++++++++++
+ dom/html/test/post_action_page.html | 10 ++++
+ dom/html/test/submission_flush.html | 13 +++++
+ 5 files changed, 122 insertions(+), 14 deletions(-)
+
+diff --git dom/html/HTMLFormElement.cpp dom/html/HTMLFormElement.cpp
+index 6b87c8b54255..c9ff6ffc8f2a 100644
+--- dom/html/HTMLFormElement.cpp
++++ dom/html/HTMLFormElement.cpp
+@@ -189,21 +189,18 @@ HTMLFormElement::BeforeSetAttr(int32_t aNamespaceID, nsIAtom* aName,
+ {
+ if (aNamespaceID == kNameSpaceID_None) {
+ if (aName == nsGkAtoms::action || aName == nsGkAtoms::target) {
+- // This check is mostly to preserve previous behavior.
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-ports-all
mailing list