Date: Thu, 8 Feb 2018 00:59:50 +0000 (UTC) From: Jan Beich <jbeich@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org Subject: svn commit: r461194 - in branches/2018Q1/www/waterfox: . files Message-ID: <201802080059.w180xomD042711@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Thu Feb 8 00:59:50 2018 New Revision: 461194 URL: https://svnweb.freebsd.org/changeset/ports/461194 Log: MFH: r461193 www/waterfox: apply some FF57/FF59 fixes Approved by: ports-secteam blanket Added: branches/2018Q1/www/waterfox/files/patch-bug1261175 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1261175 branches/2018Q1/www/waterfox/files/patch-bug1275062 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1275062 branches/2018Q1/www/waterfox/files/patch-bug1321960 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1321960 branches/2018Q1/www/waterfox/files/patch-bug1347984 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1347984 branches/2018Q1/www/waterfox/files/patch-bug1370791 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1370791 branches/2018Q1/www/waterfox/files/patch-bug1383501 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1383501 branches/2018Q1/www/waterfox/files/patch-bug1397114 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1397114 branches/2018Q1/www/waterfox/files/patch-bug1399939 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1399939 branches/2018Q1/www/waterfox/files/patch-bug1402025 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1402025 branches/2018Q1/www/waterfox/files/patch-bug1402218 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1402218 branches/2018Q1/www/waterfox/files/patch-bug1402377 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1402377 branches/2018Q1/www/waterfox/files/patch-bug1402766 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1402766 branches/2018Q1/www/waterfox/files/patch-bug1402951 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1402951 branches/2018Q1/www/waterfox/files/patch-bug1402981 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1402981 branches/2018Q1/www/waterfox/files/patch-bug1403721 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1403721 branches/2018Q1/www/waterfox/files/patch-bug1403998 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1403998 branches/2018Q1/www/waterfox/files/patch-bug1404057 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1404057 branches/2018Q1/www/waterfox/files/patch-bug1404180 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1404180 branches/2018Q1/www/waterfox/files/patch-bug1404323 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1404323 branches/2018Q1/www/waterfox/files/patch-bug1404714 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1404714 branches/2018Q1/www/waterfox/files/patch-bug1404760 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1404760 branches/2018Q1/www/waterfox/files/patch-bug1405267 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1405267 branches/2018Q1/www/waterfox/files/patch-bug1405377 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1405377 branches/2018Q1/www/waterfox/files/patch-bug1405635 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1405635 branches/2018Q1/www/waterfox/files/patch-bug1405720 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1405720 branches/2018Q1/www/waterfox/files/patch-bug1416523 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1416523 branches/2018Q1/www/waterfox/files/patch-bug1418757 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1418757 branches/2018Q1/www/waterfox/files/patch-bug1422036 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1422036 branches/2018Q1/www/waterfox/files/patch-bug1424469 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1424469 branches/2018Q1/www/waterfox/files/patch-bug1426087 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1426087 branches/2018Q1/www/waterfox/files/patch-bug1431192 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1431192 branches/2018Q1/www/waterfox/files/patch-bug1431370 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1431370 branches/2018Q1/www/waterfox/files/patch-bug1432870 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1432870 branches/2018Q1/www/waterfox/files/patch-bug1432915 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1432915 branches/2018Q1/www/waterfox/files/patch-bug1433671 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1433671 branches/2018Q1/www/waterfox/files/patch-bug1435098 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1435098 branches/2018Q1/www/waterfox/files/patch-bug1435286 - copied unchanged from r461193, head/www/waterfox/files/patch-bug1435286 Modified: branches/2018Q1/www/waterfox/Makefile Directory Properties: branches/2018Q1/ (props changed) Modified: branches/2018Q1/www/waterfox/Makefile ============================================================================== --- branches/2018Q1/www/waterfox/Makefile Thu Feb 8 00:59:04 2018 (r461193) +++ branches/2018Q1/www/waterfox/Makefile Thu Feb 8 00:59:50 2018 (r461194) @@ -2,7 +2,7 @@ PORTNAME= waterfox DISTVERSION= 56.0.4 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= www ipv6 MAINTAINER= jbeich@FreeBSD.org Copied: branches/2018Q1/www/waterfox/files/patch-bug1261175 (from r461193, head/www/waterfox/files/patch-bug1261175) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1261175 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1261175) @@ -0,0 +1,31 @@ +commit 315fe73694f9 +Author: Matt Woodrow <mwoodrow@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) { Copied: branches/2018Q1/www/waterfox/files/patch-bug1275062 (from r461193, head/www/waterfox/files/patch-bug1275062) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1275062 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1275062) @@ -0,0 +1,344 @@ +commit 7b030826befa +Author: Andrea Marchesini <amarchesini@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 Copied: branches/2018Q1/www/waterfox/files/patch-bug1321960 (from r461193, head/www/waterfox/files/patch-bug1321960) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1321960 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1321960) @@ -0,0 +1,134 @@ +commit 8721b8f42bc0 +Author: Alexander Surkov <surkov.alexander@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@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. Copied: branches/2018Q1/www/waterfox/files/patch-bug1347984 (from r461193, head/www/waterfox/files/patch-bug1347984) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1347984 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1347984) @@ -0,0 +1,96 @@ +commit d40956eaa7d8 +Author: Jan de Mooij <jdemooij@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."), Copied: branches/2018Q1/www/waterfox/files/patch-bug1370791 (from r461193, head/www/waterfox/files/patch-bug1370791) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1370791 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1370791) @@ -0,0 +1,104 @@ +commit 4ab22d92be00 +Author: Gijs Kruitbosch <gijskruitbosch@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) { Copied: branches/2018Q1/www/waterfox/files/patch-bug1383501 (from r461193, head/www/waterfox/files/patch-bug1383501) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1383501 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1383501) @@ -0,0 +1,83 @@ +commit 8ba0e2ee02b0 +Author: Aaron Klotz <aklotz@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); Copied: branches/2018Q1/www/waterfox/files/patch-bug1397114 (from r461193, head/www/waterfox/files/patch-bug1397114) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1397114 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1397114) @@ -0,0 +1,105 @@ +commit 92b82f64e587 +Author: Scott Wu <scottcwwu@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" + }); Copied: branches/2018Q1/www/waterfox/files/patch-bug1399939 (from r461193, head/www/waterfox/files/patch-bug1399939) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1399939 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1399939) @@ -0,0 +1,36 @@ +commit b0369ebbca69 +Author: Gijs Kruitbosch <gijskruitbosch@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 Copied: branches/2018Q1/www/waterfox/files/patch-bug1402025 (from r461193, head/www/waterfox/files/patch-bug1402025) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1402025 Thu Feb 8 00:59:50 2018 (r461194, copy of r461193, head/www/waterfox/files/patch-bug1402025) @@ -0,0 +1,201 @@ +commit a80cfb448ce3 +Author: Kirk Steuber <ksteuber@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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802080059.w180xomD042711>