Date: Thu, 15 Feb 2018 01:00:54 +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: r461854 - in branches/2018Q1/www/waterfox: . files Message-ID: <201802150100.w1F10sIh043840@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Thu Feb 15 01:00:53 2018 New Revision: 461854 URL: https://svnweb.freebsd.org/changeset/ports/461854 Log: MFH: r461852 www/waterfox: apply FF59 fixes Approved by: ports-secteam blanket Added: branches/2018Q1/www/waterfox/files/patch-bug1324042 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1324042 branches/2018Q1/www/waterfox/files/patch-bug1379148 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1379148 branches/2018Q1/www/waterfox/files/patch-bug1397686 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1397686 branches/2018Q1/www/waterfox/files/patch-bug1399091 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1399091 branches/2018Q1/www/waterfox/files/patch-bug1399177 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1399177 branches/2018Q1/www/waterfox/files/patch-bug1401256 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1401256 branches/2018Q1/www/waterfox/files/patch-bug1401726 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1401726 branches/2018Q1/www/waterfox/files/patch-bug1401878 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1401878 branches/2018Q1/www/waterfox/files/patch-bug1416307 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1416307 branches/2018Q1/www/waterfox/files/patch-bug1416529 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1416529 branches/2018Q1/www/waterfox/files/patch-bug1419508 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1419508 branches/2018Q1/www/waterfox/files/patch-bug1425257 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1425257 branches/2018Q1/www/waterfox/files/patch-bug1435320 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1435320 branches/2018Q1/www/waterfox/files/patch-bug1435530 - copied unchanged from r461852, head/www/waterfox/files/patch-bug1435530 branches/2018Q1/www/waterfox/files/patch-z-bug1436267 - copied unchanged from r461852, head/www/waterfox/files/patch-z-bug1436267 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 15 01:00:27 2018 (r461853) +++ branches/2018Q1/www/waterfox/Makefile Thu Feb 15 01:00:53 2018 (r461854) @@ -2,7 +2,7 @@ PORTNAME= waterfox DISTVERSION= 56.0.4 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= www ipv6 MAINTAINER= jbeich@FreeBSD.org Copied: branches/2018Q1/www/waterfox/files/patch-bug1324042 (from r461852, head/www/waterfox/files/patch-bug1324042) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1324042 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1324042) @@ -0,0 +1,33 @@ +commit ac0f7d653b1e +Author: Daniel Holbert <dholbert@cs.stanford.edu> +Date: Sat Feb 10 08:46:49 2018 -0800 + + Bug 1324042: Fix trimmedOffsets arithmetic in GetRenderedText(). r=mats a=abillings + + MozReview-Commit-ID: H4ngU8Juyln + + --HG-- + extra : source : fbf54020043bd09c162530907b2a1091a10f4f92 +--- + layout/generic/nsTextFrame.cpp | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git layout/generic/nsTextFrame.cpp layout/generic/nsTextFrame.cpp +index 42891e960eea..f8b49e4d07cf 100644 +--- layout/generic/nsTextFrame.cpp ++++ layout/generic/nsTextFrame.cpp +@@ -10116,9 +10116,13 @@ nsTextFrame::GetRenderedText(uint32_t aStartOffset, + startOffset = aStartOffset; + endOffset = std::min<uint32_t>(INT32_MAX, aEndOffset); + } ++ ++ // If startOffset and/or endOffset are inside of trimmedOffsets' range, ++ // then clamp the edges of trimmedOffsets accordingly. ++ int32_t origTrimmedOffsetsEnd = trimmedOffsets.GetEnd(); + trimmedOffsets.mStart = std::max<uint32_t>(trimmedOffsets.mStart, + startOffset); +- trimmedOffsets.mLength = std::min<uint32_t>(trimmedOffsets.GetEnd(), ++ trimmedOffsets.mLength = std::min<uint32_t>(origTrimmedOffsetsEnd, + endOffset) - trimmedOffsets.mStart; + if (trimmedOffsets.mLength <= 0) { + offsetInRenderedString = nextOffsetInRenderedString; Copied: branches/2018Q1/www/waterfox/files/patch-bug1379148 (from r461852, head/www/waterfox/files/patch-bug1379148) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1379148 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1379148) @@ -0,0 +1,366 @@ +commit 708a5eba5908 +Author: Kris Maglione <maglione.k@gmail.com> +Date: Wed Sep 20 16:12:27 2017 -0700 + + Bug 1379148 - Part 1: Allow blocking only non-script-created parsers. r=hsivonen, a=sledru + + MozReview-Commit-ID: 8cGxywiUzWj + + --HG-- + extra : source : bee57767629862c4b4bfa6258918551ed7d82998 +--- + dom/base/nsDocument.cpp | 10 ++++++---- + dom/base/nsIDocument.h | 1 + + dom/webidl/Document.webidl | 11 ++++++++++- + 3 files changed, 17 insertions(+), 5 deletions(-) + +diff --git dom/base/nsDocument.cpp dom/base/nsDocument.cpp +index 086b386d35f0..d7d1428966f1 100644 +--- dom/base/nsDocument.cpp ++++ dom/base/nsDocument.cpp +@@ -10919,11 +10919,12 @@ public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_CLASS(UnblockParsingPromiseHandler) + +- explicit UnblockParsingPromiseHandler(nsIDocument* aDocument, Promise* aPromise) ++ explicit UnblockParsingPromiseHandler(nsIDocument* aDocument, Promise* aPromise, ++ const BlockParsingOptions& aOptions) + : mPromise(aPromise) + { + nsCOMPtr<nsIParser> parser = aDocument->CreatorParserOrNull(); +- if (parser) { ++ if (parser && (aOptions.mBlockScriptCreated || !parser->IsScriptCreated())) { + parser->BlockParser(); + mParser = do_GetWeakReference(parser); + mDocument = aDocument; +@@ -10986,14 +10987,15 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(UnblockParsingPromiseHandler) + NS_IMPL_CYCLE_COLLECTING_RELEASE(UnblockParsingPromiseHandler) + + already_AddRefed<Promise> +-nsIDocument::BlockParsing(Promise& aPromise, ErrorResult& aRv) ++nsIDocument::BlockParsing(Promise& aPromise, const BlockParsingOptions& aOptions, ErrorResult& aRv) + { + RefPtr<Promise> resultPromise = Promise::Create(aPromise.GetParentObject(), aRv); + if (aRv.Failed()) { + return nullptr; + } + +- RefPtr<PromiseNativeHandler> promiseHandler = new UnblockParsingPromiseHandler(this, resultPromise); ++ RefPtr<PromiseNativeHandler> promiseHandler = new UnblockParsingPromiseHandler(this, resultPromise, ++ aOptions); + aPromise.AppendNativeHandler(promiseHandler); + + return resultPromise.forget(); +diff --git dom/base/nsIDocument.h dom/base/nsIDocument.h +index 2f287ae2ccb7..512de896fddf 100644 +--- dom/base/nsIDocument.h ++++ dom/base/nsIDocument.h +@@ -2952,6 +2952,7 @@ public: + void ObsoleteSheet(const nsAString& aSheetURI, mozilla::ErrorResult& rv); + + already_AddRefed<mozilla::dom::Promise> BlockParsing(mozilla::dom::Promise& aPromise, ++ const mozilla::dom::BlockParsingOptions& aOptions, + mozilla::ErrorResult& aRv); + + already_AddRefed<nsIURI> GetMozDocumentURIIfNotForErrorPages(); +diff --git dom/webidl/Document.webidl dom/webidl/Document.webidl +index 8a629502a6ce..f83874fa7315 100644 +--- dom/webidl/Document.webidl ++++ dom/webidl/Document.webidl +@@ -385,13 +385,22 @@ partial interface Document { + + // Blocks the initial document parser until the given promise is settled. + [ChromeOnly, Throws] +- Promise<any> blockParsing(Promise<any> promise); ++ Promise<any> blockParsing(Promise<any> promise, ++ optional BlockParsingOptions options); + + // like documentURI, except that for error pages, it returns the URI we were + // trying to load when we hit an error, rather than the error page's own URI. + [ChromeOnly] readonly attribute URI? mozDocumentURIIfNotForErrorPages; + }; + ++dictionary BlockParsingOptions { ++ /** ++ * If true, blocks script-created parsers (created via document.open()) in ++ * addition to network-created parsers. ++ */ ++ boolean blockScriptCreated = true; ++}; ++ + // Extension to give chrome JS the ability to determine when a document was + // created to satisfy an iframe with srcdoc attribute. + partial interface Document { + +commit 0947c7c07361 +Author: Kris Maglione <maglione.k@gmail.com> +Date: Wed Sep 20 16:13:03 2017 -0700 + + Bug 1379148 - Part 2: Don't block script-created parsers when executing content scripts. r=mixedpuppy, a=sledru + + MozReview-Commit-ID: GsqsaOVob4B + + --HG-- + extra : source : ba22a83959a06a457c8a22d0cd9521eaed220bac +--- + toolkit/components/extensions/ExtensionContent.jsm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git toolkit/components/extensions/ExtensionContent.jsm toolkit/components/extensions/ExtensionContent.jsm +index 3429ae14daff..c05a00e95398 100644 +--- toolkit/components/extensions/ExtensionContent.jsm ++++ toolkit/components/extensions/ExtensionContent.jsm +@@ -324,7 +324,7 @@ class Script { + // until the scripts have been loaded. + let {document} = context.contentWindow; + if (this.runAt === "document_start" && document.readyState !== "complete") { +- document.blockParsing(scriptsPromise); ++ document.blockParsing(scriptsPromise, {blockScriptCreated: false}); + } + + let scripts = await scriptsPromise; + +commit 5f856a2ba599 +Author: Kris Maglione <maglione.k@gmail.com> +Date: Wed Sep 20 17:00:44 2017 -0700 + + Bug 1379148 - Part 3: Inject scripts synchronously if they're already available. r=mixedpuppy, a=sledru + + MozReview-Commit-ID: J6vheuxsqJR + + --HG-- + extra : source : 14ab0648ea9194b7ad84ecf7a330c9bbdadfb303 +--- + toolkit/components/extensions/ExtensionContent.jsm | 36 ++++++++++++++++------ + toolkit/components/extensions/ExtensionUtils.jsm | 12 +++++--- + 2 files changed, 34 insertions(+), 14 deletions(-) + +diff --git toolkit/components/extensions/ExtensionContent.jsm toolkit/components/extensions/ExtensionContent.jsm +index c05a00e95398..9af6870a829b 100644 +--- toolkit/components/extensions/ExtensionContent.jsm ++++ toolkit/components/extensions/ExtensionContent.jsm +@@ -137,8 +137,16 @@ class CacheMap extends DefaultMap { + + class ScriptCache extends CacheMap { + constructor(options) { +- super(SCRIPT_EXPIRY_TIMEOUT_MS, +- url => ChromeUtils.compileScript(url, options)); ++ super(SCRIPT_EXPIRY_TIMEOUT_MS); ++ this.options = options; ++ } ++ ++ defaultConstructor(url) { ++ let promise = ChromeUtils.compileScript(url, this.options); ++ promise.then(script => { ++ promise.script = script; ++ }); ++ return promise; + } + } + +@@ -317,17 +325,25 @@ class Script { + } + } + +- let scriptsPromise = Promise.all(this.compileScripts()); ++ let scriptPromises = this.compileScripts(); ++ ++ let scripts = scriptPromises.map(promise => promise.script); ++ // If not all scripts are already available in the cache, block ++ // parsing and wait all promises to resolve. ++ if (!scripts.every(script => script)) { ++ let promise = Promise.all(scriptPromises); ++ ++ // If we're supposed to inject at the start of the document load, ++ // and we haven't already missed that point, block further parsing ++ // until the scripts have been loaded. ++ let {document} = context.contentWindow; ++ if (this.runAt === "document_start" && document.readyState !== "complete") { ++ document.blockParsing(promise, {blockScriptCreated: false}); ++ } + +- // If we're supposed to inject at the start of the document load, +- // and we haven't already missed that point, block further parsing +- // until the scripts have been loaded. +- let {document} = context.contentWindow; +- if (this.runAt === "document_start" && document.readyState !== "complete") { +- document.blockParsing(scriptsPromise, {blockScriptCreated: false}); ++ scripts = await promise; + } + +- let scripts = await scriptsPromise; + let result; + + // The evaluations below may throw, in which case the promise will be +diff --git toolkit/components/extensions/ExtensionUtils.jsm toolkit/components/extensions/ExtensionUtils.jsm +index a3ed895de6df..4a5fcb19c58d 100644 +--- toolkit/components/extensions/ExtensionUtils.jsm ++++ toolkit/components/extensions/ExtensionUtils.jsm +@@ -67,9 +67,11 @@ function instanceOf(value, type) { + * constructor if one is not present. + */ + class DefaultWeakMap extends WeakMap { +- constructor(defaultConstructor, init) { ++ constructor(defaultConstructor = undefined, init = undefined) { + super(init); +- this.defaultConstructor = defaultConstructor; ++ if (defaultConstructor) { ++ this.defaultConstructor = defaultConstructor; ++ } + } + + get(key) { +@@ -83,9 +85,11 @@ class DefaultWeakMap extends WeakMap { + } + + class DefaultMap extends Map { +- constructor(defaultConstructor, init) { ++ constructor(defaultConstructor = undefined, init = undefined) { + super(init); +- this.defaultConstructor = defaultConstructor; ++ if (defaultConstructor) { ++ this.defaultConstructor = defaultConstructor; ++ } + } + + get(key) { + +commit 3ab96ab42d99 +Author: Kris Maglione <maglione.k@gmail.com> +Date: Wed Sep 20 17:01:33 2017 -0700 + + Bug 1379148 - Part 4: Add tests for document.write() with document_start content script present. r=mixedpuppy, a=sledru + + MozReview-Commit-ID: 5yxgpur1tvf + + --HG-- + extra : source : 14298b92236cfcfdd0b9dc43d8077e576f775b4d +--- + .../extensions/ExtensionXPCShellUtils.jsm | 5 +++ + .../test/xpcshell/data/file_document_write.html | 35 ++++++++++++++++ + .../test_ext_contentscript_scriptCreated.js | 49 ++++++++++++++++++++++ + .../extensions/test/xpcshell/xpcshell-content.ini | 1 + + 4 files changed, 90 insertions(+) + +diff --git toolkit/components/extensions/ExtensionXPCShellUtils.jsm toolkit/components/extensions/ExtensionXPCShellUtils.jsm +index d16003d79944..3420ce175d8a 100644 +--- toolkit/components/extensions/ExtensionXPCShellUtils.jsm ++++ toolkit/components/extensions/ExtensionXPCShellUtils.jsm +@@ -59,6 +59,11 @@ function frameScript() { + Components.utils.import("resource://gre/modules/Services.jsm"); + + Services.obs.notifyObservers(this, "tab-content-frameloader-created"); ++ ++ // eslint-disable-next-line mozilla/balanced-listeners ++ addEventListener("MozHeapMinimize", () => { ++ Services.obs.notifyObservers(null, "memory-pressure", "heap-minimize"); ++ }, true, true); + } + + const FRAME_SCRIPT = `data:text/javascript,(${encodeURI(frameScript)}).call(this)`; +diff --git toolkit/components/extensions/test/xpcshell/data/file_document_write.html toolkit/components/extensions/test/xpcshell/data/file_document_write.html +new file mode 100644 +index 000000000000..fbae3d6d763a +--- /dev/null ++++ toolkit/components/extensions/test/xpcshell/data/file_document_write.html +@@ -0,0 +1,35 @@ ++<!DOCTYPE HTML> ++<html> ++<head> ++<meta charset="utf-8"> ++</head> ++<body> ++ <iframe id="iframe"></iframe> ++ ++ <script type="text/javascript"> ++ "use strict"; ++ addEventListener("load", () => { ++ // Send a heap-minimize observer notification so our script cache is ++ // cleared, and our content script isn't available for synchronous ++ // insertion. ++ window.dispatchEvent(new CustomEvent("MozHeapMinimize")); ++ ++ let iframe = document.getElementById("iframe"); ++ let doc = iframe.contentDocument; ++ doc.open("text/html"); ++ // We need to do two writes here. The first creates the document element, ++ // which normally triggers parser blocking. The second triggers the ++ // creation of the element we're about to query for, which would normally ++ // happen asynchronously if the parser were blocked. ++ doc.write("<div id=meh>"); ++ doc.write("<div id=beer></div>"); ++ ++ let elem = doc.getElementById("beer"); ++ top.postMessage(elem instanceof HTMLDivElement ? "ok" : "fail", ++ "*"); ++ ++ doc.close(); ++ }, {once: true}); ++ </script> ++</body> ++</html> +diff --git toolkit/components/extensions/test/xpcshell/test_ext_contentscript_scriptCreated.js toolkit/components/extensions/test/xpcshell/test_ext_contentscript_scriptCreated.js +new file mode 100644 +index 000000000000..00407b914015 +--- /dev/null ++++ toolkit/components/extensions/test/xpcshell/test_ext_contentscript_scriptCreated.js +@@ -0,0 +1,49 @@ ++"use strict"; ++ ++const server = createHttpServer(); ++server.registerDirectory("/data/", do_get_file("data")); ++ ++const BASE_URL = `http://localhost:${server.identity.primaryPort}/data`; ++ ++// ExtensionContent.jsm needs to know when it's running from xpcshell, ++// to use the right timeout for content scripts executed at document_idle. ++ExtensionTestUtils.mockAppInfo(); ++ ++// Test that document_start content scripts don't block script-created ++// parsers. ++add_task(async function test_contentscript_scriptCreated() { ++ let extensionData = { ++ manifest: { ++ content_scripts: [{ ++ "matches": ["http://*/*/file_document_write.html"], ++ "js": ["content_script.js"], ++ "run_at": "document_start", ++ "match_about_blank": true, ++ "all_frames": true, ++ }], ++ }, ++ ++ files: { ++ "content_script.js": function() { ++ if (window === top) { ++ addEventListener("message", msg => { ++ browser.test.assertEq("ok", msg.data, "document.write() succeeded"); ++ browser.test.sendMessage("content-script-done"); ++ }, {once: true}); ++ } ++ }, ++ }, ++ }; ++ ++ let extension = ExtensionTestUtils.loadExtension(extensionData); ++ ++ await extension.startup(); ++ ++ let contentPage = await ExtensionTestUtils.loadContentPage(`${BASE_URL}/file_document_write.html`); ++ ++ await extension.awaitMessage("content-script-done"); ++ ++ await contentPage.close(); ++ ++ await extension.unload(); ++}); +diff --git toolkit/components/extensions/test/xpcshell/xpcshell-content.ini toolkit/components/extensions/test/xpcshell/xpcshell-content.ini +index e34ec0717691..65814ff5da97 100644 +--- toolkit/components/extensions/test/xpcshell/xpcshell-content.ini ++++ toolkit/components/extensions/test/xpcshell/xpcshell-content.ini +@@ -2,4 +2,5 @@ + skip-if = os == "android" || (os == "win" && debug) + [test_ext_i18n_css.js] + [test_ext_contentscript.js] ++[test_ext_contentscript_scriptCreated.js] + [test_ext_contentscript_xrays.js] Copied: branches/2018Q1/www/waterfox/files/patch-bug1397686 (from r461852, head/www/waterfox/files/patch-bug1397686) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1397686 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1397686) @@ -0,0 +1,69 @@ +commit 21d6d91c77f1 +Author: Dragana Damjanovic <dd.mozilla@gmail.com> +Date: Fri Sep 22 09:09:57 2017 +0200 + + Bug 1397686 - The streams that cannot do 0RTT data need to be put in list and added to mReadyForWrite when 0RTT is done. r=hurley, a=sledru + + --HG-- + extra : source : 5cf7391a9825fda34241f6d7974940f8460804fd +--- + netwerk/protocol/http/Http2Session.cpp | 15 +++++++++++++++ + netwerk/protocol/http/Http2Session.h | 3 +++ + 2 files changed, 18 insertions(+) + +diff --git netwerk/protocol/http/Http2Session.cpp netwerk/protocol/http/Http2Session.cpp +index 42dd829dc73d..c652189a0e16 100644 +--- netwerk/protocol/http/Http2Session.cpp ++++ netwerk/protocol/http/Http2Session.cpp +@@ -2769,6 +2769,9 @@ Http2Session::ReadSegmentsAgain(nsAHttpSegmentReader *reader, + this, stream, stream->StreamID())); + FlushOutputQueue(); + SetWriteCallbacks(); ++ if (!mCannotDo0RTTStreams.Contains(stream)) { ++ mCannotDo0RTTStreams.AppendElement(stream); ++ } + // We can still send our preamble + *countRead = mOutputQueueUsed - mOutputQueueSent; + return *countRead ? NS_OK : NS_BASE_STREAM_WOULD_BLOCK; +@@ -3393,15 +3396,27 @@ Http2Session::Finish0RTT(bool aRestart, bool aAlpnChanged) + // This is the easy case - early data failed, but we're speaking h2, so + // we just need to rewind to the beginning of the preamble and try again. + mOutputQueueSent = 0; ++ ++ for (size_t i = 0; i < mCannotDo0RTTStreams.Length(); ++i) { ++ if (mCannotDo0RTTStreams[i] && VerifyStream(mCannotDo0RTTStreams[i])) { ++ TransactionHasDataToWrite(mCannotDo0RTTStreams[i]); ++ } ++ } + } + } else { + // 0RTT succeeded ++ for (size_t i = 0; i < mCannotDo0RTTStreams.Length(); ++i) { ++ if (mCannotDo0RTTStreams[i] && VerifyStream(mCannotDo0RTTStreams[i])) { ++ TransactionHasDataToWrite(mCannotDo0RTTStreams[i]); ++ } ++ } + // Make sure we look for any incoming data in repsonse to our early data. + Unused << ResumeRecv(); + } + + mAttemptingEarlyData = false; + m0RTTStreams.Clear(); ++ mCannotDo0RTTStreams.Clear(); + RealignOutputQueue(); + + return NS_OK; +diff --git netwerk/protocol/http/Http2Session.h netwerk/protocol/http/Http2Session.h +index 87c4e8b9fcb9..4fdc175ab166 100644 +--- netwerk/protocol/http/Http2Session.h ++++ netwerk/protocol/http/Http2Session.h +@@ -529,6 +529,9 @@ private: + bool mAttemptingEarlyData; + // The ID(s) of the stream(s) that we are getting 0RTT data from. + nsTArray<WeakPtr<Http2Stream>> m0RTTStreams; ++ // The ID(s) of the stream(s) that are not able to send 0RTT data. We need to ++ // remember them put them into mReadyForWrite queue when 0RTT finishes. ++ nsTArray<WeakPtr<Http2Stream>> mCannotDo0RTTStreams; + + bool RealJoinConnection(const nsACString &hostname, int32_t port, bool jk); + bool TestOriginFrame(const nsACString &name, int32_t port); Copied: branches/2018Q1/www/waterfox/files/patch-bug1399091 (from r461852, head/www/waterfox/files/patch-bug1399091) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1399091 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1399091) @@ -0,0 +1,36 @@ +commit 4d1c939529c1 +Author: Catalin Badea <catalin.badea392@gmail.com> +Date: Sun Sep 24 16:44:51 2017 -0400 + + Bug 1399091 - Avoid adding the same range to multiple selections. r=mats, a=sledru + + --HG-- + extra : source : c3b24ef4281035ee00e09b3386fcbf2d672775c4 +--- + dom/base/nsRange.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git dom/base/nsRange.cpp dom/base/nsRange.cpp +index 1e95ec629f55..8221450b828b 100644 +--- dom/base/nsRange.cpp ++++ dom/base/nsRange.cpp +@@ -1048,12 +1048,19 @@ nsRange::SetSelection(mozilla::dom::Selection* aSelection) + if (mSelection == aSelection) { + return; + } ++ + // At least one of aSelection and mSelection must be null + // aSelection will be null when we are removing from a selection + // and a range can't be in more than one selection at a time, + // thus mSelection must be null too. + MOZ_ASSERT(!aSelection || !mSelection); + ++ // Extra step in case our parent failed to ensure the above ++ // invariant. ++ if (aSelection && mSelection) { ++ mSelection->RemoveRange(this); ++ } ++ + mSelection = aSelection; + if (mSelection) { + nsINode* commonAncestor = GetCommonAncestor(); Copied: branches/2018Q1/www/waterfox/files/patch-bug1399177 (from r461852, head/www/waterfox/files/patch-bug1399177) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1399177 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1399177) @@ -0,0 +1,47 @@ +commit 376eb2d39f54 +Author: Doug Thayer <dothayer@mozilla.com> +Date: Wed Sep 20 15:58:25 2017 -0700 + + Bug 1399177 - Pull label out of description in update popups. r=Gijs, a=sledru + + The margin rules for labels mean that if the See what's new link + starts its own line, the alignment looks off. We could override this, + but matching the styling for "Learn more" links, which get their own + line, seemed the better option. + + MozReview-Commit-ID: 4WK9QtRMUQs + + --HG-- + extra : source : f81f645704e4cdfaeebeb21d53d5d749718c3959 +--- + browser/components/customizableui/content/panelUI.inc.xul | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git browser/components/customizableui/content/panelUI.inc.xul browser/components/customizableui/content/panelUI.inc.xul +index 86fc1fa5639f..e7c63f612dc6 100644 +--- browser/components/customizableui/content/panelUI.inc.xul ++++ browser/components/customizableui/content/panelUI.inc.xul +@@ -421,9 +421,8 @@ + buttonhighlight="true" + hidden="true"> + <popupnotificationcontent id="update-available-notification-content" orient="vertical"> +- <description id="update-available-description">&updateAvailable.message; +- <label id="update-available-whats-new" class="text-link" value="&updateAvailable.whatsnew.label;" /> +- </description> ++ <description id="update-available-description">&updateAvailable.message;</description> ++ <label id="update-available-whats-new" class="text-link" value="&updateAvailable.whatsnew.label;" /> + </popupnotificationcontent> + </popupnotification> + +@@ -440,9 +439,8 @@ + buttonhighlight="true" + hidden="true"> + <popupnotificationcontent id="update-manual-notification-content" orient="vertical"> +- <description id="update-manual-description">&updateManual.message; +- <label id="update-manual-whats-new" class="text-link" value="&updateManual.whatsnew.label;" /> +- </description> ++ <description id="update-manual-description">&updateManual.message;</description> ++ <label id="update-manual-whats-new" class="text-link" value="&updateManual.whatsnew.label;" /> + </popupnotificationcontent> + </popupnotification> + Copied: branches/2018Q1/www/waterfox/files/patch-bug1401256 (from r461852, head/www/waterfox/files/patch-bug1401256) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1401256 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1401256) @@ -0,0 +1,69 @@ +commit fea2908c1cef +Author: J. Ryan Stinnett <jryans@gmail.com> +Date: Thu Sep 21 16:43:37 2017 -0500 + + Bug 1401256 - servo: Update inherited prop state for animation (from jryans:stylo-anim-inherit-context). r=heycam, a=sledru + + Source-Repo: https://github.com/servo/servo + Source-Revision: 83705a8fa8992a974b32acc6635c7dfeed1afa50 + + --HG-- + extra : source : 443fe7c5dd42bb6207fb778f58f94354d19fac28 +--- + .../components/style/properties/helpers/animated_properties.mako.rs | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git servo/components/style/properties/helpers/animated_properties.mako.rs servo/components/style/properties/helpers/animated_properties.mako.rs +index ee3f601cdb91..5f98b7e5c0aa 100644 +--- servo/components/style/properties/helpers/animated_properties.mako.rs ++++ servo/components/style/properties/helpers/animated_properties.mako.rs +@@ -576,6 +576,12 @@ impl AnimationValue { + % for prop in data.longhands: + % if prop.animatable: + PropertyDeclaration::${prop.camel_case}(ref val) => { ++ context.for_non_inherited_property = ++ % if prop.style_struct.inherited: ++ None; ++ % else: ++ Some(LonghandId::${prop.camel_case}); ++ % endif + % if prop.ident in SYSTEM_FONT_LONGHANDS and product == "gecko": + if let Some(sf) = val.get_system() { + longhands::system_font::resolve_system_font(sf, context); + +commit 8a2e8131e3a9 +Author: J. Ryan Stinnett <jryans@gmail.com> +Date: Wed Sep 20 13:11:40 2017 -0500 + + Bug 1401256 - Crashtest for animating lengths. r=heycam, a=sledru + + MozReview-Commit-ID: HiVfx9cg4ZZ + + --HG-- + extra : source : 34d60bb9e16bfc33223e9616ad3b6d664cb6d93a +--- + layout/style/crashtests/1401256.html | 5 +++++ + layout/style/crashtests/crashtests.list | 1 + + 2 files changed, 6 insertions(+) + +diff --git layout/style/crashtests/1401256.html layout/style/crashtests/1401256.html +new file mode 100644 +index 000000000000..2a25dedc7e6c +--- /dev/null ++++ layout/style/crashtests/1401256.html +@@ -0,0 +1,5 @@ ++<script> ++ let o1 = document.createElement('p'); ++ document.documentElement.appendChild(o1); ++ o1.animate({'minWidth':['-moz-max-content']}); ++</script> +\ No newline at end of file +diff --git layout/style/crashtests/crashtests.list layout/style/crashtests/crashtests.list +index 9a1412863e6a..7466eb298a8f 100644 +--- layout/style/crashtests/crashtests.list ++++ layout/style/crashtests/crashtests.list +@@ -202,3 +202,4 @@ load 1387481-1.html + load 1387499.html + load 1391577.html + load 1398581.html ++load 1401256.html Copied: branches/2018Q1/www/waterfox/files/patch-bug1401726 (from r461852, head/www/waterfox/files/patch-bug1401726) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1401726 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1401726) @@ -0,0 +1,60 @@ +commit ccbee985a281 +Author: John Dai <jdai@mozilla.com> +Date: Thu Sep 21 16:32:18 2017 +0800 + + Bug 1401726 - Fix crash in nsLabelsNodeList::PopulateSelf. r=smaug, a=sledru + + From 045228df087f7612bde09d2f715ec33f2aaf777c Mon Sep 17 00:00:00 2001 +--- + dom/base/nsContentList.cpp | 4 +++- + dom/html/crashtests/1401726.html | 17 +++++++++++++++++ + dom/html/crashtests/crashtests.list | 1 + + 3 files changed, 21 insertions(+), 1 deletion(-) + +diff --git dom/base/nsContentList.cpp dom/base/nsContentList.cpp +index f943039e7fca..9b7bd6323aa8 100644 +--- dom/base/nsContentList.cpp ++++ dom/base/nsContentList.cpp +@@ -1266,7 +1266,9 @@ nsLabelsNodeList::MaybeResetRoot(nsINode* aRootNode) + void + nsLabelsNodeList::PopulateSelf(uint32_t aNeededLength) + { +- MOZ_ASSERT(mRootNode, "Must have root"); ++ if (!mRootNode) { ++ return; ++ } + + // Start searching at the root. + nsINode* cur = mRootNode; +diff --git dom/html/crashtests/1401726.html dom/html/crashtests/1401726.html +new file mode 100644 +index 000000000000..bf4b4918abd4 +--- /dev/null ++++ dom/html/crashtests/1401726.html +@@ -0,0 +1,17 @@ ++<!DOCTYPE HTML> ++<html> ++<head> ++<script> ++ try { o1 = document.createElement('button') } catch(e) { } ++ try { o2 = document.createElement('p') } catch(e) { } ++ try { o3 = o1.labels } catch(e) { } ++ try { o4 = document.createNSResolver(document.documentElement) } catch(e) { } ++ try { o5 = document.createRange(); } catch(e) { } ++ try { document.documentElement.appendChild(o1) } catch(e) { } ++ try { o5.selectNode(o4); } catch(e) { } ++ try { o5.surroundContents(o2) } catch(e) { } ++ try { o5.surroundContents(o2) } catch(e) { } ++ try { o1.labels.length } catch(e) { } ++</script> ++</head> ++</html> +diff --git dom/html/crashtests/crashtests.list dom/html/crashtests/crashtests.list +index a60cc9f99474..581ed10cefc8 100644 +--- dom/html/crashtests/crashtests.list ++++ dom/html/crashtests/crashtests.list +@@ -83,3 +83,4 @@ load 1343886-2.xml + load 1343886-3.xml + asserts(0-3) load 1350972.html + load 1386905.html ++asserts(0-4) load 1401726.html Copied: branches/2018Q1/www/waterfox/files/patch-bug1401878 (from r461852, head/www/waterfox/files/patch-bug1401878) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1401878 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1401878) @@ -0,0 +1,70 @@ +commit 59e5b0881ec2 +Author: Andrea Marchesini <amarchesini@mozilla.com> +Date: Thu Sep 21 21:32:00 2017 +0200 + + Bug 1401878 - Remove ServiceWorkers in SiteDataManager.jsm. r=bkelly, a=sledru + + --HG-- + extra : source : 04888373f12bd5d86ec3f4057c3a2f0b2240c963 + extra : intermediate-source : e2b1cd9fd4a66fc932d8f74cfe2b38c55b9a7a1e +--- + browser/components/preferences/SiteDataManager.jsm | 26 ++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +diff --git browser/components/preferences/SiteDataManager.jsm browser/components/preferences/SiteDataManager.jsm +index d6dd5c78656a..8f2ac2a34188 100644 +--- browser/components/preferences/SiteDataManager.jsm ++++ browser/components/preferences/SiteDataManager.jsm +@@ -9,6 +9,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "OfflineAppCacheHelper", + "resource:///modules/offlineAppCache.jsm"); + XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService", + "resource://gre/modules/ContextualIdentityService.jsm"); ++XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager", ++ "@mozilla.org/serviceworkers/manager;1", ++ "nsIServiceWorkerManager"); + + this.EXPORTED_SYMBOLS = [ + "SiteDataManager" +@@ -216,6 +219,19 @@ this.SiteDataManager = { + } + }, + ++ _removeServiceWorkers(site) { ++ let serviceWorkers = serviceWorkerManager.getAllRegistrations(); ++ for (let i = 0; i < serviceWorkers.length; i++) { ++ let sw = serviceWorkers.queryElementAt(i, Ci.nsIServiceWorkerRegistrationInfo); ++ for (let principal of site.principals) { ++ if (sw.principal.equals(principal)) { ++ serviceWorkerManager.removeAndPropagate(sw.principal.URI.host); ++ break; ++ } ++ } ++ } ++ }, ++ + remove(hosts) { + let promises = []; + let unknownHost = ""; +@@ -225,6 +241,7 @@ this.SiteDataManager = { + this._removePermission(site); + this._removeAppCache(site); + this._removeCookie(site); ++ this._removeServiceWorkers(site); + promises.push(this._removeQuotaUsage(site)); + } else { + unknownHost = host; +@@ -240,6 +257,14 @@ this.SiteDataManager = { + }, + + removeAll() { ++ // Iterate through the service workers and remove them. ++ let serviceWorkers = serviceWorkerManager.getAllRegistrations(); ++ for (let i = 0; i < serviceWorkers.length; i++) { ++ let sw = serviceWorkers.queryElementAt(i, Ci.nsIServiceWorkerRegistrationInfo); ++ let host = sw.principal.URI.host; ++ serviceWorkerManager.removeAndPropagate(host); ++ } ++ + let promises = []; + for (let site of this._sites.values()) { + this._removePermission(site); Copied: branches/2018Q1/www/waterfox/files/patch-bug1416307 (from r461852, head/www/waterfox/files/patch-bug1416307) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1416307 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1416307) @@ -0,0 +1,94 @@ +commit 1159955c684f +Author: Samael Wang <freesamael@gmail.com> +Date: Tue Feb 6 13:28:30 2018 -0500 + + Bug 1416307 - Set triggeringPrincipal to current document's principal, if aPrincipal is not given. r=bz a=ritu + + MozReview-Commit-ID: 8lxKFeUlyzq + + --HG-- + extra : source : 9fcf48189000ab8ee16f236be57c9659c7243b42 +--- + docshell/base/nsDocShell.cpp | 21 +++++++++++---------- + docshell/base/nsIRefreshURI.idl | 15 ++++++--------- + 2 files changed, 17 insertions(+), 19 deletions(-) + +diff --git docshell/base/nsDocShell.cpp docshell/base/nsDocShell.cpp +index fa3707880772..84a9086a1a00 100644 +--- docshell/base/nsDocShell.cpp ++++ docshell/base/nsDocShell.cpp +@@ -6396,9 +6396,17 @@ nsDocShell::ForceRefreshURI(nsIURI* aURI, nsIPrincipal* aPrincipal, int32_t aDel + */ + loadInfo->SetReferrer(mCurrentURI); + +- /* Don't ever "guess" on which principal to use to avoid picking +- * the current principal. +- */ ++ // Set the triggering pricipal to aPrincipal if available, or current ++ // document's principal otherwise. ++ nsCOMPtr<nsIPrincipal> principal = aPrincipal; ++ if (!principal) { ++ nsCOMPtr<nsIDocument> doc = GetDocument(); ++ if (!doc) { ++ return NS_ERROR_FAILURE; ++ } ++ principal = doc->NodePrincipal(); ++ } ++ loadInfo->SetTriggeringPrincipal(principal); + loadInfo->SetPrincipalIsExplicit(true); + + /* Check if this META refresh causes a redirection +@@ -6426,13 +6434,6 @@ nsDocShell::ForceRefreshURI(nsIURI* aURI, nsIPrincipal* aPrincipal, int32_t aDel + loadInfo->SetLoadType(nsIDocShellLoadInfo::loadRefresh); + } + +- // If the principal is null, the refresh will have a triggeringPrincipal +- // derived from the referrer URI, or will be set to the system principal +- // if there is no refererrer. See LoadURI() +- if (aPrincipal) { +- loadInfo->SetTriggeringPrincipal(aPrincipal); +- } +- + /* + * LoadURI(...) will cancel all refresh timers... This causes the + * Timer and its refreshData instance to be released... +diff --git docshell/base/nsIRefreshURI.idl docshell/base/nsIRefreshURI.idl +index 3e85e4c516c6..77d8fd660674 100644 +--- docshell/base/nsIRefreshURI.idl ++++ docshell/base/nsIRefreshURI.idl +@@ -19,9 +19,8 @@ interface nsIRefreshURI : nsISupports { + * + * @param aUri The uri to refresh. + * @param aPrincipal The triggeringPrincipal for the refresh load +- * May be null, in which case a principal will be built based on the +- * referrer URI of the previous docshell load, or will use the system +- * principal when there is no referrer. ++ * May be null, in which case the principal of current document will be ++ * applied. + * @param aMillis The number of milliseconds to wait. + * @param aRepeat Flag to indicate if the uri is to be + * repeatedly refreshed every aMillis milliseconds. +@@ -36,9 +35,8 @@ interface nsIRefreshURI : nsISupports { + * + * @param aURI The URI to refresh. + * @param aPrincipal The triggeringPrincipal for the refresh load +- * May be null, in which case a principal will be built based on the +- * referrer URI of the previous docshell load, or will use the system +- * principal when there is no referrer. ++ * May be null, in which case the principal of current document will be ++ * applied. + * @param aMillis The number of milliseconds by which this refresh would + * be delayed if it were not being forced. + * @param aMetaRefresh Flag to indicate if this is a meta refresh. +@@ -68,9 +66,8 @@ interface nsIRefreshURI : nsISupports { + * + * @param aBaseURI base URI to resolve refresh uri with. + * @param aPrincipal The triggeringPrincipal for the refresh load +- * May be null, in which case a principal will be built based on the +- * referrer URI of the previous docshell load, or will use the system +- * principal when there is no referrer. ++ * May be null, in which case the principal of current document will be ++ * applied. + * @param aHeader The meta refresh header string. + */ + void setupRefreshURIFromHeader(in nsIURI aBaseURI, Copied: branches/2018Q1/www/waterfox/files/patch-bug1416529 (from r461852, head/www/waterfox/files/patch-bug1416529) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1416529 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1416529) @@ -0,0 +1,101 @@ +commit 4cfa1b84d80c +Author: Nicholas Hurley <hurley@mozilla.com> +Date: Fri Feb 2 11:03:08 2018 -0800 + + Bug 1416529 r=mcmanus a=ritu + MozReview-Commit-ID: CD1l5vLB4yy + + --HG-- + extra : amend_source : 44c6368af20b158091a90c627ea4f206871dfa9d +--- + netwerk/protocol/http/Http2Session.cpp | 18 +++++++++--------- + netwerk/protocol/http/Http2Stream.cpp | 14 ++++++++++++++ + netwerk/protocol/http/Http2Stream.h | 1 + + 3 files changed, 24 insertions(+), 9 deletions(-) + +diff --git netwerk/protocol/http/Http2Session.cpp netwerk/protocol/http/Http2Session.cpp +index 9fd021065742..622c1657027a 100644 +--- netwerk/protocol/http/Http2Session.cpp ++++ netwerk/protocol/http/Http2Session.cpp +@@ -1136,6 +1136,15 @@ Http2Session::CleanupStream(Http2Stream *aStream, nsresult aResult, + return; + } + ++ Http2PushedStream *pushSource = aStream->PushSource(); ++ if (pushSource) { ++ // aStream is a synthetic attached to an even push ++ MOZ_ASSERT(pushSource->GetConsumerStream() == aStream); ++ MOZ_ASSERT(!aStream->StreamID()); ++ MOZ_ASSERT(!(pushSource->StreamID() & 0x1)); ++ aStream->ClearPushSource(); ++ } ++ + if (aStream->DeferCleanup(aResult)) { + LOG3(("Http2Session::CleanupStream 0x%X deferred\n", aStream->StreamID())); + return; +@@ -1146,15 +1155,6 @@ Http2Session::CleanupStream(Http2Stream *aStream, nsresult aResult, + return; + } + +- Http2PushedStream *pushSource = aStream->PushSource(); +- if (pushSource) { +- // aStream is a synthetic attached to an even push +- MOZ_ASSERT(pushSource->GetConsumerStream() == aStream); +- MOZ_ASSERT(!aStream->StreamID()); +- MOZ_ASSERT(!(pushSource->StreamID() & 0x1)); +- pushSource->SetConsumerStream(nullptr); +- } +- + // don't reset a stream that has recevied a fin or rst + if (!aStream->RecvdFin() && !aStream->RecvdReset() && aStream->StreamID() && + !(mInputFrameFinal && (aStream == mInputFrameDataStream))) { // !(recvdfin with mark pending) +diff --git netwerk/protocol/http/Http2Stream.cpp netwerk/protocol/http/Http2Stream.cpp +index d2f304b5ed7b..95674d018ab1 100644 +--- netwerk/protocol/http/Http2Stream.cpp ++++ netwerk/protocol/http/Http2Stream.cpp +@@ -112,12 +112,22 @@ Http2Stream::Http2Stream(nsAHttpTransaction *httpTransaction, + + Http2Stream::~Http2Stream() + { ++ ClearPushSource(); + ClearTransactionsBlockedOnTunnel(); + mStreamID = Http2Session::kDeadStreamID; + + LOG3(("Http2Stream::~Http2Stream %p", this)); + } + ++void ++Http2Stream::ClearPushSource() ++{ ++ if (mPushSource) { ++ mPushSource->SetConsumerStream(nullptr); ++ mPushSource = nullptr; ++ } ++} ++ + // ReadSegments() is used to write data down the socket. Generally, HTTP + // request data is pulled from the approriate transaction and + // converted to HTTP/2 data. Sometimes control data like a window-update is +@@ -1135,6 +1145,10 @@ Http2Stream::ConvertPushHeaders(Http2Decompressor *decompressor, + void + Http2Stream::Close(nsresult reason) + { ++ // In case we are connected to a push, make sure the push knows we are closed, ++ // so it doesn't try to give us any more DATA that comes on it after our close. ++ ClearPushSource(); ++ + mTransaction->Close(reason); + } + +diff --git netwerk/protocol/http/Http2Stream.h netwerk/protocol/http/Http2Stream.h +index 3412eb56f809..29f98163c4ac 100644 +--- netwerk/protocol/http/Http2Stream.h ++++ netwerk/protocol/http/Http2Stream.h +@@ -56,6 +56,7 @@ public: + + uint32_t StreamID() { return mStreamID; } + Http2PushedStream *PushSource() { return mPushSource; } ++ void ClearPushSource(); + + stateType HTTPState() { return mState; } + void SetHTTPState(stateType val) { mState = val; } Copied: branches/2018Q1/www/waterfox/files/patch-bug1419508 (from r461852, head/www/waterfox/files/patch-bug1419508) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2018Q1/www/waterfox/files/patch-bug1419508 Thu Feb 15 01:00:53 2018 (r461854, copy of r461852, head/www/waterfox/files/patch-bug1419508) @@ -0,0 +1,29 @@ +commit 4d25545cc673 +Author: Gerald Squelart <gsquelart@mozilla.com> +Date: Thu Jan 25 16:21:23 2018 +1100 + + Bug 1419508 - Return early from CreateMaskLayer if there is no visible data - r=mattwoodrow a=lizzard + + MozReview-Commit-ID: 9jWGXA2eGvv + + --HG-- + extra : source : c5d8b1ed27228f4bcf45b2746f78dba3795d0868 +--- *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802150100.w1F10sIh043840>