diff --git a/dom/base/nsDOMMutationObserver.cpp b/dom/base/nsDOMMutationObserver.cpp index ab51e777d46b..94e8f3fd9c05 100644 --- a/dom/base/nsDOMMutationObserver.cpp +++ b/dom/base/nsDOMMutationObserver.cpp @@ -56,7 +56,10 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMMutationRecord) NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMMutationRecord) -NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMMutationRecord) +// Break down the linked list so that cycle collector can delete the +// objects sooner. +NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_LAST_RELEASE(nsDOMMutationRecord, + mNext = nullptr) NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMMutationRecord, mTarget, mPreviousSibling, mNextSibling, diff --git a/dom/svg/SVGTests.cpp b/dom/svg/SVGTests.cpp index bfdd79754fc4..39dd750a5137 100644 --- a/dom/svg/SVGTests.cpp +++ b/dom/svg/SVGTests.cpp @@ -8,7 +8,6 @@ #include "DOMSVGStringList.h" #include "nsIContent.h" #include "nsIContentInlines.h" -#include "nsSVGFeatures.h" #include "mozilla/dom/SVGSwitchElement.h" #include "nsCharSeparatedTokenizer.h" #include "nsStyleUtil.h" @@ -42,9 +41,17 @@ already_AddRefed SVGTests::SystemLanguage() { AsSVGElement(), true, LANGUAGE); } -bool SVGTests::HasExtension(const nsAString& aExtension) { - return nsSVGFeatures::HasExtension(aExtension, - AsSVGElement()->IsInChromeDocument()); +bool SVGTests::HasExtension(const nsAString& aExtension) const { +#define SVG_SUPPORTED_EXTENSION(str) \ + if (aExtension.EqualsLiteral(str)) return true; + SVG_SUPPORTED_EXTENSION("http://www.w3.org/1999/xhtml") + nsNameSpaceManager* nameSpaceManager = nsNameSpaceManager::GetInstance(); + if (AsSVGElement()->IsInChromeDocument() || !nameSpaceManager->mMathMLDisabled) { + SVG_SUPPORTED_EXTENSION("http://www.w3.org/1998/Math/MathML") + } +#undef SVG_SUPPORTED_EXTENSION + + return false; } bool SVGTests::IsConditionalProcessingAttribute( @@ -109,8 +116,7 @@ bool SVGTests::PassesConditionalProcessingTests( return false; } for (uint32_t i = 0; i < mStringListAttributes[EXTENSIONS].Length(); i++) { - if (!nsSVGFeatures::HasExtension(mStringListAttributes[EXTENSIONS][i], - AsSVGElement()->IsInChromeDocument())) { + if (!HasExtension(mStringListAttributes[EXTENSIONS][i])) { return false; } } diff --git a/dom/svg/SVGTests.h b/dom/svg/SVGTests.h index 3264467019ce..a3c2dc2a945a 100644 --- a/dom/svg/SVGTests.h +++ b/dom/svg/SVGTests.h @@ -96,7 +96,7 @@ class SVGTests : public nsISupports { already_AddRefed RequiredFeatures(); already_AddRefed RequiredExtensions(); already_AddRefed SystemLanguage(); - bool HasExtension(const nsAString& aExtension); + bool HasExtension(const nsAString& aExtension) const; virtual SVGElement* AsSVGElement() = 0; diff --git a/dom/svg/moz.build b/dom/svg/moz.build index 8908f66fda5c..91e4af955164 100644 --- a/dom/svg/moz.build +++ b/dom/svg/moz.build @@ -11,7 +11,6 @@ MOCHITEST_MANIFESTS += ['test/mochitest.ini'] EXPORTS += [ 'nsSVGClass.h', - 'nsSVGFeatures.h', ] EXPORTS.mozilla += [ @@ -131,7 +130,6 @@ UNIFIED_SOURCES += [ 'nsSVGBoolean.cpp', 'nsSVGClass.cpp', 'nsSVGEnum.cpp', - 'nsSVGFeatures.cpp', 'nsSVGInteger.cpp', 'nsSVGIntegerPair.cpp', 'nsSVGLength2.cpp', diff --git a/dom/svg/nsSVGFeatures.cpp b/dom/svg/nsSVGFeatures.cpp deleted file mode 100644 index eaaf920d899c..000000000000 --- a/dom/svg/nsSVGFeatures.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * This file contains code to help implement the Conditional Processing - * section of the SVG specification (i.e. the element and the - * requiredFeatures, requiredExtensions and systemLanguage attributes). - * - * http://www.w3.org/TR/SVG11/struct.html#ConditionalProcessing - */ - -#include "nsSVGFeatures.h" -#include "nsIContent.h" -#include "nsIDocument.h" -#include "nsNameSpaceManager.h" -#include "mozilla/Preferences.h" - -using namespace mozilla; - -/*static*/ bool nsSVGFeatures::HasExtension(const nsAString& aExtension, - const bool aIsInChrome) { -#define SVG_SUPPORTED_EXTENSION(str) \ - if (aExtension.EqualsLiteral(str)) return true; - SVG_SUPPORTED_EXTENSION("http://www.w3.org/1999/xhtml") - nsNameSpaceManager* nameSpaceManager = nsNameSpaceManager::GetInstance(); - if (aIsInChrome || !nameSpaceManager->mMathMLDisabled) { - SVG_SUPPORTED_EXTENSION("http://www.w3.org/1998/Math/MathML") - } -#undef SVG_SUPPORTED_EXTENSION - - return false; -} diff --git a/dom/svg/nsSVGFeatures.h b/dom/svg/nsSVGFeatures.h deleted file mode 100644 index 03c72aacc40d..000000000000 --- a/dom/svg/nsSVGFeatures.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef __NS_SVGFEATURES_H__ -#define __NS_SVGFEATURES_H__ - -#include "nsString.h" - -class nsSVGFeatures { - public: - /** - * Check whether we support the given extension string. - * - * @param aExtension the URI of an extension. Known extensions are - * "http://www.w3.org/1999/xhtml" and "http://www.w3.org/1998/Math/MathML" - */ - static bool HasExtension(const nsAString& aExtension, const bool aIsInChrome); -}; - -#endif // __NS_SVGFEATURES_H__ diff --git a/js/src/jit-test/tests/ctypes/conversion-finalizer.js b/js/src/jit-test/tests/ctypes/conversion-finalizer.js index a04a40cfa203..6af44197e945 100644 --- a/js/src/jit-test/tests/ctypes/conversion-finalizer.js +++ b/js/src/jit-test/tests/ctypes/conversion-finalizer.js @@ -1,3 +1,5 @@ +// |jit-test| skip-if: !getBuildConfiguration()['x86'] && !getBuildConfiguration()['x64'] +// Skip on non x86/x64 until Bug 1511615 is fixed for arm7/arm64. load(libdir + 'asserts.js'); function test() { diff --git a/js/src/jit-test/tests/wasm/atomic.js b/js/src/jit-test/tests/wasm/atomic.js index 577cca8e2ab7..180fbcaf6310 100644 --- a/js/src/jit-test/tests/wasm/atomic.js +++ b/js/src/jit-test/tests/wasm/atomic.js @@ -1,4 +1,5 @@ -// |jit-test| skip-if: !wasmThreadsSupported() +// |jit-test| skip-if: !wasmThreadsSupported() || getBuildConfiguration()['arm64'] +// skip arm64 due to bug 1513231 const oob = /index out of bounds/; const unaligned = /unaligned memory access/; diff --git a/js/src/jit-test/tests/wasm/baseline-abs-addr-opt.js b/js/src/jit-test/tests/wasm/baseline-abs-addr-opt.js index 1623dc6a4afe..489f49846973 100644 --- a/js/src/jit-test/tests/wasm/baseline-abs-addr-opt.js +++ b/js/src/jit-test/tests/wasm/baseline-abs-addr-opt.js @@ -1,3 +1,5 @@ +// |jit-test| skip-if: getBuildConfiguration()['arm64'] +// skip arm64 due to bug 1513231 // Test bounds checking at the end of memory with a constant base pointer. // This is intended to verify a bounds check elimination optimization in // the baseline compiler. diff --git a/js/src/jit-test/tests/wasm/bce.js b/js/src/jit-test/tests/wasm/bce.js index 5e3d232b5b0d..ce089d30b9d5 100644 --- a/js/src/jit-test/tests/wasm/bce.js +++ b/js/src/jit-test/tests/wasm/bce.js @@ -1,3 +1,5 @@ +// |jit-test| skip-if: getBuildConfiguration()['arm64'] +// skip arm64 due to bug 1513231 mem='\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'+ '\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'+ '\x00'.repeat(65488) + diff --git a/js/src/jit-test/tests/wasm/memory.js b/js/src/jit-test/tests/wasm/memory.js index c619cc7b246e..dadd96208ce9 100644 --- a/js/src/jit-test/tests/wasm/memory.js +++ b/js/src/jit-test/tests/wasm/memory.js @@ -1,3 +1,5 @@ +// |jit-test| skip-if: getBuildConfiguration()['arm64'] +// skip arm64 due to bug 1513231 const RuntimeError = WebAssembly.RuntimeError; function loadModuleSrc(type, ext, offset, align, drop = false) { diff --git a/js/src/jit-test/tests/wasm/spec/float_memory.wast.js b/js/src/jit-test/tests/wasm/spec/float_memory.wast.js index 43ce3423acbc..41bf604149bb 100644 --- a/js/src/jit-test/tests/wasm/spec/float_memory.wast.js +++ b/js/src/jit-test/tests/wasm/spec/float_memory.wast.js @@ -1,3 +1,5 @@ +// |jit-test| skip-if: !getBuildConfiguration()['x86'] && !getBuildConfiguration()['x64'] && !getBuildConfiguration()['arm64'] +// skip arm7 due to bug 1513231 // float_memory.wast:5 let $1 = instance("\x00\x61\x73\x6d\x01\x00\x00\x00\x01\x8c\x80\x80\x80\x00\x03\x60\x00\x01\x7d\x60\x00\x01\x7f\x60\x00\x00\x03\x86\x80\x80\x80\x00\x05\x00\x01\x02\x02\x02\x05\x84\x80\x80\x80\x00\x01\x01\x01\x01\x07\xb7\x80\x80\x80\x00\x05\x08\x66\x33\x32\x2e\x6c\x6f\x61\x64\x00\x00\x08\x69\x33\x32\x2e\x6c\x6f\x61\x64\x00\x01\x09\x66\x33\x32\x2e\x73\x74\x6f\x72\x65\x00\x02\x09\x69\x33\x32\x2e\x73\x74\x6f\x72\x65\x00\x03\x05\x72\x65\x73\x65\x74\x00\x04\x0a\xca\x80\x80\x80\x00\x05\x87\x80\x80\x80\x00\x00\x41\x00\x2a\x02\x00\x0b\x87\x80\x80\x80\x00\x00\x41\x00\x28\x02\x00\x0b\x8c\x80\x80\x80\x00\x00\x41\x00\x43\x00\x00\xa0\x7f\x38\x02\x00\x0b\x8d\x80\x80\x80\x00\x00\x41\x00\x41\x80\x80\x80\xfd\x07\x36\x02\x00\x0b\x89\x80\x80\x80\x00\x00\x41\x00\x41\x00\x36\x02\x00\x0b\x0b\x8a\x80\x80\x80\x00\x01\x00\x41\x00\x0b\x04\x00\x00\xa0\x7f"); diff --git a/js/src/jit-test/tests/wasm/spec/memory_redundancy.wast.js b/js/src/jit-test/tests/wasm/spec/memory_redundancy.wast.js index fe844f06807c..67a96d79b268 100644 --- a/js/src/jit-test/tests/wasm/spec/memory_redundancy.wast.js +++ b/js/src/jit-test/tests/wasm/spec/memory_redundancy.wast.js @@ -1,3 +1,5 @@ +// |jit-test| skip-if: !getBuildConfiguration()['x86'] && !getBuildConfiguration()['x64'] && !getBuildConfiguration()['arm64'] +// skip arm7 due to bug 1513231 // memory_redundancy.wast:5 let $1 = instance("\x00\x61\x73\x6d\x01\x00\x00\x00\x01\x8c\x80\x80\x80\x00\x03\x60\x00\x00\x60\x00\x01\x7f\x60\x00\x01\x7d\x03\x85\x80\x80\x80\x00\x04\x00\x01\x01\x02\x05\x84\x80\x80\x80\x00\x01\x01\x01\x01\x07\xd0\x80\x80\x80\x00\x04\x0f\x7a\x65\x72\x6f\x5f\x65\x76\x65\x72\x79\x74\x68\x69\x6e\x67\x00\x00\x12\x74\x65\x73\x74\x5f\x73\x74\x6f\x72\x65\x5f\x74\x6f\x5f\x6c\x6f\x61\x64\x00\x01\x13\x74\x65\x73\x74\x5f\x72\x65\x64\x75\x6e\x64\x61\x6e\x74\x5f\x6c\x6f\x61\x64\x00\x02\x0f\x74\x65\x73\x74\x5f\x64\x65\x61\x64\x5f\x73\x74\x6f\x72\x65\x00\x03\x0a\x8c\x81\x80\x80\x00\x04\x9e\x80\x80\x80\x00\x00\x41\x00\x41\x00\x36\x02\x00\x41\x04\x41\x00\x36\x02\x00\x41\x08\x41\x00\x36\x02\x00\x41\x0c\x41\x00\x36\x02\x00\x0b\x98\x80\x80\x80\x00\x00\x41\x08\x41\x00\x36\x02\x00\x41\x05\x43\x00\x00\x00\x80\x38\x02\x00\x41\x08\x28\x02\x00\x0b\xa2\x80\x80\x80\x00\x01\x02\x7f\x41\x08\x28\x02\x00\x21\x00\x41\x05\x41\x80\x80\x80\x80\x78\x36\x02\x00\x41\x08\x28\x02\x00\x21\x01\x20\x00\x20\x01\x6a\x0b\x9f\x80\x80\x80\x00\x01\x01\x7d\x41\x08\x41\xa3\xc6\x8c\x99\x02\x36\x02\x00\x41\x0b\x2a\x02\x00\x21\x00\x41\x08\x41\x00\x36\x02\x00\x20\x00\x0b"); diff --git a/js/src/tests/lib/jittests.py b/js/src/tests/lib/jittests.py index 991bace27bad..515278ec9b7d 100755 --- a/js/src/tests/lib/jittests.py +++ b/js/src/tests/lib/jittests.py @@ -512,6 +512,11 @@ def check_output(out, err, rc, timed_out, test, options): if rc == 1 and ("Hit MOZ_CRASH" in err or "Assertion failure:" in err): return True + # When running jittests on Android, SEGV results in a return code + # of 128+11=139. + if rc == 139: + return True + if rc != test.expect_status: # Tests which expect a timeout check for exit code 6. # Sometimes 0 is returned on Windows for unknown reasons. diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp index 7005f8adc232..81447fbfb2c6 100644 --- a/layout/generic/nsTextFrame.cpp +++ b/layout/generic/nsTextFrame.cpp @@ -1828,6 +1828,15 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1, } ComputedStyle* sc1 = aFrame1->Style(); + ComputedStyle* sc2 = aFrame2->Style(); + + // Any difference in writing-mode/directionality inhibits shaping across + // the boundary. + WritingMode wm(sc1); + if (wm != WritingMode(sc2)) { + return false; + } + const nsStyleText* textStyle1 = sc1->StyleText(); // If the first frame ends in a preformatted newline, then we end the textrun // here. This avoids creating giant textruns for an entire plain text file. @@ -1835,8 +1844,78 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1, // even if it has newlines in it, so typically we won't see trailing newlines // until after reflow has broken up the frame into one (or more) frames per // line. That's OK though. - if (textStyle1->NewlineIsSignificant(aFrame1) && HasTerminalNewline(aFrame1)) + if (textStyle1->NewlineIsSignificant(aFrame1) && + HasTerminalNewline(aFrame1)) { return false; + } + + if (aFrame1->GetParent()->GetContent() != + aFrame2->GetParent()->GetContent()) { + // Does aFrame, or any ancestor between it and aAncestor, have a property + // that should inhibit cross-element-boundary shaping on aSide? + auto PreventCrossBoundaryShaping = [](const nsIFrame* aFrame, + const nsIFrame* aAncestor, + Side aSide) { + while (aFrame != aAncestor) { + ComputedStyle* ctx = aFrame->Style(); + // According to https://drafts.csswg.org/css-text/#boundary-shaping: + // + // Text shaping must be broken at inline box boundaries when any of the + // following are true for any box whose boundary separates the two + // typographic character units: + // + // 1. Any of margin/border/padding separating the two typographic + // character units in the inline axis is non-zero. + const nsStyleCoord& margin = ctx->StyleMargin()->mMargin.Get(aSide); + if (!margin.ConvertsToLength() || margin.ToLength() != 0) { + return true; + } + const nsStyleCoord& padding = ctx->StylePadding()->mPadding.Get(aSide); + if (!padding.ConvertsToLength() || padding.ToLength() != 0) { + return true; + } + if (ctx->StyleBorder()->GetComputedBorderWidth(aSide) != 0) { + return true; + } + + // 2. vertical-align is not baseline. + const nsStyleCoord& coord = ctx->StyleDisplay()->mVerticalAlign; + if (coord.GetUnit() != eStyleUnit_Enumerated || + coord.GetIntValue() != NS_STYLE_VERTICAL_ALIGN_BASELINE) { + return true; + } + + // 3. The boundary is a bidi isolation boundary. + const uint8_t unicodeBidi = ctx->StyleTextReset()->mUnicodeBidi; + if (unicodeBidi == NS_STYLE_UNICODE_BIDI_ISOLATE || + unicodeBidi == NS_STYLE_UNICODE_BIDI_ISOLATE_OVERRIDE) { + return true; + } + + aFrame = aFrame->GetParent(); + } + return false; + }; + + const nsIFrame* ancestor = + nsLayoutUtils::FindNearestCommonAncestorFrame(aFrame1, aFrame2); + MOZ_ASSERT(ancestor); + + // Map inline-end and inline-start to physical sides for checking presence + // of non-zero margin/border/padding. + Side side1 = wm.PhysicalSide(eLogicalSideIEnd); + Side side2 = wm.PhysicalSide(eLogicalSideIStart); + // If the frames have an embedding level that is opposite to the writing + // mode, we need to swap which sides we're checking. + if (IS_LEVEL_RTL(aFrame1->GetEmbeddingLevel()) == wm.IsBidiLTR()) { + Swap(side1, side2); + } + + if (PreventCrossBoundaryShaping(aFrame1, ancestor, side1) || + PreventCrossBoundaryShaping(aFrame2, ancestor, side2)) { + return false; + } + } if (aFrame1->GetContent() == aFrame2->GetContent() && aFrame1->GetNextInFlow() != aFrame2) { @@ -1849,7 +1928,10 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1, return false; } - ComputedStyle* sc2 = aFrame2->Style(); + if (sc1 == sc2) { + return true; + } + const nsStyleText* textStyle2 = sc2->StyleText(); if (sc1 == sc2) return true; diff --git a/layout/reftests/css-ruby/intrinsic-isize-1-ref.html b/layout/reftests/css-ruby/intrinsic-isize-1-ref.html index bbc09d1fc7d1..3305795935f8 100644 --- a/layout/reftests/css-ruby/intrinsic-isize-1-ref.html +++ b/layout/reftests/css-ruby/intrinsic-isize-1-ref.html @@ -7,6 +7,8 @@ div { display: inline-block; border: 1px solid black; + font-kerning: none; /* disable kerning, because in the reference file + it might occur across boundaries */ } span { white-space: nowrap; diff --git a/layout/reftests/css-ruby/intrinsic-isize-1.html b/layout/reftests/css-ruby/intrinsic-isize-1.html index 2e5e38ea0e43..91b2a5fe2a0c 100644 --- a/layout/reftests/css-ruby/intrinsic-isize-1.html +++ b/layout/reftests/css-ruby/intrinsic-isize-1.html @@ -7,6 +7,8 @@ div { display: inline-block; border: 1px solid black; + font-kerning: none; /* disable kerning, because in the reference file + it might occur across boundaries */ } diff --git a/testing/mozbase/mozdevice/mozdevice/adb.py b/testing/mozbase/mozdevice/mozdevice/adb.py index 01a3c1c516d8..f8c7491e6e72 100644 --- a/testing/mozbase/mozdevice/mozdevice/adb.py +++ b/testing/mozbase/mozdevice/mozdevice/adb.py @@ -857,6 +857,7 @@ class ADBDevice(ADBCommand): """Get the exitcode from the last line of the file_obj for shell commands. """ + re_returncode = re.compile(r'adb_returncode=([0-9]+)') file_obj.seek(0, os.SEEK_END) line = '' @@ -874,13 +875,28 @@ class ADBDevice(ADBCommand): break offset += 1 - match = re.match(r'rc=([0-9]+)', line) + match = re_returncode.match(line) if match: exitcode = int(match.group(1)) + # Set the position in the file to the position of the + # adb_returncode and truncate it from the output. file_obj.seek(-1, os.SEEK_CUR) file_obj.truncate() else: exitcode = None + # We may have a situation where the adb_returncode= is not + # at the end of the output. This happens at least in the + # failure jit-tests on arm. To work around this + # possibility, we can search the entire output for the + # appropriate match. + file_obj.seek(0, os.SEEK_SET) + for line in file_obj: + match = re_returncode.search(line) + if match: + exitcode = int(match.group(1)) + break + # Reset the position in the file to the end. + file_obj.seek(0, os.SEEK_END) return exitcode @@ -1308,7 +1324,7 @@ class ADBDevice(ADBCommand): envstr = '&& '.join(map(lambda x: 'export %s=%s' % (x[0], x[1]), env.iteritems())) cmd = envstr + "&& " + cmd - cmd += "; echo rc=$?" + cmd += "; echo adb_returncode=$?" args = [self._adb_path] if self._adb_host: diff --git a/testing/raptor/raptor/raptor.py b/testing/raptor/raptor/raptor.py index 8fad4b28024a..8154e98032be 100644 --- a/testing/raptor/raptor/raptor.py +++ b/testing/raptor/raptor/raptor.py @@ -7,10 +7,14 @@ from __future__ import absolute_import import json import os +import posixpath +import shutil import subprocess import sys +import tempfile import time +import mozcrash import mozinfo from mozdevice import ADBDevice @@ -131,7 +135,8 @@ class Raptor(object): } runner_cls = runners[app] self.runner = runner_cls( - binary, profile=self.profile, process_args=process_args) + binary, profile=self.profile, process_args=process_args, + symbols_path=self.config['symbols_path']) self.log.info("raptor config: %s" % str(self.config)) @@ -386,14 +391,9 @@ class Raptor(object): break finally: if self.config['app'] == "geckoview": - # TODO: if on geckoview is there some cleanup here i.e. check for crashes? if self.config['power_test']: finish_geckoview_power_test(self) - else: - try: - self.runner.check_for_crashes() - except NotImplementedError: # not implemented for Chrome - pass + self.check_for_crashes() if self.playback is not None: self.playback.stop() @@ -455,6 +455,31 @@ class Raptor(object): def get_page_timeout_list(self): return self.results_handler.page_timeout_list + def check_for_crashes(self): + if self.config['app'] == "geckoview": + logcat = self.device.get_logcat() + if logcat: + if mozcrash.check_for_java_exception(logcat, "raptor"): + return + try: + dump_dir = tempfile.mkdtemp() + remote_dir = posixpath.join(self.device_profile, 'minidumps') + if not self.device.is_dir(remote_dir): + self.log.error("No crash directory (%s) found on remote device" % remote_dir) + return + self.device.pull(remote_dir, dump_dir) + mozcrash.log_crashes(self.log, dump_dir, self.config['symbols_path']) + finally: + try: + shutil.rmtree(dump_dir) + except Exception: + self.log.warning("unable to remove directory: %s" % dump_dir) + else: + try: + self.runner.check_for_crashes() + except NotImplementedError: # not implemented for Chrome + pass + def clean_up(self): self.control_server.stop() if self.config['app'] != "geckoview": diff --git a/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-004.html.ini b/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-004.html.ini new file mode 100644 index 000000000000..6de3a285e8df --- /dev/null +++ b/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-004.html.ini @@ -0,0 +1,3 @@ +[boundary-shaping-004.html] + expected: + if webrender and (os == "win"): FAIL diff --git a/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-005.html.ini b/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-005.html.ini new file mode 100644 index 000000000000..02d3750b6ab2 --- /dev/null +++ b/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-005.html.ini @@ -0,0 +1,3 @@ +[boundary-shaping-005.html] + expected: + if webrender and (os == "win"): FAIL diff --git a/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-010.html.ini b/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-010.html.ini new file mode 100644 index 000000000000..6d6a2318a2d1 --- /dev/null +++ b/testing/web-platform/meta/css/css-text/boundary-shaping/boundary-shaping-010.html.ini @@ -0,0 +1,4 @@ +[boundary-shaping-010.html] + expected: + if (os == "mac"): FAIL + if (os == "android"): FAIL diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-001.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-001.html new file mode 100644 index 000000000000..d6c8fa2b236f --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-001.html @@ -0,0 +1,28 @@ + + + + +Text shaping must not be broken across inline box boundaries when there is no change in formatting + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-002.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-002.html new file mode 100644 index 000000000000..c41f6497ce70 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-002.html @@ -0,0 +1,24 @@ + + + + +Text shaping must be broken across inline box boundaries when 'vertical-align' is not 'baseline' + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-003.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-003.html new file mode 100644 index 000000000000..e5f870e5b39e --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-003.html @@ -0,0 +1,24 @@ + + + + +Text shaping must be broken across inline box boundaries when padding is non-zero + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-004.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-004.html new file mode 100644 index 000000000000..8f3dd067142c --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-004.html @@ -0,0 +1,24 @@ + + + + +Text shaping must be broken across inline box boundaries when margin is non-zero + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-005.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-005.html new file mode 100644 index 000000000000..e5f3aa0de489 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-005.html @@ -0,0 +1,24 @@ + + + + +Text shaping must be broken across inline box boundaries when border is non-zero + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-006.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-006.html new file mode 100644 index 000000000000..d3045fa94df0 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-006.html @@ -0,0 +1,24 @@ + + + + +Text shaping must be broken across inline box boundaries when 'vertical-align' is not 'baseline' + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-007.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-007.html new file mode 100644 index 000000000000..d1360c2fe202 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-007.html @@ -0,0 +1,27 @@ + + + + +Text shaping must be broken across inline box boundaries when padding or margin is non-zero + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-008.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-008.html new file mode 100644 index 000000000000..cbb78328bf11 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-008.html @@ -0,0 +1,24 @@ + + + + +Text shaping must be broken across inline box boundaries at a bidi isolation boundary + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-009.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-009.html new file mode 100644 index 000000000000..f004273dd38f --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-009.html @@ -0,0 +1,57 @@ + + + + +Text shaping must be broken across inline box boundaries when padding or margin is non-zero + + + + + +
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+ + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-010.html b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-010.html new file mode 100644 index 000000000000..514a9aa9449d --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/boundary-shaping-010.html @@ -0,0 +1,21 @@ + + + + +Text shaping must not be broken across inline box boundaries when there is no change in formatting + + + + + +
+السلام + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-001.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-001.ref.html new file mode 100644 index 000000000000..23ae8824a81d --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-001.ref.html @@ -0,0 +1,18 @@ + + + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-002.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-002.ref.html new file mode 100644 index 000000000000..0541daef6c60 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-002.ref.html @@ -0,0 +1,21 @@ + + + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-003.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-003.ref.html new file mode 100644 index 000000000000..b122551cb766 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-003.ref.html @@ -0,0 +1,22 @@ + + + + + + + +of fice + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-004.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-004.ref.html new file mode 100644 index 000000000000..b0da33d95459 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-004.ref.html @@ -0,0 +1,22 @@ + + + + + + + +off ice + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-005.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-005.ref.html new file mode 100644 index 000000000000..b0da33d95459 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-005.ref.html @@ -0,0 +1,22 @@ + + + + + + + +off ice + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-006.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-006.ref.html new file mode 100644 index 000000000000..6b647bab3128 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-006.ref.html @@ -0,0 +1,22 @@ + + + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-007.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-007.ref.html new file mode 100644 index 000000000000..64733849947e --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-007.ref.html @@ -0,0 +1,23 @@ + + + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-008.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-008.ref.html new file mode 100644 index 000000000000..0541daef6c60 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-008.ref.html @@ -0,0 +1,21 @@ + + + + + + + +office + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-009.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-009.ref.html new file mode 100644 index 000000000000..7a0fe835c10d --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-009.ref.html @@ -0,0 +1,56 @@ + + + + + + + +
+السلام عليكم +
+
+السلام عليكم +
+
+السلام عليكم +
+
+السلام عليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+
+السلامعليكم +
+ + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-010.ref.html b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-010.ref.html new file mode 100644 index 000000000000..8a043267a038 --- /dev/null +++ b/testing/web-platform/tests/css/css-text/boundary-shaping/reference/boundary-shaping-010.ref.html @@ -0,0 +1,18 @@ + + + + + + + +
+السلام + + diff --git a/testing/web-platform/tests/css/css-text/boundary-shaping/resources/LinLibertine_Re-4.7.5.woff b/testing/web-platform/tests/css/css-text/boundary-shaping/resources/LinLibertine_Re-4.7.5.woff new file mode 100644 index 000000000000..c953a546f0a7 Binary files /dev/null and b/testing/web-platform/tests/css/css-text/boundary-shaping/resources/LinLibertine_Re-4.7.5.woff differ