Merge mozilla-central to autoland. a=merge CLOSED TREE

This commit is contained in:
Noemi Erli 2018-10-09 07:05:46 +03:00
commit 912f6233fd
263 changed files with 4256 additions and 1118 deletions

View File

@ -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 {

View File

@ -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);

View File

@ -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

View File

@ -1,3 +0,0 @@
ac_add_options --enable-dmd
. "$topsrcdir/browser/config/mozconfigs/linux32/nightly"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,3 +0,0 @@
ac_add_options --enable-dmd
. "$topsrcdir/browser/config/mozconfigs/linux64/nightly"

View File

@ -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

View File

@ -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

View File

@ -1,5 +0,0 @@
ac_add_options --enable-dmd
. "$topsrcdir/browser/config/mozconfigs/macosx64/nightly"
ac_add_options --disable-lto

View File

@ -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',
]

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -1,3 +0,0 @@
ac_add_options --enable-dmd
. "$topsrcdir/browser/config/mozconfigs/win32/nightly"

View File

@ -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

View File

@ -1,3 +0,0 @@
ac_add_options --enable-dmd
. "$topsrcdir/browser/config/mozconfigs/win64/nightly"

View 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"
]
}

View 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

View File

@ -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

View File

@ -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))

View File

@ -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
)
);
}

View File

@ -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;

View File

@ -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]

View File

@ -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;

View File

@ -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;

View File

@ -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.");
});

View File

@ -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();

View File

@ -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;

View File

@ -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);

View File

@ -4,3 +4,4 @@
toolkit.jar:
content/global/netError.xhtml
content/global/netError.js

View 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();

View File

@ -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>

View File

@ -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.

View File

@ -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)
{

View File

@ -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

View File

@ -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

View File

@ -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
}
};
/////////////////////////////////////////////////////////////////////

View File

@ -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());

View File

@ -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

View File

@ -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))

View File

@ -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')

View File

@ -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'])

View File

@ -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.

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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)

View File

@ -119,6 +119,8 @@ raptor-fetch-chrome:
awsy:
- awsy
- awsy-base
- awsy-dmd
- awsy-base-dmd
awsy-stylo-sequential:
- awsy-stylo-sequential

View File

@ -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:

View File

@ -0,0 +1,3 @@
#!/bin/bash
source build/src/taskcluster/scripts/misc/build-clang-windows-helper32.sh clang-win32-st-an.json

View File

@ -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):

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,2 @@
[contain-layout-button-001.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[contain-layout-flexbox-001.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[contain-layout-grid-001.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[contain-size-button-001.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[contain-size-flexbox-001.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[contain-size-grid-001.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[mask-text-001.svg]
expected: FAIL

View File

@ -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

View File

@ -1,5 +0,0 @@
[format-field-id-2.htm]
expected: TIMEOUT
[EventSource: Last-Event-ID (2)]
expected: TIMEOUT

View File

@ -1,5 +0,0 @@
[format-field-id.htm]
expected: TIMEOUT
[EventSource: Last-Event-ID]
expected: TIMEOUT

View File

@ -1,8 +0,0 @@
[header-values.html]
expected: TIMEOUT
[XMLHttpRequest with all valid values]
expected: TIMEOUT
[fetch() with all valid values]
expected: TIMEOUT

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,4 @@
[bounding-box.html]
[target.style.zoom = 2]
expected: FAIL

View File

@ -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

View File

@ -1,2 +1,2 @@
local: 136bf6adaec23a93d578837f0d3e1ba3f8510077
upstream: 16c953fc379c1409856b7c70efa4adb79e4be4b1
local: 32b6721da0406d86ab171e45b924b17750375e1e
upstream: ec2304907681c938015c21e79a8a8fa0ff01ecb9

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,4 @@
[SpeechSynthesisErrorEvent-constructor.html]
[SpeechSynthesisErrorEvent with eventInitDict having utterance and error]
expected: FAIL

View File

@ -0,0 +1,4 @@
[SpeechSynthesisUtterance-basics.https.html]
[new SpeechSynthesisUtterance(undefined)]
expected: FAIL

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,2 @@
[align_center_position_gt_50.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[align_center_position_lt_50.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[align_center_position_lt_50_size_gt_maximum_size.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[align_center_wrapped.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[align_middle_position_gt_50.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[align_middle_position_lt_50.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[align_middle_position_lt_50_size_gt_maximum_size.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[align_middle_wrapped.html]
expected: FAIL

View File

@ -0,0 +1,2 @@
[basic.html]
expected: TIMEOUT

View File

@ -0,0 +1,2 @@
[regionanchor_x_50_percent.html]
expected: TIMEOUT

View File

@ -0,0 +1,2 @@
[regionanchor_y_50_percent.html]
expected: TIMEOUT

View File

@ -0,0 +1,2 @@
[scroll_up.html]
expected: TIMEOUT

View File

@ -0,0 +1,2 @@
[single_line_top_left.html]
expected: TIMEOUT

View File

@ -0,0 +1,2 @@
[viewportanchor_x_50_percent.html]
expected: TIMEOUT

View File

@ -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