mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-07 23:43:37 +00:00
Merge mozilla-central to autoland. a=merge CLOSED TREE
This commit is contained in:
commit
912f6233fd
@ -124,7 +124,7 @@ class NetErrorChild extends ActorChild {
|
||||
msg1 = "";
|
||||
msg1 += gPipNSSBundle.formatStringFromName("certErrorTrust_UnknownIssuer4", [hostString], 1);
|
||||
msg1 += "\n\n";
|
||||
msg1 += gPipNSSBundle.formatStringFromName("certErrorTrust_UnknownIssuer5", [brandName, hostString], 2);
|
||||
msg1 += gPipNSSBundle.formatStringFromName("certErrorTrust_UnknownIssuer6", [brandName, hostString], 2);
|
||||
msg1 += "\n\n";
|
||||
} else {
|
||||
msg1 += gPipNSSBundle.GetStringFromName("certErrorTrust_UnknownIssuer") + "\n";
|
||||
@ -168,7 +168,7 @@ class NetErrorChild extends ActorChild {
|
||||
if (newErrorPagesEnabled) {
|
||||
technicalInfo.textContent = "";
|
||||
let brandName = gBrandBundle.GetStringFromName("brandShortName");
|
||||
msgPrefix = gPipNSSBundle.formatStringFromName("certErrorMismatchSinglePrefix1", [brandName, hostString], 2) + " ";
|
||||
msgPrefix = gPipNSSBundle.formatStringFromName("certErrorMismatchSinglePrefix2", [brandName, hostString], 2) + " ";
|
||||
msgPrefix += gPipNSSBundle.GetStringFromName("certErrorMismatchSinglePrefix");
|
||||
} else {
|
||||
msgPrefix = gPipNSSBundle.GetStringFromName("certErrorMismatchSinglePrefix");
|
||||
@ -242,7 +242,7 @@ class NetErrorChild extends ActorChild {
|
||||
if (newErrorPagesEnabled) {
|
||||
technicalInfo.textContent = "";
|
||||
let brandName = gBrandBundle.GetStringFromName("brandShortName");
|
||||
msg = gPipNSSBundle.formatStringFromName("certErrorMismatchMultiple1", [brandName, hostString], 2) + " ";
|
||||
msg = gPipNSSBundle.formatStringFromName("certErrorMismatchMultiple2", [brandName, hostString], 2) + " ";
|
||||
} else {
|
||||
msg = gPipNSSBundle.GetStringFromName("certErrorMismatchMultiple") + "\n";
|
||||
}
|
||||
@ -259,7 +259,7 @@ class NetErrorChild extends ActorChild {
|
||||
if (newErrorPagesEnabled) {
|
||||
technicalInfo.textContent = "";
|
||||
let brandName = gBrandBundle.GetStringFromName("brandShortName");
|
||||
msg = gPipNSSBundle.formatStringFromName("certErrorMismatch1", [brandName, hostString], 2) + " ";
|
||||
msg = gPipNSSBundle.formatStringFromName("certErrorMismatch2", [brandName, hostString], 2) + " ";
|
||||
} else {
|
||||
msg = gPipNSSBundle.formatStringFromName("certErrorMismatch",
|
||||
[hostString], 1);
|
||||
@ -277,7 +277,7 @@ class NetErrorChild extends ActorChild {
|
||||
if (nowTime > input.data.validity.notAfter) {
|
||||
if (newErrorPagesEnabled) {
|
||||
technicalInfo.textContent = "";
|
||||
msg += gPipNSSBundle.formatStringFromName("certErrorExpiredNow1",
|
||||
msg += gPipNSSBundle.formatStringFromName("certErrorExpiredNow2",
|
||||
[hostString], 1);
|
||||
msg += "\n";
|
||||
} else {
|
||||
@ -289,7 +289,7 @@ class NetErrorChild extends ActorChild {
|
||||
// eslint-disable-next-line no-lonely-if
|
||||
if (newErrorPagesEnabled) {
|
||||
technicalInfo.textContent = "";
|
||||
msg += gPipNSSBundle.formatStringFromName("certErrorNotYetValidNow1",
|
||||
msg += gPipNSSBundle.formatStringFromName("certErrorNotYetValidNow2",
|
||||
[hostString], 1);
|
||||
msg += "\n";
|
||||
} else {
|
||||
@ -303,7 +303,7 @@ class NetErrorChild extends ActorChild {
|
||||
// eslint-disable-next-line no-lonely-if
|
||||
if (newErrorPagesEnabled) {
|
||||
technicalInfo.textContent = "";
|
||||
msg += gPipNSSBundle.formatStringFromName("certErrorExpiredNow1",
|
||||
msg += gPipNSSBundle.formatStringFromName("certErrorExpiredNow2",
|
||||
[hostString], 1);
|
||||
msg += "\n";
|
||||
} else {
|
||||
|
@ -182,7 +182,7 @@ add_task(async function checkBadStsCert() {
|
||||
if (Services.prefs.getBoolPref("browser.security.newcerterrorpage.enabled", false)) {
|
||||
ok(message.includes("SSL_ERROR_BAD_CERT_DOMAIN"), "Didn't find SSL_ERROR_BAD_CERT_DOMAIN.");
|
||||
ok(message.includes("The certificate is only valid for"), "Didn't find error message.");
|
||||
ok(message.includes("a security certificate that is not valid for"), "Didn't find error message.");
|
||||
ok(message.includes("a certificate that is not valid for"), "Didn't find error message.");
|
||||
ok(message.includes("badchain.include-subdomains.pinning.example.com"), "Didn't find domain in error message.");
|
||||
|
||||
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
|
@ -1,6 +1,7 @@
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux32/common-opt"
|
||||
|
||||
ac_add_options --enable-verify-mar
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
ac_add_options --with-branding=browser/branding/nightly
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux32/nightly"
|
@ -1,6 +1,7 @@
|
||||
. $topsrcdir/browser/config/mozconfigs/linux32/nightly
|
||||
|
||||
ac_add_options --enable-valgrind
|
||||
ac_add_options --disable-dmd
|
||||
ac_add_options --disable-jemalloc
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --disable-gtest-in-build
|
||||
|
@ -7,6 +7,7 @@ TOOLTOOL_DIR=${TOOLTOOL_DIR:-$topsrcdir}
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --disable-elf-hack
|
||||
ac_add_options --disable-sandbox
|
||||
ac_add_options --disable-dmd
|
||||
ac_add_options --disable-profiling
|
||||
ac_add_options --disable-warnings-as-errors
|
||||
ac_add_options --enable-coverage
|
||||
|
@ -5,6 +5,7 @@ MOZ_AUTOMATION_L10N_CHECK=0
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --disable-elf-hack
|
||||
ac_add_options --disable-sandbox
|
||||
ac_add_options --disable-dmd
|
||||
ac_add_options --disable-profiling
|
||||
ac_add_options --disable-warnings-as-errors
|
||||
ac_add_options --enable-coverage
|
||||
|
@ -1,6 +1,7 @@
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux64/common-opt"
|
||||
|
||||
ac_add_options --enable-verify-mar
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
ac_add_options --with-branding=browser/branding/nightly
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux64/nightly"
|
@ -1,6 +1,7 @@
|
||||
. $topsrcdir/browser/config/mozconfigs/linux64/nightly
|
||||
|
||||
ac_add_options --enable-valgrind
|
||||
ac_add_options --disable-dmd
|
||||
ac_add_options --disable-jemalloc
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --disable-gtest-in-build
|
||||
|
@ -3,6 +3,7 @@
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --enable-verify-mar
|
||||
ac_add_options --enable-instruments
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
# Cross-compiled builds fail when dtrace is enabled
|
||||
if test `uname -s` != Linux; then
|
||||
|
@ -1,5 +0,0 @@
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
. "$topsrcdir/browser/config/mozconfigs/macosx64/nightly"
|
||||
|
||||
ac_add_options --disable-lto
|
@ -9,6 +9,7 @@ all_platforms = ['win64', 'win32', 'linux32', 'linux64', 'macosx64']
|
||||
|
||||
for platform in all_platforms:
|
||||
whitelist['nightly'][platform] = [
|
||||
'ac_add_options --enable-dmd',
|
||||
'ac_add_options --with-branding=browser/branding/nightly',
|
||||
]
|
||||
|
||||
|
@ -10,10 +10,8 @@ ac_add_options --enable-optimize
|
||||
ac_add_options --enable-clang-plugin
|
||||
|
||||
. $topsrcdir/build/win32/mozconfig.vs-latest
|
||||
|
||||
# Regardless of what mozconfig.vs-latest sets, lld-link that comes with the old
|
||||
# clang version used for static analysis fails to link multiple things. So
|
||||
# until bug 1427808 is resolved, use the Microsoft linker.
|
||||
# Regardless of what mozconfig.vs-latest sets, clang-plugin builds need to use
|
||||
# the Microsoft linker until at least bugs 1414287 and 1427808 are resolved.
|
||||
export LINKER=link
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
@ -11,10 +11,8 @@ ac_add_options --enable-debug
|
||||
ac_add_options --enable-clang-plugin
|
||||
|
||||
. $topsrcdir/build/win32/mozconfig.vs-latest
|
||||
|
||||
# Regardless of what mozconfig.vs-latest sets, lld-link that comes with the old
|
||||
# clang version used for static analysis fails to link multiple things. So
|
||||
# until bug 1427808 is resolved, use the Microsoft linker.
|
||||
# Regardless of what mozconfig.vs-latest sets, clang-plugin builds need to use
|
||||
# the Microsoft linker until at least bugs 1414287 and 1427808 are resolved.
|
||||
export LINKER=link
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
@ -2,6 +2,7 @@
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/common-opt"
|
||||
|
||||
ac_add_options --enable-verify-mar
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
ac_add_options --with-branding=browser/branding/nightly
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/nightly"
|
@ -3,6 +3,7 @@
|
||||
. "$topsrcdir/browser/config/mozconfigs/win64/common-opt"
|
||||
|
||||
ac_add_options --enable-verify-mar
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
ac_add_options --with-branding=browser/branding/nightly
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
ac_add_options --enable-dmd
|
||||
|
||||
. "$topsrcdir/browser/config/mozconfigs/win64/nightly"
|
22
build/build-clang/clang-win32-st-an.json
Normal file
22
build/build-clang/clang-win32-st-an.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"llvm_revision": "317840",
|
||||
"stages": "3",
|
||||
"build_libcxx": false,
|
||||
"build_type": "Release",
|
||||
"assertions": false,
|
||||
"llvm_repo": "https://llvm.org/svn/llvm-project/llvm/trunk",
|
||||
"clang_repo": "https://llvm.org/svn/llvm-project/cfe/trunk",
|
||||
"lld_repo": "https://llvm.org/svn/llvm-project/lld/trunk",
|
||||
"compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/trunk",
|
||||
"libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/trunk",
|
||||
"python_path": "c:/mozilla-build/python/python.exe",
|
||||
"cc": "cl.exe",
|
||||
"cxx": "cl.exe",
|
||||
"patches": [
|
||||
"r318309.patch",
|
||||
"r320462.patch",
|
||||
"msvc-host-x64.patch",
|
||||
"aarch64-vastart-checking.patch",
|
||||
"loosen-msvc-detection.patch"
|
||||
]
|
||||
}
|
17
build/build-clang/msvc-host-x64.patch
Normal file
17
build/build-clang/msvc-host-x64.patch
Normal file
@ -0,0 +1,17 @@
|
||||
When looking for a linker, 32-bit clang-cl.exe wants to use the 32-bit-native link.exe located in Hostx86/x86, but this executable does not exist in our releng package, because we only use 64-bit-host toolchains.
|
||||
|
||||
This patch makes clang-cl use the Hostx64/x86 linker instead. Ideally we wouldn't be using 32-bit clang-cl.exe in the first place. Bug 1414287 is on file to do so and remove this hack.
|
||||
|
||||
diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp
|
||||
--- a/clang/lib/Driver/ToolChains/MSVC.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/MSVC.cpp
|
||||
@@ -817,8 +816,7 @@
|
||||
switch (Type) {
|
||||
case SubDirectoryType::Bin:
|
||||
if (VSLayout == ToolsetLayout::VS2017OrNewer) {
|
||||
- const bool HostIsX64 =
|
||||
- llvm::Triple(llvm::sys::getProcessTriple()).isArch64Bit();
|
||||
+ const bool HostIsX64 = true;
|
||||
const char *const HostName = HostIsX64 ? "HostX64" : "HostX86";
|
||||
llvm::sys::path::append(Path, "bin", HostName, SubdirName);
|
||||
} else { // OlderVS or DevDivInternal
|
@ -21,9 +21,6 @@ if [ -d "${VSPATH}" ]; then
|
||||
export WIN64_LIB="${VSPATH}/VC/lib/x64:${VSPATH}/VC/atlmfc/lib/x64:${VSPATH}/SDK/Lib/10.0.17134.0/ucrt/x64:${VSPATH}/SDK/Lib/10.0.17134.0/um/x64:${VSPATH}/DIA SDK/lib/amd64"
|
||||
fi
|
||||
|
||||
ac_add_options --target=i686-pc-mingw32
|
||||
ac_add_options --host=x86_64-pc-mingw32
|
||||
|
||||
. $topsrcdir/build/mozconfig.vs-common
|
||||
|
||||
mk_export_correct_style WINDOWSSDKDIR
|
||||
|
@ -201,13 +201,6 @@ HOST_CFLAGS = $(COMPUTED_HOST_CFLAGS) $(_DEPEND_CFLAGS)
|
||||
HOST_CXXFLAGS = $(COMPUTED_HOST_CXXFLAGS) $(_DEPEND_CFLAGS)
|
||||
HOST_C_LDFLAGS = $(COMPUTED_HOST_C_LDFLAGS)
|
||||
HOST_CXX_LDFLAGS = $(COMPUTED_HOST_CXX_LDFLAGS)
|
||||
# Win32 Cross-builds on win64 need to override LIB when invoking the linker,
|
||||
# which we do for rust through cargo-linker.bat, so we abuse it here.
|
||||
# Ideally, we'd empty LIB and pass -LIBPATH options to the linker somehow but
|
||||
# we don't have this in place for rust, so...
|
||||
ifdef WIN64_CARGO_LINKER
|
||||
HOST_LINKER = $(topobjdir)/build/win64/cargo-linker.bat
|
||||
endif
|
||||
|
||||
ifdef MOZ_LTO
|
||||
ifeq (Darwin,$(OS_TARGET))
|
||||
|
@ -43,6 +43,14 @@ class Grid extends PureComponent {
|
||||
}
|
||||
|
||||
render() {
|
||||
if (!this.props.grids.length) {
|
||||
return (
|
||||
dom.div({ className: "devtools-sidepanel-no-result" },
|
||||
getStr("layout.noGridsOnThisPage")
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
const {
|
||||
getSwatchColorPickerTooltip,
|
||||
grids,
|
||||
@ -57,14 +65,7 @@ class Grid extends PureComponent {
|
||||
onToggleShowInfiniteLines,
|
||||
setSelectedNode,
|
||||
} = this.props;
|
||||
|
||||
if (!grids.length) {
|
||||
return (
|
||||
dom.div({ className: "devtools-sidepanel-no-result" },
|
||||
getStr("layout.noGridsOnThisPage")
|
||||
)
|
||||
);
|
||||
}
|
||||
const highlightedGrids = grids.filter(grid => grid.highlighted);
|
||||
|
||||
return (
|
||||
dom.div({ id: "layout-grid-container" },
|
||||
@ -85,10 +86,13 @@ class Grid extends PureComponent {
|
||||
onToggleShowInfiniteLines,
|
||||
})
|
||||
),
|
||||
GridOutline({
|
||||
grids,
|
||||
onShowGridOutlineHighlight,
|
||||
})
|
||||
highlightedGrids.length === 1 ?
|
||||
GridOutline({
|
||||
grids,
|
||||
onShowGridOutlineHighlight,
|
||||
})
|
||||
:
|
||||
null
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -44,6 +44,29 @@ class GridOutline extends PureComponent {
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(props) {
|
||||
const selectedGrid = props.grids.find(grid => grid.highlighted);
|
||||
|
||||
// Store the height of the grid container in the component state to prevent overflow
|
||||
// issues. We want to store the width of the grid container as well so that the
|
||||
// viewbox is only the calculated width of the grid outline.
|
||||
const { width, height } = selectedGrid && selectedGrid.gridFragments.length
|
||||
? getTotalWidthAndHeight(selectedGrid)
|
||||
: { width: 0, height: 0 };
|
||||
let showOutline;
|
||||
|
||||
if (selectedGrid && selectedGrid.gridFragments.length) {
|
||||
const { cols, rows } = selectedGrid.gridFragments[0];
|
||||
|
||||
// Show the grid outline if both the rows/columns are less than or equal
|
||||
// to their max prefs.
|
||||
showOutline = (cols.lines.length <= GRID_OUTLINE_MAX_COLUMNS_PREF) &&
|
||||
(rows.lines.length <= GRID_OUTLINE_MAX_ROWS_PREF);
|
||||
}
|
||||
|
||||
return { height, width, selectedGrid, showOutline };
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@ -57,7 +80,6 @@ class GridOutline extends PureComponent {
|
||||
this.doHighlightCell = this.doHighlightCell.bind(this);
|
||||
this.getGridAreaName = this.getGridAreaName.bind(this);
|
||||
this.getHeight = this.getHeight.bind(this);
|
||||
this.getTotalWidthAndHeight = this.getTotalWidthAndHeight.bind(this);
|
||||
this.onHighlightCell = this.onHighlightCell.bind(this);
|
||||
this.renderCannotShowOutlineText = this.renderCannotShowOutlineText.bind(this);
|
||||
this.renderGrid = this.renderGrid.bind(this);
|
||||
@ -67,29 +89,6 @@ class GridOutline extends PureComponent {
|
||||
this.renderOutline = this.renderOutline.bind(this);
|
||||
}
|
||||
|
||||
componentWillReceiveProps({ grids }) {
|
||||
const selectedGrid = grids.find(grid => grid.highlighted);
|
||||
|
||||
// Store the height of the grid container in the component state to prevent overflow
|
||||
// issues. We want to store the width of the grid container as well so that the
|
||||
// viewbox is only the calculated width of the grid outline.
|
||||
const { width, height } = selectedGrid && selectedGrid.gridFragments.length
|
||||
? this.getTotalWidthAndHeight(selectedGrid)
|
||||
: { width: 0, height: 0 };
|
||||
let showOutline;
|
||||
|
||||
if (selectedGrid && selectedGrid.gridFragments.length) {
|
||||
const { cols, rows } = selectedGrid.gridFragments[0];
|
||||
|
||||
// Show the grid outline if both the rows/columns are less than or equal
|
||||
// to their max prefs.
|
||||
showOutline = (cols.lines.length <= GRID_OUTLINE_MAX_COLUMNS_PREF) &&
|
||||
(rows.lines.length <= GRID_OUTLINE_MAX_ROWS_PREF);
|
||||
}
|
||||
|
||||
this.setState({ height, width, selectedGrid, showOutline });
|
||||
}
|
||||
|
||||
doHighlightCell(target, hide) {
|
||||
const {
|
||||
grids,
|
||||
@ -159,38 +158,6 @@ class GridOutline extends PureComponent {
|
||||
return height;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the width and height of a given grid.
|
||||
*
|
||||
* @param {Object} grid
|
||||
* A single grid container in the document.
|
||||
* @return {Object} An object like { width, height }
|
||||
*/
|
||||
getTotalWidthAndHeight(grid) {
|
||||
// TODO: We are drawing the first fragment since only one is currently being stored.
|
||||
// In the future we will need to iterate over all fragments of a grid.
|
||||
const { gridFragments } = grid;
|
||||
const { rows, cols } = gridFragments[0];
|
||||
|
||||
let height = 0;
|
||||
for (let i = 0; i < rows.lines.length - 1; i++) {
|
||||
height += GRID_CELL_SCALE_FACTOR * (rows.tracks[i].breadth / 100);
|
||||
}
|
||||
|
||||
let width = 0;
|
||||
for (let i = 0; i < cols.lines.length - 1; i++) {
|
||||
width += GRID_CELL_SCALE_FACTOR * (cols.tracks[i].breadth / 100);
|
||||
}
|
||||
|
||||
// All writing modes other than horizontal-tb (the initial value) involve a 90 deg
|
||||
// rotation, so swap width and height.
|
||||
if (grid.writingMode != "horizontal-tb") {
|
||||
[ width, height ] = [ height, width ];
|
||||
}
|
||||
|
||||
return { width, height };
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a message text "Cannot show outline for this grid".
|
||||
*/
|
||||
@ -396,4 +363,36 @@ class GridOutline extends PureComponent {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the width and height of a given grid.
|
||||
*
|
||||
* @param {Object} grid
|
||||
* A single grid container in the document.
|
||||
* @return {Object} An object like { width, height }
|
||||
*/
|
||||
function getTotalWidthAndHeight(grid) {
|
||||
// TODO: We are drawing the first fragment since only one is currently being stored.
|
||||
// In the future we will need to iterate over all fragments of a grid.
|
||||
const { gridFragments } = grid;
|
||||
const { rows, cols } = gridFragments[0];
|
||||
|
||||
let height = 0;
|
||||
for (let i = 0; i < rows.lines.length - 1; i++) {
|
||||
height += GRID_CELL_SCALE_FACTOR * (rows.tracks[i].breadth / 100);
|
||||
}
|
||||
|
||||
let width = 0;
|
||||
for (let i = 0; i < cols.lines.length - 1; i++) {
|
||||
width += GRID_CELL_SCALE_FACTOR * (cols.tracks[i].breadth / 100);
|
||||
}
|
||||
|
||||
// All writing modes other than horizontal-tb (the initial value) involve a 90 deg
|
||||
// rotation, so swap width and height.
|
||||
if (grid.writingMode != "horizontal-tb") {
|
||||
[ width, height ] = [ height, width ];
|
||||
}
|
||||
|
||||
return { width, height };
|
||||
}
|
||||
|
||||
module.exports = GridOutline;
|
||||
|
@ -33,6 +33,7 @@ skip-if = (verify && (os == 'win' || os == 'linux'))
|
||||
skip-if = (verify && (os == 'win'))
|
||||
[browser_grids_grid-outline-highlight-cell.js]
|
||||
skip-if = (verify && (os == 'win'))
|
||||
[browser_grids_grid-outline-multiple-grids.js]
|
||||
[browser_grids_grid-outline-selected-grid.js]
|
||||
[browser_grids_grid-outline-updates-on-grid-change.js]
|
||||
[browser_grids_grid-outline-writing-mode.js]
|
||||
|
@ -22,6 +22,7 @@ const TEST_URI = `
|
||||
`;
|
||||
|
||||
add_task(async function() {
|
||||
await pushPref("devtools.gridinspector.maxHighlighters", 1);
|
||||
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
const { inspector, gridInspector, testActor } = await openLayoutView();
|
||||
const { document: doc } = gridInspector;
|
||||
|
@ -23,6 +23,7 @@ const TEST_URI = `
|
||||
`;
|
||||
|
||||
add_task(async function() {
|
||||
await pushPref("devtools.gridinspector.maxHighlighters", 1);
|
||||
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
const { inspector, gridInspector } = await openLayoutView();
|
||||
const { document: doc } = gridInspector;
|
||||
|
@ -0,0 +1,64 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Tests that the grid outline is not shown when more than one grid is highlighted.
|
||||
|
||||
const TEST_URI = `
|
||||
<style type='text/css'>
|
||||
.grid {
|
||||
display: grid;
|
||||
}
|
||||
</style>
|
||||
<div id="grid1" class="grid">
|
||||
<div class="cell1">cell1</div>
|
||||
<div class="cell2">cell2</div>
|
||||
</div>
|
||||
<div id="grid2" class="grid">
|
||||
<div class="cell1">cell1</div>
|
||||
<div class="cell2">cell2</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
add_task(async function() {
|
||||
await pushPref("devtools.gridinspector.maxHighlighters", 2);
|
||||
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
const { inspector, gridInspector } = await openLayoutView();
|
||||
const { document: doc } = gridInspector;
|
||||
const { highlighters, store } = inspector;
|
||||
|
||||
await selectNode("#grid1", inspector);
|
||||
const gridList = doc.getElementById("grid-list");
|
||||
const checkbox1 = gridList.children[0].querySelector("input");
|
||||
const checkbox2 = gridList.children[1].querySelector("input");
|
||||
|
||||
info("Toggling ON the CSS grid highlighter for #grid1.");
|
||||
let onHighlighterShown = highlighters.once("grid-highlighter-shown");
|
||||
const onGridOutlineRendered = waitForDOM(doc, "#grid-cell-group rect", 2);
|
||||
let onCheckboxChange = waitUntilState(store, state =>
|
||||
state.grids.length === 2 &&
|
||||
state.grids[0].highlighted &&
|
||||
!state.grids[1].highlighted);
|
||||
checkbox1.click();
|
||||
await onHighlighterShown;
|
||||
await onCheckboxChange;
|
||||
const elements = await onGridOutlineRendered;
|
||||
|
||||
info("Checking the grid outline for #grid1 is shown.");
|
||||
ok(doc.getElementById("grid-outline-container"), "Grid outline container is rendered.");
|
||||
is(elements.length, 2, "Grid outline is shown.");
|
||||
|
||||
info("Toggling ON the CSS grid highlighter for #grid2.");
|
||||
onHighlighterShown = highlighters.once("grid-highlighter-shown");
|
||||
onCheckboxChange = waitUntilState(store, state =>
|
||||
state.grids.length === 2 &&
|
||||
state.grids[0].highlighted &&
|
||||
state.grids[1].highlighted);
|
||||
checkbox2.click();
|
||||
await onHighlighterShown;
|
||||
await onCheckboxChange;
|
||||
|
||||
info("Checking the grid outline is not shown.");
|
||||
ok(!doc.getElementById("grid-outline-container"), "Grid outline is not rendered.");
|
||||
});
|
@ -61,6 +61,7 @@ const TEST_URI = `
|
||||
`;
|
||||
|
||||
add_task(async function() {
|
||||
await pushPref("devtools.gridinspector.maxHighlighters", 1);
|
||||
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
|
||||
const { inspector, gridInspector } = await openLayoutView();
|
||||
|
@ -23,6 +23,7 @@ const TEST_URI = `
|
||||
`;
|
||||
|
||||
add_task(async function() {
|
||||
await pushPref("devtools.gridinspector.maxHighlighters", 1);
|
||||
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
const {inspector, view} = await openRuleView();
|
||||
const highlighters = view.highlighters;
|
||||
|
@ -74,7 +74,7 @@ pref("devtools.gridinspector.showGridAreas", false);
|
||||
pref("devtools.gridinspector.showGridLineNumbers", false);
|
||||
pref("devtools.gridinspector.showInfiniteLines", false);
|
||||
// Max number of grid highlighters that can be displayed
|
||||
pref("devtools.gridinspector.maxHighlighters", 1);
|
||||
pref("devtools.gridinspector.maxHighlighters", 3);
|
||||
|
||||
// Whether or not the box model panel is opened in the layout view
|
||||
pref("devtools.layout.boxmodel.opened", true);
|
||||
|
@ -4,3 +4,4 @@
|
||||
|
||||
toolkit.jar:
|
||||
content/global/netError.xhtml
|
||||
content/global/netError.js
|
||||
|
276
docshell/resources/content/netError.js
Normal file
276
docshell/resources/content/netError.js
Normal file
@ -0,0 +1,276 @@
|
||||
// Error url MUST be formatted like this:
|
||||
// moz-neterror:page?e=error&u=url&d=desc
|
||||
//
|
||||
// or optionally, to specify an alternate CSS class to allow for
|
||||
// custom styling and favicon:
|
||||
//
|
||||
// moz-neterror:page?e=error&u=url&s=classname&d=desc
|
||||
|
||||
// Note that this file uses document.documentURI to get
|
||||
// the URL (with the format from above). This is because
|
||||
// document.location.href gets the current URI off the docshell,
|
||||
// which is the URL displayed in the location bar, i.e.
|
||||
// the URI that the user attempted to load.
|
||||
|
||||
function getErrorCode()
|
||||
{
|
||||
var url = document.documentURI;
|
||||
var error = url.search(/e\=/);
|
||||
var duffUrl = url.search(/\&u\=/);
|
||||
return decodeURIComponent(url.slice(error + 2, duffUrl));
|
||||
}
|
||||
|
||||
function getCSSClass()
|
||||
{
|
||||
var url = document.documentURI;
|
||||
var matches = url.match(/s\=([^&]+)\&/);
|
||||
// s is optional, if no match just return nothing
|
||||
if (!matches || matches.length < 2)
|
||||
return "";
|
||||
|
||||
// parenthetical match is the second entry
|
||||
return decodeURIComponent(matches[1]);
|
||||
}
|
||||
|
||||
function getDescription()
|
||||
{
|
||||
var url = document.documentURI;
|
||||
var desc = url.search(/d\=/);
|
||||
|
||||
// desc == -1 if not found; if so, return an empty string
|
||||
// instead of what would turn out to be portions of the URI
|
||||
if (desc == -1)
|
||||
return "";
|
||||
|
||||
return decodeURIComponent(url.slice(desc + 2));
|
||||
}
|
||||
|
||||
function retryThis(buttonEl)
|
||||
{
|
||||
// Note: The application may wish to handle switching off "offline mode"
|
||||
// before this event handler runs, but using a capturing event handler.
|
||||
|
||||
// Session history has the URL of the page that failed
|
||||
// to load, not the one of the error page. So, just call
|
||||
// reload(), which will also repost POST data correctly.
|
||||
try {
|
||||
location.reload();
|
||||
} catch (e) {
|
||||
// We probably tried to reload a URI that caused an exception to
|
||||
// occur; e.g. a nonexistent file.
|
||||
}
|
||||
|
||||
buttonEl.disabled = true;
|
||||
}
|
||||
|
||||
function initPage()
|
||||
{
|
||||
var err = getErrorCode();
|
||||
|
||||
// if it's an unknown error or there's no title or description
|
||||
// defined, get the generic message
|
||||
var errTitle = document.getElementById("et_" + err);
|
||||
var errDesc = document.getElementById("ed_" + err);
|
||||
if (!errTitle || !errDesc)
|
||||
{
|
||||
errTitle = document.getElementById("et_generic");
|
||||
errDesc = document.getElementById("ed_generic");
|
||||
}
|
||||
|
||||
var title = document.getElementById("errorTitleText");
|
||||
if (title)
|
||||
{
|
||||
title.parentNode.replaceChild(errTitle, title);
|
||||
// change id to the replaced child's id so styling works
|
||||
errTitle.id = "errorTitleText";
|
||||
}
|
||||
|
||||
var sd = document.getElementById("errorShortDescText");
|
||||
if (sd)
|
||||
sd.textContent = getDescription();
|
||||
|
||||
var ld = document.getElementById("errorLongDesc");
|
||||
if (ld)
|
||||
{
|
||||
ld.parentNode.replaceChild(errDesc, ld);
|
||||
// change id to the replaced child's id so styling works
|
||||
errDesc.id = "errorLongDesc";
|
||||
}
|
||||
|
||||
// remove undisplayed errors to avoid bug 39098
|
||||
var errContainer = document.getElementById("errorContainer");
|
||||
errContainer.remove();
|
||||
|
||||
var className = getCSSClass();
|
||||
if (className && className != "expertBadCert") {
|
||||
// Associate a CSS class with the root of the page, if one was passed in,
|
||||
// to allow custom styling.
|
||||
// Not "expertBadCert" though, don't want to deal with the favicon
|
||||
document.documentElement.className = className;
|
||||
|
||||
// Also, if they specified a CSS class, they must supply their own
|
||||
// favicon. In order to trigger the browser to repaint though, we
|
||||
// need to remove/add the link element.
|
||||
var favicon = document.getElementById("favicon");
|
||||
var faviconParent = favicon.parentNode;
|
||||
faviconParent.removeChild(favicon);
|
||||
favicon.setAttribute("href", "chrome://global/skin/icons/" + className + "_favicon.png");
|
||||
faviconParent.appendChild(favicon);
|
||||
}
|
||||
if (className == "expertBadCert") {
|
||||
showSecuritySection();
|
||||
}
|
||||
|
||||
if (err == "remoteXUL") {
|
||||
// Remove the "Try again" button for remote XUL errors given that
|
||||
// it is useless.
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
}
|
||||
|
||||
if (err == "cspBlocked") {
|
||||
// Remove the "Try again" button for CSP violations, since it's
|
||||
// almost certainly useless. (Bug 553180)
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
}
|
||||
|
||||
if (err == "nssBadCert") {
|
||||
// Remove the "Try again" button for security exceptions, since it's
|
||||
// almost certainly useless.
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
document.getElementById("errorPageContainer").setAttribute("class", "certerror");
|
||||
addDomainErrorLink();
|
||||
}
|
||||
else {
|
||||
// Remove the override block for non-certificate errors. CSS-hiding
|
||||
// isn't good enough here, because of bug 39098
|
||||
var secOverride = document.getElementById("securityOverrideDiv");
|
||||
secOverride.remove();
|
||||
}
|
||||
|
||||
if (err == "inadequateSecurityError" || err == "blockedByPolicy") {
|
||||
// Remove the "Try again" button from pages that don't need it.
|
||||
// For HTTP/2 inadequate security or pages blocked by policy, trying
|
||||
// again won't help.
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
|
||||
var container = document.getElementById("errorLongDesc");
|
||||
for (var span of container.querySelectorAll("span.hostname")) {
|
||||
span.textContent = document.location.hostname;
|
||||
}
|
||||
}
|
||||
|
||||
if (document.getElementById("errorTryAgain").style.display != "none")
|
||||
addAutofocus("errorTryAgain");
|
||||
}
|
||||
|
||||
function showSecuritySection() {
|
||||
// Swap link out, content in
|
||||
document.getElementById('securityOverrideContent').style.display = '';
|
||||
document.getElementById('securityOverrideLink').style.display = 'none';
|
||||
}
|
||||
|
||||
/* In the case of SSL error pages about domain mismatch, see if
|
||||
we can hyperlink the user to the correct site. We don't want
|
||||
to do this generically since it allows MitM attacks to redirect
|
||||
users to a site under attacker control, but in certain cases
|
||||
it is safe (and helpful!) to do so. Bug 402210
|
||||
*/
|
||||
function addDomainErrorLink() {
|
||||
// Rather than textContent, we need to treat description as HTML
|
||||
var sd = document.getElementById("errorShortDescText");
|
||||
if (sd) {
|
||||
var desc = getDescription();
|
||||
|
||||
// sanitize description text - see bug 441169
|
||||
|
||||
// First, find the index of the <a> tag we care about, being careful not to
|
||||
// use an over-greedy regex
|
||||
var re = /<a id="cert_domain_link" title="([^"]+)">/;
|
||||
var result = re.exec(desc);
|
||||
if(!result)
|
||||
return;
|
||||
|
||||
// Remove sd's existing children
|
||||
sd.textContent = "";
|
||||
|
||||
// Everything up to the link should be text content
|
||||
sd.appendChild(document.createTextNode(desc.slice(0, result.index)));
|
||||
|
||||
// Now create the link itself
|
||||
var anchorEl = document.createElement("a");
|
||||
anchorEl.setAttribute("id", "cert_domain_link");
|
||||
anchorEl.setAttribute("title", result[1]);
|
||||
anchorEl.appendChild(document.createTextNode(result[1]));
|
||||
sd.appendChild(anchorEl);
|
||||
|
||||
// Finally, append text for anything after the closing </a>
|
||||
sd.appendChild(document.createTextNode(desc.slice(desc.indexOf("</a>") + "</a>".length)));
|
||||
}
|
||||
|
||||
var link = document.getElementById('cert_domain_link');
|
||||
if (!link)
|
||||
return;
|
||||
|
||||
var okHost = link.getAttribute("title");
|
||||
var thisHost = document.location.hostname;
|
||||
var proto = document.location.protocol;
|
||||
|
||||
// If okHost is a wildcard domain ("*.example.com") let's
|
||||
// use "www" instead. "*.example.com" isn't going to
|
||||
// get anyone anywhere useful. bug 432491
|
||||
okHost = okHost.replace(/^\*\./, "www.");
|
||||
|
||||
/* case #1:
|
||||
* example.com uses an invalid security certificate.
|
||||
*
|
||||
* The certificate is only valid for www.example.com
|
||||
*
|
||||
* Make sure to include the "." ahead of thisHost so that
|
||||
* a MitM attack on paypal.com doesn't hyperlink to "notpaypal.com"
|
||||
*
|
||||
* We'd normally just use a RegExp here except that we lack a
|
||||
* library function to escape them properly (bug 248062), and
|
||||
* domain names are famous for having '.' characters in them,
|
||||
* which would allow spurious and possibly hostile matches.
|
||||
*/
|
||||
if (endsWith(okHost, "." + thisHost))
|
||||
link.href = proto + okHost;
|
||||
|
||||
/* case #2:
|
||||
* browser.garage.maemo.org uses an invalid security certificate.
|
||||
*
|
||||
* The certificate is only valid for garage.maemo.org
|
||||
*/
|
||||
if (endsWith(thisHost, "." + okHost))
|
||||
link.href = proto + okHost;
|
||||
}
|
||||
|
||||
function endsWith(haystack, needle) {
|
||||
return haystack.slice(-needle.length) == needle;
|
||||
}
|
||||
|
||||
/* Only do autofocus if we're the toplevel frame; otherwise we
|
||||
don't want to call attention to ourselves! The key part is
|
||||
that autofocus happens on insertion into the tree, so we
|
||||
can remove the button, add @autofocus, and reinsert the
|
||||
button.
|
||||
*/
|
||||
function addAutofocus(buttonId, position = "afterbegin") {
|
||||
if (window.top == window) {
|
||||
var button = document.getElementById(buttonId);
|
||||
var parent = button.parentNode;
|
||||
button.remove();
|
||||
button.setAttribute("autofocus", "true");
|
||||
parent.insertAdjacentElement(position, button);
|
||||
}
|
||||
}
|
||||
|
||||
let errorTryAgain = document.getElementById("errorTryAgain");
|
||||
errorTryAgain.addEventListener("click", function() {
|
||||
retryThis(this);
|
||||
});
|
||||
|
||||
// Note: It is important to run the script this way, instead of using
|
||||
// an onload handler. This is because error pages are loaded as
|
||||
// LOAD_BACKGROUND, which means that onload handlers will not be executed.
|
||||
initPage();
|
@ -22,262 +22,12 @@
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src chrome:" />
|
||||
<title>&loadError.label;</title>
|
||||
<link rel="stylesheet" href="chrome://global/skin/netError.css" type="text/css" media="all" />
|
||||
<!-- If the location of the favicon is changed here, the FAVICON_ERRORPAGE_URL symbol in
|
||||
toolkit/components/places/src/nsFaviconService.h should be updated. -->
|
||||
<link rel="icon" id="favicon" href="chrome://global/skin/icons/warning.svg"/>
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
// Error url MUST be formatted like this:
|
||||
// moz-neterror:page?e=error&u=url&d=desc
|
||||
//
|
||||
// or optionally, to specify an alternate CSS class to allow for
|
||||
// custom styling and favicon:
|
||||
//
|
||||
// moz-neterror:page?e=error&u=url&s=classname&d=desc
|
||||
|
||||
// Note that this file uses document.documentURI to get
|
||||
// the URL (with the format from above). This is because
|
||||
// document.location.href gets the current URI off the docshell,
|
||||
// which is the URL displayed in the location bar, i.e.
|
||||
// the URI that the user attempted to load.
|
||||
|
||||
function getErrorCode()
|
||||
{
|
||||
var url = document.documentURI;
|
||||
var error = url.search(/e\=/);
|
||||
var duffUrl = url.search(/\&u\=/);
|
||||
return decodeURIComponent(url.slice(error + 2, duffUrl));
|
||||
}
|
||||
|
||||
function getCSSClass()
|
||||
{
|
||||
var url = document.documentURI;
|
||||
var matches = url.match(/s\=([^&]+)\&/);
|
||||
// s is optional, if no match just return nothing
|
||||
if (!matches || matches.length < 2)
|
||||
return "";
|
||||
|
||||
// parenthetical match is the second entry
|
||||
return decodeURIComponent(matches[1]);
|
||||
}
|
||||
|
||||
function getDescription()
|
||||
{
|
||||
var url = document.documentURI;
|
||||
var desc = url.search(/d\=/);
|
||||
|
||||
// desc == -1 if not found; if so, return an empty string
|
||||
// instead of what would turn out to be portions of the URI
|
||||
if (desc == -1)
|
||||
return "";
|
||||
|
||||
return decodeURIComponent(url.slice(desc + 2));
|
||||
}
|
||||
|
||||
function retryThis(buttonEl)
|
||||
{
|
||||
// Note: The application may wish to handle switching off "offline mode"
|
||||
// before this event handler runs, but using a capturing event handler.
|
||||
|
||||
// Session history has the URL of the page that failed
|
||||
// to load, not the one of the error page. So, just call
|
||||
// reload(), which will also repost POST data correctly.
|
||||
try {
|
||||
location.reload();
|
||||
} catch (e) {
|
||||
// We probably tried to reload a URI that caused an exception to
|
||||
// occur; e.g. a nonexistent file.
|
||||
}
|
||||
|
||||
buttonEl.disabled = true;
|
||||
}
|
||||
|
||||
function initPage()
|
||||
{
|
||||
var err = getErrorCode();
|
||||
|
||||
// if it's an unknown error or there's no title or description
|
||||
// defined, get the generic message
|
||||
var errTitle = document.getElementById("et_" + err);
|
||||
var errDesc = document.getElementById("ed_" + err);
|
||||
if (!errTitle || !errDesc)
|
||||
{
|
||||
errTitle = document.getElementById("et_generic");
|
||||
errDesc = document.getElementById("ed_generic");
|
||||
}
|
||||
|
||||
var title = document.getElementById("errorTitleText");
|
||||
if (title)
|
||||
{
|
||||
title.parentNode.replaceChild(errTitle, title);
|
||||
// change id to the replaced child's id so styling works
|
||||
errTitle.id = "errorTitleText";
|
||||
}
|
||||
|
||||
var sd = document.getElementById("errorShortDescText");
|
||||
if (sd)
|
||||
sd.textContent = getDescription();
|
||||
|
||||
var ld = document.getElementById("errorLongDesc");
|
||||
if (ld)
|
||||
{
|
||||
ld.parentNode.replaceChild(errDesc, ld);
|
||||
// change id to the replaced child's id so styling works
|
||||
errDesc.id = "errorLongDesc";
|
||||
}
|
||||
|
||||
// remove undisplayed errors to avoid bug 39098
|
||||
var errContainer = document.getElementById("errorContainer");
|
||||
errContainer.remove();
|
||||
|
||||
var className = getCSSClass();
|
||||
if (className && className != "expertBadCert") {
|
||||
// Associate a CSS class with the root of the page, if one was passed in,
|
||||
// to allow custom styling.
|
||||
// Not "expertBadCert" though, don't want to deal with the favicon
|
||||
document.documentElement.className = className;
|
||||
|
||||
// Also, if they specified a CSS class, they must supply their own
|
||||
// favicon. In order to trigger the browser to repaint though, we
|
||||
// need to remove/add the link element.
|
||||
var favicon = document.getElementById("favicon");
|
||||
var faviconParent = favicon.parentNode;
|
||||
faviconParent.removeChild(favicon);
|
||||
favicon.setAttribute("href", "chrome://global/skin/icons/" + className + "_favicon.png");
|
||||
faviconParent.appendChild(favicon);
|
||||
}
|
||||
if (className == "expertBadCert") {
|
||||
showSecuritySection();
|
||||
}
|
||||
|
||||
if (err == "remoteXUL") {
|
||||
// Remove the "Try again" button for remote XUL errors given that
|
||||
// it is useless.
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
}
|
||||
|
||||
if (err == "cspBlocked") {
|
||||
// Remove the "Try again" button for CSP violations, since it's
|
||||
// almost certainly useless. (Bug 553180)
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
}
|
||||
|
||||
if (err == "nssBadCert") {
|
||||
// Remove the "Try again" button for security exceptions, since it's
|
||||
// almost certainly useless.
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
document.getElementById("errorPageContainer").setAttribute("class", "certerror");
|
||||
addDomainErrorLink();
|
||||
}
|
||||
else {
|
||||
// Remove the override block for non-certificate errors. CSS-hiding
|
||||
// isn't good enough here, because of bug 39098
|
||||
var secOverride = document.getElementById("securityOverrideDiv");
|
||||
secOverride.remove();
|
||||
}
|
||||
|
||||
if (err == "inadequateSecurityError" || err == "blockedByPolicy") {
|
||||
// Remove the "Try again" button from pages that don't need it.
|
||||
// For HTTP/2 inadequate security or pages blocked by policy, trying
|
||||
// again won't help.
|
||||
document.getElementById("errorTryAgain").style.display = "none";
|
||||
|
||||
var container = document.getElementById("errorLongDesc");
|
||||
for (var span of container.querySelectorAll("span.hostname")) {
|
||||
span.textContent = document.location.hostname;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function showSecuritySection() {
|
||||
// Swap link out, content in
|
||||
document.getElementById('securityOverrideContent').style.display = '';
|
||||
document.getElementById('securityOverrideLink').style.display = 'none';
|
||||
}
|
||||
|
||||
/* In the case of SSL error pages about domain mismatch, see if
|
||||
we can hyperlink the user to the correct site. We don't want
|
||||
to do this generically since it allows MitM attacks to redirect
|
||||
users to a site under attacker control, but in certain cases
|
||||
it is safe (and helpful!) to do so. Bug 402210
|
||||
*/
|
||||
function addDomainErrorLink() {
|
||||
// Rather than textContent, we need to treat description as HTML
|
||||
var sd = document.getElementById("errorShortDescText");
|
||||
if (sd) {
|
||||
var desc = getDescription();
|
||||
|
||||
// sanitize description text - see bug 441169
|
||||
|
||||
// First, find the index of the <a> tag we care about, being careful not to
|
||||
// use an over-greedy regex
|
||||
var re = /<a id="cert_domain_link" title="([^"]+)">/;
|
||||
var result = re.exec(desc);
|
||||
if(!result)
|
||||
return;
|
||||
|
||||
// Remove sd's existing children
|
||||
sd.textContent = "";
|
||||
|
||||
// Everything up to the link should be text content
|
||||
sd.appendChild(document.createTextNode(desc.slice(0, result.index)));
|
||||
|
||||
// Now create the link itself
|
||||
var anchorEl = document.createElement("a");
|
||||
anchorEl.setAttribute("id", "cert_domain_link");
|
||||
anchorEl.setAttribute("title", result[1]);
|
||||
anchorEl.appendChild(document.createTextNode(result[1]));
|
||||
sd.appendChild(anchorEl);
|
||||
|
||||
// Finally, append text for anything after the closing </a>
|
||||
sd.appendChild(document.createTextNode(desc.slice(desc.indexOf("</a>") + "</a>".length)));
|
||||
}
|
||||
|
||||
var link = document.getElementById('cert_domain_link');
|
||||
if (!link)
|
||||
return;
|
||||
|
||||
var okHost = link.getAttribute("title");
|
||||
var thisHost = document.location.hostname;
|
||||
var proto = document.location.protocol;
|
||||
|
||||
// If okHost is a wildcard domain ("*.example.com") let's
|
||||
// use "www" instead. "*.example.com" isn't going to
|
||||
// get anyone anywhere useful. bug 432491
|
||||
okHost = okHost.replace(/^\*\./, "www.");
|
||||
|
||||
/* case #1:
|
||||
* example.com uses an invalid security certificate.
|
||||
*
|
||||
* The certificate is only valid for www.example.com
|
||||
*
|
||||
* Make sure to include the "." ahead of thisHost so that
|
||||
* a MitM attack on paypal.com doesn't hyperlink to "notpaypal.com"
|
||||
*
|
||||
* We'd normally just use a RegExp here except that we lack a
|
||||
* library function to escape them properly (bug 248062), and
|
||||
* domain names are famous for having '.' characters in them,
|
||||
* which would allow spurious and possibly hostile matches.
|
||||
*/
|
||||
if (endsWith(okHost, "." + thisHost))
|
||||
link.href = proto + okHost;
|
||||
|
||||
/* case #2:
|
||||
* browser.garage.maemo.org uses an invalid security certificate.
|
||||
*
|
||||
* The certificate is only valid for garage.maemo.org
|
||||
*/
|
||||
if (endsWith(thisHost, "." + okHost))
|
||||
link.href = proto + okHost;
|
||||
}
|
||||
|
||||
function endsWith(haystack, needle) {
|
||||
return haystack.slice(-needle.length) == needle;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
</head>
|
||||
|
||||
<body dir="&locale.dir;">
|
||||
@ -365,36 +115,14 @@
|
||||
error types. -->
|
||||
<div id="securityOverrideDiv">
|
||||
<a id="securityOverrideLink" href="javascript:showSecuritySection();" >&securityOverride.linkText;</a>
|
||||
<div id="securityOverrideContent" style="display: none;">&securityOverride.warningContent;</div>
|
||||
<div id="securityOverrideContent">&securityOverride.warningContent;</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Retry Button -->
|
||||
<button id="errorTryAgain" autocomplete="off" onclick="retryThis(this);">&retry.label;</button>
|
||||
<script>
|
||||
// Only do autofocus if we're the toplevel frame; otherwise we
|
||||
// don't want to call attention to ourselves! The key part is
|
||||
// that autofocus happens on insertion into the tree, so we
|
||||
// can remove the button, add @autofocus, and reinsert the
|
||||
// button.
|
||||
if (window.top == window) {
|
||||
var button = document.getElementById("errorTryAgain");
|
||||
var nextSibling = button.nextSibling;
|
||||
var parent = button.parentNode;
|
||||
parent.removeChild(button);
|
||||
button.setAttribute("autofocus", "true");
|
||||
parent.insertBefore(button, nextSibling);
|
||||
}
|
||||
</script>
|
||||
|
||||
<button id="errorTryAgain" autocomplete="off">&retry.label;</button>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
- Note: It is important to run the script this way, instead of using
|
||||
- an onload handler. This is because error pages are loaded as
|
||||
- LOAD_BACKGROUND, which means that onload handlers will not be executed.
|
||||
-->
|
||||
<script type="application/javascript">initPage();</script>
|
||||
|
||||
<script type="application/javascript" src="chrome://global/content/netError.js"/>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -24,9 +24,9 @@ added, also add a static assertion for it to message_pump_libevent.cc.
|
||||
2. Apply the following patches from
|
||||
ipc/chromium/src/third_party/libevent/patches/:
|
||||
|
||||
- "openbsd-no-arc4random_addrandom.patch". Fixes the build on OpenBSD
|
||||
and Android (which don't provide arc4random_addrandom anymore).
|
||||
See bug 931354 and bug 1259218.
|
||||
- "openbsd-no-arc4random_addrandom.patch". Fixes the build on OpenBSD,
|
||||
FreeBSD and Android (which don't provide arc4random_addrandom anymore).
|
||||
See bug 931354, bug 1259218, bug 1497169.
|
||||
|
||||
- "dont-use-issetugid-on-android.patch". Fixes Android startup crashes.
|
||||
See bug 1030899.
|
||||
|
@ -192,7 +192,7 @@ evutil_secure_rng_get_bytes(void *buf, size_t n)
|
||||
ev_arc4random_buf(buf, n);
|
||||
}
|
||||
|
||||
#if !defined(__OpenBSD__) && !defined(ANDROID)
|
||||
#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(ANDROID)
|
||||
void
|
||||
evutil_secure_rng_add_bytes(const char *buf, size_t n)
|
||||
{
|
||||
|
@ -842,7 +842,7 @@ int evutil_secure_rng_init(void);
|
||||
EVENT2_EXPORT_SYMBOL
|
||||
int evutil_secure_rng_set_urandom_device_file(char *fname);
|
||||
|
||||
#if !defined(__OpenBSD__) && !defined(ANDROID)
|
||||
#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(ANDROID)
|
||||
/** Seed the random number generator with extra random bytes.
|
||||
|
||||
You should almost never need to call this function; it should be
|
||||
|
@ -10,7 +10,7 @@ diff --git a/ipc/chromium/src/third_party/libevent/evutil_rand.c b/ipc/chromium/
|
||||
ev_arc4random_buf(buf, n);
|
||||
}
|
||||
|
||||
+#if !defined(__OpenBSD__) && !defined(ANDROID)
|
||||
+#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(ANDROID)
|
||||
void
|
||||
evutil_secure_rng_add_bytes(const char *buf, size_t n)
|
||||
{
|
||||
@ -36,7 +36,7 @@ diff --git a/ipc/chromium/src/third_party/libevent/include/event2/util.h b/ipc/c
|
||||
EVENT2_EXPORT_SYMBOL
|
||||
int evutil_secure_rng_set_urandom_device_file(char *fname);
|
||||
|
||||
+#if !defined(__OpenBSD__) && !defined(ANDROID)
|
||||
+#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(ANDROID)
|
||||
/** Seed the random number generator with extra random bytes.
|
||||
|
||||
You should almost never need to call this function; it should be
|
||||
|
@ -15,6 +15,8 @@
|
||||
#include "mozilla/Casting.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include <utility> // for ::std::swap
|
||||
|
||||
#include "builtin/Symbol.h"
|
||||
#include "gc/GC.h"
|
||||
#include "jit/BaselineJIT.h"
|
||||
@ -1094,6 +1096,101 @@ struct TypeHashSet
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <class T, class U, class Key, typename Fun>
|
||||
static void
|
||||
MapEntries(U**& values, unsigned count, Fun f)
|
||||
{
|
||||
// No element.
|
||||
if (count == 0) {
|
||||
MOZ_RELEASE_ASSERT(!values);
|
||||
return;
|
||||
}
|
||||
|
||||
// When we have a single element it is stored in-place of the function
|
||||
// array pointer.
|
||||
if (count == 1) {
|
||||
values = reinterpret_cast<U**>(f(reinterpret_cast<U*>(values)));
|
||||
return;
|
||||
}
|
||||
|
||||
// When we have SET_ARRAY_SIZE or fewer elements, the values is an
|
||||
// unorderred array.
|
||||
if (count <= SET_ARRAY_SIZE) {
|
||||
for (unsigned i = 0; i < count; i++) {
|
||||
values[i] = f(values[i]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Simple functions to read and mutate the lowest bit of pointers.
|
||||
auto lowBit = [](U* elem) -> bool {
|
||||
return bool(reinterpret_cast<uintptr_t>(elem) & 1);
|
||||
};
|
||||
auto toggleLowBit = [](U* elem) -> U* {
|
||||
return reinterpret_cast<U*>(reinterpret_cast<uintptr_t>(elem) ^ 1);
|
||||
};
|
||||
|
||||
// This code applies the function f and relocates the values based on
|
||||
// the new pointers.
|
||||
//
|
||||
// To avoid allocations, we reuse the same structure but distinguish the
|
||||
// elements to be rellocated from the rellocated elements with the
|
||||
// lowest bit.
|
||||
unsigned capacity = Capacity(count);
|
||||
MOZ_RELEASE_ASSERT(uintptr_t(values[-1]) == capacity);
|
||||
unsigned found = 0;
|
||||
for (unsigned i = 0; i < capacity; i++) {
|
||||
if (!values[i]) {
|
||||
continue;
|
||||
}
|
||||
MOZ_ASSERT(found <= count);
|
||||
U* elem = f(values[i]);
|
||||
values[i] = nullptr;
|
||||
MOZ_ASSERT(!lowBit(elem));
|
||||
values[found++] = toggleLowBit(elem);
|
||||
}
|
||||
MOZ_ASSERT(found == count);
|
||||
|
||||
// Follow the same rule as InsertTry, except that for each cell we
|
||||
// identify empty cell content with:
|
||||
//
|
||||
// nullptr empty cell.
|
||||
// 0b....0 inserted element.
|
||||
// 0b....1 empty cell - element to be inserted.
|
||||
unsigned mask = capacity - 1;
|
||||
for (unsigned i = 0; i < count; i++) {
|
||||
U* elem = values[i];
|
||||
if (!lowBit(elem)) {
|
||||
// If this is a newly inserted element, this implies that one of
|
||||
// the previous objects was moved to this position.
|
||||
continue;
|
||||
}
|
||||
values[i] = nullptr;
|
||||
while (elem) {
|
||||
MOZ_ASSERT(lowBit(elem));
|
||||
elem = toggleLowBit(elem);
|
||||
unsigned pos = HashKey<T,Key>(Key::getKey(elem)) & mask;
|
||||
while (values[pos] != nullptr && !lowBit(values[pos])) {
|
||||
pos = (pos + 1) & mask;
|
||||
}
|
||||
// The replaced element is either a nullptr, which stops this
|
||||
// loop, or an element to be inserted, which would be inserted
|
||||
// by this loop.
|
||||
std::swap(values[pos], elem);
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
unsigned inserted = 0;
|
||||
for (unsigned i = 0; i < capacity; i++) {
|
||||
if (!values[i]) {
|
||||
continue;
|
||||
}
|
||||
inserted++;
|
||||
}
|
||||
MOZ_ASSERT(inserted == count);
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
@ -4546,47 +4546,13 @@ ConstraintTypeSet::trace(Zone* zone, JSTracer* trc)
|
||||
MOZ_ASSERT(JS::RuntimeHeapIsMinorCollecting());
|
||||
|
||||
unsigned objectCount = baseObjectCount();
|
||||
if (objectCount >= 2) {
|
||||
unsigned oldCapacity = TypeHashSet::Capacity(objectCount);
|
||||
ObjectKey** oldArray = objectSet;
|
||||
|
||||
MOZ_RELEASE_ASSERT(uintptr_t(oldArray[-1]) == oldCapacity);
|
||||
|
||||
unsigned oldObjectCount = objectCount;
|
||||
unsigned oldObjectsFound = 0;
|
||||
|
||||
clearObjects();
|
||||
objectCount = 0;
|
||||
for (unsigned i = 0; i < oldCapacity; i++) {
|
||||
ObjectKey* key = oldArray[i];
|
||||
if (!key) {
|
||||
continue;
|
||||
}
|
||||
TypeHashSet::MapEntries<ObjectKey*, ObjectKey, ObjectKey>(
|
||||
objectSet,
|
||||
objectCount,
|
||||
[&](ObjectKey* key) -> ObjectKey* {
|
||||
TraceObjectKey(trc, &key);
|
||||
oldObjectsFound++;
|
||||
|
||||
AutoEnterOOMUnsafeRegion oomUnsafe;
|
||||
ObjectKey** pentry =
|
||||
TypeHashSet::Insert<ObjectKey*, ObjectKey, ObjectKey>
|
||||
(zone->types.typeLifoAlloc(), objectSet, objectCount, key);
|
||||
if (!pentry) {
|
||||
oomUnsafe.crash("ConstraintTypeSet::trace");
|
||||
}
|
||||
|
||||
*pentry = key;
|
||||
}
|
||||
MOZ_RELEASE_ASSERT(oldObjectCount == oldObjectsFound);
|
||||
setBaseObjectCount(objectCount);
|
||||
// Note: -1/+1 to also poison the capacity field.
|
||||
JS_POISON(oldArray - 1, JS_SWEPT_TI_PATTERN, (oldCapacity + 1) * sizeof(oldArray[0]),
|
||||
MemCheckKind::MakeUndefined);
|
||||
} else if (objectCount == 1) {
|
||||
ObjectKey* key = (ObjectKey*) objectSet;
|
||||
TraceObjectKey(trc, &key);
|
||||
objectSet = reinterpret_cast<ObjectKey**>(key);
|
||||
} else {
|
||||
MOZ_RELEASE_ASSERT(!objectSet);
|
||||
}
|
||||
return key;
|
||||
});
|
||||
|
||||
#ifdef DEBUG
|
||||
MOZ_ASSERT(objectCount == baseObjectCount());
|
||||
|
@ -332,7 +332,8 @@ def getDigestFromFile(args, inputFile):
|
||||
if args.filter_stacks_for_testing:
|
||||
# When running SmokeDMD.cpp, every stack trace should contain at
|
||||
# least one frame that contains 'DMD.cpp', from either |DMD.cpp| or
|
||||
# |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) If we see such a
|
||||
# |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) On builds without
|
||||
# debuginfo we expect just |SmokeDMD|. If we see such a
|
||||
# frame, we replace the entire stack trace with a single,
|
||||
# predictable frame. There is too much variation in the stack
|
||||
# traces across different machines and platforms to do more precise
|
||||
@ -340,7 +341,8 @@ def getDigestFromFile(args, inputFile):
|
||||
# stack fixing fails completely.
|
||||
for frameKey in frameKeys:
|
||||
frameDesc = frameTable[frameKey]
|
||||
if 'DMD.cpp' in frameDesc or 'dmd.cpp' in frameDesc:
|
||||
expected = ('DMD.cpp', 'dmd.cpp', 'SmokeDMD')
|
||||
if any(ex in frameDesc for ex in expected):
|
||||
return [fmt.format(1, ': ... DMD.cpp ...')]
|
||||
|
||||
# The frame number is always '#00' (see DMD.h for why), so we have to
|
||||
|
@ -31,4 +31,4 @@ support-files =
|
||||
|
||||
[test_dmd.js]
|
||||
dmd = true
|
||||
skip-if = !(os=='linux' || os=='win' || os=='mac')
|
||||
skip-if = !(os=='linux' || os=='mac' || (os=='win' && !pgo))
|
||||
|
@ -18,7 +18,6 @@ class FreeBSDBootstrapper(BaseBootstrapper):
|
||||
'autoconf213',
|
||||
'gmake',
|
||||
'gtar',
|
||||
'npm',
|
||||
'pkgconf',
|
||||
'py%s%s-sqlite3' % sys.version_info[0:2],
|
||||
'python3',
|
||||
@ -32,6 +31,7 @@ class FreeBSDBootstrapper(BaseBootstrapper):
|
||||
'gconf2',
|
||||
'gtk2',
|
||||
'gtk3',
|
||||
'libXt',
|
||||
'mesa-dri', # depends on llvm*
|
||||
'pulseaudio',
|
||||
'v4l_compat',
|
||||
@ -67,7 +67,10 @@ class FreeBSDBootstrapper(BaseBootstrapper):
|
||||
|
||||
def ensure_stylo_packages(self, state_dir, checkout_root):
|
||||
# Clang / llvm already installed as browser package
|
||||
self.ensure_rust_package('cbindgen')
|
||||
self.pkg_install('rust-cbindgen')
|
||||
|
||||
def ensure_node_packages(self, state_dir, checkout_root):
|
||||
self.pkg_install('npm')
|
||||
|
||||
def upgrade_mercurial(self, current):
|
||||
self.pkg_install('mercurial')
|
||||
|
@ -15,7 +15,6 @@ class OpenBSDBootstrapper(BaseBootstrapper):
|
||||
'autoconf-2.13',
|
||||
'gmake',
|
||||
'gtar',
|
||||
'node',
|
||||
'rust',
|
||||
'wget',
|
||||
'unzip',
|
||||
@ -49,4 +48,7 @@ class OpenBSDBootstrapper(BaseBootstrapper):
|
||||
|
||||
def ensure_stylo_packages(self, state_dir, checkout_root):
|
||||
# Clang / llvm already installed as browser package
|
||||
self.ensure_rust_package('cbindgen')
|
||||
self.run_as_root(['pkg_add', 'cbindgen'])
|
||||
|
||||
def ensure_node_packages(self, state_dir, checkout_root):
|
||||
self.run_as_root(['pkg_add', 'node'])
|
||||
|
@ -279,8 +279,8 @@ certErrorTrust_UnknownIssuer=The certificate is not trusted because the issuer c
|
||||
certErrorTrust_UnknownIssuer2=The server might not be sending the appropriate intermediate certificates.
|
||||
certErrorTrust_UnknownIssuer3=An additional root certificate may need to be imported.
|
||||
certErrorTrust_UnknownIssuer4=Someone could be trying to impersonate the site and you should not continue.
|
||||
# LOCALIZATION NOTE (certErrorTrust_UnknownIssuer5): %1$S is replaced by the brand name, %2$S is replaced by host name.
|
||||
certErrorTrust_UnknownIssuer5=Websites prove their identity via security certificates. %1$S does not trust %2$S because its security certificate issuer is unknown, the certificate is self-signed, or the server is not sending the correct intermediate certificates.
|
||||
# LOCALIZATION NOTE (certErrorTrust_UnknownIssuer6): %1$S is replaced by the brand name, %2$S is replaced by host name.
|
||||
certErrorTrust_UnknownIssuer6=Websites prove their identity via certificates. %1$S does not trust %2$S because its certificate issuer is unknown, the certificate is self-signed, or the server is not sending the correct intermediate certificates.
|
||||
certErrorTrust_CaInvalid=The certificate is not trusted because it was issued by an invalid CA certificate.
|
||||
certErrorTrust_Issuer=The certificate is not trusted because the issuer certificate is not trusted.
|
||||
certErrorTrust_SignatureAlgorithmDisabled=The certificate is not trusted because it was signed using a signature algorithm that was disabled because that algorithm is not secure.
|
||||
@ -291,22 +291,22 @@ certErrorTrust_MitM=Your connection is being intercepted by a TLS proxy. Uninsta
|
||||
certErrorTrust_Symantec=The security certificate for %S is not trustworthy because the issuing organization failed to follow security practices. Certificates issued by Symantec, including the Thawte, GeoTrust, and RapidSSL brands, are not considered safe.
|
||||
|
||||
certErrorMismatch=The certificate is not valid for the name %S.
|
||||
# LOCALIZATION NOTE (certErrorMismatch1, certErrorMismatchSinglePrefix1, certErrorMismatchMultiple1): %1$S is replaced by the brand name, %2$S is replaced by host name.
|
||||
certErrorMismatch1=Websites prove their identity via security certificates. %1$S does not trust %2$S because it uses a security certificate that is not valid for %2$S.
|
||||
# LOCALIZATION NOTE (certErrorMismatch2, certErrorMismatchSinglePrefix2, certErrorMismatchMultiple2): %1$S is replaced by the brand name, %2$S is replaced by host name.
|
||||
certErrorMismatch2=Websites prove their identity via certificates. %1$S does not trust %2$S because it uses a certificate that is not valid for %2$S.
|
||||
# LOCALIZATION NOTE (certErrorMismatchSinglePrefix): %S is replaced by the domain for which the certificate is valid
|
||||
certErrorMismatchSinglePrefix=The certificate is only valid for %S.
|
||||
# LOCALIZATION NOTE (certErrorMismatchSinglePrefix1): %3$S is replaced by the domain for which the certificate is valid
|
||||
certErrorMismatchSinglePrefix1=Websites prove their identity via security certificates. %1$S does not trust %2$S because it uses a security certificate that is not valid for %2$S.
|
||||
# LOCALIZATION NOTE (certErrorMismatchSinglePrefix2): %3$S is replaced by the domain for which the certificate is valid
|
||||
certErrorMismatchSinglePrefix2=Websites prove their identity via certificates. %1$S does not trust %2$S because it uses a certificate that is not valid for %2$S.
|
||||
certErrorMismatchMultiple=The certificate is only valid for the following names:
|
||||
certErrorMismatchMultiple1=Websites prove their identity via security certificates. %1$S does not trust %2$S because it uses a security certificate that is not valid for %2$S. The certificate is only valid for the following names:
|
||||
certErrorMismatchMultiple2=Websites prove their identity via certificates. %1$S does not trust %2$S because it uses a certificate that is not valid for %2$S. The certificate is only valid for the following names:
|
||||
|
||||
# LOCALIZATION NOTE (certErrorExpiredNow): Do not translate %1$S (date+time of expired certificate) or %2$S (current date+time)
|
||||
certErrorExpiredNow=The certificate expired on %1$S. The current time is %2$S.
|
||||
certErrorExpiredNow1=Websites prove their identity via security certificates, which are valid for a set time period. The security certificate for %S appears to be expired.
|
||||
certErrorExpiredNow2=Websites prove their identity via certificates, which are valid for a set time period. The certificate for %S appears to be expired.
|
||||
|
||||
# LOCALIZATION NOTE (certErrorNotYetValidNow): Do not translate %1$S (date+time certificate will become valid) or %2$S (current date+time)
|
||||
certErrorNotYetValidNow=The certificate will not be valid until %1$S. The current time is %2$S.
|
||||
certErrorNotYetValidNow1=Websites prove their identity via security certificates, which are valid for a set time period. The security certificate for %S appears to be not yet valid.
|
||||
certErrorNotYetValidNow2=Websites prove their identity via certificates, which are valid for a set time period. The certificate for %S appears to be not yet valid.
|
||||
|
||||
# LOCALIZATION NOTE (certErrorSymantecDistrustDescription): %S will be replaced by the domain for which the certificate is valid.
|
||||
certErrorSymantecDistrustDescription=Websites prove their identity via certificates, which are issued by certificate authorities. Most browsers will no longer trust Symantec, the certificate authority for %S.
|
||||
|
@ -60,40 +60,6 @@ linux64-plain/opt:
|
||||
- linux64-node
|
||||
- linux64-cbindgen
|
||||
|
||||
linux64-dmd/opt:
|
||||
description: "Linux64 DMD Opt"
|
||||
index:
|
||||
product: firefox
|
||||
job-name: linux64-dmd-opt
|
||||
treeherder:
|
||||
platform: linux64-dmd/opt
|
||||
symbol: Bdmd
|
||||
tier: 2
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-linux
|
||||
worker:
|
||||
max-run-time: 3600
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets build check-test]
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/releng_base_linux_64_builds.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
extra-config:
|
||||
mozconfig_variant: 'opt-dmd'
|
||||
secrets: true
|
||||
tooltool-downloads: public
|
||||
need-xvfb: true
|
||||
run-on-projects: []
|
||||
toolchains:
|
||||
- linux64-binutils
|
||||
- linux64-clang
|
||||
- linux64-rust
|
||||
- linux64-rust-size
|
||||
- linux64-cbindgen
|
||||
- linux64-sccache
|
||||
- linux64-node
|
||||
|
||||
linux64/pgo:
|
||||
description: "Linux64 PGO"
|
||||
index:
|
||||
|
@ -109,44 +109,6 @@ macosx64-asan-fuzzing/opt:
|
||||
- linux64-sccache
|
||||
- linux64-node
|
||||
|
||||
macosx64-dmd/opt:
|
||||
description: "MacOS X x64 DMD Cross-compile"
|
||||
index:
|
||||
product: firefox
|
||||
job-name: macosx64-dmd-opt
|
||||
treeherder:
|
||||
platform: osx-10-10-dmd/opt
|
||||
symbol: Bdmd
|
||||
tier: 2
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-linux
|
||||
worker:
|
||||
max-run-time: 3600
|
||||
env:
|
||||
TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest"
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets build]
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/releng_base_mac_64_cross_builds.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
extra-config:
|
||||
mozconfig_variant: 'opt-dmd'
|
||||
secrets: true
|
||||
tooltool-downloads: internal
|
||||
run-on-projects: []
|
||||
toolchains:
|
||||
- linux64-cctools-port
|
||||
- linux64-clang
|
||||
- linux64-hfsplus
|
||||
- linux64-libdmg
|
||||
- linux64-llvm-dsymutil
|
||||
- linux64-rust-macos
|
||||
- linux64-rust-size
|
||||
- linux64-cbindgen
|
||||
- linux64-sccache
|
||||
- linux64-node
|
||||
|
||||
macosx64-devedition-nightly/opt:
|
||||
description: "MacOS X Dev Edition x64 Nightly"
|
||||
attributes:
|
||||
|
@ -70,40 +70,6 @@ win32/opt:
|
||||
- win64-sccache
|
||||
- win64-node
|
||||
|
||||
win32-dmd/opt:
|
||||
description: "Win32 DMD Opt"
|
||||
index:
|
||||
product: firefox
|
||||
job-name: win32-dmd-opt
|
||||
treeherder:
|
||||
platform: windows2012-32-dmd/opt
|
||||
symbol: Bdmd
|
||||
tier: 2
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
|
||||
worker:
|
||||
max-run-time: 7200
|
||||
env:
|
||||
TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win32/releng.manifest"
|
||||
run:
|
||||
using: mozharness
|
||||
options: [append-env-variables-from-configs]
|
||||
script: mozharness/scripts/fx_desktop_build.py
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/taskcluster_base_windows.py
|
||||
- builds/taskcluster_base_win32.py
|
||||
- builds/taskcluster_sub_win32/opt.py
|
||||
extra-config:
|
||||
mozconfig_variant: 'opt-dmd'
|
||||
run-on-projects: []
|
||||
toolchains:
|
||||
- win64-clang-cl
|
||||
- win64-rust
|
||||
- win64-rust-size
|
||||
- win64-cbindgen
|
||||
- win64-sccache
|
||||
- win64-node
|
||||
|
||||
win32/pgo:
|
||||
description: "Win32 Opt PGO"
|
||||
index:
|
||||
@ -265,40 +231,6 @@ win64-plain/opt:
|
||||
- win64-node
|
||||
- win64-cbindgen
|
||||
|
||||
win64-dmd/opt:
|
||||
description: "Win64 DMD Opt"
|
||||
index:
|
||||
product: firefox
|
||||
job-name: win64-dmd-opt
|
||||
treeherder:
|
||||
platform: windows2012-64-dmd/opt
|
||||
symbol: Bdmd
|
||||
tier: 2
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
|
||||
worker:
|
||||
max-run-time: 7200
|
||||
env:
|
||||
TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win64/releng.manifest"
|
||||
run:
|
||||
using: mozharness
|
||||
options: [append-env-variables-from-configs]
|
||||
script: mozharness/scripts/fx_desktop_build.py
|
||||
config:
|
||||
- builds/releng_base_firefox.py
|
||||
- builds/taskcluster_base_windows.py
|
||||
- builds/taskcluster_base_win64.py
|
||||
- builds/taskcluster_sub_win64/opt.py
|
||||
extra-config:
|
||||
mozconfig_variant: 'opt-dmd'
|
||||
run-on-projects: []
|
||||
toolchains:
|
||||
- win64-clang-cl
|
||||
- win64-rust
|
||||
- win64-rust-size
|
||||
- win64-cbindgen
|
||||
- win64-sccache
|
||||
- win64-node
|
||||
|
||||
win32-nightly/opt:
|
||||
description: "Win32 Nightly"
|
||||
index:
|
||||
|
@ -48,8 +48,8 @@ jobs:
|
||||
- builds/taskcluster_base_win32.py
|
||||
- builds/taskcluster_sub_win32/clang_debug.py
|
||||
toolchains:
|
||||
- win64-clang-cl-st-an
|
||||
- win64-rust
|
||||
- win32-clang-cl-st-an
|
||||
- win32-rust
|
||||
- win64-cbindgen
|
||||
- win64-sccache
|
||||
- win64-node
|
||||
@ -79,8 +79,8 @@ jobs:
|
||||
- builds/taskcluster_base_win32.py
|
||||
- builds/taskcluster_sub_win32/clang.py
|
||||
toolchains:
|
||||
- win64-clang-cl-st-an
|
||||
- win64-rust
|
||||
- win32-clang-cl-st-an
|
||||
- win32-rust
|
||||
- win64-cbindgen
|
||||
- win64-sccache
|
||||
- win64-node
|
||||
|
@ -26,6 +26,14 @@ awsy:
|
||||
.*-devedition/.*: [] # don't run on devedition
|
||||
default: built-projects
|
||||
|
||||
awsy-dmd:
|
||||
description: "Are we slim yet - dmd enabled"
|
||||
treeherder-symbol: SY(sy-d)
|
||||
run-on-projects: ['try']
|
||||
mozharness:
|
||||
extra-options:
|
||||
- --dmd
|
||||
|
||||
awsy-base:
|
||||
description: "Are we slim yet - about:blank base case"
|
||||
treeherder-symbol: SY(ab)
|
||||
@ -37,6 +45,15 @@ awsy-base:
|
||||
extra-options:
|
||||
- --base
|
||||
|
||||
awsy-base-dmd:
|
||||
description: "Are we slim yet - about:blank base case - dmd enabled"
|
||||
treeherder-symbol: SY(ab-d)
|
||||
run-on-projects: ['try']
|
||||
mozharness:
|
||||
extra-options:
|
||||
- --base
|
||||
- --dmd
|
||||
|
||||
awsy-stylo-sequential:
|
||||
description: "Are we slim yet for Stylo sequential"
|
||||
treeherder-symbol: SYss(sy)
|
||||
|
@ -119,6 +119,8 @@ raptor-fetch-chrome:
|
||||
awsy:
|
||||
- awsy
|
||||
- awsy-base
|
||||
- awsy-dmd
|
||||
- awsy-base-dmd
|
||||
|
||||
awsy-stylo-sequential:
|
||||
- awsy-stylo-sequential
|
||||
|
@ -23,6 +23,27 @@ win64-clang-cl:
|
||||
- 'taskcluster/scripts/misc/build-clang-windows-helper64.sh'
|
||||
toolchain-artifact: public/build/clang.tar.bz2
|
||||
|
||||
win32-clang-cl-st-an:
|
||||
description: "Clang-cl static analysis toolchain build"
|
||||
treeherder:
|
||||
kind: build
|
||||
platform: toolchains/opt
|
||||
symbol: TW32(clang-cl-st-an)
|
||||
tier: 1
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
|
||||
worker:
|
||||
max-run-time: 7200
|
||||
env:
|
||||
TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win32/build-clang-cl.manifest"
|
||||
run:
|
||||
using: toolchain-script
|
||||
script: build-clang32-st-an-windows.sh
|
||||
resources:
|
||||
- 'build/build-clang/build-clang.py'
|
||||
- 'build/build-clang/clang-win32-st-an.json'
|
||||
- 'taskcluster/scripts/misc/build-clang-windows-helper32.sh'
|
||||
toolchain-artifact: public/build/clang.tar.bz2
|
||||
|
||||
win64-clang-cl-st-an:
|
||||
description: "Clang-cl static analysis toolchain build"
|
||||
treeherder:
|
||||
@ -188,6 +209,30 @@ win64-node:
|
||||
arguments: ['win64']
|
||||
toolchain-artifact: public/build/node.tar.bz2
|
||||
|
||||
win32-rust-1.29:
|
||||
description: "rust repack"
|
||||
treeherder:
|
||||
kind: build
|
||||
platform: toolchains/opt
|
||||
symbol: TW32(rust)
|
||||
tier: 1
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-linux
|
||||
worker:
|
||||
docker-image: {in-tree: toolchain-build}
|
||||
max-run-time: 7200
|
||||
env:
|
||||
UPLOAD_DIR: artifacts
|
||||
run:
|
||||
using: toolchain-script
|
||||
script: repack_rust.py
|
||||
arguments: [
|
||||
'--channel', '1.29.0',
|
||||
'--host', 'i686-pc-windows-msvc',
|
||||
'--target', 'i686-pc-windows-msvc',
|
||||
]
|
||||
toolchain-alias: win32-rust
|
||||
toolchain-artifact: public/build/rustc.tar.bz2
|
||||
|
||||
mingw32-rust-1.29:
|
||||
description: "rust repack"
|
||||
treeherder:
|
||||
|
3
taskcluster/scripts/misc/build-clang32-st-an-windows.sh
Executable file
3
taskcluster/scripts/misc/build-clang32-st-an-windows.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
source build/src/taskcluster/scripts/misc/build-clang-windows-helper32.sh clang-win32-st-an.json
|
@ -553,16 +553,6 @@ def target_tasks_nightly_desktop(full_task_graph, parameters, graph_config):
|
||||
)
|
||||
|
||||
|
||||
# Opt DMD builds should only run nightly
|
||||
@_target_task('nightly_dmd')
|
||||
def target_tasks_dmd(full_task_graph, parameters, graph_config):
|
||||
"""Target DMD that run nightly on the m-c branch."""
|
||||
def filter(task):
|
||||
platform = task.attributes.get('build_platform', '')
|
||||
return platform.endswith('-dmd')
|
||||
return [l for l, t in full_task_graph.tasks.iteritems() if filter(t)]
|
||||
|
||||
|
||||
# Run Searchfox analysis once daily.
|
||||
@_target_task('searchfox_index')
|
||||
def target_tasks_searchfox(full_task_graph, parameters, graph_config):
|
||||
|
@ -394,7 +394,6 @@ class BuildOptionParser(object):
|
||||
'artifact': 'builds/releng_sub_%s_configs/%s_artifact.py',
|
||||
'debug-artifact': 'builds/releng_sub_%s_configs/%s_debug_artifact.py',
|
||||
'devedition': 'builds/releng_sub_%s_configs/%s_devedition.py',
|
||||
'dmd': 'builds/releng_sub_%s_configs/%s_dmd.py',
|
||||
'tup': 'builds/releng_sub_%s_configs/%s_tup.py',
|
||||
}
|
||||
build_pool_cfg_file = 'builds/build_pool_specifics.py'
|
||||
|
@ -56,6 +56,12 @@ class AWSY(TestingMixin, MercurialScript, TooltoolMixin, CodeCoverageMixin):
|
||||
"dest": "test_about_blank",
|
||||
"default": False,
|
||||
"help": "Runs the about:blank base case memory test.",
|
||||
}],
|
||||
[["--dmd"],
|
||||
{"action": "store_true",
|
||||
"dest": "dmd",
|
||||
"default": False,
|
||||
"help": "Runs tests with DMD enabled.",
|
||||
}]
|
||||
] + testing_config_options + copy.deepcopy(code_coverage_config_options)
|
||||
|
||||
@ -162,7 +168,7 @@ class AWSY(TestingMixin, MercurialScript, TooltoolMixin, CodeCoverageMixin):
|
||||
dmd_py_lib_dir = os.path.join(dmd_py_lib_dir, "../Resources/")
|
||||
|
||||
dmd_path = os.path.join(dmd_py_lib_dir, "dmd.py")
|
||||
if os.path.isfile(dmd_path):
|
||||
if self.config['dmd'] and os.path.isfile(dmd_path):
|
||||
dmd_enabled = True
|
||||
runtime_testvars['dmd'] = True
|
||||
|
||||
|
@ -26,3 +26,9 @@
|
||||
[Using Background Fetch to fetch a non-existent resource should fail.]
|
||||
expected: FAIL
|
||||
|
||||
[Empty URL is OK.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetches with mixed content should fail.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -0,0 +1,14 @@
|
||||
[only-valid-whitespaces-are-allowed.html]
|
||||
expected: TIMEOUT
|
||||
[U+00A0 NBSP should not be parsed between directive name and value - HTTP header]
|
||||
expected: TIMEOUT
|
||||
|
||||
[U+00A0 NBSP should not be parsed inside directive value - meta tag]
|
||||
expected: TIMEOUT
|
||||
|
||||
[U+00A0 NBSP should not be parsed between directive name and value - meta tag]
|
||||
expected: TIMEOUT
|
||||
|
||||
[U+00A0 NBSP should not be parsed inside directive value - HTTP header]
|
||||
expected: TIMEOUT
|
||||
|
@ -0,0 +1,2 @@
|
||||
[contain-layout-button-001.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[contain-layout-flexbox-001.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[contain-layout-grid-001.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[contain-size-button-001.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[contain-size-flexbox-001.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[contain-size-grid-001.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[mask-text-001.svg]
|
||||
expected: FAIL
|
@ -1,2 +1,4 @@
|
||||
[object-position-svg-002o.html]
|
||||
expected: FAIL
|
||||
expected:
|
||||
if not debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): PASS
|
||||
FAIL
|
||||
|
@ -1,5 +0,0 @@
|
||||
[format-field-id-2.htm]
|
||||
expected: TIMEOUT
|
||||
[EventSource: Last-Event-ID (2)]
|
||||
expected: TIMEOUT
|
||||
|
@ -1,5 +0,0 @@
|
||||
[format-field-id.htm]
|
||||
expected: TIMEOUT
|
||||
[EventSource: Last-Event-ID]
|
||||
expected: TIMEOUT
|
||||
|
@ -1,8 +0,0 @@
|
||||
[header-values.html]
|
||||
expected: TIMEOUT
|
||||
[XMLHttpRequest with all valid values]
|
||||
expected: TIMEOUT
|
||||
|
||||
[fetch() with all valid values]
|
||||
expected: TIMEOUT
|
||||
|
@ -0,0 +1,7 @@
|
||||
[iframe-nosrc.html]
|
||||
[load event of iframe should not be fired after processing the element]
|
||||
expected: FAIL
|
||||
|
||||
[iframe.contentDocument should not be changed]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,7 @@
|
||||
[intrinsic_sizes.htm]
|
||||
[default object size after src is removed]
|
||||
expected: FAIL
|
||||
|
||||
[default object size after poster is removed]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,4 @@
|
||||
[bounding-box.html]
|
||||
[target.style.zoom = 2]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,6 @@
|
||||
[target-in-different-window.html]
|
||||
[IntersectionObserver with target in a different window.]
|
||||
expected:
|
||||
if debug and not webrender and not e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): PASS
|
||||
FAIL
|
||||
|
@ -1,2 +1,2 @@
|
||||
local: 136bf6adaec23a93d578837f0d3e1ba3f8510077
|
||||
upstream: 16c953fc379c1409856b7c70efa4adb79e4be4b1
|
||||
local: 32b6721da0406d86ab171e45b924b17750375e1e
|
||||
upstream: ec2304907681c938015c21e79a8a8fa0ff01ecb9
|
||||
|
@ -0,0 +1,10 @@
|
||||
[ondeviceorientationabsolute.html]
|
||||
[Provide an event handler IDL attribute named ondeviceorientationabsolute]
|
||||
expected: FAIL
|
||||
|
||||
[The absolute property must be set to true.]
|
||||
expected: FAIL
|
||||
|
||||
[The type of this event handler must be 'DeviceOrientationEvent']
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,13 @@
|
||||
[payment-request-ctor-pmi-handling.https.html]
|
||||
[Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported]
|
||||
expected: FAIL
|
||||
|
||||
[Must support valid standard URL PMIs]
|
||||
expected: FAIL
|
||||
|
||||
[Must throw on syntactically invalid standardized payment method identifiers]
|
||||
expected: FAIL
|
||||
|
||||
[Constructor MUST throw if given an invalid URL-based payment method identifier]
|
||||
expected: FAIL
|
||||
|
@ -1 +1,2 @@
|
||||
prefs: [dom.serviceWorkers.enabled: true, dom.serviceWorkers.exemptFromPerDomainMax:true, dom.caches.enabled:true]
|
||||
lsan-allowed: [Alloc, CompareNetwork, Create, CreateInner, EntrySlotOrCreate, MakeUnique, NewChannelFromURIWithProxyFlagsInternal, NewPage, PLDHashTable::Add, Realloc, SharedMutex, mozilla::BasePrincipal::CreateCodebasePrincipal, mozilla::ThrottledEventQueue::Create, mozilla::dom::PerformanceStorageWorker::Create, mozilla::dom::WorkerCSPEventListener::Create, mozilla::dom::WorkerPrivate::WorkerPrivate, mozilla::dom::serviceWorkerScriptCache::, mozilla::net::HttpBaseChannel::HttpBaseChannel, mozilla::net::HttpChannelChild::HttpChannelChild, mozilla::net::nsHttpHandler::NewProxiedChannel2, nsTimer::nsTimer]
|
||||
|
@ -1,2 +1,2 @@
|
||||
prefs: [dom.serviceWorkers.enabled:true]
|
||||
lsan-allowed: [Alloc, Create, CreateInner, MakeUnique, Malloc, NewChannelFromURIWithProxyFlagsInternal, NewEmptyScopeData, NewPage, OrInsert, PLDHashTable::Add, Realloc, SharedMutex, __rdl_alloc, __rdl_realloc, js_new, js_pod_calloc, js_pod_malloc, js_pod_realloc, mozilla::BasePrincipal::CreateCodebasePrincipal, mozilla::ThrottledEventQueue::Create, mozilla::WeakPtr, mozilla::dom::ChromeUtils::GenerateQI, mozilla::dom::Performance::CreateForMainThread, mozilla::dom::PerformanceStorageWorker::Create, mozilla::dom::WorkerPrivate::WorkerPrivate, mozilla::net::HttpBaseChannel::HttpBaseChannel, mozilla::net::HttpChannelChild::HttpChannelChild, mozilla::net::nsHttpHandler::NewProxiedChannel2, nsNodeSupportsWeakRefTearoff::GetWeakReference, nsPrefetchService::Preload, nsSegmentedBuffer::AppendNewSegment]
|
||||
lsan-allowed: [Alloc, Create, CreateInner, MakeUnique, Malloc, NewChannelFromURIWithProxyFlagsInternal, NewEmptyScopeData, NewPage, OrInsert, PLDHashTable::Add, Realloc, SharedMutex, __rdl_alloc, __rdl_realloc, js_new, js_pod_calloc, js_pod_malloc, js_pod_realloc, mozilla::BasePrincipal::CreateCodebasePrincipal, mozilla::ThrottledEventQueue::Create, mozilla::WeakPtr, mozilla::dom::ChromeUtils::GenerateQI, mozilla::dom::Performance::CreateForMainThread, mozilla::dom::PerformanceStorageWorker::Create, mozilla::dom::WorkerPrivate::WorkerPrivate, mozilla::net::HttpBaseChannel::HttpBaseChannel, mozilla::net::HttpChannelChild::HttpChannelChild, mozilla::net::nsHttpAuthIdentity::Set, mozilla::net::nsHttpHandler::NewProxiedChannel2, nsNodeSupportsWeakRefTearoff::GetWeakReference, nsPrefetchService::Preload, nsSegmentedBuffer::AppendNewSegment]
|
||||
|
@ -0,0 +1,22 @@
|
||||
[import-module-scripts.https.html]
|
||||
[Static import and then dynamic import.]
|
||||
expected: FAIL
|
||||
|
||||
[Static import.]
|
||||
expected: FAIL
|
||||
|
||||
[Nested static import.]
|
||||
expected: FAIL
|
||||
|
||||
[Dynamic import.]
|
||||
expected: FAIL
|
||||
|
||||
[eval(import()).]
|
||||
expected: FAIL
|
||||
|
||||
[Dynamic import and then static import.]
|
||||
expected: FAIL
|
||||
|
||||
[Nested dynamic import.]
|
||||
expected: FAIL
|
||||
|
@ -2,3 +2,113 @@
|
||||
[Service Worker: Navigation redirection]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[navigation-redirect.https.html?client]
|
||||
[Redirect to other-origin in-scope with opaque redirect response which is passed through Cache.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fetched redirect to other-origin in-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to same-origin other-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to other-origin and back to same-origin.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to other-origin out-scope with opaque redirect response.]
|
||||
expected: FAIL
|
||||
|
||||
[No location redirect response via Cache.]
|
||||
expected: FAIL
|
||||
|
||||
[Normal redirect to same-origin scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to other-origin in-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[Normal redirect to same-origin scope with different hash fragments.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to same-origin same-scope with opaque redirect response.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to same-origin same-scope with different hash fragments.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to same-origin out-scope with opaque redirect response.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to same-origin other-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to same-origin same-scope with a hash fragment.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to other-origin out-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to same-origin out-scope with different hash fragments.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to same-origin out-scope with opaque redirect response which is passed through Cache.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to same-origin out-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to other-origin out-scope with opaque redirect response which is passed through Cache.]
|
||||
expected: FAIL
|
||||
|
||||
[No location redirect response.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to same-origin out-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[Normal redirect to same-origin scope with a hash fragment.]
|
||||
expected: FAIL
|
||||
|
||||
[Normal redirect to other-origin scope.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to same-origin same-scope with opaque redirect response which is passed through Cache.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to same-origin other-scope with opaque redirect response.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to same-origin same-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to other-origin out-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fallbacked redirect to other-origin in-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fetched redirect to same-origin same-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to other-origin in-scope with opaque redirect response.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to same-origin same-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fetched redirect to same-origin other-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fetched redirect to same-origin out-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-generated redirect to same-origin out-scope with a hash fragment.]
|
||||
expected: FAIL
|
||||
|
||||
[SW-fetched redirect to other-origin out-scope.]
|
||||
expected: FAIL
|
||||
|
||||
[Redirect to same-origin other-scope with opaque redirect response which is passed through Cache.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
[SpeechSynthesisErrorEvent-constructor.html]
|
||||
[SpeechSynthesisErrorEvent with eventInitDict having utterance and error]
|
||||
expected: FAIL
|
||||
|
@ -0,0 +1,4 @@
|
||||
[SpeechSynthesisUtterance-basics.https.html]
|
||||
[new SpeechSynthesisUtterance(undefined)]
|
||||
expected: FAIL
|
||||
|
@ -119,9 +119,6 @@
|
||||
[SpeechRecognitionResultList interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[SpeechSynthesisErrorEvent interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[SpeechRecognitionResult interface object name]
|
||||
expected: FAIL
|
||||
|
||||
@ -155,9 +152,6 @@
|
||||
[SpeechRecognition interface: new SpeechRecognition() must inherit property "start()" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[SpeechSynthesisEvent interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[SpeechRecognitionEvent interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -17,3 +17,33 @@
|
||||
[stop() changes state to 'closed'.]
|
||||
expected: FAIL
|
||||
|
||||
[start() with a non-started RTCIceTransport does not change state.]
|
||||
expected: FAIL
|
||||
|
||||
[RTCIceTransport.stop() changes RTCQuicTransport.state to 'closed'.]
|
||||
expected: FAIL
|
||||
|
||||
[start() throws if called after the RTCIceTransport has stopped.]
|
||||
expected: FAIL
|
||||
|
||||
[Two RTCQuicTransports connect to each other.]
|
||||
expected: FAIL
|
||||
|
||||
[start() throws if called after stop().]
|
||||
expected: FAIL
|
||||
|
||||
[start() throws if called twice.]
|
||||
expected: FAIL
|
||||
|
||||
[RTCQuicTransport constructor throws if passed an RTCIceTransport that already has an active RTCQuicTransport.]
|
||||
expected: FAIL
|
||||
|
||||
[start() with a started RTCIceTransport changes state to 'connecting'.]
|
||||
expected: FAIL
|
||||
|
||||
[start() with a non-started RTCIceTransport later changes state to 'connecting' once the RTCIceTransport.start() is called.]
|
||||
expected: FAIL
|
||||
|
||||
[stop() fires a statechange event to 'closed' on the remote transport]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -0,0 +1,2 @@
|
||||
[align_center_position_gt_50.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[align_center_position_lt_50.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[align_center_position_lt_50_size_gt_maximum_size.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[align_center_wrapped.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[align_middle_position_gt_50.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[align_middle_position_lt_50.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[align_middle_position_lt_50_size_gt_maximum_size.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[align_middle_wrapped.html]
|
||||
expected: FAIL
|
@ -0,0 +1,2 @@
|
||||
[basic.html]
|
||||
expected: TIMEOUT
|
@ -0,0 +1,2 @@
|
||||
[regionanchor_x_50_percent.html]
|
||||
expected: TIMEOUT
|
@ -0,0 +1,2 @@
|
||||
[regionanchor_y_50_percent.html]
|
||||
expected: TIMEOUT
|
@ -0,0 +1,2 @@
|
||||
[scroll_up.html]
|
||||
expected: TIMEOUT
|
@ -0,0 +1,2 @@
|
||||
[single_line_top_left.html]
|
||||
expected: TIMEOUT
|
@ -0,0 +1,2 @@
|
||||
[viewportanchor_x_50_percent.html]
|
||||
expected: TIMEOUT
|
@ -0,0 +1,2 @@
|
||||
[viewportanchor_y_50_percent.html]
|
||||
expected: TIMEOUT
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user