зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to autoland. a=merge CLOSED TREE
This commit is contained in:
Коммит
9766c8e643
|
@ -59,6 +59,7 @@ if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
|
|||
# Used in G_DEFINE_TYPE_EXTENDED macro, probably fixed in newer glib /
|
||||
# gobject headers. See bug 1243331 comment 3.
|
||||
CXXFLAGS += [
|
||||
'-Wno-error=unused-function',
|
||||
'-Wno-error=shadow',
|
||||
'-Wno-unused-local-typedefs',
|
||||
]
|
||||
|
|
|
@ -8,11 +8,24 @@ ChromeUtils.import("resource://gre/modules/Preferences.jsm");
|
|||
let gPrefArray;
|
||||
|
||||
function onLoad() {
|
||||
gPrefArray = Services.prefs.getChildList("").map(name => ({
|
||||
name,
|
||||
value: Preferences.get(name),
|
||||
hasUserValue: Services.prefs.prefHasUserValue(name),
|
||||
}));
|
||||
gPrefArray = Services.prefs.getChildList("").map(function(name) {
|
||||
let pref = {
|
||||
name,
|
||||
value: Preferences.get(name),
|
||||
hasUserValue: Services.prefs.prefHasUserValue(name),
|
||||
};
|
||||
// Try in case it's a localized string.
|
||||
// Throws an exception if there is no equivalent value in the localized files for the pref.
|
||||
// If an execption is thrown the pref value is set to the empty string.
|
||||
try {
|
||||
if (!pref.hasUserValue && /^chrome:\/\/.+\/locale\/.+\.properties/.test(pref.value)) {
|
||||
pref.value = Services.prefs.getComplexValue(name, Ci.nsIPrefLocalizedString).data;
|
||||
}
|
||||
} catch (ex) {
|
||||
pref.value = "";
|
||||
}
|
||||
return pref;
|
||||
});
|
||||
|
||||
gPrefArray.sort((a, b) => a.name > b.name);
|
||||
|
||||
|
|
|
@ -3,6 +3,14 @@
|
|||
|
||||
const PAGE_URL = "chrome://browser/content/aboutconfig/aboutconfig.html";
|
||||
|
||||
add_task(async function setup() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [
|
||||
["random.user.pref", "chrome://test/locale/testing.properties"],
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
add_task(async function test_load_title() {
|
||||
await BrowserTestUtils.withNewTab({
|
||||
gBrowser,
|
||||
|
@ -27,9 +35,24 @@ add_task(async function test_load_settings() {
|
|||
function findPref(name) {
|
||||
return list.some(e => e.textContent.trim().startsWith(name + " "));
|
||||
}
|
||||
|
||||
// Test if page contains elements.
|
||||
Assert.ok(findPref("plugins.testmode"));
|
||||
Assert.ok(findPref("dom.vr.enabled"));
|
||||
Assert.ok(findPref("accessibility.AOM.enabled"));
|
||||
|
||||
function containsLocalizedValue(value) {
|
||||
return list.some(e => e.textContent.trim() == value);
|
||||
}
|
||||
// Test to see if values are localized.
|
||||
Assert.ok(containsLocalizedValue("font.language.group || Default || String || x-western"));
|
||||
Assert.ok(containsLocalizedValue("intl.ellipsis || Default || String || \u2026"));
|
||||
Assert.ok(containsLocalizedValue("gecko.handlerService.schemes.mailto.1.uriTemplate || Default || String || https://mail.google.com/mail/?extsrc=mailto&url=%s"));
|
||||
|
||||
// Test to see if user created value is not empty string when it matches /^chrome:\/\/.+\/locale\/.+\.properties/.
|
||||
Assert.ok(containsLocalizedValue("random.user.pref || Modified || String || chrome://test/locale/testing.properties"));
|
||||
// Test to see if empty string when value matches /^chrome:\/\/.+\/locale\/.+\.properties/ and an exception is thrown.
|
||||
Assert.ok(containsLocalizedValue("gecko.handlerService.schemes.irc.1.name || Default || String ||"));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
diff -Nru glib2.0-2.38.2/debian/changelog glib2.0-2.38.2/debian/changelog
|
||||
--- glib2.0-2.38.2/debian/changelog 2014-02-15 21:47:00.000000000 +0900
|
||||
+++ glib2.0-2.38.2/debian/changelog 2018-11-02 09:47:49.000000000 +0900
|
||||
@@ -1,3 +1,10 @@
|
||||
+glib2.0 (2.38.2-5.deb7moz1) wheezy; urgency=medium
|
||||
+
|
||||
+ * Mozilla backport for Wheezy.
|
||||
+ * debian/control: Remove :any from dependencies because it's not supported.
|
||||
+
|
||||
+ -- Mike Hommey <glandium@mozilla.com> Fri, 02 Nov 2018 09:47:49 +0900
|
||||
+
|
||||
glib2.0 (2.38.2-5) unstable; urgency=medium
|
||||
|
||||
* Upload to unstable.
|
||||
diff -Nru glib2.0-2.38.2/debian/control glib2.0-2.38.2/debian/control
|
||||
--- glib2.0-2.38.2/debian/control 2014-02-15 21:50:26.000000000 +0900
|
||||
+++ glib2.0-2.38.2/debian/control 2018-11-02 09:47:24.000000000 +0900
|
||||
@@ -24,7 +24,7 @@
|
||||
dbus-x11,
|
||||
shared-mime-info,
|
||||
xterm,
|
||||
- python:any (>= 2.6.6-3~),
|
||||
+ python (>= 2.6.6-3~),
|
||||
python-dbus,
|
||||
python-gi,
|
||||
libxml2-utils,
|
|
@ -0,0 +1,38 @@
|
|||
diff -Nru gtk+3.0-3.10.7/debian/changelog gtk+3.0-3.10.7/debian/changelog
|
||||
--- gtk+3.0-3.10.7/debian/changelog 2014-02-15 22:20:29.000000000 +0900
|
||||
+++ gtk+3.0-3.10.7/debian/changelog 2018-11-02 12:04:23.000000000 +0900
|
||||
@@ -1,3 +1,11 @@
|
||||
+gtk+3.0 (3.10.7-1.deb7moz1) wheezy; urgency=medium
|
||||
+
|
||||
+ * Mozilla backport for Wheezy.
|
||||
+ * gtk/Makefile.am: Filter-out -fvisibility=hidden from the flags passed
|
||||
+ to g-ir-scanner.
|
||||
+
|
||||
+ -- Mike Hommey <glandium@mozilla.com> Fri, 02 Nov 2018 12:04:23 +0900
|
||||
+
|
||||
gtk+3.0 (3.10.7-1) unstable; urgency=low
|
||||
|
||||
* debian/libgtk-3-bin.install:
|
||||
diff -Nru gtk+3.0-3.10.7/debian/patches/deb7moz1 gtk+3.0-3.10.7/debian/patches/deb7moz1
|
||||
--- gtk+3.0-3.10.7/debian/patches/deb7moz1 1970-01-01 09:00:00.000000000 +0900
|
||||
+++ gtk+3.0-3.10.7/debian/patches/deb7moz1 2018-11-02 12:04:23.000000000 +0900
|
||||
@@ -0,0 +1,11 @@
|
||||
+--- gtk+3.0-3.10.7.orig/gtk/Makefile.am
|
||||
++++ gtk+3.0-3.10.7/gtk/Makefile.am
|
||||
+@@ -1352,7 +1352,7 @@ Gtk_3_0_gir_INCLUDES += xlib-2.0
|
||||
+ endif
|
||||
+ Gtk_3_0_gir_SCANNERFLAGS += --c-include="gtk/gtkx.h"
|
||||
+ Gtk_3_0_gir_CFLAGS = \
|
||||
+- $(AM_CPPFLAGS) \
|
||||
++ $(filter-out -fvisibility=hidden,$(AM_CPPFLAGS)) \
|
||||
+ -DGTK_TEXT_USE_INTERNAL_UNSUPPORTED_API
|
||||
+ Gtk_3_0_gir_LIBS = libgtk-3.la $(top_builddir)/gdk/libgdk-3.la
|
||||
+ Gtk_3_0_gir_FILES = $(introspection_files)
|
||||
diff -Nru gtk+3.0-3.10.7/debian/patches/series gtk+3.0-3.10.7/debian/patches/series
|
||||
--- gtk+3.0-3.10.7/debian/patches/series 2014-02-15 22:14:46.000000000 +0900
|
||||
+++ gtk+3.0-3.10.7/debian/patches/series 2018-11-02 12:04:23.000000000 +0900
|
||||
@@ -12,3 +12,4 @@
|
||||
061_multiarch_module_fallback.patch
|
||||
071_fix-installation-of-HTML-images.patch
|
||||
080_disable-parallel-docs-build.patch
|
||||
+deb7moz1
|
|
@ -0,0 +1,65 @@
|
|||
diff -Nru python-defaults-2.7.3/debian/changelog python-defaults-2.7.3/debian/changelog
|
||||
--- python-defaults-2.7.3/debian/changelog 2013-09-29 04:36:47.000000000 +0900
|
||||
+++ python-defaults-2.7.3/debian/changelog 2018-11-06 18:06:20.000000000 +0900
|
||||
@@ -1,3 +1,10 @@
|
||||
+python-defaults (2.7.3-4.deb7moz1) wheezy; urgency=medium
|
||||
+
|
||||
+ * Mozilla backport for Wheezy.
|
||||
+ * debian/control: Set "Multi-Arch: foreign" on various packages.
|
||||
+
|
||||
+ -- Mike Hommey <glandium@debian.org> Tue, 06 Nov 2018 18:06:20 +0900
|
||||
+
|
||||
python-defaults (2.7.3-4+deb7u1) stable; urgency=low
|
||||
|
||||
* Add symlink for /usr/bin/python2 (Closes: #723182)
|
||||
diff -Nru python-defaults-2.7.3/debian/control.in python-defaults-2.7.3/debian/control.in
|
||||
--- python-defaults-2.7.3/debian/control.in 2012-07-01 03:36:04.000000000 +0900
|
||||
+++ python-defaults-2.7.3/debian/control.in 2018-11-06 18:06:20.000000000 +0900
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
Package: python
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Priority: standard
|
||||
Depends: ${misc:Depends}, @PVER@ (>= @PREVVER@), python-minimal (= ${binary:Version})
|
||||
Suggests: python-doc (= ${binary:Version}), python-tk (= ${binary:Version})
|
||||
@@ -29,6 +30,7 @@
|
||||
|
||||
Package: python-minimal
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Priority: standard
|
||||
Depends: ${misc:Depends}, @PVER@-minimal (>= @PREVVER@), dpkg (>= 1.13.20)
|
||||
Recommends: python
|
||||
@@ -102,6 +104,7 @@
|
||||
|
||||
Package: python-dbg
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Section: debug
|
||||
Priority: extra
|
||||
Depends: ${misc:Depends}, python (= ${binary:Version}), python@VER@-dbg (>= @PREVVER@)
|
||||
@@ -112,6 +115,7 @@
|
||||
|
||||
Package: python-all
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Depends: ${misc:Depends}, python (= ${binary:Version}), python2.6 (>= 2.6.7-3), python2.7 (>= 2.7.2-3)
|
||||
Description: package depending on all supported Python runtime versions
|
||||
The package currently depends on python2.6 and python2.7, in the future,
|
||||
@@ -123,6 +127,7 @@
|
||||
|
||||
Package: python-all-dev
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Depends: ${misc:Depends}, python (= ${binary:Version}), python-all (= ${binary:Version}), python-dev (= ${binary:Version}), python2.6-dev (>= 2.6.5-2), python2.7-dev (>= 2.7-7)
|
||||
Description: package depending on all supported Python development packages
|
||||
The package currently depends on python2.6-dev and python2.7-dev, in the
|
||||
@@ -134,6 +139,7 @@
|
||||
|
||||
Package: python-all-dbg
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Section: debug
|
||||
Priority: extra
|
||||
Depends: ${misc:Depends}, python (= ${binary:Version}), python-all (= ${binary:Version}), python-dbg (= ${binary:Version}), python2.6-dbg (>= 2.6.5-2), python2.7-dbg (>= 2.7-7)
|
|
@ -0,0 +1,25 @@
|
|||
diff -u xkeyboard-config-2.5.1/debian/control xkeyboard-config-2.5.1/debian/control
|
||||
--- xkeyboard-config-2.5.1/debian/control
|
||||
+++ xkeyboard-config-2.5.1/debian/control
|
||||
@@ -23,6 +23,7 @@
|
||||
Depends: ${misc:Depends}
|
||||
Breaks: libx11-6 (<< 2:1.4.3)
|
||||
Architecture: all
|
||||
+Multi-Arch: foreign
|
||||
Description: X Keyboard Extension (XKB) configuration data
|
||||
This package contains configuration data used by the X Keyboard
|
||||
Extension (XKB), which allows selection of keyboard layouts when
|
||||
diff -u xkeyboard-config-2.5.1/debian/changelog xkeyboard-config-2.5.1/debian/changelog
|
||||
--- xkeyboard-config-2.5.1/debian/changelog
|
||||
+++ xkeyboard-config-2.5.1/debian/changelog
|
||||
@@ -1,3 +1,10 @@
|
||||
+xkeyboard-config (2.5.1-3.deb7moz1) wheezy; urgency=medium
|
||||
+
|
||||
+ * Mozilla backport for Wheezy.
|
||||
+ * Mark xkb-data as "Multi-Arch: foreign".
|
||||
+
|
||||
+ -- Mike Hommey <glandium@mozilla.com> Tue, 06 Nov 2018 17:13:52 +0900
|
||||
+
|
||||
xkeyboard-config (2.5.1-3) unstable; urgency=low
|
||||
|
||||
* Cherry-picks from upstream:
|
|
@ -212,8 +212,8 @@ function transform(filePath) {
|
|||
"syntax-trailing-function-commas",
|
||||
"transform-class-properties",
|
||||
"transform-es2015-modules-commonjs",
|
||||
"transform-object-rest-spread",
|
||||
"transform-react-jsx",
|
||||
"syntax-object-rest-spread",
|
||||
["transform-mc", { mappings, vendors: VENDORS, filePath }]
|
||||
]
|
||||
});
|
||||
|
|
|
@ -2664,6 +2664,7 @@ class SplitBox extends Component {
|
|||
doc.documentElement.style.cursor = this.state.vert ? "ew-resize" : "ns-resize";
|
||||
|
||||
splitBox.classList.add("dragging");
|
||||
document.dispatchEvent(new CustomEvent("drag:start"));
|
||||
|
||||
this.setState({
|
||||
defaultCursor: defaultCursor
|
||||
|
@ -2676,6 +2677,7 @@ class SplitBox extends Component {
|
|||
doc.documentElement.style.cursor = this.state.defaultCursor;
|
||||
|
||||
splitBox.classList.remove("dragging");
|
||||
document.dispatchEvent(new CustomEvent("drag:end"));
|
||||
|
||||
if (this.props.onResizeEnd) {
|
||||
this.props.onResizeEnd(this.state.vert ? this.state.width : this.state.height);
|
||||
|
@ -2853,6 +2855,12 @@ class Draggable extends Component {
|
|||
|
||||
onMove(ev) {
|
||||
ev.preventDefault();
|
||||
|
||||
// When the target is outside of the document, its tagName is undefined
|
||||
if (!ev.target.tagName) {
|
||||
return
|
||||
}
|
||||
|
||||
// We pass the whole event because we don't know which properties
|
||||
// the callee needs.
|
||||
this.props.onMove(ev);
|
||||
|
@ -9320,27 +9328,27 @@ module.exports = hashClear;
|
|||
/***/ 792:
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
var g;
|
||||
|
||||
// This works in non-strict mode
|
||||
g = (function() {
|
||||
return this;
|
||||
})();
|
||||
|
||||
try {
|
||||
// This works if eval is allowed (see CSP)
|
||||
g = g || Function("return this")() || (1,eval)("this");
|
||||
} catch(e) {
|
||||
// This works if the window reference is available
|
||||
if(typeof window === "object")
|
||||
g = window;
|
||||
}
|
||||
|
||||
// g can still be undefined, but nothing to do about it...
|
||||
// We return undefined, instead of nothing here, so it's
|
||||
// easier to handle this case. if(!global) { ...}
|
||||
|
||||
module.exports = g;
|
||||
var g;
|
||||
|
||||
// This works in non-strict mode
|
||||
g = (function() {
|
||||
return this;
|
||||
})();
|
||||
|
||||
try {
|
||||
// This works if eval is allowed (see CSP)
|
||||
g = g || Function("return this")() || (1,eval)("this");
|
||||
} catch(e) {
|
||||
// This works if the window reference is available
|
||||
if(typeof window === "object")
|
||||
g = window;
|
||||
}
|
||||
|
||||
// g can still be undefined, but nothing to do about it...
|
||||
// We return undefined, instead of nothing here, so it's
|
||||
// easier to handle this case. if(!global) { ...}
|
||||
|
||||
module.exports = g;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
@ -9348,28 +9356,28 @@ module.exports = g;
|
|||
/***/ 793:
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = function(module) {
|
||||
if(!module.webpackPolyfill) {
|
||||
module.deprecate = function() {};
|
||||
module.paths = [];
|
||||
// module.parent = undefined by default
|
||||
if(!module.children) module.children = [];
|
||||
Object.defineProperty(module, "loaded", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return module.l;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(module, "id", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return module.i;
|
||||
}
|
||||
});
|
||||
module.webpackPolyfill = 1;
|
||||
}
|
||||
return module;
|
||||
};
|
||||
module.exports = function(module) {
|
||||
if(!module.webpackPolyfill) {
|
||||
module.deprecate = function() {};
|
||||
module.paths = [];
|
||||
// module.parent = undefined by default
|
||||
if(!module.children) module.children = [];
|
||||
Object.defineProperty(module, "loaded", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return module.l;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(module, "id", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return module.i;
|
||||
}
|
||||
});
|
||||
module.webpackPolyfill = 1;
|
||||
}
|
||||
return module;
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
|
|
@ -43,6 +43,10 @@ DebuggerPanel.prototype = {
|
|||
this._selectors = selectors;
|
||||
this._client = client;
|
||||
this.isReady = true;
|
||||
|
||||
this.panelWin.document.addEventListener("drag:start", this.toolbox.toggleDragging);
|
||||
this.panelWin.document.addEventListener("drag:end", this.toolbox.toggleDragging);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
|
|
|
@ -158,6 +158,7 @@ function Toolbox(target, selectedTool, hostType, contentWindow, frameId,
|
|||
this.toggleSplitConsole = this.toggleSplitConsole.bind(this);
|
||||
this.toggleOptions = this.toggleOptions.bind(this);
|
||||
this.togglePaintFlashing = this.togglePaintFlashing.bind(this);
|
||||
this.toggleDragging = this.toggleDragging.bind(this);
|
||||
this.isPaintFlashing = false;
|
||||
|
||||
this._target.on("close", this.destroy);
|
||||
|
@ -326,6 +327,10 @@ Toolbox.prototype = {
|
|||
return this._toolPanels.get(this.currentToolId);
|
||||
},
|
||||
|
||||
toggleDragging: function() {
|
||||
this.doc.querySelector("window").classList.toggle("dragging");
|
||||
},
|
||||
|
||||
/**
|
||||
* Get/alter the target of a Toolbox so we're debugging something different.
|
||||
* See Target.jsm for more details.
|
||||
|
|
|
@ -47,6 +47,10 @@
|
|||
min-height: 29px;
|
||||
}
|
||||
|
||||
.dragging #toolbox-panel-iframe-webconsole {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.toolbox-tabs-wrapper {
|
||||
position: relative;
|
||||
display: flex;
|
||||
|
|
|
@ -397,8 +397,8 @@ InterpolateFromIdentityMatrix(const float aToMatrix[20], float aAmount,
|
|||
|
||||
// Create a 4x5 color matrix for the different ways to specify color matrices
|
||||
// in SVG.
|
||||
static nsresult
|
||||
ComputeColorMatrix(uint32_t aColorMatrixType, const nsTArray<float>& aValues,
|
||||
bool
|
||||
ComputeColorMatrix(const ColorMatrixAttributes& aMatrixAttributes,
|
||||
float aOutMatrix[20])
|
||||
{
|
||||
// Luminance coefficients.
|
||||
|
@ -433,40 +433,40 @@ ComputeColorMatrix(uint32_t aColorMatrixType, const nsTArray<float>& aValues,
|
|||
static const float hueRotateG = 0.140f;
|
||||
static const float hueRotateB = 0.283f;
|
||||
|
||||
switch (aColorMatrixType) {
|
||||
switch (aMatrixAttributes.mType) {
|
||||
|
||||
case SVG_FECOLORMATRIX_TYPE_MATRIX:
|
||||
{
|
||||
if (aValues.Length() != 20) {
|
||||
return NS_ERROR_FAILURE;
|
||||
case SVG_FECOLORMATRIX_TYPE_MATRIX: {
|
||||
if (aMatrixAttributes.mValues.Length() != 20) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PodCopy(aOutMatrix, aValues.Elements(), 20);
|
||||
PodCopy(aOutMatrix, aMatrixAttributes.mValues.Elements(), 20);
|
||||
break;
|
||||
}
|
||||
|
||||
case SVG_FECOLORMATRIX_TYPE_SATURATE:
|
||||
{
|
||||
if (aValues.Length() != 1)
|
||||
return NS_ERROR_FAILURE;
|
||||
case SVG_FECOLORMATRIX_TYPE_SATURATE: {
|
||||
if (aMatrixAttributes.mValues.Length() != 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
float s = aValues[0];
|
||||
float s = aMatrixAttributes.mValues[0];
|
||||
|
||||
if (s < 0)
|
||||
return NS_ERROR_FAILURE;
|
||||
if (s < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
InterpolateFromIdentityMatrix(saturateMatrix, 1 - s, aOutMatrix);
|
||||
break;
|
||||
}
|
||||
|
||||
case SVG_FECOLORMATRIX_TYPE_HUE_ROTATE:
|
||||
{
|
||||
if (aValues.Length() != 1)
|
||||
return NS_ERROR_FAILURE;
|
||||
case SVG_FECOLORMATRIX_TYPE_HUE_ROTATE: {
|
||||
if (aMatrixAttributes.mValues.Length() != 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PodCopy(aOutMatrix, identityMatrix, 20);
|
||||
|
||||
float hueRotateValue = aValues[0];
|
||||
float hueRotateValue = aMatrixAttributes.mValues[0];
|
||||
|
||||
float c = static_cast<float>(cos(hueRotateValue * M_PI / 180));
|
||||
float s = static_cast<float>(sin(hueRotateValue * M_PI / 180));
|
||||
|
@ -486,32 +486,33 @@ ComputeColorMatrix(uint32_t aColorMatrixType, const nsTArray<float>& aValues,
|
|||
break;
|
||||
}
|
||||
|
||||
case SVG_FECOLORMATRIX_TYPE_LUMINANCE_TO_ALPHA:
|
||||
{
|
||||
case SVG_FECOLORMATRIX_TYPE_LUMINANCE_TO_ALPHA: {
|
||||
PodCopy(aOutMatrix, luminanceToAlphaMatrix, 20);
|
||||
break;
|
||||
}
|
||||
|
||||
case SVG_FECOLORMATRIX_TYPE_SEPIA:
|
||||
{
|
||||
if (aValues.Length() != 1)
|
||||
return NS_ERROR_FAILURE;
|
||||
case SVG_FECOLORMATRIX_TYPE_SEPIA: {
|
||||
if (aMatrixAttributes.mValues.Length() != 1){
|
||||
return false;
|
||||
}
|
||||
|
||||
float amount = aValues[0];
|
||||
float amount = aMatrixAttributes.mValues[0];
|
||||
|
||||
if (amount < 0 || amount > 1)
|
||||
return NS_ERROR_FAILURE;
|
||||
if (amount < 0 || amount > 1){
|
||||
return false;
|
||||
}
|
||||
|
||||
InterpolateFromIdentityMatrix(sepiaMatrix, amount, aOutMatrix);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
return NS_ERROR_FAILURE;
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
return !ArrayEqual(aOutMatrix, identityMatrix, 20);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -779,20 +780,22 @@ FilterNodeFromPrimitiveDescription(const FilterPrimitiveDescription& aDescriptio
|
|||
return filter.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<FilterNode> match(const ColorMatrixAttributes& aColorMatrix)
|
||||
already_AddRefed<FilterNode> match(const ColorMatrixAttributes& aMatrixAttributes)
|
||||
{
|
||||
uint32_t type = aColorMatrix.mType;
|
||||
float colorMatrix[20];
|
||||
if (NS_FAILED(ComputeColorMatrix(type, aColorMatrix.mValues, colorMatrix)) ||
|
||||
ArrayEqual(colorMatrix, identityMatrix)) {
|
||||
if (!ComputeColorMatrix(aMatrixAttributes, colorMatrix)) {
|
||||
RefPtr<FilterNode> filter(mSources[0]);
|
||||
return filter.forget();
|
||||
}
|
||||
Matrix5x4 matrix(colorMatrix[0], colorMatrix[5], colorMatrix[10], colorMatrix[15],
|
||||
colorMatrix[1], colorMatrix[6], colorMatrix[11], colorMatrix[16],
|
||||
colorMatrix[2], colorMatrix[7], colorMatrix[12], colorMatrix[17],
|
||||
colorMatrix[3], colorMatrix[8], colorMatrix[13], colorMatrix[18],
|
||||
colorMatrix[4], colorMatrix[9], colorMatrix[14], colorMatrix[19]);
|
||||
|
||||
Matrix5x4 matrix(
|
||||
colorMatrix[0], colorMatrix[5], colorMatrix[10], colorMatrix[15],
|
||||
colorMatrix[1], colorMatrix[6], colorMatrix[11], colorMatrix[16],
|
||||
colorMatrix[2], colorMatrix[7], colorMatrix[12], colorMatrix[17],
|
||||
colorMatrix[3], colorMatrix[8], colorMatrix[13], colorMatrix[18],
|
||||
colorMatrix[4], colorMatrix[9], colorMatrix[14], colorMatrix[19]
|
||||
);
|
||||
|
||||
RefPtr<FilterNode> filter = mDT->CreateFilter(FilterType::COLOR_MATRIX);
|
||||
if (!filter) {
|
||||
return nullptr;
|
||||
|
|
|
@ -610,6 +610,17 @@ public:
|
|||
const nsTArray<nsIntRegion>& aInputExtents);
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a 4x5 color matrix for the different ways to specify color matrices
|
||||
* in SVG.
|
||||
*
|
||||
* Return false if the input is invalid or if the resulting matrix is the
|
||||
* identity.
|
||||
*/
|
||||
bool
|
||||
ComputeColorMatrix(const ColorMatrixAttributes& aMatrixAttributes,
|
||||
float aOutMatrix[20]);
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
||||
|
|
|
@ -435,6 +435,8 @@ pub enum WrFilterOpType {
|
|||
Sepia = 8,
|
||||
DropShadow = 9,
|
||||
ColorMatrix = 10,
|
||||
SrgbToLinear = 11,
|
||||
LinearToSrgb = 12,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
|
@ -1832,6 +1834,8 @@ pub extern "C" fn wr_dp_push_stacking_context(state: &mut WrState,
|
|||
c_filter.argument,
|
||||
c_filter.color),
|
||||
WrFilterOpType::ColorMatrix => FilterOp::ColorMatrix(c_filter.matrix),
|
||||
WrFilterOpType::SrgbToLinear => FilterOp::SrgbToLinear,
|
||||
WrFilterOpType::LinearToSrgb => FilterOp::LinearToSrgb,
|
||||
}
|
||||
}).collect();
|
||||
|
||||
|
|
|
@ -253,6 +253,8 @@ enum class WrFilterOpType : uint32_t {
|
|||
Sepia = 8,
|
||||
DropShadow = 9,
|
||||
ColorMatrix = 10,
|
||||
SrgbToLinear = 11,
|
||||
LinearToSrgb = 12,
|
||||
|
||||
Sentinel /* this must be last for serialization purposes. */
|
||||
};
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
// Bug 1488515 - ABI issues on Android because both the baseline compiler and
|
||||
// the builtin thunks converted between hardFP and softFP.
|
||||
|
||||
var prog = wasmEvalText(
|
||||
`(module
|
||||
(func $f64div (export "test") (param $a f64) (param $b f64) (result f64)
|
||||
(local $dummy0 i32)
|
||||
(local $dummy1 i32)
|
||||
(local $dummy2 i32)
|
||||
(local $dummy3 i32)
|
||||
(local $dummy4 i32)
|
||||
(local $x f64)
|
||||
(local $y f64)
|
||||
(local $z f64)
|
||||
(set_local $x (get_local $a))
|
||||
(set_local $y (get_local $b))
|
||||
(set_local $z (f64.floor (f64.div (get_local $x) (get_local $y))))
|
||||
(get_local $z)))`);
|
||||
|
||||
assertEq(prog.exports.test(16096, 32), 503);
|
|
@ -2291,7 +2291,7 @@ RangeAnalysis::analyzeLoopPhi(LoopIterationBound* loopBound, MPhi* phi)
|
|||
return;
|
||||
}
|
||||
|
||||
SimpleLinearSum modified = ExtractLinearSum(phi->getLoopBackedgeOperand());
|
||||
SimpleLinearSum modified = ExtractLinearSum(phi->getLoopBackedgeOperand(), MathSpace::Infinite);
|
||||
|
||||
if (modified.term != phi || modified.constant == 0) {
|
||||
return;
|
||||
|
|
|
@ -167,9 +167,15 @@ using ZeroOnOverflow = bool;
|
|||
|
||||
class BaseStackFrame;
|
||||
|
||||
// Two flags, useABI and interModule, control how calls are made.
|
||||
//
|
||||
// UseABI::Wasm implies that the Tls/Heap/Global registers are nonvolatile,
|
||||
// except when InterModule::True is also set, when they are volatile.
|
||||
//
|
||||
// UseABI::Builtin implies that the Tls/Heap/Global registers are volatile.
|
||||
// In this case, we require InterModule::False. The calling convention
|
||||
// is otherwise like UseABI::Wasm.
|
||||
//
|
||||
// UseABI::System implies that the Tls/Heap/Global registers are volatile.
|
||||
// Additionally, the parameter passing mechanism may be slightly different from
|
||||
// the UseABI::Wasm convention.
|
||||
|
@ -182,7 +188,7 @@ class BaseStackFrame;
|
|||
// after the call (it will restore the Tls register from the save slot and load
|
||||
// the other two from the Tls data).
|
||||
|
||||
enum class UseABI { Wasm, System };
|
||||
enum class UseABI { Wasm, Builtin, System };
|
||||
enum class InterModule { False = false, True = true };
|
||||
|
||||
#if defined(JS_CODEGEN_NONE)
|
||||
|
@ -3642,22 +3648,23 @@ class BaseCompiler final : public BaseCompilerInterface
|
|||
|
||||
void beginCall(FunctionCall& call, UseABI useABI, InterModule interModule)
|
||||
{
|
||||
MOZ_ASSERT_IF(useABI == UseABI::Builtin, interModule == InterModule::False);
|
||||
|
||||
call.isInterModule = interModule == InterModule::True;
|
||||
call.usesSystemAbi = useABI == UseABI::System;
|
||||
|
||||
if (call.usesSystemAbi) {
|
||||
// Call-outs need to use the appropriate system ABI.
|
||||
#if defined(JS_CODEGEN_ARM)
|
||||
# if defined(JS_SIMULATOR_ARM)
|
||||
call.hardFP = UseHardFpABI();
|
||||
# elif defined(JS_CODEGEN_ARM_HARDFP)
|
||||
call.hardFP = true;
|
||||
# else
|
||||
call.hardFP = false;
|
||||
# endif
|
||||
call.abi.setUseHardFp(call.hardFP);
|
||||
#elif defined(JS_CODEGEN_MIPS32)
|
||||
call.abi.enforceO32ABI();
|
||||
#endif
|
||||
} else {
|
||||
#if defined(JS_CODEGEN_ARM)
|
||||
MOZ_ASSERT(call.hardFP,
|
||||
"All private ABIs pass FP arguments in registers");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -8261,7 +8268,7 @@ BaseCompiler::emitUnaryMathBuiltinCall(SymbolicAddress callee, ValType operandTy
|
|||
size_t stackSpace = stackConsumed(numArgs);
|
||||
|
||||
FunctionCall baselineCall(lineOrBytecode);
|
||||
beginCall(baselineCall, UseABI::System, InterModule::False);
|
||||
beginCall(baselineCall, UseABI::Builtin, InterModule::False);
|
||||
|
||||
if (!emitCallArgs(signature, &baselineCall)) {
|
||||
return false;
|
||||
|
|
|
@ -10372,16 +10372,10 @@ ClampStdDeviation(float aStdDeviation)
|
|||
}
|
||||
|
||||
bool
|
||||
nsDisplayFilters::CreateWebRenderCommands(
|
||||
mozilla::wr::DisplayListBuilder& aBuilder,
|
||||
mozilla::wr::IpcResourceUpdateQueue& aResources,
|
||||
const StackingContextHelper& aSc,
|
||||
mozilla::layers::WebRenderLayerManager* aManager,
|
||||
nsDisplayListBuilder* aDisplayListBuilder)
|
||||
nsDisplayFilters::CreateWebRenderCSSFilters(nsTArray<mozilla::wr::WrFilterOp>& wrFilters)
|
||||
{
|
||||
// All CSS filters are supported by WebRender. SVG filters are not supported,
|
||||
// those use NS_STYLE_FILTER_URL.
|
||||
nsTArray<mozilla::wr::WrFilterOp> wrFilters;
|
||||
// All CSS filters are supported by WebRender. SVG filters are not fully supported,
|
||||
// those use NS_STYLE_FILTER_URL and are handled separately.
|
||||
const nsTArray<nsStyleFilter>& filters = mFrame->StyleEffects()->mFilters;
|
||||
for (const nsStyleFilter& filter : filters) {
|
||||
switch (filter.GetType()) {
|
||||
|
@ -10454,16 +10448,38 @@ nsDisplayFilters::CreateWebRenderCommands(
|
|||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
nsDisplayFilters::CreateWebRenderCommands(
|
||||
mozilla::wr::DisplayListBuilder& aBuilder,
|
||||
mozilla::wr::IpcResourceUpdateQueue& aResources,
|
||||
const StackingContextHelper& aSc,
|
||||
mozilla::layers::WebRenderLayerManager* aManager,
|
||||
nsDisplayListBuilder* aDisplayListBuilder)
|
||||
{
|
||||
bool snap;
|
||||
float auPerDevPixel = mFrame->PresContext()->AppUnitsPerDevPixel();
|
||||
nsRect displayBounds = GetBounds(aDisplayListBuilder, &snap);
|
||||
auto bounds = LayoutDeviceRect::FromAppUnits(displayBounds, auPerDevPixel);
|
||||
// NOTE(emilio): this clip is going to be intersected with the clip that's
|
||||
// currently on the clip stack for this item.
|
||||
//
|
||||
// FIXME(emilio, bug 1486557): clipping to "bounds" isn't really necessary.
|
||||
auto postFilterBounds = LayoutDeviceIntRect::Round(
|
||||
LayoutDeviceRect::FromAppUnits(displayBounds, auPerDevPixel)
|
||||
);
|
||||
auto preFilterBounds = LayoutDeviceIntRect::Round(
|
||||
LayoutDeviceRect::FromAppUnits(mBounds, auPerDevPixel)
|
||||
);
|
||||
|
||||
nsTArray<mozilla::wr::WrFilterOp> wrFilters;
|
||||
if (!CreateWebRenderCSSFilters(wrFilters) &&
|
||||
!nsSVGIntegrationUtils::BuildWebRenderFilters(mFrame,
|
||||
preFilterBounds,
|
||||
wrFilters,
|
||||
postFilterBounds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
wr::WrClipId clipId =
|
||||
aBuilder.DefineClip(Nothing(), wr::ToRoundedLayoutRect(bounds));
|
||||
aBuilder.DefineClip(Nothing(), wr::ToLayoutRect(postFilterBounds));
|
||||
|
||||
float opacity = mFrame->StyleEffects()->mOpacity;
|
||||
StackingContextHelper sc(aSc,
|
||||
|
|
|
@ -7013,6 +7013,8 @@ public:
|
|||
mozilla::layers::WebRenderLayerManager* aManager,
|
||||
nsDisplayListBuilder* aDisplayListBuilder) override;
|
||||
|
||||
bool CreateWebRenderCSSFilters(nsTArray<mozilla::wr::WrFilterOp>& wrFilters);
|
||||
|
||||
private:
|
||||
// relative to mFrame
|
||||
nsRect mEffectsBounds;
|
||||
|
|
|
@ -1858,9 +1858,9 @@ pref(layout.css.moz-document.content.enabled,false) == 1035091-2.html 1035091-re
|
|||
== 1053035-1-flex.html 1053035-1-ref.html
|
||||
== 1053035-1-grid.html 1053035-1-ref.html
|
||||
== 1059167-1.html 1059167-1-ref.html
|
||||
== 1059498-1.html 1059498-1-ref.html
|
||||
== 1059498-2.html 1059498-1-ref.html
|
||||
== 1059498-3.html 1059498-1-ref.html
|
||||
fails-if(webrender) == 1059498-1.html 1059498-1-ref.html # WebRender: see bug 1504290
|
||||
fails-if(webrender) == 1059498-2.html 1059498-1-ref.html # WebRender: see bug 1504290
|
||||
fails-if(webrender) == 1059498-3.html 1059498-1-ref.html # WebRender: see bug 1499113
|
||||
== 1062108-1.html 1062108-1-ref.html
|
||||
== 1062792-1.html 1062792-1-ref.html
|
||||
== 1062963-floatmanager-reflow.html 1062963-floatmanager-reflow-ref.html
|
||||
|
|
|
@ -2,7 +2,7 @@ pref(layout.css.mix-blend-mode.enabled,true) == blend-canvas.html blend-canvas-r
|
|||
pref(layout.css.mix-blend-mode.enabled,true) == blend-constant-background-color.html blend-constant-background-color-ref.html
|
||||
pref(layout.css.mix-blend-mode.enabled,true) fuzzy-if(webrender,1-1,1411-7888) == blend-gradient-background-color.html blend-gradient-background-color-ref.html
|
||||
pref(layout.css.mix-blend-mode.enabled,true) == blend-image.html blend-image-ref.html
|
||||
pref(layout.css.mix-blend-mode.enabled,true) fuzzy-if(webrender&&winWidget,27-27,2-2) == blend-difference-stacking.html blend-difference-stacking-ref.html
|
||||
pref(layout.css.mix-blend-mode.enabled,true) == blend-difference-stacking.html blend-difference-stacking-ref.html
|
||||
|
||||
fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-1,0-10000) fuzzy-if(skiaContent,0-1,0-30000) pref(layout.css.background-blend-mode.enabled,true) == background-blending-alpha.html background-blending-alpha-ref.html
|
||||
pref(layout.css.background-blend-mode.enabled,true) fuzzy-if(webrender,1-1,1411-7888) == background-blending-gradient-color.html background-blending-gradient-color-ref.html
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
# e.g. filter: blur(3px) grayscale(0.5) invert(0.2);
|
||||
|
||||
# Some platforms render this complex filter chain a little differently, and that's ok.
|
||||
fuzzy(0-5,0-13638) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu)&&layersGPUAccelerated,0-35,0-13638) fuzzy-if(webrender,5-6,17922-18853) == long-chain.html long-chain-ref.html # Win10: Bug 1258241
|
||||
fuzzy(0-5,0-13638) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu)&&layersGPUAccelerated,0-35,0-13638) fuzzy-if(webrender,4-6,12004-18853) == long-chain.html long-chain-ref.html # Win10: Bug 1258241
|
||||
== moz-element.html moz-element-ref.html
|
||||
fuzzy-if(webrender,15-15,7678-8262) == same-filter.html same-filter-ref.html
|
||||
== same-filter.html same-filter-ref.html
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# These tests verify that CSS filters behave properly.
|
||||
# e.g. filter: blur(3px)
|
||||
|
||||
fuzzy-if(webrender,9-9,4780-5120) == blur.html blur-ref.html
|
||||
== blur.html blur-ref.html
|
||||
== blur.svg blur-ref.svg
|
||||
== blur-calc.html blur-calc-ref.html
|
||||
== blur-calc-negative.html blur-calc-negative-ref.html
|
||||
fuzzy-if(cocoaWidget&&webrender,0-1,0-1) skip-if(d2d) == blur-cap-large-radius-on-software.html blur-cap-large-radius-on-software-ref.html
|
||||
fuzzy-if(webrender,9-9,4780-5120) == blur-em-radius.html blur-em-radius-ref.html
|
||||
== blur-em-radius.html blur-em-radius-ref.html
|
||||
== blur-invalid-radius.html blur-invalid-radius-ref.html
|
||||
fuzzy-if(webrender,9-9,4780-5120) == blur-rem-radius.html blur-rem-radius-ref.html
|
||||
== blur-rem-radius.html blur-rem-radius-ref.html
|
||||
== blur-zero-radius.html blur-zero-radius-ref.html
|
||||
fuzzy-if(webrender,5-7,19040-22652) == blur-zoomed-page.html blur-zoomed-page-ref.html
|
||||
== blur-zoomed-page.html blur-zoomed-page-ref.html
|
||||
== brightness.html brightness-ref.html
|
||||
== brightness-darken.html brightness-darken-ref.html
|
||||
== brightness-extreme.html brightness-extreme-ref.html
|
||||
|
@ -24,9 +24,9 @@ fuzzy-if(webrender,5-7,19040-22652) == blur-zoomed-page.html blur-zoomed-page-re
|
|||
== contrast-percent.html contrast-percent-ref.html
|
||||
== contrast-reduce.html contrast-reduce-ref.html
|
||||
== contrast-zero.html contrast-zero-ref.html
|
||||
fuzzy-if(webrender,9-9,2625-3002) == drop-shadow.html drop-shadow-ref.html
|
||||
fuzzy-if(webrender,9-9,2625-3002) == drop-shadow-default-color.html drop-shadow-default-color-ref.html
|
||||
fuzzy-if(webrender,9-9,2625-3002) == drop-shadow-negative-offset.html drop-shadow-negative-offset-ref.html
|
||||
== drop-shadow.html drop-shadow-ref.html
|
||||
== drop-shadow-default-color.html drop-shadow-default-color-ref.html
|
||||
== drop-shadow-negative-offset.html drop-shadow-negative-offset-ref.html
|
||||
== filter-on-huge-bbox.html pass.svg
|
||||
== filter-on-outer-svg.html pass.svg
|
||||
fuzzy-if(webrender,0-1,0-10000) fuzzy-if(d2d,0-1,0-10000) == grayscale.html grayscale-ref.html
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "SVGContentUtils.h"
|
||||
#include "FilterSupport.h"
|
||||
#include "gfx2DGlue.h"
|
||||
#include "mozilla/Unused.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
@ -102,6 +103,209 @@ nsFilterInstance::PaintFilteredFrame(nsIFrame *aFilteredFrame,
|
|||
}
|
||||
}
|
||||
|
||||
bool
|
||||
nsFilterInstance::BuildWebRenderFilters(nsIFrame* aFilteredFrame,
|
||||
const LayoutDeviceIntRect& aPreFilterBounds,
|
||||
nsTArray<wr::WrFilterOp>& aWrFilters,
|
||||
LayoutDeviceIntRect& aPostFilterBounds)
|
||||
{
|
||||
aWrFilters.Clear();
|
||||
|
||||
auto& filterChain = aFilteredFrame->StyleEffects()->mFilters;
|
||||
UniquePtr<UserSpaceMetrics> metrics = UserSpaceMetricsForFrame(aFilteredFrame);
|
||||
|
||||
// TODO: simply using an identity matrix here, was pulling the scale from a
|
||||
// gfx context for the non-wr path.
|
||||
gfxMatrix scaleMatrix;
|
||||
gfxMatrix scaleMatrixInDevUnits =
|
||||
scaleMatrix * nsSVGUtils::GetCSSPxToDevPxMatrix(aFilteredFrame);
|
||||
|
||||
// Hardcode inputIsTainted to true because we don't want JS to be able to
|
||||
// read the rendered contents of aFilteredFrame.
|
||||
bool inputIsTainted = true;
|
||||
nsFilterInstance instance(aFilteredFrame, aFilteredFrame->GetContent(),
|
||||
*metrics, filterChain, inputIsTainted,
|
||||
nullptr, scaleMatrixInDevUnits,
|
||||
nullptr, nullptr, nullptr, nullptr);
|
||||
|
||||
if (!instance.IsInitialized()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Maybe<LayoutDeviceIntRect> finalClip;
|
||||
bool srgb = true;
|
||||
// We currently apply the clip on the stacking context after applying filters,
|
||||
// but primitive subregions imply clipping after each filter and not just the
|
||||
// end of the chain. For some types of filter it doesn't matter, but for those
|
||||
// which sample outside of the location of the destination pixel like blurs,
|
||||
// only clipping after could produce incorrect results, so we bail out in this
|
||||
// case.
|
||||
// We can lift this restriction once we have added support for primitive
|
||||
// subregions to WebRender's filters.
|
||||
|
||||
// During the loop this tracks whether any of the previous filters in the chain
|
||||
// affected by the primitive subregion.
|
||||
bool chainIsAffectedByPrimSubregion = false;
|
||||
// During the loop this tracks whether the current filter is affected by the
|
||||
// primitive subregion.
|
||||
bool filterIsAffectedByPrimSubregion = false;
|
||||
|
||||
for (const auto& primitive : instance.mFilterDescription.mPrimitives) {
|
||||
chainIsAffectedByPrimSubregion |= filterIsAffectedByPrimSubregion;
|
||||
filterIsAffectedByPrimSubregion = false;
|
||||
|
||||
bool primIsSrgb = primitive.OutputColorSpace() == gfx::ColorSpace::SRGB;
|
||||
if (srgb && !primIsSrgb) {
|
||||
wr::WrFilterOp filterOp = { wr::WrFilterOpType::SrgbToLinear };
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
srgb = false;
|
||||
} else if (!srgb && primIsSrgb) {
|
||||
wr::WrFilterOp filterOp = { wr::WrFilterOpType::LinearToSrgb };
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
srgb = true;
|
||||
}
|
||||
|
||||
const PrimitiveAttributes& attr = primitive.Attributes();
|
||||
auto subregion = LayoutDeviceIntRect::FromUnknownRect(
|
||||
primitive.PrimitiveSubregion() + aPreFilterBounds.TopLeft().ToUnknownPoint()
|
||||
);
|
||||
|
||||
if (!subregion.Contains(aPreFilterBounds)) {
|
||||
if (!aPostFilterBounds.Contains(subregion)) {
|
||||
filterIsAffectedByPrimSubregion = true;
|
||||
}
|
||||
|
||||
subregion = subregion.Intersect(aPostFilterBounds);
|
||||
|
||||
if (finalClip.isNothing()) {
|
||||
finalClip = Some(subregion);
|
||||
} else if (!subregion.IsEqualEdges(finalClip.value())) {
|
||||
// We don't currently support rendering a chain of filters with different
|
||||
// primitive subregions in WebRender so bail out in that situation.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool filterIsNoop = false;
|
||||
|
||||
if (attr.is<OpacityAttributes>()) {
|
||||
float opacity = attr.as<OpacityAttributes>().mOpacity;
|
||||
wr::WrFilterOp filterOp = { wr::WrFilterOpType::Opacity, opacity };
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
} else if (attr.is<ColorMatrixAttributes>()) {
|
||||
const ColorMatrixAttributes& attributes = attr.as<ColorMatrixAttributes>();
|
||||
|
||||
float transposed[20];
|
||||
if (!gfx::ComputeColorMatrix(attributes, transposed)) {
|
||||
filterIsNoop = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
auto almostEq = [](float a, float b) -> bool { return fabs(a - b) < 0.00001; };
|
||||
|
||||
if (!almostEq(transposed[15], 0.0) ||
|
||||
!almostEq(transposed[16], 0.0) ||
|
||||
!almostEq(transposed[17], 0.0) ||
|
||||
!almostEq(transposed[18], 1.0) ||
|
||||
!almostEq(transposed[3], 0.0) ||
|
||||
!almostEq(transposed[8], 0.0) ||
|
||||
!almostEq(transposed[13], 0.0)) {
|
||||
// WebRender currently pretends to take the full 4x5 matrix but discards
|
||||
// the components related to alpha. So bail out in this case until
|
||||
// it is fixed.
|
||||
return false;
|
||||
}
|
||||
|
||||
float matrix[20] = {
|
||||
transposed[0], transposed[5], transposed[10], transposed[15],
|
||||
transposed[1], transposed[6], transposed[11], transposed[16],
|
||||
transposed[2], transposed[7], transposed[12], transposed[17],
|
||||
transposed[3], transposed[8], transposed[13], transposed[18],
|
||||
transposed[4], transposed[9], transposed[14], transposed[19]
|
||||
};
|
||||
|
||||
wr::WrFilterOp filterOp = { wr::WrFilterOpType::ColorMatrix };
|
||||
PodCopy(filterOp.matrix, matrix, 20);
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
} else if (attr.is<GaussianBlurAttributes>()) {
|
||||
if (chainIsAffectedByPrimSubregion) {
|
||||
// There's a clip that needs to apply before the blur filter, but
|
||||
// WebRender only lets us apply the clip at the end of the filter
|
||||
// chain. Clipping after a blur is not equivalent to clipping before
|
||||
// a blur, so bail out.
|
||||
return false;
|
||||
}
|
||||
|
||||
const GaussianBlurAttributes& blur = attr.as<GaussianBlurAttributes>();
|
||||
|
||||
const Size& stdDev = blur.mStdDeviation;
|
||||
if (stdDev.width != stdDev.height) {
|
||||
return false;
|
||||
}
|
||||
|
||||
float radius = stdDev.width;
|
||||
if (radius != 0.0) {
|
||||
wr::WrFilterOp filterOp = { wr::WrFilterOpType::Blur, radius };
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
} else {
|
||||
filterIsNoop = true;
|
||||
}
|
||||
} else if (attr.is<DropShadowAttributes>()) {
|
||||
if (chainIsAffectedByPrimSubregion) {
|
||||
// We have to bail out for the same reason we would with a blur filter.
|
||||
return false;
|
||||
}
|
||||
|
||||
const DropShadowAttributes& shadow = attr.as<DropShadowAttributes>();
|
||||
|
||||
const Size& stdDev = shadow.mStdDeviation;
|
||||
if (stdDev.width != stdDev.height) {
|
||||
return false;
|
||||
}
|
||||
|
||||
float radius = stdDev.width;
|
||||
wr::WrFilterOp filterOp = {
|
||||
wr::WrFilterOpType::DropShadow,
|
||||
radius,
|
||||
{(float)shadow.mOffset.x, (float)shadow.mOffset.y},
|
||||
wr::ToColorF(shadow.mColor)
|
||||
};
|
||||
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (filterIsNoop &&
|
||||
aWrFilters.Length() > 0 &&
|
||||
(aWrFilters.LastElement().filter_type == wr::WrFilterOpType::SrgbToLinear ||
|
||||
aWrFilters.LastElement().filter_type == wr::WrFilterOpType::LinearToSrgb)) {
|
||||
// We pushed a color space conversion filter in prevision of applying
|
||||
// another filter which turned out to be a no-op, so the conversion is
|
||||
// unnecessary. Remove it from the filter list.
|
||||
// This is both an optimization and a way to pass the wptest
|
||||
// css/filter-effects/filter-scale-001.html for which the needless
|
||||
// sRGB->linear->no-op->sRGB roundtrip introduces a slight error and we
|
||||
// cannot add fuzziness to the test.
|
||||
Unused << aWrFilters.PopLastElement();
|
||||
srgb = !srgb;
|
||||
}
|
||||
}
|
||||
|
||||
if (!srgb) {
|
||||
wr::WrFilterOp filterOp = { wr::WrFilterOpType::LinearToSrgb };
|
||||
aWrFilters.AppendElement(filterOp);
|
||||
}
|
||||
|
||||
// Only adjust the post filter clip if we are able to render this without
|
||||
// fallback.
|
||||
if (finalClip.isSome()) {
|
||||
aPostFilterBounds = finalClip.value();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
nsRegion
|
||||
nsFilterInstance::GetPostFilterDirtyArea(nsIFrame *aFilteredFrame,
|
||||
const nsRegion& aPreFilterDirtyRegion)
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "nsTArray.h"
|
||||
#include "nsIFrame.h"
|
||||
#include "mozilla/gfx/2D.h"
|
||||
#include "mozilla/webrender/WebRenderTypes.h"
|
||||
|
||||
class gfxContext;
|
||||
class nsIFrame;
|
||||
|
@ -121,6 +122,15 @@ public:
|
|||
const gfxRect *aOverrideBBox = nullptr,
|
||||
const nsRect *aPreFilterBounds = nullptr);
|
||||
|
||||
/**
|
||||
* Try to build WebRender filters for a frame if the filters applied to it are supported.
|
||||
*/
|
||||
static bool
|
||||
BuildWebRenderFilters(nsIFrame* aFilteredFrame,
|
||||
const mozilla::LayoutDeviceIntRect& aPreFilterBounds,
|
||||
nsTArray<mozilla::wr::WrFilterOp>& aWrFilters,
|
||||
mozilla::LayoutDeviceIntRect& aPostFilterBounds);
|
||||
|
||||
private:
|
||||
/**
|
||||
* @param aTargetFrame The frame of the filtered element under consideration,
|
||||
|
|
|
@ -1151,6 +1151,18 @@ nsSVGIntegrationUtils::PaintFilter(const PaintFramesParams& aParams)
|
|||
&dirtyRegion, aParams.imgParams, opacity);
|
||||
}
|
||||
|
||||
bool
|
||||
nsSVGIntegrationUtils::BuildWebRenderFilters(nsIFrame *aFilteredFrame,
|
||||
const mozilla::LayoutDeviceIntRect& aPreFilterBounds,
|
||||
nsTArray<mozilla::wr::WrFilterOp>& aWrFilters,
|
||||
mozilla::LayoutDeviceIntRect& aPostFilterBounds)
|
||||
{
|
||||
return nsFilterInstance::BuildWebRenderFilters(aFilteredFrame,
|
||||
aPreFilterBounds,
|
||||
aWrFilters,
|
||||
aPostFilterBounds);
|
||||
}
|
||||
|
||||
class PaintFrameCallback : public gfxDrawingCallback {
|
||||
public:
|
||||
PaintFrameCallback(nsIFrame* aFrame,
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "gfxRect.h"
|
||||
#include "nsRegionFwd.h"
|
||||
#include "mozilla/gfx/Rect.h"
|
||||
#include "mozilla/webrender/WebRenderTypes.h"
|
||||
|
||||
class gfxContext;
|
||||
class gfxDrawable;
|
||||
|
@ -198,6 +199,15 @@ public:
|
|||
static void
|
||||
PaintFilter(const PaintFramesParams& aParams);
|
||||
|
||||
/**
|
||||
* Try to build WebRender filters for a frame if the filters applied to it are supported.
|
||||
*/
|
||||
static bool
|
||||
BuildWebRenderFilters(nsIFrame *aFilteredFrame,
|
||||
const mozilla::LayoutDeviceIntRect& aPreFilterBounds,
|
||||
nsTArray<mozilla::wr::WrFilterOp>& aWrFilters,
|
||||
mozilla::LayoutDeviceIntRect& aPostFilterBounds);
|
||||
|
||||
/**
|
||||
* @param aRenderingContext the target rendering context in which the paint
|
||||
* server will be rendered
|
||||
|
|
|
@ -249,6 +249,7 @@ linux64-base-toolchains/opt:
|
|||
symbol: Bb
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-linux
|
||||
worker:
|
||||
docker-image: {in-tree: debian7-amd64-build-base}
|
||||
max-run-time: 7200
|
||||
env:
|
||||
PERFHERDER_EXTRA_OPTIONS: base-toolchains
|
||||
|
|
|
@ -61,6 +61,7 @@ treeherder:
|
|||
'BMcss': 'Beetmover checksums for source'
|
||||
'Aries': 'Aries Device Image'
|
||||
'Deb7': 'Packages for Debian 7'
|
||||
'Deb7-32': 'Packages for Debian 7 32-bits'
|
||||
'Deb9': 'Packages for Debian 9'
|
||||
'Nexus 5-L': 'Nexus 5-L Device Image'
|
||||
'I': 'Docker Image Builds'
|
||||
|
|
|
@ -44,12 +44,29 @@ jobs:
|
|||
packages:
|
||||
- deb7-cmake
|
||||
- deb7-ninja
|
||||
debian7-amd64-build-base:
|
||||
symbol: I(deb7-bb)
|
||||
parent: debian7-base
|
||||
definition: debian7-build
|
||||
packages:
|
||||
- deb7-valgrind
|
||||
args:
|
||||
ARCH: amd64
|
||||
debian7-amd64-build:
|
||||
symbol: I(deb7)
|
||||
parent: debian7-base
|
||||
definition: debian7-build
|
||||
packages:
|
||||
- deb7-atk
|
||||
- deb7-glib
|
||||
- deb7-gdk-pixbuf
|
||||
- deb7-gtk3
|
||||
- deb7-harfbuzz
|
||||
- deb7-libxkbcommon
|
||||
- deb7-pango
|
||||
- deb7-pcre3
|
||||
- deb7-valgrind
|
||||
- deb7-wayland
|
||||
args:
|
||||
ARCH: amd64
|
||||
debian7-i386-build:
|
||||
|
@ -57,6 +74,22 @@ jobs:
|
|||
parent: debian7-base
|
||||
definition: debian7-build
|
||||
packages:
|
||||
- deb7-32-atk
|
||||
- deb7-32-glib
|
||||
- deb7-32-gdk-pixbuf
|
||||
- deb7-32-gtk3
|
||||
- deb7-32-harfbuzz
|
||||
- deb7-32-libxkbcommon
|
||||
- deb7-32-pango
|
||||
- deb7-32-pcre3
|
||||
- deb7-32-xkeyboard-config
|
||||
- deb7-32-wayland
|
||||
- deb7-atk
|
||||
- deb7-glib
|
||||
- deb7-gtk3
|
||||
- deb7-harfbuzz
|
||||
- deb7-python-defaults
|
||||
- deb7-pcre3
|
||||
- deb7-valgrind
|
||||
args:
|
||||
ARCH: i386
|
||||
|
|
|
@ -61,6 +61,18 @@ jobs:
|
|||
patch: python3-defaults-wheezy.diff
|
||||
pre-build-command: debian/rules control-file
|
||||
|
||||
deb7-python-defaults:
|
||||
description: "multiarch python-defaults for Debian wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(python-defaults)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130930T035642Z/pool/main/p/python-defaults/python-defaults_2.7.3-4+deb7u1.dsc
|
||||
sha256: e12fa64899a025b7ac3bdccd5611ae6f3d23327b695b2938473b1cf68ecc9ae5
|
||||
patch: python-defaults-wheezy.diff
|
||||
pre-build-command: debian/rules control-file
|
||||
|
||||
deb7-cmake:
|
||||
description: "Cmake backport for Debian wheezy"
|
||||
treeherder:
|
||||
|
@ -265,3 +277,246 @@ jobs:
|
|||
tarball:
|
||||
url: https://github.com/indygreg/python-zstandard/releases/download/0.9.1/python-zstandard-0.9.1.tar.gz
|
||||
sha256: 59c7d6f1f85cebb5124abb50d8ec281c5311e0812e18785e28b197cf1515dd3b
|
||||
|
||||
deb7-pcre3:
|
||||
description: "pcre3 8.31 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(pcre3)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140424T055217Z/pool/main/p/pcre3/pcre3_8.31-5.dsc
|
||||
sha256: e6e92af1e9f4b1d286ce9e7fdb6cb2f0972a341a94f5631e0b8c31b9f79633a4
|
||||
|
||||
deb7-atk:
|
||||
description: "atk 2.8 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(atk)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130510T040301Z/pool/main/a/atk1.0/atk1.0_2.8.0-2.dsc
|
||||
sha256: cae824b2a5ef47704fb820c04b5b7ee234329d9ddda1086bf487e12d58b9f70c
|
||||
|
||||
deb7-glib:
|
||||
description: "glib 2.38 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(glib)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140215T160944Z/pool/main/g/glib2.0/glib2.0_2.38.2-5.dsc
|
||||
sha256: 1d81952a9a46a935d35d723f7528bf8d5264ef8a59491bad335d134dbeaa2404
|
||||
patch: glib-wheezy.diff
|
||||
packages:
|
||||
- deb7-pcre3
|
||||
|
||||
deb7-harfbuzz:
|
||||
description: "harfbuzz for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(harfbuzz)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20121211T033951Z/pool/main/h/harfbuzz/harfbuzz_0.9.9-1.dsc
|
||||
sha256: 622677a2757a739fb59c8bcd8cde9c1722fac82808248e19ce1cae46620d92bd
|
||||
|
||||
deb7-gdk-pixbuf:
|
||||
description: "gdk-pixbuf 2.28 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(gdkpixbuf)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130608T215552Z/pool/main/g/gdk-pixbuf/gdk-pixbuf_2.28.2-1.dsc
|
||||
sha256: f5057beb54c37293de352c6f253cedd8b144d25289f1fdf1a958f17b51565bcb
|
||||
packages:
|
||||
- deb7-glib
|
||||
- deb7-pcre3
|
||||
|
||||
deb7-pango:
|
||||
description: "pango 1.32 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(pango)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130224T223605Z/pool/main/p/pango1.0/pango1.0_1.32.5-1.dsc
|
||||
sha256: d9d9b1f797c5dbe70bfe9c7931d63b28437476aa1a737c424c7f072ca6e22914
|
||||
packages:
|
||||
- deb7-glib
|
||||
- deb7-harfbuzz
|
||||
- deb7-pcre3
|
||||
|
||||
deb7-libxkbcommon:
|
||||
description: "libxkbcommon for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(xkbc)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140723T102555Z/pool/main/libx/libxkbcommon/libxkbcommon_0.4.1-2.dsc
|
||||
sha256: 9046dbceda207ed7163b7c12c98399e6d119491a480dc908ae451d7fff0fb77c
|
||||
|
||||
deb7-wayland:
|
||||
description: "wayland 1.2 for Debian wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(wayland)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130908T214400Z/pool/main/w/wayland/wayland_1.2.1-1.dsc
|
||||
sha256: 964619747c00c697c95f2739c7980a0a360d79d03eaa3d9a342fed81d86e9466
|
||||
|
||||
deb7-gtk3:
|
||||
description: "gtk+ 3.10 for Debian wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7(gtk3)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140215T220417Z/pool/main/g/gtk+3.0/gtk+3.0_3.10.7-1.dsc
|
||||
sha256: 2a6810d44517806940063bb488e49e7177732d8059c798cf0ef94103fefaf0b3
|
||||
patch: gtk-wheezy.diff
|
||||
packages:
|
||||
- deb7-atk
|
||||
- deb7-glib
|
||||
- deb7-gdk-pixbuf
|
||||
- deb7-harfbuzz
|
||||
- deb7-libxkbcommon
|
||||
- deb7-make
|
||||
- deb7-pango
|
||||
- deb7-pcre3
|
||||
- deb7-wayland
|
||||
|
||||
deb7-32-pcre3:
|
||||
description: "pcre3 8.31 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(pcre3)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140424T055217Z/pool/main/p/pcre3/pcre3_8.31-5.dsc
|
||||
sha256: e6e92af1e9f4b1d286ce9e7fdb6cb2f0972a341a94f5631e0b8c31b9f79633a4
|
||||
arch: i386
|
||||
|
||||
deb7-32-atk:
|
||||
description: "atk 2.8 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(atk)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130510T040301Z/pool/main/a/atk1.0/atk1.0_2.8.0-2.dsc
|
||||
sha256: cae824b2a5ef47704fb820c04b5b7ee234329d9ddda1086bf487e12d58b9f70c
|
||||
arch: i386
|
||||
|
||||
deb7-32-glib:
|
||||
description: "glib 2.38 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(glib)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140215T160944Z/pool/main/g/glib2.0/glib2.0_2.38.2-5.dsc
|
||||
sha256: 1d81952a9a46a935d35d723f7528bf8d5264ef8a59491bad335d134dbeaa2404
|
||||
arch: i386
|
||||
patch: glib-wheezy.diff
|
||||
packages:
|
||||
- deb7-32-pcre3
|
||||
|
||||
deb7-32-harfbuzz:
|
||||
description: "harfbuzz for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(harfbuzz)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20121211T033951Z/pool/main/h/harfbuzz/harfbuzz_0.9.9-1.dsc
|
||||
sha256: 622677a2757a739fb59c8bcd8cde9c1722fac82808248e19ce1cae46620d92bd
|
||||
arch: i386
|
||||
|
||||
deb7-32-gdk-pixbuf:
|
||||
description: "gdk-pixbuf 2.28 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(gdkpixbuf)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130608T215552Z/pool/main/g/gdk-pixbuf/gdk-pixbuf_2.28.2-1.dsc
|
||||
sha256: f5057beb54c37293de352c6f253cedd8b144d25289f1fdf1a958f17b51565bcb
|
||||
arch: i386
|
||||
packages:
|
||||
- deb7-32-glib
|
||||
- deb7-32-pcre3
|
||||
|
||||
deb7-32-pango:
|
||||
description: "pango 1.32 for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(pango)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130224T223605Z/pool/main/p/pango1.0/pango1.0_1.32.5-1.dsc
|
||||
sha256: d9d9b1f797c5dbe70bfe9c7931d63b28437476aa1a737c424c7f072ca6e22914
|
||||
arch: i386
|
||||
packages:
|
||||
- deb7-32-glib
|
||||
- deb7-32-harfbuzz
|
||||
- deb7-32-pcre3
|
||||
|
||||
deb7-32-xkeyboard-config:
|
||||
description: "xkeyboard-config for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(xkbdconfig)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20121225T153644Z/pool/main/x/xkeyboard-config/xkeyboard-config_2.5.1-3.dsc
|
||||
sha256: 327d53dfca4288c7f75471bb01e6d1f161811706b1d8daa01bf9abc269016dc1
|
||||
arch: i386
|
||||
patch: xkeyboard-config-wheezy.diff
|
||||
|
||||
deb7-32-libxkbcommon:
|
||||
description: "libxkbcommon for Debian Wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(xkbc)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140723T102555Z/pool/main/libx/libxkbcommon/libxkbcommon_0.4.1-2.dsc
|
||||
sha256: 9046dbceda207ed7163b7c12c98399e6d119491a480dc908ae451d7fff0fb77c
|
||||
arch: i386
|
||||
|
||||
deb7-32-wayland:
|
||||
description: "wayland 1.2 for Debian wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(wayland)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20130908T214400Z/pool/main/w/wayland/wayland_1.2.1-1.dsc
|
||||
sha256: 964619747c00c697c95f2739c7980a0a360d79d03eaa3d9a342fed81d86e9466
|
||||
arch: i386
|
||||
|
||||
deb7-32-gtk3:
|
||||
description: "gtk+ 3.10 for Debian wheezy"
|
||||
treeherder:
|
||||
symbol: Deb7-32(gtk3)
|
||||
run:
|
||||
using: debian-package
|
||||
dsc:
|
||||
url: http://snapshot.debian.org/archive/debian/20140215T220417Z/pool/main/g/gtk+3.0/gtk+3.0_3.10.7-1.dsc
|
||||
sha256: 2a6810d44517806940063bb488e49e7177732d8059c798cf0ef94103fefaf0b3
|
||||
arch: i386
|
||||
patch: gtk-wheezy.diff
|
||||
packages:
|
||||
- deb7-32-atk
|
||||
- deb7-32-glib
|
||||
- deb7-32-gdk-pixbuf
|
||||
- deb7-32-harfbuzz
|
||||
- deb7-32-libxkbcommon
|
||||
- deb7-make
|
||||
- deb7-32-pango
|
||||
- deb7-32-pcre3
|
||||
- deb7-32-wayland
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
for task in "$@"; do
|
||||
echo "deb [trusted=yes] https://queue.taskcluster.net/v1/task/$task/runs/0/artifacts/public/build/ debian/" > "/etc/apt/sources.list.d/99$task.list"
|
||||
echo "deb [trusted=yes] https://queue.taskcluster.net/v1/task/$task/artifacts/public/build/ debian/" > "/etc/apt/sources.list.d/99$task.list"
|
||||
done
|
||||
|
|
|
@ -17,7 +17,12 @@ RUN dpkg --add-architecture $ARCH
|
|||
# Ideally, we wouldn't need gcc-multilib and the extra linux-libc-dev,
|
||||
# but the latter is required to make the former installable, and the former
|
||||
# because of bug 1409276.
|
||||
# We exclude /usr/share/doc/*/changelog.Debian* files because they might differ
|
||||
# between i386 and amd64 variants of the packages we build on automation
|
||||
# because of dates stored in them by debchange (and both might end up installed
|
||||
# in some cases).
|
||||
RUN apt-get update && \
|
||||
echo path-exclude=/usr/share/doc/*/changelog.Debian* > /etc/dpkg/dpkg.cfg.d/excludes && \
|
||||
apt-get install \
|
||||
autoconf2.13 \
|
||||
automake \
|
||||
|
|
|
@ -170,7 +170,7 @@ def docker_worker_debian_package(config, job, taskdesc):
|
|||
'apt-get install -yyq apt-transport-https ca-certificates && '
|
||||
'for task in $PACKAGES; do '
|
||||
' echo "deb [trusted=yes] https://queue.taskcluster.net/v1/task'
|
||||
'/$task/runs/0/artifacts/public/build/ debian/" '
|
||||
'/$task/artifacts/public/build/ debian/" '
|
||||
'>> /etc/apt/sources.list; '
|
||||
'done && '
|
||||
# Install the base utilities required to build debian packages.
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
[filter-external-001-test.html]
|
||||
expected: FAIL
|
||||
expected:
|
||||
if webrender: PASS
|
||||
FAIL
|
||||
|
|
Загрузка…
Ссылка в новой задаче