mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 13:25:37 +00:00
Merge inbound to mozilla-central. a=merge
This commit is contained in:
commit
2f509969e9
@ -143,22 +143,29 @@ var tabPreviewPanelHelper = {
|
||||
* Ctrl-Tab panel
|
||||
*/
|
||||
var ctrlTab = {
|
||||
maxTabPreviews: 6,
|
||||
get panel() {
|
||||
delete this.panel;
|
||||
return this.panel = document.getElementById("ctrlTab-panel");
|
||||
},
|
||||
get showAllButton() {
|
||||
delete this.showAllButton;
|
||||
return this.showAllButton = document.getElementById("ctrlTab-showAll");
|
||||
let button = this.makePreview(true);
|
||||
button.setAttribute("id", "ctrlTab-showAll");
|
||||
document.getElementById("ctrlTab-showAll-container").appendChild(button);
|
||||
return this.showAllButton = button;
|
||||
},
|
||||
get previews() {
|
||||
delete this.previews;
|
||||
let previewsContainer = document.getElementById("ctrlTab-previews");
|
||||
for (let i = 0; i < this.maxTabPreviews; i++) {
|
||||
previewsContainer.appendChild(this.makePreview(false));
|
||||
}
|
||||
// Ensure that showAllButton is in the document before returning the single
|
||||
// node list that includes both the previews and the button.
|
||||
this.showAllButton;
|
||||
return this.previews = this.panel.getElementsByClassName("ctrlTab-preview");
|
||||
},
|
||||
get maxTabPreviews() {
|
||||
delete this.maxTabPreviews;
|
||||
return this.maxTabPreviews = this.previews.length - 1;
|
||||
},
|
||||
get canvasWidth() {
|
||||
delete this.canvasWidth;
|
||||
return this.canvasWidth = Math.ceil(screen.availWidth * .85 / this.maxTabPreviews);
|
||||
@ -228,13 +235,65 @@ var ctrlTab = {
|
||||
this.readPref();
|
||||
},
|
||||
|
||||
makePreview: function ctrlTab_makePreview(aIsShowAllButton) {
|
||||
let preview = document.createElement("button");
|
||||
preview.setAttribute("class", "ctrlTab-preview");
|
||||
preview.setAttribute("pack", "center");
|
||||
if (!aIsShowAllButton) {
|
||||
preview.setAttribute("flex", "1");
|
||||
}
|
||||
preview.addEventListener("mouseover", () => this._mouseOverFocus(preview));
|
||||
preview.addEventListener("command", () => this.pick(preview));
|
||||
preview.addEventListener("click", event => {
|
||||
if (event.button == 1) {
|
||||
this.remove(preview);
|
||||
} else if (AppConstants.platform == "macosx" && event.button == 2) {
|
||||
// Control+click is a right click on OS X
|
||||
this.pick(preview);
|
||||
}
|
||||
});
|
||||
|
||||
let previewInner = document.createElement("vbox");
|
||||
previewInner.setAttribute("class", "ctrlTab-preview-inner");
|
||||
preview.appendChild(previewInner);
|
||||
|
||||
if (!aIsShowAllButton) {
|
||||
let canvasWidth = this.canvasWidth;
|
||||
let canvasHeight = this.canvasHeight;
|
||||
|
||||
let canvas = preview._canvas = document.createElement("hbox");
|
||||
canvas.setAttribute("class", "ctrlTab-canvas");
|
||||
canvas.setAttribute("width", canvasWidth);
|
||||
canvas.style.minWidth = canvasWidth + "px";
|
||||
canvas.style.maxWidth = canvasWidth + "px";
|
||||
canvas.style.minHeight = canvasHeight + "px";
|
||||
canvas.style.maxHeight = canvasHeight + "px";
|
||||
previewInner.appendChild(canvas);
|
||||
|
||||
let faviconContainer = document.createElement("hbox");
|
||||
faviconContainer.setAttribute("class", "ctrlTab-favicon-container");
|
||||
previewInner.appendChild(faviconContainer);
|
||||
|
||||
let favicon = preview._favicon = document.createElement("image");
|
||||
favicon.setAttribute("class", "ctrlTab-favicon");
|
||||
faviconContainer.appendChild(favicon);
|
||||
}
|
||||
|
||||
let label = preview._label = document.createElement("label");
|
||||
label.setAttribute("class", "ctrlTab-label plain");
|
||||
label.setAttribute("crop", "end");
|
||||
previewInner.appendChild(label);
|
||||
|
||||
return preview;
|
||||
},
|
||||
|
||||
updatePreviews: function ctrlTab_updatePreviews() {
|
||||
for (let i = 0; i < this.previews.length; i++)
|
||||
this.updatePreview(this.previews[i], this.tabList[i]);
|
||||
|
||||
var showAllLabel = gNavigatorBundle.getString("ctrlTab.listAllTabs.label");
|
||||
this.showAllButton.label =
|
||||
PluralForm.get(this.tabCount, showAllLabel).replace("#1", this.tabCount);
|
||||
this.showAllButton._label.setAttribute("value",
|
||||
PluralForm.get(this.tabCount, showAllLabel).replace("#1", this.tabCount));
|
||||
this.showAllButton.hidden = !allTabs.canOpen;
|
||||
},
|
||||
|
||||
@ -244,30 +303,25 @@ var ctrlTab = {
|
||||
|
||||
aPreview._tab = aTab;
|
||||
|
||||
if (aPreview.firstChild)
|
||||
aPreview.firstChild.remove();
|
||||
if (aPreview._canvas.firstChild) {
|
||||
aPreview._canvas.firstChild.remove();
|
||||
}
|
||||
|
||||
if (aTab) {
|
||||
let canvasWidth = this.canvasWidth;
|
||||
let canvasHeight = this.canvasHeight;
|
||||
aPreview.appendChild(tabPreviews.get(aTab));
|
||||
aPreview.setAttribute("label", aTab.label);
|
||||
aPreview._canvas.appendChild(tabPreviews.get(aTab));
|
||||
aPreview._label.setAttribute("value", aTab.label);
|
||||
aPreview.setAttribute("tooltiptext", aTab.label);
|
||||
aPreview.setAttribute("canvaswidth", canvasWidth);
|
||||
aPreview.setAttribute("canvasstyle",
|
||||
"max-width:" + canvasWidth + "px;" +
|
||||
"min-width:" + canvasWidth + "px;" +
|
||||
"max-height:" + canvasHeight + "px;" +
|
||||
"min-height:" + canvasHeight + "px;");
|
||||
if (aTab.image)
|
||||
aPreview.setAttribute("image", aTab.image);
|
||||
else
|
||||
aPreview.removeAttribute("image");
|
||||
if (aTab.image) {
|
||||
aPreview._favicon.setAttribute("src", aTab.image);
|
||||
} else {
|
||||
aPreview._favicon.removeAttribute("src");
|
||||
}
|
||||
aPreview.hidden = false;
|
||||
} else {
|
||||
aPreview.hidden = true;
|
||||
aPreview.removeAttribute("label");
|
||||
aPreview._label.removeAttribute("value");
|
||||
aPreview.removeAttribute("tooltiptext");
|
||||
aPreview.removeAttribute("image");
|
||||
aPreview._favicon.removeAttribute("src");
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1,35 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
# -*- Mode: HTML -*-
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
<bindings id="tabPreviews"
|
||||
xmlns="http://www.mozilla.org/xbl"
|
||||
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:xbl="http://www.mozilla.org/xbl">
|
||||
<binding id="ctrlTab-preview" extends="chrome://global/content/bindings/button.xml#button-base">
|
||||
<content pack="center">
|
||||
<xul:vbox class="ctrlTab-preview-inner">
|
||||
<xul:hbox class="ctrlTab-canvas" xbl:inherits="style=canvasstyle,width=canvaswidth">
|
||||
<children/>
|
||||
</xul:hbox>
|
||||
<xul:hbox class="ctrlTab-favicon-container" xbl:inherits="hidden=noicon">
|
||||
<xul:image class="ctrlTab-favicon" xbl:inherits="src=image"/>
|
||||
</xul:hbox>
|
||||
<xul:label class="ctrlTab-label plain" xbl:inherits="value=label" crop="end"/>
|
||||
</xul:vbox>
|
||||
</content>
|
||||
|
||||
<handlers>
|
||||
<handler event="mouseover" action="ctrlTab._mouseOverFocus(this);"/>
|
||||
<handler event="command" action="ctrlTab.pick(this);"/>
|
||||
<handler event="click" button="1" action="ctrlTab.remove(this);"/>
|
||||
#ifdef XP_MACOSX
|
||||
# Control+click is a right click on OS X
|
||||
<handler event="click" button="2" action="ctrlTab.pick(this);"/>
|
||||
#endif
|
||||
</handlers>
|
||||
</binding>
|
||||
</bindings>
|
@ -952,7 +952,7 @@ html|*#fullscreen-exit-button {
|
||||
/* ::::: Ctrl-Tab Panel ::::: */
|
||||
|
||||
.ctrlTab-preview {
|
||||
-moz-binding: url("chrome://browser/content/browser-tabPreviews.xml#ctrlTab-preview");
|
||||
-moz-binding: url("chrome://global/content/bindings/button.xml#button-base");
|
||||
}
|
||||
|
||||
|
||||
|
@ -421,17 +421,8 @@
|
||||
#include ../../components/places/content/placesContextMenu.inc.xul
|
||||
|
||||
<panel id="ctrlTab-panel" hidden="true" norestorefocus="true" level="top">
|
||||
<hbox>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
</hbox>
|
||||
<hbox pack="center">
|
||||
<button id="ctrlTab-showAll" class="ctrlTab-preview" noicon="true"/>
|
||||
</hbox>
|
||||
<hbox id="ctrlTab-previews"/>
|
||||
<hbox id="ctrlTab-showAll-container" pack="center"/>
|
||||
</panel>
|
||||
|
||||
<panel id="pageActionPanel"
|
||||
|
@ -143,9 +143,6 @@ with Files("browser-safebrowsing.js"):
|
||||
with Files("browser-sync.js"):
|
||||
BUG_COMPONENT = ("Firefox", "Sync")
|
||||
|
||||
with Files("browser-tabPreviews.xml"):
|
||||
BUG_COMPONENT = ("Firefox", "Tabbed Browser")
|
||||
|
||||
with Files("contentSearch*"):
|
||||
BUG_COMPONENT = ("Firefox", "Search")
|
||||
|
||||
|
@ -72,7 +72,6 @@ browser.jar:
|
||||
content/browser/browser-sidebar.js (content/browser-sidebar.js)
|
||||
content/browser/browser-siteIdentity.js (content/browser-siteIdentity.js)
|
||||
content/browser/browser-sync.js (content/browser-sync.js)
|
||||
* content/browser/browser-tabPreviews.xml (content/browser-tabPreviews.xml)
|
||||
content/browser/browser-tabsintitlebar.js (content/browser-tabsintitlebar.js)
|
||||
content/browser/browser-thumbnails.js (content/browser-thumbnails.js)
|
||||
content/browser/browser-trackingprotection.js (content/browser-trackingprotection.js)
|
||||
|
@ -21,8 +21,8 @@
|
||||
text-shadow: 0 0 1px hsl(0,0%,12%), 0 0 2px hsl(0,0%,12%);
|
||||
}
|
||||
|
||||
.ctrlTab-preview > html|img,
|
||||
.ctrlTab-preview > html|canvas {
|
||||
.ctrlTab-canvas > html|img,
|
||||
.ctrlTab-canvas > html|canvas {
|
||||
min-width: inherit;
|
||||
max-width: inherit;
|
||||
min-height: inherit;
|
||||
@ -46,7 +46,7 @@
|
||||
box-shadow: inset 0 0 0 1px rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
.ctrlTab-preview:not(#ctrlTab-showAll) > .ctrlTab-preview-inner > .ctrlTab-canvas {
|
||||
.ctrlTab-canvas {
|
||||
box-shadow: 1px 1px 2px hsl(0,0%,12%);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
@ -55,7 +55,6 @@ const PORTRAIT_MODE_WIDTH_THRESHOLD = 700;
|
||||
const SIDE_PORTAIT_MODE_WIDTH_THRESHOLD = 1000;
|
||||
|
||||
const SHOW_THREE_PANE_ONBOARDING_PREF = "devtools.inspector.show-three-pane-tooltip";
|
||||
const SHOW_THREE_PANE_TOGGLE_PREF = "devtools.inspector.three-pane-toggle";
|
||||
const THREE_PANE_ENABLED_PREF = "devtools.inspector.three-pane-enabled";
|
||||
const THREE_PANE_ENABLED_SCALAR = "devtools.inspector.three_pane_enabled";
|
||||
|
||||
@ -120,7 +119,6 @@ function Inspector(toolbox) {
|
||||
this.previousURL = this.target.url;
|
||||
|
||||
this.is3PaneModeEnabled = Services.prefs.getBoolPref(THREE_PANE_ENABLED_PREF);
|
||||
this.show3PaneToggle = Services.prefs.getBoolPref(SHOW_THREE_PANE_TOGGLE_PREF);
|
||||
this.show3PaneTooltip = Services.prefs.getBoolPref(SHOW_THREE_PANE_ONBOARDING_PREF);
|
||||
|
||||
this.nodeMenuTriggerInfo = null;
|
||||
@ -776,16 +774,15 @@ Inspector.prototype = {
|
||||
*/
|
||||
async setupSidebar() {
|
||||
let sidebar = this.panelDoc.getElementById("inspector-sidebar");
|
||||
let options = { showAllTabsMenu: true };
|
||||
|
||||
if (this.show3PaneToggle) {
|
||||
options.sidebarToggleButton = {
|
||||
let options = {
|
||||
showAllTabsMenu: true,
|
||||
sidebarToggleButton: {
|
||||
collapsed: !this.is3PaneModeEnabled,
|
||||
collapsePaneTitle: INSPECTOR_L10N.getStr("inspector.hideThreePaneMode"),
|
||||
expandPaneTitle: INSPECTOR_L10N.getStr("inspector.showThreePaneMode"),
|
||||
onClick: this.onSidebarToggle,
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.sidebar = new ToolSidebar(sidebar, this, "inspector", options);
|
||||
|
||||
@ -806,15 +803,6 @@ Inspector.prototype = {
|
||||
|
||||
await this.addRuleView(defaultTab);
|
||||
|
||||
// If the 3 Pane Inspector feature is disabled, use the old order:
|
||||
// Rules, Computed, Layout, etc.
|
||||
if (!this.show3PaneToggle) {
|
||||
this.sidebar.addExistingTab(
|
||||
"computedview",
|
||||
INSPECTOR_L10N.getStr("inspector.sidebar.computedViewTitle"),
|
||||
defaultTab == "computedview");
|
||||
}
|
||||
|
||||
// Inject a lazy loaded react tab by exposing a fake React object
|
||||
// with a lazy defined Tab thanks to `panel` being a function
|
||||
let layoutId = "layoutview";
|
||||
@ -839,14 +827,10 @@ Inspector.prototype = {
|
||||
},
|
||||
defaultTab == layoutId);
|
||||
|
||||
// If the 3 Pane Inspector feature is enabled, use the new order:
|
||||
// Rules, Layout, Computed, etc.
|
||||
if (this.show3PaneToggle) {
|
||||
this.sidebar.addExistingTab(
|
||||
"computedview",
|
||||
INSPECTOR_L10N.getStr("inspector.sidebar.computedViewTitle"),
|
||||
defaultTab == "computedview");
|
||||
}
|
||||
this.sidebar.addExistingTab(
|
||||
"computedview",
|
||||
INSPECTOR_L10N.getStr("inspector.sidebar.computedViewTitle"),
|
||||
defaultTab == "computedview");
|
||||
|
||||
const animationTitle =
|
||||
INSPECTOR_L10N.getStr("inspector.sidebar.animationInspectorTitle");
|
||||
@ -1355,7 +1339,6 @@ Inspector.prototype = {
|
||||
this.resultsLength = null;
|
||||
this.search = null;
|
||||
this.searchBox = null;
|
||||
this.show3PaneToggle = null;
|
||||
this.show3PaneTooltip = null;
|
||||
this.sidebar = null;
|
||||
this.store = null;
|
||||
|
@ -169,6 +169,7 @@ skip-if = (os == "win" && debug) # bug 963492: win.
|
||||
[browser_rules_flexbox-toggle_02.js]
|
||||
[browser_rules_flexbox-toggle_03.js]
|
||||
[browser_rules_flexbox-toggle_04.js]
|
||||
[browser_rules_font-family-parsing.js]
|
||||
[browser_rules_grid-highlighter-on-mutation.js]
|
||||
[browser_rules_grid-highlighter-on-navigate.js]
|
||||
[browser_rules_grid-highlighter-on-reload.js]
|
||||
|
@ -0,0 +1,58 @@
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Tests that the parsed font-family property value shown in the rules
|
||||
// pane is correct.
|
||||
|
||||
const TEST_URI = `
|
||||
<style type="text/css">
|
||||
#id1 {
|
||||
font-family: georgia, arial, sans-serif;
|
||||
}
|
||||
#id2 {
|
||||
font-family: georgia,arial,sans-serif;
|
||||
}
|
||||
#id3 {
|
||||
font-family: georgia ,arial ,sans-serif;
|
||||
}
|
||||
#id4 {
|
||||
font-family: georgia , arial , sans-serif;
|
||||
}
|
||||
#id4 {
|
||||
font-family: arial, georgia, sans-serif ;
|
||||
}
|
||||
#id5 {
|
||||
font-family: helvetica !important;
|
||||
}
|
||||
</style>
|
||||
<div id="id1">1</div>
|
||||
<div id="id2">2</div>
|
||||
<div id="id3">3</div>
|
||||
<div id="id4">4</div>
|
||||
<div id="id5">5</div>
|
||||
`;
|
||||
|
||||
const TESTS = [
|
||||
{selector: "#id1", expectedTextContent: "georgia, arial, sans-serif"},
|
||||
{selector: "#id2", expectedTextContent: "georgia,arial,sans-serif"},
|
||||
{selector: "#id3", expectedTextContent: "georgia ,arial ,sans-serif"},
|
||||
{selector: "#id4", expectedTextContent: "arial, georgia, sans-serif"},
|
||||
{selector: "#id5", expectedTextContent: "helvetica !important"},
|
||||
];
|
||||
|
||||
add_task(async function() {
|
||||
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
let {inspector, view} = await openRuleView();
|
||||
|
||||
for (let {selector, expectedTextContent} of TESTS) {
|
||||
await selectNode(selector, inspector);
|
||||
info("Looking for font-family property value in selector " + selector);
|
||||
|
||||
let prop = getRuleViewProperty(view, selector, "font-family").valueSpan;
|
||||
is(prop.textContent, expectedTextContent,
|
||||
"The font-family property value is correct");
|
||||
}
|
||||
});
|
@ -26,6 +26,12 @@ const TEST_URI = `
|
||||
#id6 {
|
||||
font-family: georgia, arial;
|
||||
}
|
||||
#id7 {
|
||||
font-family: foo, serif !important;
|
||||
}
|
||||
#id8 {
|
||||
font-family: important;
|
||||
}
|
||||
</style>
|
||||
<div id="id1">Text</div>
|
||||
<div id="id2">Text</div>
|
||||
@ -33,6 +39,8 @@ const TEST_URI = `
|
||||
<div id="id4">Text</div>
|
||||
<div id="id5">Text</div>
|
||||
<div id="id6">A Ɋ</div>
|
||||
<div id="id7">Text</div>
|
||||
<div id="id8">Text</div>
|
||||
`;
|
||||
|
||||
// Tests that font-family properties in the rule-view correctly
|
||||
@ -42,7 +50,7 @@ const TEST_URI = `
|
||||
// selector: the rule-view selector to look for font-family in
|
||||
// nb: the number of fonts this property should have
|
||||
// used: the indexes of all the fonts that should be highlighted, or null if none should
|
||||
// be highlighter
|
||||
// be highlighted
|
||||
// }
|
||||
const TESTS = [
|
||||
{selector: "#id1", nb: 3, used: [2]}, // sans-serif
|
||||
@ -50,6 +58,8 @@ const TESTS = [
|
||||
{selector: "#id3", nb: 4, used: [1]}, // monospace
|
||||
{selector: "#id4", nb: 2, used: null},
|
||||
{selector: "#id5", nb: 1, used: [0]}, // monospace
|
||||
{selector: "#id7", nb: 2, used: [1]}, // serif
|
||||
{selector: "#id8", nb: 1, used: null},
|
||||
];
|
||||
|
||||
if (Services.appinfo.OS !== "Linux") {
|
||||
|
@ -52,12 +52,9 @@ pref("devtools.inspector.remote", false);
|
||||
pref("devtools.inspector.show-three-pane-tooltip", true);
|
||||
// Enable the 3 pane mode in the inspector
|
||||
pref("devtools.inspector.three-pane-enabled", true);
|
||||
// Enable the 3 pane mode toggle in the inspector
|
||||
pref("devtools.inspector.three-pane-toggle", true);
|
||||
#else
|
||||
pref("devtools.inspector.show-three-pane-tooltip", false);
|
||||
pref("devtools.inspector.three-pane-enabled", false);
|
||||
pref("devtools.inspector.three-pane-toggle", false);
|
||||
#endif
|
||||
|
||||
// Collapse pseudo-elements by default in the rule-view
|
||||
|
@ -287,6 +287,7 @@ OutputParser.prototype = {
|
||||
let parenDepth = stopAtCloseParen ? 1 : 0;
|
||||
let outerMostFunctionTakesColor = false;
|
||||
let fontFamilyNameParts = [];
|
||||
let previousWasBang = false;
|
||||
|
||||
let colorOK = function() {
|
||||
return options.supportsColor ||
|
||||
@ -388,7 +389,10 @@ OutputParser.prototype = {
|
||||
this._appendColor(token.text, options);
|
||||
} else if (angleOK(token.text)) {
|
||||
this._appendAngle(token.text, options);
|
||||
} else if (options.expectFont) {
|
||||
} else if (options.expectFont && !previousWasBang) {
|
||||
// We don't append the identifier if the previous token
|
||||
// was equal to '!', since in that case we expect the
|
||||
// identifier to be equal to 'important'.
|
||||
fontFamilyNameParts.push(token.text);
|
||||
} else {
|
||||
this._appendTextNode(text.substring(token.startOffset,
|
||||
@ -457,7 +461,7 @@ OutputParser.prototype = {
|
||||
if (parenDepth === 0) {
|
||||
outerMostFunctionTakesColor = false;
|
||||
}
|
||||
} else if (token.text === "," &&
|
||||
} else if ((token.text === "," || token.text === "!") &&
|
||||
options.expectFont && fontFamilyNameParts.length !== 0) {
|
||||
this._appendFontFamily(fontFamilyNameParts.join(""), options);
|
||||
fontFamilyNameParts = [];
|
||||
@ -475,6 +479,7 @@ OutputParser.prototype = {
|
||||
token.tokenType === "id" || token.tokenType === "hash" ||
|
||||
token.tokenType === "number" || token.tokenType === "dimension" ||
|
||||
token.tokenType === "percentage" || token.tokenType === "dimension");
|
||||
previousWasBang = (token.tokenType === "symbol" && token.text === "!");
|
||||
}
|
||||
|
||||
let result = this._toDOM();
|
||||
|
@ -112,12 +112,10 @@ function loadFrameScriptUtils(browser = gBrowser.selectedBrowser) {
|
||||
}
|
||||
|
||||
Services.prefs.setBoolPref("devtools.inspector.three-pane-enabled", true);
|
||||
Services.prefs.setBoolPref("devtools.inspector.three-pane-toggle", true);
|
||||
Services.prefs.setBoolPref("devtools.inspector.show-three-pane-tooltip", false);
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref("devtools.dump.emit");
|
||||
Services.prefs.clearUserPref("devtools.inspector.three-pane-enabled");
|
||||
Services.prefs.clearUserPref("devtools.inspector.three-pane-toggle");
|
||||
Services.prefs.clearUserPref("devtools.inspector.show-three-pane-tooltip");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.host");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.previousHost");
|
||||
|
@ -449,6 +449,20 @@ nsINode::GetComposedDocInternal() const
|
||||
OwnerDoc() : nullptr;
|
||||
}
|
||||
|
||||
DocumentOrShadowRoot*
|
||||
nsINode::GetUncomposedDocOrConnectedShadowRoot()
|
||||
{
|
||||
if (IsInUncomposedDoc()) {
|
||||
return OwnerDoc();
|
||||
}
|
||||
|
||||
if (IsInComposedDoc() && HasFlag(NODE_IS_IN_SHADOW_TREE)) {
|
||||
return AsContent()->GetContainingShadow();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
nsINode::CheckNotNativeAnonymous() const
|
||||
|
@ -76,6 +76,7 @@ struct BoxQuadOptions;
|
||||
struct ConvertCoordinateOptions;
|
||||
class DocGroup;
|
||||
class DocumentFragment;
|
||||
class DocumentOrShadowRoot;
|
||||
class DOMPoint;
|
||||
class DOMQuad;
|
||||
class DOMRectReadOnly;
|
||||
@ -687,6 +688,12 @@ public:
|
||||
return IsInUncomposedDoc() || (IsInShadowTree() && GetComposedDocInternal());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns OwnerDoc() if the node is in uncomposed document and ShadowRoot if
|
||||
* the node is in Shadow DOM and is in composed document.
|
||||
*/
|
||||
mozilla::dom::DocumentOrShadowRoot* GetUncomposedDocOrConnectedShadowRoot();
|
||||
|
||||
/**
|
||||
* The values returned by this function are the ones defined for
|
||||
* nsIDOMNode.nodeType
|
||||
|
@ -53,6 +53,7 @@
|
||||
#include "nsHTMLParts.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "mozilla/dom/DirectionalityUtils.h"
|
||||
#include "mozilla/dom/DocumentOrShadowRoot.h"
|
||||
#include "nsString.h"
|
||||
#include "nsUnicharUtils.h"
|
||||
#include "nsGkAtoms.h"
|
||||
@ -1778,13 +1779,13 @@ nsGenericHTMLFormElement::BindToTree(nsIDocument* aDocument,
|
||||
aDocument->SetAutoFocusElement(this);
|
||||
}
|
||||
|
||||
// If @form is set, the element *has* to be in a document, otherwise it
|
||||
// wouldn't be possible to find an element with the corresponding id.
|
||||
// If @form is set, the element *has* to be in a composed document, otherwise
|
||||
// it wouldn't be possible to find an element with the corresponding id.
|
||||
// If @form isn't set, the element *has* to have a parent, otherwise it
|
||||
// wouldn't be possible to find a form ancestor.
|
||||
// We should not call UpdateFormOwner if none of these conditions are
|
||||
// fulfilled.
|
||||
if (HasAttr(kNameSpaceID_None, nsGkAtoms::form) ? !!GetUncomposedDoc()
|
||||
if (HasAttr(kNameSpaceID_None, nsGkAtoms::form) ? IsInComposedDoc()
|
||||
: !!aParent) {
|
||||
UpdateFormOwner(true, nullptr);
|
||||
}
|
||||
@ -1923,9 +1924,9 @@ nsGenericHTMLFormElement::AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
||||
|
||||
if (aName == nsGkAtoms::form) {
|
||||
// We need a new form id observer.
|
||||
//XXXsmaug How should this work in Shadow DOM?
|
||||
nsIDocument* doc = GetUncomposedDoc();
|
||||
if (doc) {
|
||||
DocumentOrShadowRoot* docOrShadow =
|
||||
GetUncomposedDocOrConnectedShadowRoot();
|
||||
if (docOrShadow) {
|
||||
Element* formIdElement = nullptr;
|
||||
if (aValue && !aValue->IsEmptyString()) {
|
||||
formIdElement = AddFormIdObserver();
|
||||
@ -2126,36 +2127,21 @@ nsGenericHTMLFormElement::FocusState()
|
||||
Element*
|
||||
nsGenericHTMLFormElement::AddFormIdObserver()
|
||||
{
|
||||
NS_ASSERTION(GetUncomposedDoc(), "When adding a form id observer, "
|
||||
"we should be in a document!");
|
||||
|
||||
nsAutoString formId;
|
||||
nsIDocument* doc = OwnerDoc();
|
||||
DocumentOrShadowRoot* docOrShadow = GetUncomposedDocOrConnectedShadowRoot();
|
||||
GetAttr(kNameSpaceID_None, nsGkAtoms::form, formId);
|
||||
NS_ASSERTION(!formId.IsEmpty(),
|
||||
"@form value should not be the empty string!");
|
||||
RefPtr<nsAtom> atom = NS_Atomize(formId);
|
||||
|
||||
return doc->AddIDTargetObserver(atom, FormIdUpdated, this, false);
|
||||
return docOrShadow->AddIDTargetObserver(atom, FormIdUpdated, this, false);
|
||||
}
|
||||
|
||||
void
|
||||
nsGenericHTMLFormElement::RemoveFormIdObserver()
|
||||
{
|
||||
/**
|
||||
* We are using OwnerDoc() because we don't really care about having the
|
||||
* element actually being in the tree. If it is not and @form value changes,
|
||||
* this method will be called for nothing but removing an observer which does
|
||||
* not exist doesn't cost so much (no entry in the hash table) so having a
|
||||
* boolean for GetUncomposedDoc()/GetOwnerDoc() would make everything look
|
||||
* more complex for nothing.
|
||||
*/
|
||||
|
||||
nsIDocument* doc = OwnerDoc();
|
||||
|
||||
// At this point, we may not have a document anymore. In that case, we can't
|
||||
// remove the observer. The document did that for us.
|
||||
if (!doc) {
|
||||
DocumentOrShadowRoot* docOrShadow = GetUncomposedDocOrConnectedShadowRoot();
|
||||
if (!docOrShadow) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2165,7 +2151,7 @@ nsGenericHTMLFormElement::RemoveFormIdObserver()
|
||||
"@form value should not be the empty string!");
|
||||
RefPtr<nsAtom> atom = NS_Atomize(formId);
|
||||
|
||||
doc->RemoveIDTargetObserver(atom, FormIdUpdated, this, false);
|
||||
docOrShadow->RemoveIDTargetObserver(atom, FormIdUpdated, this, false);
|
||||
}
|
||||
|
||||
|
||||
@ -2246,10 +2232,9 @@ nsGenericHTMLFormElement::UpdateFormOwner(bool aBindToTree,
|
||||
element = aFormIdElement;
|
||||
}
|
||||
|
||||
NS_ASSERTION(GetUncomposedDoc(), "The element should be in a document "
|
||||
"when UpdateFormOwner is called!");
|
||||
NS_ASSERTION(!GetUncomposedDoc() ||
|
||||
element == GetUncomposedDoc()->GetElementById(formId),
|
||||
NS_ASSERTION(!IsInComposedDoc() ||
|
||||
element == GetUncomposedDocOrConnectedShadowRoot()->
|
||||
GetElementById(formId),
|
||||
"element should be equals to the current element "
|
||||
"associated with the id in @form!");
|
||||
|
||||
|
@ -61,8 +61,11 @@ interface nsIPaymentDetails : nsISupports
|
||||
readonly attribute nsIArray shippingOptions;
|
||||
readonly attribute nsIArray modifiers;
|
||||
readonly attribute AString error;
|
||||
[implicit_jscontext]
|
||||
readonly attribute jsval shippingAddressErrors;
|
||||
|
||||
void update(in nsIPaymentDetails aDetails, in boolean aRequestShipping);
|
||||
AString shippingAddressErrorsJSON();
|
||||
};
|
||||
|
||||
[scriptable, builtinclass, uuid(d53f9f20-138e-47cc-9fd5-db16a3f6d301)]
|
||||
|
@ -304,13 +304,13 @@ bool InitPreferredSampleRate()
|
||||
if (sPreferredSampleRate != 0) {
|
||||
return true;
|
||||
}
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
sPreferredSampleRate = AndroidGetAudioOutputSampleRate();
|
||||
#else
|
||||
cubeb* context = GetCubebContextUnlocked();
|
||||
if (!context) {
|
||||
return false;
|
||||
}
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
sPreferredSampleRate = AndroidGetAudioOutputSampleRate();
|
||||
#else
|
||||
if (cubeb_get_preferred_sample_rate(context,
|
||||
&sPreferredSampleRate) != CUBEB_OK) {
|
||||
|
||||
|
@ -11,6 +11,9 @@
|
||||
#include "webrtc/modules/video_capture/video_capture.h"
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
#include "mozilla/jni/Utils.h"
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
namespace camera {
|
||||
@ -23,10 +26,11 @@ mozilla::LazyLogModule gVideoEngineLog("VideoEngine");
|
||||
|
||||
int VideoEngine::sId = 0;
|
||||
#if defined(ANDROID)
|
||||
int VideoEngine::SetAndroidObjects(JavaVM* javaVM) {
|
||||
int VideoEngine::SetAndroidObjects() {
|
||||
LOG((__PRETTY_FUNCTION__));
|
||||
|
||||
if (webrtc::SetCaptureAndroidVM(javaVM) != 0) {
|
||||
JavaVM* const javaVM = mozilla::jni::GetVM();
|
||||
if (!javaVM || webrtc::SetCaptureAndroidVM(javaVM) != 0) {
|
||||
LOG(("Could not set capture Android VM"));
|
||||
return -1;
|
||||
}
|
||||
@ -146,6 +150,12 @@ VideoEngine::GetOrCreateVideoCaptureDeviceInfo() {
|
||||
|
||||
switch (mCaptureDevInfo.type) {
|
||||
case webrtc::CaptureDeviceType::Camera: {
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
if (SetAndroidObjects()) {
|
||||
LOG(("VideoEngine::SetAndroidObjects Failed"));
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
mDeviceInfo.reset(webrtc::VideoCaptureFactory::CreateDeviceInfo());
|
||||
LOG(("webrtc::CaptureDeviceType::Camera: Finished creating new device."));
|
||||
break;
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
|
||||
static already_AddRefed<VideoEngine> Create(UniquePtr<const webrtc::Config>&& aConfig);
|
||||
#if defined(ANDROID)
|
||||
static int SetAndroidObjects(JavaVM* javaVM);
|
||||
static int SetAndroidObjects();
|
||||
#endif
|
||||
void CreateVideoCapture(int32_t& id, const char* deviceUniqueIdUTF8);
|
||||
|
||||
|
@ -19,11 +19,6 @@
|
||||
#include "nsITabSource.h"
|
||||
#include "prenv.h"
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
#include "AndroidBridge.h"
|
||||
#include "VideoEngine.h"
|
||||
#endif
|
||||
|
||||
static mozilla::LazyLogModule sGetUserMediaLog("GetUserMedia");
|
||||
#undef LOG
|
||||
#define LOG(args) MOZ_LOG(sGetUserMediaLog, mozilla::LogLevel::Debug, args)
|
||||
@ -136,17 +131,6 @@ MediaEngineWebRTC::EnumerateVideoDevices(uint64_t aWindowId,
|
||||
|
||||
mozilla::camera::CaptureEngine capEngine = mozilla::camera::InvalidEngine;
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
// get the JVM
|
||||
JavaVM* jvm;
|
||||
JNIEnv* const env = jni::GetEnvForThread();
|
||||
MOZ_ALWAYS_TRUE(!env->GetJavaVM(&jvm));
|
||||
|
||||
if (!jvm || mozilla::camera::VideoEngine::SetAndroidObjects(jvm)) {
|
||||
LOG(("VideoEngine::SetAndroidObjects Failed"));
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
bool scaryKind = false; // flag sources with cross-origin exploit potential
|
||||
|
||||
switch (aMediaSource) {
|
||||
|
@ -4,6 +4,7 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "mozilla/dom/PaymentRequestBinding.h"
|
||||
#include "nsArrayUtils.h"
|
||||
#include "nsIMutableArray.h"
|
||||
#include "nsISupportsPrimitives.h"
|
||||
@ -339,13 +340,15 @@ PaymentDetails::PaymentDetails(const nsAString& aId,
|
||||
nsIArray* aDisplayItems,
|
||||
nsIArray* aShippingOptions,
|
||||
nsIArray* aModifiers,
|
||||
const nsAString& aError)
|
||||
const nsAString& aError,
|
||||
const nsAString& aShippingAddressErrors)
|
||||
: mId(aId)
|
||||
, mTotalItem(aTotalItem)
|
||||
, mDisplayItems(aDisplayItems)
|
||||
, mShippingOptions(aShippingOptions)
|
||||
, mModifiers(aModifiers)
|
||||
, mError(aError)
|
||||
, mShippingAddressErrors(aShippingAddressErrors)
|
||||
{
|
||||
}
|
||||
|
||||
@ -417,7 +420,8 @@ PaymentDetails::Create(const IPCPaymentDetails& aIPCDetails,
|
||||
|
||||
nsCOMPtr<nsIPaymentDetails> details =
|
||||
new PaymentDetails(aIPCDetails.id(), total, displayItems, shippingOptions,
|
||||
modifiers, aIPCDetails.error());
|
||||
modifiers, aIPCDetails.error(),
|
||||
aIPCDetails.shippingAddressErrors());
|
||||
|
||||
details.forget(aDetails);
|
||||
return NS_OK;
|
||||
@ -474,6 +478,17 @@ PaymentDetails::GetError(nsAString& aError)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PaymentDetails::GetShippingAddressErrors(JSContext* aCx, JS::MutableHandleValue aErrors)
|
||||
{
|
||||
AddressErrors errors;
|
||||
errors.Init(mShippingAddressErrors);
|
||||
if (!ToJSValue(aCx, errors, aErrors)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
PaymentDetails::Update(nsIPaymentDetails* aDetails, const bool aRequestShipping)
|
||||
{
|
||||
@ -523,9 +538,18 @@ PaymentDetails::Update(nsIPaymentDetails* aDetails, const bool aRequestShipping)
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
aDetails->ShippingAddressErrorsJSON(mShippingAddressErrors);
|
||||
return NS_OK;
|
||||
|
||||
}
|
||||
NS_IMETHODIMP
|
||||
PaymentDetails::ShippingAddressErrorsJSON(nsAString& aErrors)
|
||||
{
|
||||
aErrors = mShippingAddressErrors;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* PaymentOptions */
|
||||
|
||||
NS_IMPL_ISUPPORTS(PaymentOptions,
|
||||
|
@ -137,7 +137,8 @@ private:
|
||||
nsIArray* aDisplayItems,
|
||||
nsIArray* aShippingOptions,
|
||||
nsIArray* aModifiers,
|
||||
const nsAString& aError);
|
||||
const nsAString& aError,
|
||||
const nsAString& aShippingAddressError);
|
||||
|
||||
~PaymentDetails() = default;
|
||||
|
||||
@ -147,6 +148,7 @@ private:
|
||||
nsCOMPtr<nsIArray> mShippingOptions;
|
||||
nsCOMPtr<nsIArray> mModifiers;
|
||||
nsString mError;
|
||||
nsString mShippingAddressErrors;
|
||||
};
|
||||
|
||||
class PaymentOptions final : public nsIPaymentOptions
|
||||
@ -185,7 +187,7 @@ public:
|
||||
nsIArray* aPaymentMethods,
|
||||
nsIPaymentDetails* aPaymentDetails,
|
||||
nsIPaymentOptions* aPaymentOptions,
|
||||
const nsAString& aShippingOption);
|
||||
const nsAString& aShippingOption);
|
||||
|
||||
private:
|
||||
~PaymentRequest() = default;
|
||||
|
@ -178,6 +178,7 @@ ConvertDetailsInit(JSContext* aCx,
|
||||
shippingOptions,
|
||||
modifiers,
|
||||
EmptyString(), // error message
|
||||
EmptyString(), // shippingAddressErrors
|
||||
aDetails.mDisplayItems.WasPassed(),
|
||||
aDetails.mShippingOptions.WasPassed(),
|
||||
aDetails.mModifiers.WasPassed());
|
||||
@ -211,12 +212,18 @@ ConvertDetailsUpdate(JSContext* aCx,
|
||||
error = aDetails.mError.Value();
|
||||
}
|
||||
|
||||
nsString shippingAddressErrors(EmptyString());
|
||||
if (!aDetails.mShippingAddressErrors.ToJSON(shippingAddressErrors)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
aIPCDetails = IPCPaymentDetails(EmptyString(), // id
|
||||
total,
|
||||
displayItems,
|
||||
shippingOptions,
|
||||
modifiers,
|
||||
error,
|
||||
shippingAddressErrors,
|
||||
aDetails.mDisplayItems.WasPassed(),
|
||||
aDetails.mShippingOptions.WasPassed(),
|
||||
aDetails.mModifiers.WasPassed());
|
||||
|
@ -55,6 +55,7 @@ struct IPCPaymentDetails
|
||||
IPCPaymentShippingOption[] shippingOptions;
|
||||
IPCPaymentDetailsModifier[] modifiers;
|
||||
nsString error;
|
||||
nsString shippingAddressErrors;
|
||||
bool displayItemsPassed;
|
||||
bool shippingOptionsPassed;
|
||||
bool modifiersPassed;
|
||||
|
158
dom/payments/test/UpdateErrorsChromeScript.js
Normal file
158
dom/payments/test/UpdateErrorsChromeScript.js
Normal file
@ -0,0 +1,158 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
"use strict";
|
||||
|
||||
const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
const paymentSrv = Cc["@mozilla.org/dom/payments/payment-request-service;1"].getService(Ci.nsIPaymentRequestService);
|
||||
|
||||
function emitTestFail(message) {
|
||||
sendAsyncMessage("test-fail", message);
|
||||
}
|
||||
function emitTestPass(message) {
|
||||
sendAsyncMessage("test-pass", message);
|
||||
}
|
||||
|
||||
const shippingAddress = Cc["@mozilla.org/dom/payments/payment-address;1"].
|
||||
createInstance(Ci.nsIPaymentAddress);
|
||||
const addressLine = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
|
||||
const address = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
|
||||
address.data = "Easton Ave";
|
||||
addressLine.appendElement(address);
|
||||
shippingAddress.init("USA", // country
|
||||
addressLine, // address line
|
||||
"CA", // region
|
||||
"San Bruno", // city
|
||||
"Test locality", // dependent locality
|
||||
"94066", // postal code
|
||||
"123456", // sorting code
|
||||
"en", // language code
|
||||
"Testing Org", // organization
|
||||
"Bill A. Pacheco", // recipient
|
||||
"+1-434-441-3879"); // phone
|
||||
|
||||
function acceptShow(requestId) {
|
||||
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
|
||||
createInstance(Ci.nsIGeneralResponseData);
|
||||
responseData.initData({ paymentToken: "6880281f-0df3-4b8e-916f-66575e2457c1",});
|
||||
let showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
|
||||
createInstance(Ci.nsIPaymentShowActionResponse);
|
||||
showResponse.init(requestId,
|
||||
Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED,
|
||||
"testing-payment-method", // payment method
|
||||
responseData, // payment method data
|
||||
"Bill A. Pacheco", // payer name
|
||||
"", // payer email
|
||||
""); // payer phone
|
||||
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
|
||||
}
|
||||
|
||||
function rejectShow(requestId) {
|
||||
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
|
||||
createInstance(Ci.nsIGeneralResponseData);
|
||||
responseData.initData({});
|
||||
const showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
|
||||
createInstance(Ci.nsIPaymentShowActionResponse);
|
||||
showResponse.init(requestId,
|
||||
Ci.nsIPaymentActionResponse.PAYMENT_REJECTED,
|
||||
"", // payment method
|
||||
responseData, // payment method data
|
||||
"", // payer name
|
||||
"", // payer email
|
||||
""); // payer phone
|
||||
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
|
||||
}
|
||||
|
||||
function updateShow(requestId) {
|
||||
paymentSrv.changeShippingAddress(requestId, shippingAddress);
|
||||
}
|
||||
|
||||
function showRequest(requestId) {
|
||||
updateShow(requestId);
|
||||
}
|
||||
|
||||
function abortRequest(requestId) {
|
||||
let abortResponse = Cc["@mozilla.org/dom/payments/payment-abort-action-response;1"].
|
||||
createInstance(Ci.nsIPaymentAbortActionResponse);
|
||||
abortResponse.init(requestId, Ci.nsIPaymentActionResponse.ABORT_SUCCEEDED);
|
||||
paymentSrv.respondPayment(abortResponse);
|
||||
}
|
||||
|
||||
function completeRequest(requestId) {
|
||||
let payRequest = paymentSrv.getPaymentRequestById(requestId);
|
||||
let completeResponse = Cc["@mozilla.org/dom/payments/payment-complete-action-response;1"].
|
||||
createInstance(Ci.nsIPaymentCompleteActionResponse);
|
||||
completeResponse.init(requestId, Ci.nsIPaymentActionResponse.COMPLETE_SUCCEEDED);
|
||||
paymentSrv.respondPayment(completeResponse.QueryInterface(Ci.nsIPaymentActionResponse));
|
||||
}
|
||||
|
||||
function checkAddressErrors(errors) {
|
||||
if (!errors) {
|
||||
emitTestFail("Expect non-null shippingAddressErrors, but got null.");
|
||||
}
|
||||
if (errors.addressLine != "addressLine error") {
|
||||
emitTestFail("Expect shippingAddressErrors.addressLine as 'addressLine error', but got" +
|
||||
errors.addressLine);
|
||||
}
|
||||
if (errors.city != "city error") {
|
||||
emitTestFail("Expect shippingAddressErrors.city as 'city error', but got" +
|
||||
errors.city);
|
||||
}
|
||||
if (errors.dependentLocality != "dependentLocality error") {
|
||||
emitTestFail("Expect shippingAddressErrors.dependentLocality as 'dependentLocality error', but got" +
|
||||
errors.dependentLocality);
|
||||
}
|
||||
if (errors.languageCode != "languageCode error") {
|
||||
emitTestFail("Expect shippingAddressErrors.languageCode as 'languageCode error', but got" +
|
||||
errors.languageCode);
|
||||
}
|
||||
if (errors.organization != "organization error") {
|
||||
emitTestFail("Expect shippingAddressErrors.organization as 'organization error', but got" +
|
||||
errors.organization);
|
||||
}
|
||||
if (errors.phone != "phone error") {
|
||||
emitTestFail("Expect shippingAddressErrors.phone as 'phone error', but got" +
|
||||
errors.phone);
|
||||
}
|
||||
if (errors.postalCode != "postalCode error") {
|
||||
emitTestFail("Expect shippingAddressErrors.postalCode as 'postalCode error', but got" +
|
||||
errors.postalCode);
|
||||
}
|
||||
if (errors.recipient != "recipient error") {
|
||||
emitTestFail("Expect shippingAddressErrors.recipient as 'recipient error', but got" +
|
||||
errors.recipient);
|
||||
}
|
||||
if (errors.region != "region error") {
|
||||
emitTestFail("Expect shippingAddressErrors.region as 'region error', but got" +
|
||||
errors.region);
|
||||
}
|
||||
if (errors.sortingCode != "sortingCode error") {
|
||||
emitTestFail("Expect shippingAddressErrors.sortingCode as 'sortingCode error', but got" +
|
||||
errors.sortingCode);
|
||||
}
|
||||
}
|
||||
|
||||
function updateRequest(requestId) {
|
||||
let request = paymentSrv.getPaymentRequestById(requestId);
|
||||
const addressErrors = request.paymentDetails.shippingAddressErrors;
|
||||
const payerErrors = request.paymentDetails.payerErrors;
|
||||
checkAddressErrors(addressErrors);
|
||||
rejectShow(requestId);
|
||||
}
|
||||
|
||||
const DummyUIService = {
|
||||
showPayment: showRequest,
|
||||
abortPayment: abortRequest,
|
||||
completePayment: completeRequest,
|
||||
updatePayment: updateRequest,
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIPaymentUIService]),
|
||||
};
|
||||
|
||||
paymentSrv.setTestingUIService(DummyUIService.QueryInterface(Ci.nsIPaymentUIService));
|
||||
|
||||
addMessageListener("teardown", function() {
|
||||
paymentSrv.cleanup();
|
||||
paymentSrv.setTestingUIService(null);
|
||||
sendAsyncMessage('teardown-complete');
|
||||
});
|
@ -11,9 +11,10 @@ support-files =
|
||||
DefaultData.js
|
||||
GeneralChromeScript.js
|
||||
PMIValidationChromeScript.js
|
||||
RequestShippingChromeScript.js
|
||||
ShippingOptionsChromeScript.js
|
||||
ShowPaymentChromeScript.js
|
||||
RequestShippingChromeScript.js
|
||||
UpdateErrorsChromeScript.js
|
||||
|
||||
[test_abortPayment.html]
|
||||
run-if = nightly_build # Bug 1390018: Depends on the Nightly-only UI service
|
||||
@ -29,3 +30,4 @@ run-if = nightly_build # Bug 1390737: Depends on the Nightly-only UI service
|
||||
[test_requestShipping.html]
|
||||
[test_shippingOptions.html]
|
||||
[test_showPayment.html]
|
||||
[test_update_errors.html]
|
||||
|
122
dom/payments/test/test_update_errors.html
Normal file
122
dom/payments/test/test_update_errors.html
Normal file
@ -0,0 +1,122 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1435157
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for Bug 1435157</title>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="DefaultData.js"></script>
|
||||
<script type="application/javascript">
|
||||
|
||||
"use strict";
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var gUrl = SimpleTest.getTestFileURL('UpdateErrorsChromeScript.js');
|
||||
var gScript = SpecialPowers.loadChromeScript(gUrl);
|
||||
|
||||
function testFailHandler(message) {
|
||||
ok(false, message);
|
||||
}
|
||||
function testPassHandler(message) {
|
||||
ok(true, message);
|
||||
}
|
||||
gScript.addMessageListener("test-fail", testFailHandler);
|
||||
gScript.addMessageListener("test-pass", testPassHandler);
|
||||
|
||||
const addressErrors = {
|
||||
addressLine: "addressLine error",
|
||||
city: "city error",
|
||||
country: "country error",
|
||||
dependentLocality: "dependentLocality error",
|
||||
languageCode: "languageCode error",
|
||||
organization: "organization error",
|
||||
phone: "phone error",
|
||||
postalCode: "postalCode error",
|
||||
recipient: "recipient error",
|
||||
region: "region error",
|
||||
regionCode: "regionCode error",
|
||||
sortingCode: "sortingCode error",
|
||||
};
|
||||
|
||||
const payErrors = {
|
||||
email: "email error",
|
||||
name: "name error",
|
||||
phone: "phone error",
|
||||
};
|
||||
|
||||
let updateDetails = {
|
||||
total:{
|
||||
label: "Total",
|
||||
amount: {
|
||||
currency: "USD",
|
||||
value: "1.00",
|
||||
},
|
||||
},
|
||||
erros: "shipping address error",
|
||||
shippingAddressErrors: addressErrors,
|
||||
payerErrors: payErrors,
|
||||
}
|
||||
|
||||
// testing functions
|
||||
function testUpdateErrors() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const payRequest = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
|
||||
payRequest.addEventListener("shippingaddresschange", event => {
|
||||
event.updateWith(updateDetails);
|
||||
});
|
||||
payRequest.addEventListener("shippingoptionchange", event => {
|
||||
event.updateWith(updatedDetails);
|
||||
});
|
||||
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
|
||||
payRequest.show().then(response => {
|
||||
ok(false, "Expected AbortError, but got pass");
|
||||
resolve();
|
||||
}, error => {
|
||||
is(error.name, "AbortError", "Expect AbortError, but got " + error.name);
|
||||
resolve();
|
||||
}).catch( e => {
|
||||
ok(false, "Unexpected error: " + e.name);
|
||||
resolve();
|
||||
}).finally(handler.destruct);
|
||||
});
|
||||
}
|
||||
|
||||
// teardown function
|
||||
function teardown() {
|
||||
gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
|
||||
gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
|
||||
gScript.removeMessageListener("test-fail", testFailHandler);
|
||||
gScript.removeMessageListener("test-pass", testPassHandler);
|
||||
gScript.destroy();
|
||||
SimpleTest.finish();
|
||||
});
|
||||
gScript.sendAsyncMessage("teardown");
|
||||
}
|
||||
|
||||
// test main body
|
||||
function runTests() {
|
||||
testUpdateErrors()
|
||||
.then(teardown)
|
||||
.catch( e => {
|
||||
ok(false, "Unexpected error: " + e.name);
|
||||
SimpleTest.finish();
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
SpecialPowers.pushPrefEnv({
|
||||
'set': [
|
||||
['dom.payments.request.enabled', true],
|
||||
]
|
||||
}, runTests);
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1435157">Mozilla Bug 1435157</a>
|
||||
</body>
|
||||
</html>
|
@ -12,6 +12,35 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
namespace {
|
||||
|
||||
void
|
||||
GetURLSpecFromChannel(nsITimedChannel* aChannel, nsAString& aSpec)
|
||||
{
|
||||
aSpec.AssignLiteral("document");
|
||||
|
||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aChannel);
|
||||
if (!channel) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = channel->GetURI(getter_AddRefs(uri));
|
||||
if (NS_WARN_IF(NS_FAILED(rv)) || !uri) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsAutoCString spec;
|
||||
rv = uri->GetSpec(spec);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
|
||||
aSpec = NS_ConvertUTF8toUTF16(spec);
|
||||
}
|
||||
|
||||
} // anonymous
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(PerformanceMainThread)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(PerformanceMainThread,
|
||||
@ -293,7 +322,10 @@ PerformanceMainThread::EnsureDocEntry()
|
||||
timing->SetPropertiesFromHttpChannel(httpChannel);
|
||||
}
|
||||
|
||||
mDocEntry = new PerformanceNavigationTiming(Move(timing), this);
|
||||
nsAutoString name;
|
||||
GetURLSpecFromChannel(mChannel, name);
|
||||
|
||||
mDocEntry = new PerformanceNavigationTiming(Move(timing), this, name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -307,9 +339,12 @@ PerformanceMainThread::CreateDocumentEntry(nsITimedChannel* aChannel)
|
||||
return;
|
||||
}
|
||||
|
||||
nsAutoString name;
|
||||
GetURLSpecFromChannel(aChannel, name);
|
||||
|
||||
UniquePtr<PerformanceTimingData> timing(
|
||||
new PerformanceTimingData(aChannel, nullptr, 0));
|
||||
mDocEntry = new PerformanceNavigationTiming(Move(timing), this);
|
||||
mDocEntry = new PerformanceNavigationTiming(Move(timing), this, name);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -30,12 +30,13 @@ public:
|
||||
// performance.timing object for which timestamps are absolute and has a
|
||||
// zeroTime initialized to navigationStart
|
||||
PerformanceNavigationTiming(UniquePtr<PerformanceTimingData>&& aPerformanceTiming,
|
||||
Performance* aPerformance)
|
||||
: PerformanceResourceTiming(Move(aPerformanceTiming), aPerformance,
|
||||
NS_LITERAL_STRING("document")) {
|
||||
SetEntryType(NS_LITERAL_STRING("navigation"));
|
||||
SetInitiatorType(NS_LITERAL_STRING("navigation"));
|
||||
}
|
||||
Performance* aPerformance,
|
||||
const nsAString& aName)
|
||||
: PerformanceResourceTiming(Move(aPerformanceTiming), aPerformance, aName)
|
||||
{
|
||||
SetEntryType(NS_LITERAL_STRING("navigation"));
|
||||
SetInitiatorType(NS_LITERAL_STRING("navigation"));
|
||||
}
|
||||
|
||||
DOMHighResTimeStamp Duration() const override
|
||||
{
|
||||
|
@ -54,9 +54,25 @@ dictionary PaymentDetailsInit : PaymentDetailsBase {
|
||||
required PaymentItem total;
|
||||
};
|
||||
|
||||
dictionary AddressErrors {
|
||||
DOMString addressLine;
|
||||
DOMString city;
|
||||
DOMString country;
|
||||
DOMString dependentLocality;
|
||||
DOMString languageCode;
|
||||
DOMString organization;
|
||||
DOMString phone;
|
||||
DOMString postalCode;
|
||||
DOMString recipient;
|
||||
DOMString region;
|
||||
DOMString regionCode;
|
||||
DOMString sortingCode;
|
||||
};
|
||||
|
||||
dictionary PaymentDetailsUpdate : PaymentDetailsBase {
|
||||
DOMString error;
|
||||
PaymentItem total;
|
||||
DOMString error;
|
||||
AddressErrors shippingAddressErrors;
|
||||
PaymentItem total;
|
||||
};
|
||||
|
||||
enum PaymentShippingType {
|
||||
|
@ -1211,7 +1211,7 @@ public:
|
||||
extras->jsPathPrefix.Assign(mRtPath);
|
||||
extras->jsPathPrefix += nsPrintfCString("zone(0x%p)/",
|
||||
(void *)js::GetCompartmentZone(aCompartment));
|
||||
extras->jsPathPrefix += js::IsAtomsCompartment(aCompartment)
|
||||
extras->jsPathPrefix += js::IsAtomsRealm(JS::GetRealmForCompartment(aCompartment))
|
||||
? NS_LITERAL_CSTRING("realm(web-worker-atoms)/")
|
||||
: NS_LITERAL_CSTRING("realm(web-worker)/");
|
||||
|
||||
|
29
gfx/thebes/SkMemoryReporter.cpp
Normal file
29
gfx/thebes/SkMemoryReporter.cpp
Normal file
@ -0,0 +1,29 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "SkMemoryReporter.h"
|
||||
|
||||
#include "skia/include/core/SkGraphics.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
NS_IMETHODIMP
|
||||
SkMemoryReporter::CollectReports(nsIHandleReportCallback* aHandleReport,
|
||||
nsISupports* aData,
|
||||
bool aAnonymize)
|
||||
{
|
||||
MOZ_COLLECT_REPORT(
|
||||
"explicit/skia-font-cache", KIND_HEAP, UNITS_BYTES,
|
||||
SkGraphics::GetFontCacheUsed(),
|
||||
"Memory used in the skia font cache.");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(SkMemoryReporter, nsIMemoryReporter);
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
31
gfx/thebes/SkMemoryReporter.h
Normal file
31
gfx/thebes/SkMemoryReporter.h
Normal file
@ -0,0 +1,31 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef GFX_SKMEMORYREPORTER_H
|
||||
#define GFX_SKMEMORYREPORTER_H
|
||||
|
||||
#include "nsIMemoryReporter.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
|
||||
class SkMemoryReporter final : public nsIMemoryReporter
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD CollectReports(nsIHandleReportCallback* aHandleReport,
|
||||
nsISupports* aData,
|
||||
bool aAnonymize) override;
|
||||
|
||||
private:
|
||||
~SkMemoryReporter() {}
|
||||
};
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
||||
#endif /* GFX_SKMEMORYREPORTER_H */
|
@ -106,6 +106,7 @@
|
||||
# ifdef MOZ_ENABLE_FREETYPE
|
||||
# include "skia/include/ports/SkTypeface_cairo.h"
|
||||
# endif
|
||||
# include "mozilla/gfx/SkMemoryReporter.h"
|
||||
# ifdef __GNUC__
|
||||
# pragma GCC diagnostic pop // -Wshadow
|
||||
# endif
|
||||
@ -839,6 +840,9 @@ gfxPlatform::Init()
|
||||
}
|
||||
|
||||
RegisterStrongMemoryReporter(new GfxMemoryImageReporter());
|
||||
#ifdef USE_SKIA
|
||||
RegisterStrongMemoryReporter(new SkMemoryReporter());
|
||||
#endif
|
||||
mlg::InitializeMemoryReporters();
|
||||
|
||||
#ifdef USE_SKIA
|
||||
|
@ -65,6 +65,11 @@ EXPORTS.mozilla.gfx += [
|
||||
'PrintTargetThebes.h',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_ENABLE_SKIA']:
|
||||
EXPORTS.mozilla.gfx += [
|
||||
'SkMemoryReporter.h'
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
|
||||
EXPORTS += [
|
||||
'gfxAndroidPlatform.h',
|
||||
@ -212,6 +217,11 @@ UNIFIED_SOURCES += [
|
||||
'VsyncSource.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_ENABLE_SKIA']:
|
||||
UNIFIED_SOURCES += [
|
||||
'SkMemoryReporter.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
|
||||
UNIFIED_SOURCES += [
|
||||
'gfxMacPlatformFontList.mm',
|
||||
|
@ -98,7 +98,7 @@ extern JS_PUBLIC_API(void)
|
||||
SetRealmNameCallback(JSContext* cx, RealmNameCallback callback);
|
||||
|
||||
// Get the global object for the given realm. Returns null only if `realm` is
|
||||
// in the atoms compartment.
|
||||
// the atoms realm.
|
||||
extern JS_PUBLIC_API(JSObject*)
|
||||
GetRealmGlobalOrNull(Handle<Realm*> realm);
|
||||
|
||||
|
@ -225,7 +225,7 @@ DataViewObject::constructWrapped(JSContext* cx, HandleObject bufobj, const CallA
|
||||
if (!GetPrototypeFromBuiltinConstructor(cx, args, &proto))
|
||||
return false;
|
||||
|
||||
Rooted<GlobalObject*> global(cx, cx->compartment()->maybeGlobal());
|
||||
Rooted<GlobalObject*> global(cx, cx->realm()->maybeGlobal());
|
||||
if (!proto) {
|
||||
proto = GlobalObject::getOrCreateDataViewPrototype(cx, global);
|
||||
if (!proto)
|
||||
|
@ -1986,7 +1986,7 @@ CreateObjectConstructor(JSContext* cx, JSProtoKey key)
|
||||
static JSObject*
|
||||
CreateObjectPrototype(JSContext* cx, JSProtoKey key)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
MOZ_ASSERT(cx->global()->isNative());
|
||||
|
||||
/*
|
||||
|
@ -852,7 +852,7 @@ enum GetCapabilitiesExecutorSlots {
|
||||
static MOZ_MUST_USE PromiseObject*
|
||||
CreatePromiseObjectWithoutResolutionFunctions(JSContext* cx)
|
||||
{
|
||||
Rooted<PromiseObject*> promise(cx, CreatePromiseObjectInternal(cx));
|
||||
PromiseObject* promise = CreatePromiseObjectInternal(cx);
|
||||
if (!promise)
|
||||
return nullptr;
|
||||
|
||||
@ -2508,7 +2508,7 @@ MOZ_MUST_USE PromiseObject*
|
||||
js::CreatePromiseObjectForAsync(JSContext* cx, HandleValue generatorVal)
|
||||
{
|
||||
// Step 1.
|
||||
Rooted<PromiseObject*> promise(cx, CreatePromiseObjectWithoutResolutionFunctions(cx));
|
||||
PromiseObject* promise = CreatePromiseObjectWithoutResolutionFunctions(cx);
|
||||
if (!promise)
|
||||
return nullptr;
|
||||
|
||||
|
@ -3136,13 +3136,26 @@ CharSplitHelper(JSContext* cx, HandleLinearString str, uint32_t limit, HandleObj
|
||||
RootedArrayObject splits(cx, NewFullyAllocatedStringArray(cx, group, resultlen));
|
||||
if (!splits)
|
||||
return nullptr;
|
||||
splits->ensureDenseInitializedLength(cx, 0, resultlen);
|
||||
|
||||
for (size_t i = 0; i < resultlen; ++i) {
|
||||
JSString* sub = staticStrings.getUnitStringForElement(cx, str, i);
|
||||
if (!sub)
|
||||
return nullptr;
|
||||
splits->initDenseElement(i, StringValue(sub));
|
||||
if (str->hasLatin1Chars()) {
|
||||
splits->setDenseInitializedLength(resultlen);
|
||||
|
||||
JS::AutoCheckCannotGC nogc;
|
||||
const Latin1Char* latin1Chars = str->latin1Chars(nogc);
|
||||
for (size_t i = 0; i < resultlen; ++i) {
|
||||
Latin1Char c = latin1Chars[i];
|
||||
MOZ_ASSERT(staticStrings.hasUnit(c));
|
||||
splits->initDenseElement(i, StringValue(staticStrings.getUnit(c)));
|
||||
}
|
||||
} else {
|
||||
splits->ensureDenseInitializedLength(cx, 0, resultlen);
|
||||
|
||||
for (size_t i = 0; i < resultlen; ++i) {
|
||||
JSString* sub = staticStrings.getUnitStringForElement(cx, str, i);
|
||||
if (!sub)
|
||||
return nullptr;
|
||||
splits->initDenseElement(i, StringValue(sub));
|
||||
}
|
||||
}
|
||||
|
||||
return splits;
|
||||
|
@ -86,7 +86,7 @@ GCRuntime::tryNewNurseryObject(JSContext* cx, size_t thingSize, size_t nDynamicS
|
||||
|
||||
MOZ_ASSERT(cx->isNurseryAllocAllowed());
|
||||
MOZ_ASSERT(!cx->isNurseryAllocSuppressed());
|
||||
MOZ_ASSERT(!IsAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
JSObject* obj = cx->nursery().allocateObject(cx, thingSize, nDynamicSlots, clasp);
|
||||
if (obj)
|
||||
@ -140,7 +140,7 @@ GCRuntime::tryNewNurseryString(JSContext* cx, size_t thingSize, AllocKind kind)
|
||||
MOZ_ASSERT(cx->isNurseryAllocAllowed());
|
||||
MOZ_ASSERT(!cx->helperThread());
|
||||
MOZ_ASSERT(!cx->isNurseryAllocSuppressed());
|
||||
MOZ_ASSERT(!IsAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
Cell* cell = cx->nursery().allocateString(cx->zone(), thingSize, kind);
|
||||
if (cell)
|
||||
@ -275,13 +275,13 @@ GCRuntime::checkAllocatorState(JSContext* cx, AllocKind kind)
|
||||
}
|
||||
|
||||
#if defined(JS_GC_ZEAL) || defined(DEBUG)
|
||||
MOZ_ASSERT_IF(cx->compartment()->isAtomsCompartment(),
|
||||
MOZ_ASSERT_IF(cx->realm()->isAtomsRealm(),
|
||||
kind == AllocKind::ATOM ||
|
||||
kind == AllocKind::FAT_INLINE_ATOM ||
|
||||
kind == AllocKind::SYMBOL ||
|
||||
kind == AllocKind::JITCODE ||
|
||||
kind == AllocKind::SCOPE);
|
||||
MOZ_ASSERT_IF(!cx->compartment()->isAtomsCompartment(),
|
||||
MOZ_ASSERT_IF(!cx->realm()->isAtomsRealm(),
|
||||
kind != AllocKind::ATOM &&
|
||||
kind != AllocKind::FAT_INLINE_ATOM);
|
||||
MOZ_ASSERT(!JS::CurrentThreadIsHeapBusy());
|
||||
|
@ -83,7 +83,7 @@ AtomMarkingRuntime::computeBitmapFromChunkMarkBits(JSRuntime* runtime, DenseBitm
|
||||
if (!bitmap.ensureSpace(allocatedWords))
|
||||
return false;
|
||||
|
||||
Zone* atomsZone = runtime->unsafeAtomsCompartment()->zone();
|
||||
Zone* atomsZone = runtime->unsafeAtomsRealm()->zone();
|
||||
for (auto thingKind : AllAllocKinds()) {
|
||||
for (ArenaIter aiter(atomsZone, thingKind); !aiter.done(); aiter.next()) {
|
||||
Arena* arena = aiter.get();
|
||||
@ -117,7 +117,7 @@ AddBitmapToChunkMarkBits(JSRuntime* runtime, Bitmap& bitmap)
|
||||
static_assert(ArenaBitmapBits == ArenaBitmapWords * JS_BITS_PER_WORD,
|
||||
"ArenaBitmapWords must evenly divide ArenaBitmapBits");
|
||||
|
||||
Zone* atomsZone = runtime->unsafeAtomsCompartment()->zone();
|
||||
Zone* atomsZone = runtime->unsafeAtomsRealm()->zone();
|
||||
for (auto thingKind : AllAllocKinds()) {
|
||||
for (ArenaIter aiter(atomsZone, thingKind); !aiter.done(); aiter.next()) {
|
||||
Arena* arena = aiter.get();
|
||||
|
@ -2570,17 +2570,17 @@ GCRuntime::sweepZoneAfterCompacting(Zone* zone)
|
||||
if (jit::JitZone* jitZone = zone->jitZone())
|
||||
jitZone->sweep();
|
||||
|
||||
for (CompartmentsInZoneIter c(zone); !c.done(); c.next()) {
|
||||
c->objectGroups.sweep();
|
||||
c->sweepRegExps();
|
||||
c->sweepSavedStacks();
|
||||
c->sweepVarNames();
|
||||
c->sweepGlobalObject();
|
||||
c->sweepSelfHostingScriptSource();
|
||||
c->sweepDebugEnvironments();
|
||||
c->sweepJitCompartment();
|
||||
c->sweepNativeIterators();
|
||||
c->sweepTemplateObjects();
|
||||
for (RealmsInZoneIter r(zone); !r.done(); r.next()) {
|
||||
r->objectGroups.sweep();
|
||||
r->sweepRegExps();
|
||||
r->sweepSavedStacks();
|
||||
r->sweepVarNames();
|
||||
r->sweepGlobalObject();
|
||||
r->sweepSelfHostingScriptSource();
|
||||
r->sweepDebugEnvironments();
|
||||
r->sweepJitCompartment();
|
||||
r->sweepNativeIterators();
|
||||
r->sweepTemplateObjects();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3388,7 +3388,7 @@ GCRuntime::triggerZoneGC(Zone* zone, JS::gcreason::Reason reason, size_t used, s
|
||||
#endif
|
||||
|
||||
if (zone->isAtomsZone()) {
|
||||
/* We can't do a zone GC of the atoms compartment. */
|
||||
/* We can't do a zone GC of the atoms zone. */
|
||||
if (rt->mainContextFromOwnThread()->keepAtoms || rt->hasHelperThreadZones()) {
|
||||
/* Skip GC and retrigger later, since atoms zone won't be collected
|
||||
* if keepAtoms is true. */
|
||||
@ -3845,7 +3845,7 @@ Zone::sweepCompartments(FreeOp* fop, bool keepAtleastOne, bool destroyingRuntime
|
||||
bool foundOne = false;
|
||||
while (read < end) {
|
||||
JSCompartment* comp = *read++;
|
||||
MOZ_ASSERT(!rt->isAtomsCompartment(comp));
|
||||
MOZ_ASSERT(!JS::GetRealmForCompartment(comp)->isAtomsRealm());
|
||||
|
||||
/*
|
||||
* Don't delete the last compartment if all the ones before it were
|
||||
@ -4490,7 +4490,7 @@ GCRuntime::markCompartments()
|
||||
|
||||
for (GCCompartmentsIter comp(rt); !comp.done(); comp.next()) {
|
||||
MOZ_ASSERT(!comp->scheduledForDestruction);
|
||||
if (!comp->maybeAlive && !rt->isAtomsCompartment(comp))
|
||||
if (!comp->maybeAlive && !JS::GetRealmForCompartment(comp)->isAtomsRealm())
|
||||
comp->scheduledForDestruction = true;
|
||||
}
|
||||
}
|
||||
@ -5334,9 +5334,9 @@ GCRuntime::endMarkingSweepGroup(FreeOp* fop, SliceBudget& budget)
|
||||
|
||||
/*
|
||||
* Change state of current group to MarkGray to restrict marking to this
|
||||
* group. Note that there may be pointers to the atoms compartment, and
|
||||
* group. Note that there may be pointers to the atoms zone, and
|
||||
* these will be marked through, as they are not marked with
|
||||
* MarkCrossCompartmentXXX.
|
||||
* TraceCrossCompartmentEdge.
|
||||
*/
|
||||
for (SweepGroupZonesIter zone(rt); !zone.done(); zone.next())
|
||||
zone->changeGCState(Zone::Mark, Zone::MarkGray);
|
||||
@ -5402,8 +5402,8 @@ UpdateAtomsBitmap(GCParallelTask* task)
|
||||
// For convenience sweep these tables non-incrementally as part of bitmap
|
||||
// sweeping; they are likely to be much smaller than the main atoms table.
|
||||
runtime->unsafeSymbolRegistry().sweep();
|
||||
for (CompartmentsIter comp(runtime, SkipAtoms); !comp.done(); comp.next())
|
||||
comp->sweepVarNames();
|
||||
for (RealmsIter realm(runtime, SkipAtoms); !realm.done(); realm.next())
|
||||
realm->sweepVarNames();
|
||||
}
|
||||
|
||||
static void
|
||||
@ -5426,13 +5426,13 @@ static void
|
||||
SweepMisc(GCParallelTask* task)
|
||||
{
|
||||
JSRuntime* runtime = task->runtime();
|
||||
for (SweepGroupCompartmentsIter c(runtime); !c.done(); c.next()) {
|
||||
c->sweepGlobalObject();
|
||||
c->sweepTemplateObjects();
|
||||
c->sweepSavedStacks();
|
||||
c->sweepSelfHostingScriptSource();
|
||||
c->sweepNativeIterators();
|
||||
c->sweepRegExps();
|
||||
for (SweepGroupRealmsIter r(runtime); !r.done(); r.next()) {
|
||||
r->sweepGlobalObject();
|
||||
r->sweepTemplateObjects();
|
||||
r->sweepSavedStacks();
|
||||
r->sweepSelfHostingScriptSource();
|
||||
r->sweepNativeIterators();
|
||||
r->sweepRegExps();
|
||||
}
|
||||
}
|
||||
|
||||
@ -7530,28 +7530,27 @@ GCRuntime::scanZonesBeforeGC()
|
||||
return zoneStats;
|
||||
}
|
||||
|
||||
// The GC can only clean up scheduledForDestruction compartments that were
|
||||
// marked live by a barrier (e.g. by RemapWrappers from a navigation event).
|
||||
// It is also common to have compartments held live because they are part of a
|
||||
// cycle in gecko, e.g. involving the HTMLDocument wrapper. In this case, we
|
||||
// need to run the CycleCollector in order to remove these edges before the
|
||||
// compartment can be freed.
|
||||
// The GC can only clean up scheduledForDestruction realms that were marked live
|
||||
// by a barrier (e.g. by RemapWrappers from a navigation event). It is also
|
||||
// common to have realms held live because they are part of a cycle in gecko,
|
||||
// e.g. involving the HTMLDocument wrapper. In this case, we need to run the
|
||||
// CycleCollector in order to remove these edges before the realm can be freed.
|
||||
void
|
||||
GCRuntime::maybeDoCycleCollection()
|
||||
{
|
||||
const static double ExcessiveGrayCompartments = 0.8;
|
||||
const static size_t LimitGrayCompartments = 200;
|
||||
const static double ExcessiveGrayRealms = 0.8;
|
||||
const static size_t LimitGrayRealms = 200;
|
||||
|
||||
size_t compartmentsTotal = 0;
|
||||
size_t compartmentsGray = 0;
|
||||
for (CompartmentsIter c(rt, SkipAtoms); !c.done(); c.next()) {
|
||||
++compartmentsTotal;
|
||||
GlobalObject* global = c->unsafeUnbarrieredMaybeGlobal();
|
||||
size_t realmsTotal = 0;
|
||||
size_t realmsGray = 0;
|
||||
for (RealmsIter realm(rt, SkipAtoms); !realm.done(); realm.next()) {
|
||||
++realmsTotal;
|
||||
GlobalObject* global = realm->unsafeUnbarrieredMaybeGlobal();
|
||||
if (global && global->isMarkedGray())
|
||||
++compartmentsGray;
|
||||
++realmsGray;
|
||||
}
|
||||
double grayFraction = double(compartmentsGray) / double(compartmentsTotal);
|
||||
if (grayFraction > ExcessiveGrayCompartments || compartmentsGray > LimitGrayCompartments)
|
||||
double grayFraction = double(realmsGray) / double(realmsTotal);
|
||||
if (grayFraction > ExcessiveGrayRealms || realmsGray > LimitGrayRealms)
|
||||
callDoCycleCollectionCallback(rt->mainContextFromOwnThread());
|
||||
}
|
||||
|
||||
@ -7996,7 +7995,8 @@ GCRuntime::mergeCompartments(JSCompartment* source, JSCompartment* target)
|
||||
{
|
||||
// The source realm must be specifically flagged as mergable. This
|
||||
// also implies that the realm is not visible to the debugger.
|
||||
mozilla::DebugOnly<Realm*> sourceRealm = JS::GetRealmForCompartment(source);
|
||||
Realm* sourceRealm = JS::GetRealmForCompartment(source);
|
||||
Realm* targetRealm = JS::GetRealmForCompartment(target);
|
||||
MOZ_ASSERT(sourceRealm->creationOptions().mergeable());
|
||||
MOZ_ASSERT(sourceRealm->creationOptions().invisibleToDebugger());
|
||||
|
||||
@ -8010,10 +8010,10 @@ GCRuntime::mergeCompartments(JSCompartment* source, JSCompartment* target)
|
||||
|
||||
AutoTraceSession session(rt);
|
||||
|
||||
// Cleanup tables and other state in the source compartment that will be
|
||||
// meaningless after merging into the target compartment.
|
||||
// Cleanup tables and other state in the source realm/zone that will be
|
||||
// meaningless after merging into the target realm/zone.
|
||||
|
||||
source->clearTables();
|
||||
sourceRealm->clearTables();
|
||||
source->zone()->clearTables();
|
||||
source->unsetIsDebuggee();
|
||||
|
||||
@ -8036,7 +8036,7 @@ GCRuntime::mergeCompartments(JSCompartment* source, JSCompartment* target)
|
||||
script->setTypesGeneration(target->zone()->types.generation);
|
||||
}
|
||||
|
||||
GlobalObject* global = target->maybeGlobal();
|
||||
GlobalObject* global = targetRealm->maybeGlobal();
|
||||
MOZ_ASSERT(global);
|
||||
|
||||
for (auto group = source->zone()->cellIter<ObjectGroup>(); !group.done(); group.next()) {
|
||||
|
@ -88,12 +88,14 @@ PhaseKindGraphRoots = [
|
||||
PhaseKind("PURGE", "Purge", 5),
|
||||
PhaseKind("PURGE_SHAPE_TABLES", "Purge ShapeTables", 60),
|
||||
JoinParallelTasksPhaseKind
|
||||
]),
|
||||
]),
|
||||
PhaseKind("MARK", "Mark", 6, [
|
||||
MarkRootsPhaseKind,
|
||||
UnmarkGrayPhaseKind,
|
||||
PhaseKind("MARK_DELAYED", "Mark Delayed", 8)
|
||||
PhaseKind("MARK_DELAYED", "Mark Delayed", 8, [
|
||||
UnmarkGrayPhaseKind,
|
||||
]),
|
||||
]),
|
||||
PhaseKind("SWEEP", "Sweep", 9, [
|
||||
PhaseKind("SWEEP_MARK", "Mark During Sweeping", 10, [
|
||||
UnmarkGrayPhaseKind,
|
||||
|
@ -1485,7 +1485,7 @@ js::ObjectGroup::traceChildren(JSTracer* trc)
|
||||
if (trc->isMarkingTracer())
|
||||
compartment()->mark();
|
||||
|
||||
if (JSObject* global = compartment()->unsafeUnbarrieredMaybeGlobal())
|
||||
if (JSObject* global = realm()->unsafeUnbarrieredMaybeGlobal())
|
||||
TraceManuallyBarrieredEdge(trc, &global, "group_global");
|
||||
|
||||
|
||||
@ -1528,7 +1528,7 @@ js::GCMarker::lazilyMarkChildren(ObjectGroup* group)
|
||||
|
||||
group->compartment()->mark();
|
||||
|
||||
if (GlobalObject* global = group->compartment()->unsafeUnbarrieredMaybeGlobal())
|
||||
if (GlobalObject* global = group->realm()->unsafeUnbarrieredMaybeGlobal())
|
||||
traverseEdge(group, static_cast<JSObject*>(global));
|
||||
|
||||
if (group->newScript(sweep))
|
||||
|
@ -117,7 +117,8 @@ class SweepGroupZonesIter {
|
||||
JS::Zone* operator->() const { return get(); }
|
||||
};
|
||||
|
||||
typedef CompartmentsIterT<SweepGroupZonesIter> SweepGroupCompartmentsIter;
|
||||
using SweepGroupCompartmentsIter = CompartmentsIterT<SweepGroupZonesIter>;
|
||||
using SweepGroupRealmsIter = RealmsIterT<SweepGroupZonesIter>;
|
||||
|
||||
// Iterate the free cells in an arena. See also ArenaCellIterImpl which iterates
|
||||
// the allocated cells.
|
||||
|
@ -107,6 +107,32 @@ struct CompartmentsInZoneIter
|
||||
friend class mozilla::Maybe<CompartmentsInZoneIter>;
|
||||
};
|
||||
|
||||
// Note: this class currently assumes there's a single realm per compartment.
|
||||
class RealmsInZoneIter
|
||||
{
|
||||
CompartmentsInZoneIter comp;
|
||||
|
||||
public:
|
||||
explicit RealmsInZoneIter(JS::Zone* zone)
|
||||
: comp(zone)
|
||||
{}
|
||||
|
||||
bool done() const {
|
||||
return comp.done();
|
||||
}
|
||||
void next() {
|
||||
MOZ_ASSERT(!done());
|
||||
comp.next();
|
||||
}
|
||||
|
||||
JS::Realm* get() const {
|
||||
return JS::GetRealmForCompartment(comp.get());
|
||||
}
|
||||
|
||||
operator JS::Realm*() const { return get(); }
|
||||
JS::Realm* operator->() const { return get(); }
|
||||
};
|
||||
|
||||
// This iterator iterates over all the compartments in a given set of zones. The
|
||||
// set of zones is determined by iterating ZoneIterT.
|
||||
template<class ZonesIterT>
|
||||
@ -158,7 +184,42 @@ class CompartmentsIterT
|
||||
JSCompartment* operator->() const { return get(); }
|
||||
};
|
||||
|
||||
typedef CompartmentsIterT<ZonesIter> CompartmentsIter;
|
||||
using CompartmentsIter = CompartmentsIterT<ZonesIter>;
|
||||
|
||||
// This iterator iterates over all the realms in a given set of zones. The
|
||||
// set of zones is determined by iterating ZoneIterT.
|
||||
template<class ZonesIterT>
|
||||
class RealmsIterT
|
||||
{
|
||||
gc::AutoEnterIteration iterMarker;
|
||||
CompartmentsIterT<ZonesIterT> comp;
|
||||
|
||||
public:
|
||||
explicit RealmsIterT(JSRuntime* rt)
|
||||
: iterMarker(&rt->gc), comp(rt)
|
||||
{}
|
||||
|
||||
RealmsIterT(JSRuntime* rt, ZoneSelector selector)
|
||||
: iterMarker(&rt->gc), comp(rt, selector)
|
||||
{}
|
||||
|
||||
bool done() const { return comp.done(); }
|
||||
|
||||
void next() {
|
||||
MOZ_ASSERT(!done());
|
||||
comp.next();
|
||||
}
|
||||
|
||||
JS::Realm* get() const {
|
||||
MOZ_ASSERT(!done());
|
||||
return JS::GetRealmForCompartment(comp.get());
|
||||
}
|
||||
|
||||
operator JS::Realm*() const { return get(); }
|
||||
JS::Realm* operator->() const { return get(); }
|
||||
};
|
||||
|
||||
using RealmsIter = RealmsIterT<ZonesIter>;
|
||||
|
||||
} // namespace js
|
||||
|
||||
|
@ -355,10 +355,10 @@ js::gc::GCRuntime::traceRuntimeCommon(JSTracer* trc, TraceOrMarkRuntime traceOrM
|
||||
// Trace the JSContext.
|
||||
rt->mainContextFromOwnThread()->trace(trc);
|
||||
|
||||
// Trace all compartment roots, but not the compartment itself; it is
|
||||
// traced via the parent pointer if traceRoots actually traces anything.
|
||||
for (CompartmentsIter c(rt, SkipAtoms); !c.done(); c.next())
|
||||
c->traceRoots(trc, traceOrMark);
|
||||
// Trace all realm roots, but not the realm itself; it is traced via the
|
||||
// parent pointer if traceRoots actually traces anything.
|
||||
for (RealmsIter r(rt, SkipAtoms); !r.done(); r.next())
|
||||
r->traceRoots(trc, traceOrMark);
|
||||
|
||||
// Trace helper thread roots.
|
||||
HelperThreadState().trace(trc, session);
|
||||
@ -415,8 +415,8 @@ js::gc::GCRuntime::finishRoots()
|
||||
|
||||
rt->finishSelfHosting();
|
||||
|
||||
for (CompartmentsIter c(rt, SkipAtoms); !c.done(); c.next())
|
||||
c->finishRoots();
|
||||
for (RealmsIter r(rt, SkipAtoms); !r.done(); r.next())
|
||||
r->finishRoots();
|
||||
|
||||
#ifdef DEBUG
|
||||
// The nsWrapperCache may not be empty before our shutdown GC, so we have
|
||||
|
@ -322,8 +322,8 @@ Zone::notifyObservingDebuggers()
|
||||
JSRuntime* rt = runtimeFromMainThread();
|
||||
JSContext* cx = rt->mainContextFromOwnThread();
|
||||
|
||||
for (CompartmentsInZoneIter comps(this); !comps.done(); comps.next()) {
|
||||
RootedGlobalObject global(cx, comps->unsafeUnbarrieredMaybeGlobal());
|
||||
for (RealmsInZoneIter realms(this); !realms.done(); realms.next()) {
|
||||
RootedGlobalObject global(cx, realms->unsafeUnbarrieredMaybeGlobal());
|
||||
if (!global)
|
||||
continue;
|
||||
|
||||
|
40
js/src/jit-test/tests/gc/bug-1461448.js
Normal file
40
js/src/jit-test/tests/gc/bug-1461448.js
Normal file
@ -0,0 +1,40 @@
|
||||
if (helperThreadCount() === 0)
|
||||
quit();
|
||||
|
||||
gczeal(0);
|
||||
|
||||
let lfPreamble = `
|
||||
var lfOffThreadGlobal = newGlobal();
|
||||
for (lfLocal in this)
|
||||
try {} catch(lfVare5) {}
|
||||
`;
|
||||
evaluate(lfPreamble);
|
||||
evaluate(`
|
||||
var g = newGlobal();
|
||||
var dbg = new Debugger;
|
||||
var gw = dbg.addDebuggee(g);
|
||||
for (lfLocal in this)
|
||||
if (!(lfLocal in lfOffThreadGlobal))
|
||||
try {
|
||||
lfOffThreadGlobal[lfLocal] = this[lfLocal];
|
||||
} catch(lfVare5) {}
|
||||
var g = newGlobal();
|
||||
var gw = dbg.addDebuggee(g);
|
||||
`);
|
||||
lfOffThreadGlobal.offThreadCompileScript(`
|
||||
gcparam("markStackLimit", 1);
|
||||
grayRoot()[0] = "foo";
|
||||
`);
|
||||
lfOffThreadGlobal.runOffThreadScript();
|
||||
eval(`
|
||||
var lfOffThreadGlobal = newGlobal();
|
||||
try { evaluate(\`
|
||||
gczeal(18, 1);
|
||||
grayRoot()[0] = "foo";
|
||||
let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
|
||||
\\\`(module
|
||||
(memory (export "memory") 1 1)
|
||||
)\\\`
|
||||
)));
|
||||
\`); } catch(exc) {}
|
||||
`);
|
6
js/src/jit-test/tests/modules/bug-1462326.js
Normal file
6
js/src/jit-test/tests/modules/bug-1462326.js
Normal file
@ -0,0 +1,6 @@
|
||||
// |jit-test| error: Error
|
||||
|
||||
let m = parseModule(`
|
||||
import A from "A";
|
||||
`);
|
||||
m.declarationInstantiation();
|
@ -1863,21 +1863,6 @@ GetTemplateObjectForNative(JSContext* cx, HandleFunction target, const CallArgs&
|
||||
}
|
||||
}
|
||||
|
||||
if (native == js::intrinsic_StringSplitString && args.length() == 2 && args[0].isString() &&
|
||||
args[1].isString())
|
||||
{
|
||||
ObjectGroup* group = ObjectGroup::callingAllocationSiteGroup(cx, JSProto_Array);
|
||||
if (!group)
|
||||
return false;
|
||||
if (group->maybePreliminaryObjectsDontCheckGeneration()) {
|
||||
*skipAttach = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
res.set(NewFullyAllocatedArrayForCallingAllocationSite(cx, 0, TenuredObject));
|
||||
return !!res;
|
||||
}
|
||||
|
||||
if (native == StringConstructor) {
|
||||
RootedString emptyString(cx, cx->runtime()->emptyString);
|
||||
res.set(StringObject::create(cx, emptyString, /* proto = */ nullptr, TenuredObject));
|
||||
@ -2219,10 +2204,14 @@ TryAttachCallStub(JSContext* cx, ICCall_Fallback* stub, HandleScript script, jsb
|
||||
}
|
||||
|
||||
static bool
|
||||
CopyArray(JSContext* cx, HandleArrayObject arr, MutableHandleValue result)
|
||||
CopyStringSplitArray(JSContext* cx, HandleArrayObject arr, MutableHandleValue result)
|
||||
{
|
||||
uint32_t length = arr->length();
|
||||
ArrayObject* nobj = NewFullyAllocatedArrayTryReuseGroup(cx, arr, length, TenuredObject);
|
||||
MOZ_ASSERT(arr->isTenured(), "ConstStringSplit needs a tenured template object");
|
||||
|
||||
uint32_t length = arr->getDenseInitializedLength();
|
||||
MOZ_ASSERT(length == arr->length(), "template object is a fully initialized array");
|
||||
|
||||
ArrayObject* nobj = NewFullyAllocatedArrayTryReuseGroup(cx, arr, length);
|
||||
if (!nobj)
|
||||
return false;
|
||||
nobj->initDenseElements(arr, 0, length);
|
||||
@ -2241,34 +2230,35 @@ TryAttachConstStringSplit(JSContext* cx, ICCall_Fallback* stub, HandleScript scr
|
||||
|
||||
Value* args = vp + 2;
|
||||
|
||||
// String.prototype.split will not yield a constructable.
|
||||
if (JSOp(*pc) == JSOP_NEW)
|
||||
return true;
|
||||
|
||||
if (!IsOptimizableConstStringSplit(callee, argc, args))
|
||||
return true;
|
||||
|
||||
MOZ_ASSERT(callee.isObject());
|
||||
MOZ_ASSERT(callee.toObject().is<JSFunction>());
|
||||
|
||||
RootedString str(cx, args[0].toString());
|
||||
RootedString sep(cx, args[1].toString());
|
||||
RootedObject obj(cx, &res.toObject());
|
||||
RootedValue arr(cx);
|
||||
RootedArrayObject obj(cx, &res.toObject().as<ArrayObject>());
|
||||
uint32_t initLength = obj->getDenseInitializedLength();
|
||||
MOZ_ASSERT(initLength == obj->length(), "string-split result is a fully initialized array");
|
||||
|
||||
// Copy the array before storing in stub.
|
||||
if (!CopyArray(cx, obj.as<ArrayObject>(), &arr))
|
||||
RootedArrayObject arrObj(cx);
|
||||
arrObj = NewFullyAllocatedArrayTryReuseGroup(cx, obj, initLength, TenuredObject);
|
||||
if (!arrObj)
|
||||
return false;
|
||||
arrObj->ensureDenseInitializedLength(cx, 0, initLength);
|
||||
|
||||
// Atomize all elements of the array.
|
||||
RootedArrayObject arrObj(cx, &arr.toObject().as<ArrayObject>());
|
||||
uint32_t initLength = arrObj->length();
|
||||
for (uint32_t i = 0; i < initLength; i++) {
|
||||
JSAtom* str = js::AtomizeString(cx, arrObj->getDenseElement(i).toString());
|
||||
if (!str)
|
||||
return false;
|
||||
if (initLength > 0) {
|
||||
// Mimic NewFullyAllocatedStringArray() and directly inform TI about
|
||||
// the element type.
|
||||
AddTypePropertyId(cx, arrObj, JSID_VOID, TypeSet::StringType());
|
||||
|
||||
arrObj->setDenseElementWithType(cx, i, StringValue(str));
|
||||
for (uint32_t i = 0; i < initLength; i++) {
|
||||
JSAtom* str = js::AtomizeString(cx, obj->getDenseElement(i).toString());
|
||||
if (!str)
|
||||
return false;
|
||||
|
||||
arrObj->initDenseElement(i, StringValue(str));
|
||||
}
|
||||
}
|
||||
|
||||
ICTypeMonitor_Fallback* typeMonitorFallback = stub->getFallbackMonitorStub(cx, script);
|
||||
@ -2401,7 +2391,7 @@ DoCallFallback(JSContext* cx, BaselineFrame* frame, ICCall_Fallback* stub_, uint
|
||||
stub->discardStubs(cx);
|
||||
canAttachStub = stub->state().canAttachStub();
|
||||
|
||||
if (!handled && canAttachStub) {
|
||||
if (!handled && canAttachStub && !constructing) {
|
||||
// If 'callee' is a potential Call_ConstStringSplit, try to attach an
|
||||
// optimized ConstStringSplit stub. Note that vp[0] now holds the return value
|
||||
// instead of the callee, so we pass the callee as well.
|
||||
@ -3156,8 +3146,9 @@ ICCallScriptedCompiler::generateStubCode(MacroAssembler& masm)
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef bool (*CopyArrayFn)(JSContext*, HandleArrayObject, MutableHandleValue);
|
||||
static const VMFunction CopyArrayInfo = FunctionInfo<CopyArrayFn>(CopyArray, "CopyArray");
|
||||
typedef bool (*CopyStringSplitArrayFn)(JSContext*, HandleArrayObject, MutableHandleValue);
|
||||
static const VMFunction CopyStringSplitArrayInfo =
|
||||
FunctionInfo<CopyStringSplitArrayFn>(CopyStringSplitArray, "CopyStringSplitArray");
|
||||
|
||||
bool
|
||||
ICCall_ConstStringSplit::Compiler::generateStubCode(MacroAssembler& masm)
|
||||
@ -3243,7 +3234,7 @@ ICCall_ConstStringSplit::Compiler::generateStubCode(MacroAssembler& masm)
|
||||
masm.loadPtr(Address(ICStubReg, offsetOfTemplateObject()), paramReg);
|
||||
masm.push(paramReg);
|
||||
|
||||
if (!callVM(CopyArrayInfo, masm))
|
||||
if (!callVM(CopyStringSplitArrayInfo, masm))
|
||||
return false;
|
||||
leaveStubFrame(masm);
|
||||
regs.add(paramReg);
|
||||
|
@ -1054,7 +1054,7 @@ GetPropIRGenerator::tryAttachCrossCompartmentWrapper(HandleObject obj, ObjOperan
|
||||
// so we optimize for that case as well.
|
||||
bool isWindowProxy = IsWindowProxy(unwrapped);
|
||||
if (isWindowProxy) {
|
||||
MOZ_ASSERT(ToWindowIfWindowProxy(unwrapped) == unwrapped->compartment()->maybeGlobal());
|
||||
MOZ_ASSERT(ToWindowIfWindowProxy(unwrapped) == unwrapped->realm()->maybeGlobal());
|
||||
unwrapped = cx_->global();
|
||||
MOZ_ASSERT(unwrapped);
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ CompileCompartment::maybeGlobal()
|
||||
// This uses unsafeUnbarrieredMaybeGlobal() so as not to trigger the read
|
||||
// barrier on the global from off thread. This is safe because we
|
||||
// abort Ion compilation when we GC.
|
||||
return compartment()->unsafeUnbarrieredMaybeGlobal();
|
||||
return JS::GetRealmForCompartment(compartment())->unsafeUnbarrieredMaybeGlobal();
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -337,7 +337,7 @@ JitRuntime::debugTrapHandler(JSContext* cx)
|
||||
{
|
||||
if (!debugTrapHandler_) {
|
||||
// JitRuntime code stubs are shared across compartments and have to
|
||||
// be allocated in the atoms compartment.
|
||||
// be allocated in the atoms zone.
|
||||
AutoLockForExclusiveAccess lock(cx);
|
||||
AutoAtomsRealm ar(cx, lock);
|
||||
debugTrapHandler_ = generateDebugTrapHandler(cx);
|
||||
@ -587,12 +587,12 @@ JitRuntime::Trace(JSTracer* trc, AutoLockForExclusiveAccess& lock)
|
||||
{
|
||||
MOZ_ASSERT(!JS::CurrentThreadIsHeapMinorCollecting());
|
||||
|
||||
// Shared stubs are allocated in the atoms compartment, so do not iterate
|
||||
// Shared stubs are allocated in the atoms zone, so do not iterate
|
||||
// them after the atoms heap after it has been "finished."
|
||||
if (trc->runtime()->atomsAreFinished())
|
||||
return;
|
||||
|
||||
Zone* zone = trc->runtime()->atomsCompartment(lock)->zone();
|
||||
Zone* zone = trc->runtime()->atomsRealm(lock)->zone();
|
||||
for (auto i = zone->cellIter<JitCode>(); !i.done(); i.next()) {
|
||||
JitCode* code = i;
|
||||
TraceRoot(trc, &code, "wrapper");
|
||||
|
@ -954,7 +954,7 @@ JS_RefreshCrossCompartmentWrappers(JSContext* cx, HandleObject obj)
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_InitStandardClasses(JSContext* cx, HandleObject obj)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -1941,19 +1941,19 @@ JS_GlobalObjectTraceHook(JSTracer* trc, JSObject* global)
|
||||
MOZ_ASSERT(global->is<GlobalObject>());
|
||||
|
||||
// Off thread parsing and compilation tasks create a dummy global which is
|
||||
// then merged back into the host compartment. Since it used to be a
|
||||
// global, it will still have this trace hook, but it does not have a
|
||||
// meaning relative to its new compartment. We can safely skip it.
|
||||
// then merged back into the host realm. Since it used to be a global, it
|
||||
// will still have this trace hook, but it does not have a meaning relative
|
||||
// to its new realm. We can safely skip it.
|
||||
//
|
||||
// Similarly, if we GC when creating the global, we may not have set that
|
||||
// global's compartment's global pointer yet. In this case, the compartment
|
||||
// will not yet contain anything that needs to be traced.
|
||||
// global's realm's global pointer yet. In this case, the realm will not yet
|
||||
// contain anything that needs to be traced.
|
||||
if (!global->isOwnGlobal(trc))
|
||||
return;
|
||||
|
||||
// Trace the compartment for any GC things that should only stick around if
|
||||
// we know the global is live.
|
||||
global->compartment()->traceGlobal(trc);
|
||||
// Trace the realm for any GC things that should only stick around if we
|
||||
// know the global is live.
|
||||
global->realm()->traceGlobal(trc);
|
||||
|
||||
if (JSTraceOp trace = global->realm()->creationOptions().getTrace())
|
||||
trace(trc, global);
|
||||
@ -1974,7 +1974,7 @@ JS_FireOnNewGlobalObject(JSContext* cx, JS::HandleObject global)
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS_NewObject(JSContext* cx, const JSClass* jsclasp)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -1991,7 +1991,7 @@ JS_NewObject(JSContext* cx, const JSClass* jsclasp)
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS_NewObjectWithGivenProto(JSContext* cx, const JSClass* jsclasp, HandleObject proto)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, proto);
|
||||
@ -2009,7 +2009,7 @@ JS_NewObjectWithGivenProto(JSContext* cx, const JSClass* jsclasp, HandleObject p
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS_NewPlainObject(JSContext* cx)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -2909,7 +2909,7 @@ JS_PUBLIC_API(bool)
|
||||
JS_CallFunctionValue(JSContext* cx, HandleObject obj, HandleValue fval, const HandleValueArray& args,
|
||||
MutableHandleValue rval)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, fval, args);
|
||||
@ -2926,7 +2926,7 @@ JS_PUBLIC_API(bool)
|
||||
JS_CallFunction(JSContext* cx, HandleObject obj, HandleFunction fun, const HandleValueArray& args,
|
||||
MutableHandleValue rval)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, fun, args);
|
||||
@ -2944,7 +2944,7 @@ JS_PUBLIC_API(bool)
|
||||
JS_CallFunctionName(JSContext* cx, HandleObject obj, const char* name, const HandleValueArray& args,
|
||||
MutableHandleValue rval)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, args);
|
||||
@ -3378,7 +3378,7 @@ JS_SetReservedSlot(JSObject* obj, uint32_t index, const Value& value)
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS_NewArrayObject(JSContext* cx, const JS::HandleValueArray& contents)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -3389,7 +3389,7 @@ JS_NewArrayObject(JSContext* cx, const JS::HandleValueArray& contents)
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS_NewArrayObject(JSContext* cx, size_t length)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -3512,7 +3512,7 @@ JS_PUBLIC_API(JSFunction*)
|
||||
JS_NewFunction(JSContext* cx, JSNative native, unsigned nargs, unsigned flags,
|
||||
const char* name)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
@ -3532,7 +3532,7 @@ JS_NewFunction(JSContext* cx, JSNative native, unsigned nargs, unsigned flags,
|
||||
JS_PUBLIC_API(JSFunction*)
|
||||
JS::GetSelfHostedFunction(JSContext* cx, const char* selfHostedName, HandleId id, unsigned nargs)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, id);
|
||||
@ -3788,7 +3788,7 @@ JS_IsConstructor(JSFunction* fun)
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_DefineFunctions(JSContext* cx, HandleObject obj, const JSFunctionSpec* fs)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3800,7 +3800,7 @@ JS_PUBLIC_API(JSFunction*)
|
||||
JS_DefineFunction(JSContext* cx, HandleObject obj, const char* name, JSNative call,
|
||||
unsigned nargs, unsigned attrs)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3816,7 +3816,7 @@ JS_DefineUCFunction(JSContext* cx, HandleObject obj,
|
||||
const char16_t* name, size_t namelen, JSNative call,
|
||||
unsigned nargs, unsigned attrs)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3831,7 +3831,7 @@ extern JS_PUBLIC_API(JSFunction*)
|
||||
JS_DefineFunctionById(JSContext* cx, HandleObject obj, HandleId id, JSNative call,
|
||||
unsigned nargs, unsigned attrs)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, id);
|
||||
@ -4082,7 +4082,7 @@ Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
|
||||
{
|
||||
ScopeKind scopeKind = options.nonSyntacticScope ? ScopeKind::NonSyntactic : ScopeKind::Global;
|
||||
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -4223,7 +4223,7 @@ JSScript*
|
||||
JS::DecodeBinAST(JSContext* cx, const ReadOnlyCompileOptions& options,
|
||||
const uint8_t* buf, size_t length)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -4546,7 +4546,7 @@ CompileFunction(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
|
||||
HandleObject enclosingEnv, HandleScope enclosingScope,
|
||||
MutableHandleFunction fun)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, enclosingEnv);
|
||||
@ -4715,7 +4715,7 @@ JS::ExposeScriptToDebugger(JSContext* cx, HandleScript script)
|
||||
JS_PUBLIC_API(JSString*)
|
||||
JS_DecompileScript(JSContext* cx, HandleScript script)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4733,7 +4733,7 @@ JS_DecompileScript(JSContext* cx, HandleScript script)
|
||||
JS_PUBLIC_API(JSString*)
|
||||
JS_DecompileFunction(JSContext* cx, HandleFunction fun)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, fun);
|
||||
@ -4743,7 +4743,7 @@ JS_DecompileFunction(JSContext* cx, HandleFunction fun)
|
||||
MOZ_NEVER_INLINE static bool
|
||||
ExecuteScript(JSContext* cx, HandleObject scope, HandleScript script, Value* rval)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, scope, script);
|
||||
@ -4837,7 +4837,7 @@ Evaluate(JSContext* cx, ScopeKind scopeKind, HandleObject env,
|
||||
SourceBufferHolder& srcBuf, MutableHandleValue rval)
|
||||
{
|
||||
CompileOptions options(cx, optionsArg);
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, env);
|
||||
@ -4964,7 +4964,7 @@ JS_PUBLIC_API(bool)
|
||||
JS::CompileModule(JSContext* cx, const ReadOnlyCompileOptions& options,
|
||||
SourceBufferHolder& srcBuf, JS::MutableHandleObject module)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -5122,7 +5122,7 @@ JS::SetPromiseRejectionTrackerCallback(JSContext* cx, JSPromiseRejectionTrackerC
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS::NewPromiseObject(JSContext* cx, HandleObject executor, HandleObject proto /* = nullptr */)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, executor, proto);
|
||||
@ -5376,7 +5376,7 @@ JS::NewReadableDefaultStreamObject(JSContext* cx,
|
||||
double highWaterMark /* = 1 */,
|
||||
JS::HandleObject proto /* = nullptr */)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -5398,7 +5398,7 @@ JS::NewReadableByteStreamObject(JSContext* cx,
|
||||
double highWaterMark /* = 1 */,
|
||||
JS::HandleObject proto /* = nullptr */)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -5457,7 +5457,7 @@ JS::NewReadableExternalSourceStreamObject(JSContext* cx, void* underlyingSource,
|
||||
uint8_t flags /* = 0 */,
|
||||
HandleObject proto /* = nullptr */)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
AssertHeapIsIdle();
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -7586,9 +7586,9 @@ GetScriptedCallerGlobal(JSContext* cx)
|
||||
if (activation->scriptedCallerIsHidden())
|
||||
return nullptr;
|
||||
|
||||
GlobalObject* global = activation->compartment()->maybeGlobal();
|
||||
GlobalObject* global = JS::GetRealmForCompartment(activation->compartment())->maybeGlobal();
|
||||
|
||||
// Noone should be running code in the atoms compartment or running code in
|
||||
// No one should be running code in the atoms realm or running code in
|
||||
// a compartment without any live objects, so there should definitely be a
|
||||
// live global.
|
||||
MOZ_ASSERT(global);
|
||||
|
@ -241,7 +241,7 @@ DefineHelpProperty(JSContext* cx, HandleObject obj, const char* prop, const char
|
||||
JS_FRIEND_API(bool)
|
||||
JS_DefineFunctionsWithHelp(JSContext* cx, HandleObject obj, const JSFunctionSpecWithHelp* fs)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -343,9 +343,9 @@ js::IsSystemZone(Zone* zone)
|
||||
}
|
||||
|
||||
JS_FRIEND_API(bool)
|
||||
js::IsAtomsCompartment(JSCompartment* comp)
|
||||
js::IsAtomsRealm(JS::Realm* realm)
|
||||
{
|
||||
return comp->runtimeFromAnyThread()->isAtomsCompartment(comp);
|
||||
return realm->isAtomsRealm();
|
||||
}
|
||||
|
||||
JS_FRIEND_API(bool)
|
||||
@ -424,7 +424,7 @@ js::DefineFunctionWithReserved(JSContext* cx, JSObject* objArg, const char* name
|
||||
unsigned nargs, unsigned attrs)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
JSAtom* atom = Atomize(cx, name, strlen(name));
|
||||
@ -438,7 +438,7 @@ JS_FRIEND_API(JSFunction*)
|
||||
js::NewFunctionWithReserved(JSContext* cx, JSNative native, unsigned nargs, unsigned flags,
|
||||
const char* name)
|
||||
{
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
@ -459,7 +459,7 @@ js::NewFunctionByIdWithReserved(JSContext* cx, JSNative native, unsigned nargs,
|
||||
jsid id)
|
||||
{
|
||||
MOZ_ASSERT(JSID_IS_STRING(id));
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, id);
|
||||
|
||||
@ -572,8 +572,8 @@ js::AreGCGrayBitsValid(JSRuntime* rt)
|
||||
JS_FRIEND_API(bool)
|
||||
js::ZoneGlobalsAreAllGray(JS::Zone* zone)
|
||||
{
|
||||
for (CompartmentsInZoneIter comp(zone); !comp.done(); comp.next()) {
|
||||
JSObject* obj = comp->unsafeUnbarrieredMaybeGlobal();
|
||||
for (RealmsInZoneIter realm(zone); !realm.done(); realm.next()) {
|
||||
JSObject* obj = realm->unsafeUnbarrieredMaybeGlobal();
|
||||
if (!obj || !JS::ObjectIsMarkedGray(obj))
|
||||
return false;
|
||||
}
|
||||
|
@ -484,7 +484,7 @@ extern JS_FRIEND_API(bool)
|
||||
IsSystemZone(JS::Zone* zone);
|
||||
|
||||
extern JS_FRIEND_API(bool)
|
||||
IsAtomsCompartment(JSCompartment* comp);
|
||||
IsAtomsRealm(JS::Realm* realm);
|
||||
|
||||
extern JS_FRIEND_API(bool)
|
||||
IsAtomsZone(JS::Zone* zone);
|
||||
|
@ -4293,6 +4293,10 @@ static JSObject*
|
||||
CallModuleResolveHook(JSContext* cx, HandleObject module, HandleString specifier)
|
||||
{
|
||||
ShellContext* sc = GetShellContext(cx);
|
||||
if (!sc->moduleResolveHook) {
|
||||
JS_ReportErrorASCII(cx, "Module resolve hook not set");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
JS::AutoValueArray<2> args(cx);
|
||||
args[0].setObject(*module);
|
||||
|
@ -66,20 +66,17 @@ WrappedAsyncFunction(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
|
||||
RootedFunction wrapped(cx, &args.callee().as<JSFunction>());
|
||||
RootedValue unwrappedVal(cx, wrapped->getExtendedSlot(WRAPPED_ASYNC_UNWRAPPED_SLOT));
|
||||
RootedFunction unwrapped(cx, &unwrappedVal.toObject().as<JSFunction>());
|
||||
RootedValue thisValue(cx, args.thisv());
|
||||
RootedValue unwrappedVal(cx);
|
||||
unwrappedVal = args.callee().as<JSFunction>().getExtendedSlot(WRAPPED_ASYNC_UNWRAPPED_SLOT);
|
||||
|
||||
// Step 2.
|
||||
// Also does a part of 2.2 steps 1-2.
|
||||
RootedValue generatorVal(cx);
|
||||
InvokeArgs args2(cx);
|
||||
if (!args2.init(cx, argc))
|
||||
if (!FillArgumentsFromArraylike(cx, args2, args))
|
||||
return false;
|
||||
for (size_t i = 0, len = argc; i < len; i++)
|
||||
args2[i].set(args[i]);
|
||||
if (Call(cx, unwrappedVal, thisValue, args2, &generatorVal)) {
|
||||
|
||||
RootedValue generatorVal(cx);
|
||||
if (Call(cx, unwrappedVal, args.thisv(), args2, &generatorVal)) {
|
||||
// Step 1.
|
||||
Rooted<PromiseObject*> resultPromise(cx, CreatePromiseObjectForAsync(cx, generatorVal));
|
||||
if (!resultPromise)
|
||||
@ -101,7 +98,7 @@ WrappedAsyncFunction(JSContext* cx, unsigned argc, Value* vp)
|
||||
RootedValue exc(cx);
|
||||
if (!GetAndClearException(cx, &exc))
|
||||
return false;
|
||||
RootedObject rejectPromise(cx, PromiseObject::unforgeableReject(cx, exc));
|
||||
JSObject* rejectPromise = PromiseObject::unforgeableReject(cx, exc);
|
||||
if (!rejectPromise)
|
||||
return false;
|
||||
|
||||
@ -131,10 +128,9 @@ js::WrapAsyncFunctionWithProto(JSContext* cx, HandleFunction unwrapped, HandleOb
|
||||
return nullptr;
|
||||
|
||||
// Steps 3 (partially).
|
||||
RootedFunction wrapped(cx, NewFunctionWithProto(cx, WrappedAsyncFunction, length,
|
||||
JSFunction::NATIVE_FUN, nullptr,
|
||||
funName, proto,
|
||||
AllocKind::FUNCTION_EXTENDED));
|
||||
JSFunction* wrapped = NewFunctionWithProto(cx, WrappedAsyncFunction, length,
|
||||
JSFunction::NATIVE_FUN, nullptr, funName, proto,
|
||||
AllocKind::FUNCTION_EXTENDED);
|
||||
if (!wrapped)
|
||||
return nullptr;
|
||||
|
||||
|
@ -34,17 +34,14 @@ WrappedAsyncGenerator(JSContext* cx, unsigned argc, Value* vp)
|
||||
|
||||
RootedFunction wrapped(cx, &args.callee().as<JSFunction>());
|
||||
RootedValue unwrappedVal(cx, wrapped->getExtendedSlot(WRAPPED_ASYNC_UNWRAPPED_SLOT));
|
||||
RootedFunction unwrapped(cx, &unwrappedVal.toObject().as<JSFunction>());
|
||||
RootedValue thisValue(cx, args.thisv());
|
||||
|
||||
// Step 1.
|
||||
RootedValue generatorVal(cx);
|
||||
InvokeArgs args2(cx);
|
||||
if (!args2.init(cx, argc))
|
||||
if (!FillArgumentsFromArraylike(cx, args2, args))
|
||||
return false;
|
||||
for (size_t i = 0, len = argc; i < len; i++)
|
||||
args2[i].set(args[i]);
|
||||
if (!Call(cx, unwrappedVal, thisValue, args2, &generatorVal))
|
||||
|
||||
RootedValue generatorVal(cx);
|
||||
if (!Call(cx, unwrappedVal, args.thisv(), args2, &generatorVal))
|
||||
return false;
|
||||
|
||||
// Step 2.
|
||||
@ -75,10 +72,9 @@ js::WrapAsyncGeneratorWithProto(JSContext* cx, HandleFunction unwrapped, HandleO
|
||||
if (!JSFunction::getLength(cx, unwrapped, &length))
|
||||
return nullptr;
|
||||
|
||||
RootedFunction wrapped(cx, NewFunctionWithProto(cx, WrappedAsyncGenerator, length,
|
||||
JSFunction::NATIVE_FUN, nullptr,
|
||||
funName, proto,
|
||||
AllocKind::FUNCTION_EXTENDED));
|
||||
JSFunction* wrapped = NewFunctionWithProto(cx, WrappedAsyncGenerator, length,
|
||||
JSFunction::NATIVE_FUN, nullptr, funName, proto,
|
||||
AllocKind::FUNCTION_EXTENDED);
|
||||
if (!wrapped)
|
||||
return nullptr;
|
||||
|
||||
|
@ -349,10 +349,10 @@ class MOZ_RAII js::EnterDebuggeeNoExecute
|
||||
}
|
||||
#endif
|
||||
|
||||
// Given a JSContext entered into a debuggee compartment, find the lock
|
||||
// Given a JSContext entered into a debuggee realm, find the lock
|
||||
// that locks it. Returns nullptr if not found.
|
||||
static EnterDebuggeeNoExecute* findInStack(JSContext* cx) {
|
||||
JSCompartment* debuggee = cx->compartment();
|
||||
Realm* debuggee = cx->realm();
|
||||
for (EnterDebuggeeNoExecute* it = cx->noExecuteDebuggerTop; it; it = it->prev_) {
|
||||
Debugger& dbg = it->debugger();
|
||||
if (!it->unlocked_ && dbg.isEnabled() && dbg.observesGlobal(debuggee->maybeGlobal()))
|
||||
@ -2255,10 +2255,10 @@ Debugger::slowPathOnLogAllocationSite(JSContext* cx, HandleObject obj, HandleSav
|
||||
}
|
||||
|
||||
bool
|
||||
Debugger::isDebuggeeUnbarriered(const JSCompartment* compartment) const
|
||||
Debugger::isDebuggeeUnbarriered(const Realm* realm) const
|
||||
{
|
||||
MOZ_ASSERT(compartment);
|
||||
return compartment->isDebuggee() && debuggees.has(compartment->unsafeUnbarrieredMaybeGlobal());
|
||||
MOZ_ASSERT(realm);
|
||||
return realm->isDebuggee() && debuggees.has(realm->unsafeUnbarrieredMaybeGlobal());
|
||||
}
|
||||
|
||||
bool
|
||||
@ -3064,9 +3064,9 @@ Debugger::markIteratively(GCMarker* marker)
|
||||
* convoluted since the easiest way to find them is via their debuggees.
|
||||
*/
|
||||
JSRuntime* rt = marker->runtime();
|
||||
for (CompartmentsIter c(rt, SkipAtoms); !c.done(); c.next()) {
|
||||
if (c->isDebuggee()) {
|
||||
GlobalObject* global = c->unsafeUnbarrieredMaybeGlobal();
|
||||
for (RealmsIter r(rt, SkipAtoms); !r.done(); r.next()) {
|
||||
if (r->isDebuggee()) {
|
||||
GlobalObject* global = r->unsafeUnbarrieredMaybeGlobal();
|
||||
if (!IsMarkedUnbarriered(rt, &global))
|
||||
continue;
|
||||
|
||||
@ -3741,14 +3741,11 @@ Debugger::addAllGlobalsAsDebuggees(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
THIS_DEBUGGER(cx, argc, vp, "addAllGlobalsAsDebuggees", args, dbg);
|
||||
for (ZonesIter zone(cx->runtime(), SkipAtoms); !zone.done(); zone.next()) {
|
||||
for (CompartmentsInZoneIter c(zone); !c.done(); c.next()) {
|
||||
if (c == dbg->object->compartment() ||
|
||||
JS::GetRealmForCompartment(c)->creationOptions().invisibleToDebugger())
|
||||
{
|
||||
for (RealmsInZoneIter r(zone); !r.done(); r.next()) {
|
||||
if (r == dbg->object->realm() || r->creationOptions().invisibleToDebugger())
|
||||
continue;
|
||||
}
|
||||
c->scheduledForDestruction = false;
|
||||
GlobalObject* global = c->maybeGlobal();
|
||||
r->scheduledForDestruction = false;
|
||||
GlobalObject* global = r->maybeGlobal();
|
||||
if (global) {
|
||||
Rooted<GlobalObject*> rg(cx, global);
|
||||
if (!dbg->addDebuggeeGlobal(cx, rg))
|
||||
@ -3993,7 +3990,8 @@ Debugger::addDebuggeeGlobal(JSContext* cx, Handle<GlobalObject*> global)
|
||||
* object. Add those compartments to visited.
|
||||
*/
|
||||
if (c->isDebuggee()) {
|
||||
GlobalObject::DebuggerVector* v = c->maybeGlobal()->getDebuggers();
|
||||
Realm* realm = JS::GetRealmForCompartment(c);
|
||||
GlobalObject::DebuggerVector* v = realm->maybeGlobal()->getDebuggers();
|
||||
for (auto p = v->begin(); p != v->end(); p++) {
|
||||
JSCompartment* next = (*p)->object->compartment();
|
||||
if (Find(visited, next) == visited.end() && !visited.append(next))
|
||||
@ -4856,7 +4854,7 @@ class MOZ_STACK_CLASS Debugger::ObjectQuery
|
||||
* node.
|
||||
*/
|
||||
JSCompartment* comp = referent.compartment();
|
||||
if (comp && !dbg->isDebuggeeUnbarriered(comp)) {
|
||||
if (comp && !dbg->isDebuggeeUnbarriered(JS::GetRealmForCompartment(comp))) {
|
||||
traversal.abandonReferent();
|
||||
return true;
|
||||
}
|
||||
@ -4957,17 +4955,16 @@ Debugger::findAllGlobals(JSContext* cx, unsigned argc, Value* vp)
|
||||
|
||||
{
|
||||
// Accumulate the list of globals before wrapping them, because
|
||||
// wrapping can GC and collect compartments from under us, while
|
||||
// iterating.
|
||||
// wrapping can GC and collect realms from under us, while iterating.
|
||||
JS::AutoCheckCannotGC nogc;
|
||||
|
||||
for (CompartmentsIter c(cx->runtime(), SkipAtoms); !c.done(); c.next()) {
|
||||
if (JS::GetRealmForCompartment(c)->creationOptions().invisibleToDebugger())
|
||||
for (RealmsIter r(cx->runtime(), SkipAtoms); !r.done(); r.next()) {
|
||||
if (r->creationOptions().invisibleToDebugger())
|
||||
continue;
|
||||
|
||||
c->scheduledForDestruction = false;
|
||||
r->scheduledForDestruction = false;
|
||||
|
||||
GlobalObject* global = c->maybeGlobal();
|
||||
GlobalObject* global = r->maybeGlobal();
|
||||
|
||||
if (cx->runtime()->isSelfHostingGlobal(global))
|
||||
continue;
|
||||
|
@ -353,9 +353,9 @@ class Debugger : private mozilla::LinkedListElement<Debugger>
|
||||
Observing = 1
|
||||
};
|
||||
|
||||
// Return true if the given compartment is a debuggee of this debugger,
|
||||
// Return true if the given realm is a debuggee of this debugger,
|
||||
// false otherwise.
|
||||
bool isDebuggeeUnbarriered(const JSCompartment* compartment) const;
|
||||
bool isDebuggeeUnbarriered(const Realm* realm) const;
|
||||
|
||||
// Return true if this Debugger observed a debuggee that participated in the
|
||||
// GC identified by the given GC number. Return false otherwise.
|
||||
|
@ -3316,7 +3316,7 @@ js::CheckLexicalNameConflict(JSContext* cx, Handle<LexicalEnvironmentObject*> le
|
||||
const char* redeclKind = nullptr;
|
||||
RootedId id(cx, NameToId(name));
|
||||
RootedShape shape(cx);
|
||||
if (varObj->is<GlobalObject>() && varObj->compartment()->isInVarNames(name)) {
|
||||
if (varObj->is<GlobalObject>() && varObj->realm()->isInVarNames(name)) {
|
||||
// ES 15.1.11 step 5.a
|
||||
redeclKind = "var";
|
||||
} else if ((shape = lexicalEnv->lookup(cx, name))) {
|
||||
|
@ -485,7 +485,7 @@ GlobalObject::createInternal(JSContext* cx, const Class* clasp)
|
||||
return nullptr;
|
||||
global->setReservedSlot(EMPTY_GLOBAL_SCOPE, PrivateGCThingValue(emptyGlobalScope));
|
||||
|
||||
cx->compartment()->initGlobal(*global);
|
||||
cx->realm()->initGlobal(*global);
|
||||
|
||||
if (!JSObject::setQualifiedVarObj(cx, global))
|
||||
return nullptr;
|
||||
@ -501,7 +501,7 @@ GlobalObject::new_(JSContext* cx, const Class* clasp, JSPrincipals* principals,
|
||||
const JS::RealmOptions& options)
|
||||
{
|
||||
MOZ_ASSERT(!cx->isExceptionPending());
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT_IF(cx->realm(), !cx->realm()->isAtomsRealm());
|
||||
|
||||
JSCompartment* compartment = NewCompartment(cx, principals, options);
|
||||
if (!compartment)
|
||||
|
@ -347,7 +347,7 @@ js::HasOffThreadIonCompile(JSCompartment* comp)
|
||||
{
|
||||
AutoLockHelperThreadState lock;
|
||||
|
||||
if (!HelperThreadState().threads || comp->isAtomsCompartment())
|
||||
if (!HelperThreadState().threads || JS::GetRealmForCompartment(comp)->isAtomsRealm())
|
||||
return false;
|
||||
|
||||
GlobalHelperThreadState::IonBuilderVector& worklist = HelperThreadState().ionWorklist(lock);
|
||||
@ -665,11 +665,10 @@ bool
|
||||
js::OffThreadParsingMustWaitForGC(JSRuntime* rt)
|
||||
{
|
||||
// Off thread parsing can't occur during incremental collections on the
|
||||
// atoms compartment, to avoid triggering barriers. (Outside the atoms
|
||||
// compartment, the compilation will use a new zone that is never
|
||||
// collected.) If an atoms-zone GC is in progress, hold off on executing the
|
||||
// parse task until the atoms-zone GC completes (see
|
||||
// EnqueuePendingParseTasksAfterGC).
|
||||
// atoms zone, to avoid triggering barriers. (Outside the atoms zone, the
|
||||
// compilation will use a new zone that is never collected.) If an
|
||||
// atoms-zone GC is in progress, hold off on executing the parse task until
|
||||
// the atoms-zone GC completes (see EnqueuePendingParseTasksAfterGC).
|
||||
return rt->activeGCInAtomsZone();
|
||||
}
|
||||
|
||||
@ -785,7 +784,7 @@ bool
|
||||
StartOffThreadParseTask(JSContext* cx, ParseTask* task, const ReadOnlyCompileOptions& options)
|
||||
{
|
||||
// Suppress GC so that calls below do not trigger a new incremental GC
|
||||
// which could require barriers on the atoms compartment.
|
||||
// which could require barriers on the atoms zone.
|
||||
gc::AutoSuppressGC nogc(cx);
|
||||
gc::AutoSuppressNurseryCellAlloc noNurseryAlloc(cx);
|
||||
AutoSuppressAllocationMetadataBuilder suppressMetadata(cx);
|
||||
|
@ -439,7 +439,7 @@ DefVarOperation(JSContext* cx, HandleObject varobj, HandlePropertyName dn, unsig
|
||||
}
|
||||
|
||||
if (varobj->is<GlobalObject>()) {
|
||||
if (!varobj->compartment()->addToVarNames(cx, dn))
|
||||
if (!varobj->realm()->addToVarNames(cx, dn))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -4468,7 +4468,7 @@ js::DefFunOperation(JSContext* cx, HandleScript script, HandleObject envChain,
|
||||
if (!DefineDataProperty(cx, parent, name, rval, attrs))
|
||||
return false;
|
||||
|
||||
return parent->is<GlobalObject>() ? parent->compartment()->addToVarNames(cx, name) : true;
|
||||
return parent->is<GlobalObject>() ? parent->realm()->addToVarNames(cx, name) : true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4494,7 +4494,7 @@ js::DefFunOperation(JSContext* cx, HandleScript script, HandleObject envChain,
|
||||
|
||||
// Careful: the presence of a shape, even one appearing to derive from
|
||||
// a variable declaration, doesn't mean it's in [[VarNames]].
|
||||
if (!parent->compartment()->addToVarNames(cx, name))
|
||||
if (!parent->realm()->addToVarNames(cx, name))
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4718,7 +4718,7 @@ js::DeleteNameOperation(JSContext* cx, HandlePropertyName name, HandleObject sco
|
||||
if (status) {
|
||||
// Deleting a name from the global object removes it from [[VarNames]].
|
||||
if (pobj == scope && scope->is<GlobalObject>())
|
||||
scope->compartment()->removeFromVarNames(name);
|
||||
scope->realm()->removeFromVarNames(name);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -16,28 +16,28 @@
|
||||
#include "vm/JSContext-inl.h"
|
||||
|
||||
inline void
|
||||
JSCompartment::initGlobal(js::GlobalObject& global)
|
||||
JS::Realm::initGlobal(js::GlobalObject& global)
|
||||
{
|
||||
MOZ_ASSERT(global.compartment() == this);
|
||||
MOZ_ASSERT(global.realm() == this);
|
||||
MOZ_ASSERT(!global_);
|
||||
global_.set(&global);
|
||||
}
|
||||
|
||||
js::GlobalObject*
|
||||
JSCompartment::maybeGlobal() const
|
||||
JS::Realm::maybeGlobal() const
|
||||
{
|
||||
MOZ_ASSERT_IF(global_, global_->compartment() == this);
|
||||
MOZ_ASSERT_IF(global_, global_->realm() == this);
|
||||
return global_;
|
||||
}
|
||||
|
||||
js::GlobalObject*
|
||||
JSCompartment::unsafeUnbarrieredMaybeGlobal() const
|
||||
JS::Realm::unsafeUnbarrieredMaybeGlobal() const
|
||||
{
|
||||
return *global_.unsafeGet();
|
||||
}
|
||||
|
||||
inline bool
|
||||
JSCompartment::globalIsAboutToBeFinalized()
|
||||
JS::Realm::globalIsAboutToBeFinalized()
|
||||
{
|
||||
MOZ_ASSERT(zone_->isGCSweeping());
|
||||
return global_ && js::gc::IsAboutToBeFinalizedUnbarriered(global_.unsafeGet());
|
||||
@ -53,25 +53,25 @@ js::AutoRealm::AutoRealm(JSContext* cx, const T& target)
|
||||
}
|
||||
|
||||
// Protected constructor that bypasses assertions in enterCompartmentOf. Used
|
||||
// only for entering the atoms compartment.
|
||||
// only for entering the atoms realm.
|
||||
js::AutoRealm::AutoRealm(JSContext* cx, JS::Realm* target,
|
||||
js::AutoLockForExclusiveAccess& lock)
|
||||
: cx_(cx),
|
||||
origin_(cx->realm()),
|
||||
maybeLock_(&lock)
|
||||
{
|
||||
MOZ_ASSERT(target->isAtomsCompartment());
|
||||
MOZ_ASSERT(target->isAtomsRealm());
|
||||
cx_->enterAtomsRealm(target, lock);
|
||||
}
|
||||
|
||||
// Protected constructor that bypasses assertions in enterCompartmentOf. Should
|
||||
// not be used to enter the atoms compartment.
|
||||
// not be used to enter the atoms realm.
|
||||
js::AutoRealm::AutoRealm(JSContext* cx, JS::Realm* target)
|
||||
: cx_(cx),
|
||||
origin_(cx->realm()),
|
||||
maybeLock_(nullptr)
|
||||
{
|
||||
MOZ_ASSERT(!target->isAtomsCompartment());
|
||||
MOZ_ASSERT(!target->isAtomsRealm());
|
||||
cx_->enterNonAtomsRealm(target);
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ js::AutoRealm::~AutoRealm()
|
||||
|
||||
js::AutoAtomsRealm::AutoAtomsRealm(JSContext* cx,
|
||||
js::AutoLockForExclusiveAccess& lock)
|
||||
: AutoRealm(cx, JS::GetRealmForCompartment(cx->atomsCompartment(lock)), lock)
|
||||
: AutoRealm(cx, cx->atomsRealm(lock), lock)
|
||||
{}
|
||||
|
||||
js::AutoRealmUnchecked::AutoRealmUnchecked(JSContext* cx, JSCompartment* target)
|
||||
@ -98,8 +98,8 @@ JSCompartment::wrap(JSContext* cx, JS::MutableHandleValue vp)
|
||||
|
||||
/*
|
||||
* Symbols are GC things, but never need to be wrapped or copied because
|
||||
* they are always allocated in the atoms compartment. They still need to
|
||||
* be marked in the new compartment's zone, however.
|
||||
* they are always allocated in the atoms zone. They still need to be
|
||||
* marked in the new compartment's zone, however.
|
||||
*/
|
||||
if (vp.isSymbol()) {
|
||||
cx->markAtomValue(vp);
|
||||
|
@ -46,14 +46,12 @@ JSCompartment::JSCompartment(Zone* zone)
|
||||
runtime_(zone->runtimeFromAnyThread()),
|
||||
principals_(nullptr),
|
||||
isSystem_(false),
|
||||
isAtomsCompartment_(false),
|
||||
isSelfHosting(false),
|
||||
marked(true),
|
||||
warnedAboutStringGenericsMethods(0),
|
||||
#ifdef DEBUG
|
||||
firedOnNewGlobalObject(false),
|
||||
#endif
|
||||
global_(nullptr),
|
||||
enterCompartmentDepth(0),
|
||||
performanceMonitoring(runtime_),
|
||||
data(nullptr),
|
||||
@ -95,7 +93,8 @@ JSCompartment::JSCompartment(Zone* zone)
|
||||
JS::Realm::Realm(JS::Zone* zone, const JS::RealmOptions& options)
|
||||
: JSCompartment(zone),
|
||||
creationOptions_(options.creationOptions()),
|
||||
behaviors_(options.behaviors())
|
||||
behaviors_(options.behaviors()),
|
||||
global_(nullptr)
|
||||
{
|
||||
MOZ_ASSERT_IF(creationOptions_.mergeable(),
|
||||
creationOptions_.invisibleToDebugger());
|
||||
@ -131,23 +130,34 @@ JSCompartment::~JSCompartment()
|
||||
bool
|
||||
JSCompartment::init(JSContext* maybecx)
|
||||
{
|
||||
/*
|
||||
* maybecx is null when called to create the atoms compartment from
|
||||
* JSRuntime::init().
|
||||
*
|
||||
* As a hack, we clear our timezone cache every time we create a new
|
||||
* compartment. This ensures that the cache is always relatively fresh, but
|
||||
* shouldn't interfere with benchmarks that create tons of date objects
|
||||
* (unless they also create tons of iframes, which seems unlikely).
|
||||
*/
|
||||
JS::ResetTimeZone();
|
||||
|
||||
if (!crossCompartmentWrappers.init(0)) {
|
||||
if (maybecx)
|
||||
ReportOutOfMemory(maybecx);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Realm::init(JSContext* maybecx)
|
||||
{
|
||||
// Initialize JSCompartment. This is temporary until Realm and
|
||||
// JSCompartment are completely separated.
|
||||
if (!JSCompartment::init(maybecx))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* maybecx is null when called to create the atoms realm from
|
||||
* JSRuntime::init().
|
||||
*
|
||||
* As a hack, we clear our timezone cache every time we create a new realm.
|
||||
* This ensures that the cache is always relatively fresh, but shouldn't
|
||||
* interfere with benchmarks that create tons of date objects (unless they
|
||||
* also create tons of iframes, which seems unlikely).
|
||||
*/
|
||||
JS::ResetTimeZone();
|
||||
|
||||
enumerators = NativeIterator::allocateSentinel(maybecx);
|
||||
if (!enumerators)
|
||||
return false;
|
||||
@ -167,7 +177,7 @@ JSCompartment::init(JSContext* maybecx)
|
||||
jit::JitRuntime*
|
||||
JSRuntime::createJitRuntime(JSContext* cx)
|
||||
{
|
||||
// The shared stubs are created in the atoms compartment, which may be
|
||||
// The shared stubs are created in the atoms zone, which may be
|
||||
// accessed by other threads with an exclusive context.
|
||||
AutoLockForExclusiveAccess atomsLock(cx);
|
||||
|
||||
@ -603,10 +613,10 @@ JSCompartment::getNonSyntacticLexicalEnvironment(JSObject* enclosing) const
|
||||
}
|
||||
|
||||
bool
|
||||
JSCompartment::addToVarNames(JSContext* cx, JS::Handle<JSAtom*> name)
|
||||
Realm::addToVarNames(JSContext* cx, JS::Handle<JSAtom*> name)
|
||||
{
|
||||
MOZ_ASSERT(name);
|
||||
MOZ_ASSERT(!isAtomsCompartment());
|
||||
MOZ_ASSERT(!isAtomsRealm());
|
||||
|
||||
if (varNames_.put(name))
|
||||
return true;
|
||||
@ -648,11 +658,10 @@ JSCompartment::traceIncomingCrossCompartmentEdgesForZoneGC(JSTracer* trc)
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::traceGlobal(JSTracer* trc)
|
||||
Realm::traceGlobal(JSTracer* trc)
|
||||
{
|
||||
// Trace things reachable from the compartment's global. Note that these
|
||||
// edges must be swept too in case the compartment is live but the global is
|
||||
// not.
|
||||
// Trace things reachable from the realm's global. Note that these edges
|
||||
// must be swept too in case the realm is live but the global is not.
|
||||
|
||||
savedStacks_.trace(trc);
|
||||
|
||||
@ -662,7 +671,7 @@ JSCompartment::traceGlobal(JSTracer* trc)
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::traceRoots(JSTracer* trc, js::gc::GCRuntime::TraceOrMarkRuntime traceOrMark)
|
||||
Realm::traceRoots(JSTracer* trc, js::gc::GCRuntime::TraceOrMarkRuntime traceOrMark)
|
||||
{
|
||||
if (objectMetadataState.is<PendingMetadata>()) {
|
||||
TraceRoot(trc,
|
||||
@ -725,7 +734,7 @@ JSCompartment::traceRoots(JSTracer* trc, js::gc::GCRuntime::TraceOrMarkRuntime t
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::finishRoots()
|
||||
Realm::finishRoots()
|
||||
{
|
||||
if (debugEnvs)
|
||||
debugEnvs->finish();
|
||||
@ -764,7 +773,7 @@ JSCompartment::sweepSavedStacks()
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::sweepGlobalObject()
|
||||
Realm::sweepGlobalObject()
|
||||
{
|
||||
if (global_ && IsAboutToBeFinalized(&global_))
|
||||
global_.set(nullptr);
|
||||
@ -831,7 +840,7 @@ JSCompartment::sweepCrossCompartmentWrappers()
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::sweepVarNames()
|
||||
Realm::sweepVarNames()
|
||||
{
|
||||
varNames_.sweep();
|
||||
}
|
||||
@ -909,8 +918,10 @@ JSCompartment::fixupAfterMovingGC()
|
||||
{
|
||||
MOZ_ASSERT(zone()->isGCCompacting());
|
||||
|
||||
Realm* realm = JS::GetRealmForCompartment(this);
|
||||
|
||||
purge();
|
||||
fixupGlobal();
|
||||
realm->fixupGlobal();
|
||||
objectGroups.fixupTablesAfterMovingGC();
|
||||
fixupScriptMapsAfterMovingGC();
|
||||
|
||||
@ -920,7 +931,7 @@ JSCompartment::fixupAfterMovingGC()
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::fixupGlobal()
|
||||
Realm::fixupGlobal()
|
||||
{
|
||||
GlobalObject* global = *global_.unsafeGet();
|
||||
if (global)
|
||||
@ -1008,14 +1019,13 @@ JSCompartment::purge()
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::clearTables()
|
||||
Realm::clearTables()
|
||||
{
|
||||
global_.set(nullptr);
|
||||
|
||||
// No scripts should have run in this compartment. This is used when
|
||||
// merging a compartment that has been used off thread into another
|
||||
// compartment and zone.
|
||||
MOZ_ASSERT(crossCompartmentWrappers.empty());
|
||||
// No scripts should have run in this realm. This is used when merging
|
||||
// a realm that has been used off thread into another realm and zone.
|
||||
JS::GetCompartmentForRealm(this)->assertNoCrossCompartmentWrappers();
|
||||
MOZ_ASSERT(!jitCompartment_);
|
||||
MOZ_ASSERT(!debugEnvs);
|
||||
MOZ_ASSERT(enumerators->next() == enumerators);
|
||||
@ -1184,9 +1194,10 @@ JSCompartment::updateDebuggerObservesFlag(unsigned flag)
|
||||
flag == DebuggerObservesAsmJS ||
|
||||
flag == DebuggerObservesBinarySource);
|
||||
|
||||
Realm* realm = JS::GetRealmForCompartment(this);
|
||||
GlobalObject* global = zone()->runtimeFromMainThread()->gc.isForegroundSweeping()
|
||||
? unsafeUnbarrieredMaybeGlobal()
|
||||
: maybeGlobal();
|
||||
? realm->unsafeUnbarrieredMaybeGlobal()
|
||||
: realm->maybeGlobal();
|
||||
const GlobalObject::DebuggerVector* v = global->getDebuggers();
|
||||
for (auto p = v->begin(); p != v->end(); p++) {
|
||||
Debugger* dbg = *p;
|
||||
@ -1301,35 +1312,47 @@ JSCompartment::clearBreakpointsIn(FreeOp* fop, js::Debugger* dbg, HandleObject h
|
||||
}
|
||||
|
||||
void
|
||||
JSCompartment::addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* tiAllocationSiteTables,
|
||||
size_t* tiArrayTypeTables,
|
||||
size_t* tiObjectTypeTables,
|
||||
size_t* compartmentObject,
|
||||
size_t* compartmentTables,
|
||||
size_t* innerViewsArg,
|
||||
size_t* lazyArrayBuffersArg,
|
||||
size_t* objectMetadataTablesArg,
|
||||
size_t* crossCompartmentWrappersArg,
|
||||
size_t* savedStacksSet,
|
||||
size_t* varNamesSet,
|
||||
size_t* nonSyntacticLexicalEnvironmentsArg,
|
||||
size_t* jitCompartment,
|
||||
size_t* privateData,
|
||||
size_t* scriptCountsMapArg)
|
||||
JSCompartment::addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* crossCompartmentWrappersArg)
|
||||
{
|
||||
*compartmentObject += mallocSizeOf(this);
|
||||
// Note that Realm inherits from JSCompartment (for now) so sizeof(*this) is
|
||||
// included in that.
|
||||
|
||||
*crossCompartmentWrappersArg += crossCompartmentWrappers.sizeOfExcludingThis(mallocSizeOf);
|
||||
}
|
||||
|
||||
void
|
||||
Realm::addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* tiAllocationSiteTables,
|
||||
size_t* tiArrayTypeTables,
|
||||
size_t* tiObjectTypeTables,
|
||||
size_t* realmObject,
|
||||
size_t* realmTables,
|
||||
size_t* innerViewsArg,
|
||||
size_t* lazyArrayBuffersArg,
|
||||
size_t* objectMetadataTablesArg,
|
||||
size_t* crossCompartmentWrappersArg,
|
||||
size_t* savedStacksSet,
|
||||
size_t* varNamesSet,
|
||||
size_t* nonSyntacticLexicalEnvironmentsArg,
|
||||
size_t* jitCompartment,
|
||||
size_t* privateData,
|
||||
size_t* scriptCountsMapArg)
|
||||
{
|
||||
// This is temporary until Realm and JSCompartment are completely separated.
|
||||
JSCompartment::addSizeOfExcludingThis(mallocSizeOf, crossCompartmentWrappersArg);
|
||||
|
||||
*realmObject += mallocSizeOf(this);
|
||||
objectGroups.addSizeOfExcludingThis(mallocSizeOf, tiAllocationSiteTables,
|
||||
tiArrayTypeTables, tiObjectTypeTables,
|
||||
compartmentTables);
|
||||
wasm.addSizeOfExcludingThis(mallocSizeOf, compartmentTables);
|
||||
realmTables);
|
||||
wasm.addSizeOfExcludingThis(mallocSizeOf, realmTables);
|
||||
*innerViewsArg += innerViews.sizeOfExcludingThis(mallocSizeOf);
|
||||
|
||||
if (lazyArrayBuffers)
|
||||
*lazyArrayBuffersArg += lazyArrayBuffers->sizeOfIncludingThis(mallocSizeOf);
|
||||
if (objectMetadataTable)
|
||||
*objectMetadataTablesArg += objectMetadataTable->sizeOfIncludingThis(mallocSizeOf);
|
||||
*crossCompartmentWrappersArg += crossCompartmentWrappers.sizeOfExcludingThis(mallocSizeOf);
|
||||
*savedStacksSet += savedStacks_.sizeOfExcludingThis(mallocSizeOf);
|
||||
*varNamesSet += varNames_.sizeOfExcludingThis(mallocSizeOf);
|
||||
if (nonSyntacticLexicalEnvironments_)
|
||||
|
@ -550,7 +550,7 @@ class WeakMapBase;
|
||||
|
||||
struct JSCompartment
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
JS::Zone* zone_;
|
||||
JSRuntime* runtime_;
|
||||
|
||||
@ -596,13 +596,6 @@ struct JSCompartment
|
||||
isSystem_ = isSystem;
|
||||
}
|
||||
|
||||
bool isAtomsCompartment() const {
|
||||
return isAtomsCompartment_;
|
||||
}
|
||||
void setIsAtomsCompartment() {
|
||||
isAtomsCompartment_ = true;
|
||||
}
|
||||
|
||||
// Used to approximate non-content code when reporting telemetry.
|
||||
inline bool isProbablySystemCode() const {
|
||||
return isSystem_;
|
||||
@ -610,7 +603,6 @@ struct JSCompartment
|
||||
private:
|
||||
JSPrincipals* principals_;
|
||||
bool isSystem_;
|
||||
bool isAtomsCompartment_;
|
||||
|
||||
public:
|
||||
bool isSelfHosting;
|
||||
@ -626,7 +618,6 @@ struct JSCompartment
|
||||
private:
|
||||
friend struct JSRuntime;
|
||||
friend struct JSContext;
|
||||
js::ReadBarrieredGlobalObject global_;
|
||||
|
||||
unsigned enterCompartmentDepth;
|
||||
|
||||
@ -657,46 +648,22 @@ struct JSCompartment
|
||||
return runtime_;
|
||||
}
|
||||
|
||||
/* The global object for this compartment.
|
||||
*
|
||||
* This returns nullptr if this is the atoms compartment. (The global_
|
||||
* field is also null briefly during GC, after the global object is
|
||||
* collected; but when that happens the JSCompartment is destroyed during
|
||||
* the same GC.)
|
||||
*
|
||||
* In contrast, JSObject::global() is infallible because marking a JSObject
|
||||
* always marks its global as well.
|
||||
* TODO: add infallible JSScript::global()
|
||||
*/
|
||||
inline js::GlobalObject* maybeGlobal() const;
|
||||
|
||||
/* An unbarriered getter for use while tracing. */
|
||||
inline js::GlobalObject* unsafeUnbarrieredMaybeGlobal() const;
|
||||
|
||||
/* True if a global object exists, but it's being collected. */
|
||||
inline bool globalIsAboutToBeFinalized();
|
||||
|
||||
inline void initGlobal(js::GlobalObject& global);
|
||||
|
||||
public:
|
||||
void* data;
|
||||
void* realmData;
|
||||
|
||||
private:
|
||||
protected:
|
||||
const js::AllocationMetadataBuilder *allocationMetadataBuilder;
|
||||
|
||||
js::SavedStacks savedStacks_;
|
||||
|
||||
private:
|
||||
js::WrapperMap crossCompartmentWrappers;
|
||||
|
||||
// The global environment record's [[VarNames]] list that contains all
|
||||
// names declared using FunctionDeclaration, GeneratorDeclaration, and
|
||||
// VariableDeclaration declarations in global code in this compartment.
|
||||
// Names are only removed from this list by a |delete IdentifierReference|
|
||||
// that successfully removes that global property.
|
||||
JS::GCHashSet<JSAtom*,
|
||||
js::DefaultHasher<JSAtom*>,
|
||||
js::SystemAllocPolicy> varNames_;
|
||||
public:
|
||||
void assertNoCrossCompartmentWrappers() {
|
||||
MOZ_ASSERT(crossCompartmentWrappers.empty());
|
||||
}
|
||||
|
||||
public:
|
||||
/* Last time at which an animation was played for a global in this compartment. */
|
||||
@ -724,7 +691,7 @@ struct JSCompartment
|
||||
// might be detached.
|
||||
int32_t detachedTypedObjects;
|
||||
|
||||
private:
|
||||
protected:
|
||||
friend class js::AutoSetNewObjectMetadata;
|
||||
js::NewObjectMetadataState objectMetadataState;
|
||||
|
||||
@ -744,24 +711,11 @@ struct JSCompartment
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
void addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* tiAllocationSiteTables,
|
||||
size_t* tiArrayTypeTables,
|
||||
size_t* tiObjectTypeTables,
|
||||
size_t* compartmentObject,
|
||||
size_t* compartmentTables,
|
||||
size_t* innerViews,
|
||||
size_t* lazyArrayBuffers,
|
||||
size_t* objectMetadataTables,
|
||||
size_t* crossCompartmentWrappers,
|
||||
size_t* savedStacksSet,
|
||||
size_t* varNamesSet,
|
||||
size_t* nonSyntacticLexicalScopes,
|
||||
size_t* jitCompartment,
|
||||
size_t* privateData,
|
||||
size_t* scriptCountsMapArg);
|
||||
protected:
|
||||
void addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* crossCompartmentWrappersArg);
|
||||
|
||||
public:
|
||||
// Object group tables and other state in the compartment.
|
||||
js::ObjectGroupCompartment objectGroups;
|
||||
|
||||
@ -794,7 +748,7 @@ struct JSCompartment
|
||||
// WebAssembly state for the compartment.
|
||||
js::wasm::Compartment wasm;
|
||||
|
||||
private:
|
||||
protected:
|
||||
// All non-syntactic lexical environments in the compartment. These are kept in
|
||||
// a map because when loading scripts into a non-syntactic environment, we need
|
||||
// to use the same lexical environment to persist lexical bindings.
|
||||
@ -848,9 +802,9 @@ struct JSCompartment
|
||||
explicit JSCompartment(JS::Zone* zone);
|
||||
~JSCompartment();
|
||||
|
||||
public:
|
||||
MOZ_MUST_USE bool init(JSContext* maybecx);
|
||||
|
||||
public:
|
||||
MOZ_MUST_USE inline bool wrap(JSContext* cx, JS::MutableHandleValue vp);
|
||||
|
||||
MOZ_MUST_USE bool wrap(JSContext* cx, js::MutableHandleString strp);
|
||||
@ -896,20 +850,6 @@ struct JSCompartment
|
||||
getOrCreateNonSyntacticLexicalEnvironment(JSContext* cx, js::HandleObject enclosing);
|
||||
js::LexicalEnvironmentObject* getNonSyntacticLexicalEnvironment(JSObject* enclosing) const;
|
||||
|
||||
/*
|
||||
* This method traces data that is live iff we know that this compartment's
|
||||
* global is still live.
|
||||
*/
|
||||
void traceGlobal(JSTracer* trc);
|
||||
/*
|
||||
* This method traces JSCompartment-owned GC roots that are considered live
|
||||
* regardless of whether the compartment's global is still live.
|
||||
*/
|
||||
void traceRoots(JSTracer* trc, js::gc::GCRuntime::TraceOrMarkRuntime traceOrMark);
|
||||
/*
|
||||
* This method clears out tables of roots in preparation for the final GC.
|
||||
*/
|
||||
void finishRoots();
|
||||
/*
|
||||
* These methods mark pointers that cross compartment boundaries. They are
|
||||
* called in per-zone GCs to prevent the wrappers' outgoing edges from
|
||||
@ -924,21 +864,17 @@ struct JSCompartment
|
||||
|
||||
void sweepCrossCompartmentWrappers();
|
||||
void sweepSavedStacks();
|
||||
void sweepGlobalObject();
|
||||
void sweepSelfHostingScriptSource();
|
||||
void sweepJitCompartment();
|
||||
void sweepRegExps();
|
||||
void sweepDebugEnvironments();
|
||||
void sweepNativeIterators();
|
||||
void sweepTemplateObjects();
|
||||
void sweepVarNames();
|
||||
|
||||
void purge();
|
||||
void clearTables();
|
||||
|
||||
static void fixupCrossCompartmentWrappersAfterMovingGC(JSTracer* trc);
|
||||
void fixupAfterMovingGC();
|
||||
void fixupGlobal();
|
||||
void fixupScriptMapsAfterMovingGC();
|
||||
|
||||
bool hasAllocationMetadataBuilder() const { return allocationMetadataBuilder; }
|
||||
@ -955,18 +891,6 @@ struct JSCompartment
|
||||
|
||||
js::SavedStacks& savedStacks() { return savedStacks_; }
|
||||
|
||||
// Add a name to [[VarNames]]. Reports OOM on failure.
|
||||
MOZ_MUST_USE bool addToVarNames(JSContext* cx, JS::Handle<JSAtom*> name);
|
||||
|
||||
void removeFromVarNames(JS::Handle<JSAtom*> name) {
|
||||
varNames_.remove(name);
|
||||
}
|
||||
|
||||
// Whether the given name is in [[VarNames]].
|
||||
bool isInVarNames(JS::Handle<JSAtom*> name) {
|
||||
return varNames_.has(name);
|
||||
}
|
||||
|
||||
void findOutgoingEdges(js::gc::ZoneComponentFinder& finder);
|
||||
|
||||
js::DtoaCache dtoaCache;
|
||||
@ -1151,7 +1075,7 @@ struct JSCompartment
|
||||
bool scheduledForDestruction;
|
||||
bool maybeAlive;
|
||||
|
||||
private:
|
||||
protected:
|
||||
js::jit::JitCompartment* jitCompartment_;
|
||||
|
||||
js::ReadBarriered<js::ArgumentsObject*> mappedArgumentsTemplate_;
|
||||
@ -1206,7 +1130,26 @@ class JS::Realm : public JSCompartment
|
||||
public:
|
||||
Realm(JS::Zone* zone, const JS::RealmOptions& options);
|
||||
|
||||
MOZ_MUST_USE bool init(JSContext* maybecx);
|
||||
void destroy(js::FreeOp* fop);
|
||||
void clearTables();
|
||||
|
||||
void addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* tiAllocationSiteTables,
|
||||
size_t* tiArrayTypeTables,
|
||||
size_t* tiObjectTypeTables,
|
||||
size_t* realmObject,
|
||||
size_t* realmTables,
|
||||
size_t* innerViews,
|
||||
size_t* lazyArrayBuffers,
|
||||
size_t* objectMetadataTables,
|
||||
size_t* crossCompartmentWrappers,
|
||||
size_t* savedStacksSet,
|
||||
size_t* varNamesSet,
|
||||
size_t* nonSyntacticLexicalScopes,
|
||||
size_t* jitCompartment,
|
||||
size_t* privateData,
|
||||
size_t* scriptCountsMapArg);
|
||||
|
||||
const JS::RealmCreationOptions& creationOptions() const { return creationOptions_; }
|
||||
JS::RealmBehaviors& behaviors() { return behaviors_; }
|
||||
@ -1214,6 +1157,82 @@ class JS::Realm : public JSCompartment
|
||||
|
||||
/* Whether to preserve JIT code on non-shrinking GCs. */
|
||||
bool preserveJitCode() { return creationOptions_.preserveJitCode(); }
|
||||
|
||||
private:
|
||||
bool isAtomsRealm_ = false;
|
||||
public:
|
||||
bool isAtomsRealm() const {
|
||||
return isAtomsRealm_;
|
||||
}
|
||||
void setIsAtomsRealm() {
|
||||
isAtomsRealm_ = true;
|
||||
}
|
||||
|
||||
private:
|
||||
friend struct ::JSContext;
|
||||
js::ReadBarrieredGlobalObject global_;
|
||||
public:
|
||||
/* The global object for this realm.
|
||||
*
|
||||
* This returns nullptr if this is the atoms realm. (The global_ field is
|
||||
* also null briefly during GC, after the global object is collected; but
|
||||
* when that happens the Realm is destroyed during the same GC.)
|
||||
*
|
||||
* In contrast, JSObject::global() is infallible because marking a JSObject
|
||||
* always marks its global as well.
|
||||
*/
|
||||
inline js::GlobalObject* maybeGlobal() const;
|
||||
|
||||
/* An unbarriered getter for use while tracing. */
|
||||
inline js::GlobalObject* unsafeUnbarrieredMaybeGlobal() const;
|
||||
|
||||
/* True if a global object exists, but it's being collected. */
|
||||
inline bool globalIsAboutToBeFinalized();
|
||||
|
||||
inline void initGlobal(js::GlobalObject& global);
|
||||
|
||||
/*
|
||||
* This method traces data that is live iff we know that this realm's
|
||||
* global is still live.
|
||||
*/
|
||||
void traceGlobal(JSTracer* trc);
|
||||
|
||||
void sweepGlobalObject();
|
||||
void fixupGlobal();
|
||||
|
||||
/*
|
||||
* This method traces Realm-owned GC roots that are considered live
|
||||
* regardless of whether the realm's global is still live.
|
||||
*/
|
||||
void traceRoots(JSTracer* trc, js::gc::GCRuntime::TraceOrMarkRuntime traceOrMark);
|
||||
/*
|
||||
* This method clears out tables of roots in preparation for the final GC.
|
||||
*/
|
||||
void finishRoots();
|
||||
|
||||
private:
|
||||
// The global environment record's [[VarNames]] list that contains all
|
||||
// names declared using FunctionDeclaration, GeneratorDeclaration, and
|
||||
// VariableDeclaration declarations in global code in this realm.
|
||||
// Names are only removed from this list by a |delete IdentifierReference|
|
||||
// that successfully removes that global property.
|
||||
using VarNamesSet = JS::GCHashSet<JSAtom*,
|
||||
js::DefaultHasher<JSAtom*>,
|
||||
js::SystemAllocPolicy>;
|
||||
VarNamesSet varNames_;
|
||||
public:
|
||||
// Add a name to [[VarNames]]. Reports OOM on failure.
|
||||
MOZ_MUST_USE bool addToVarNames(JSContext* cx, JS::Handle<JSAtom*> name);
|
||||
void sweepVarNames();
|
||||
|
||||
void removeFromVarNames(JS::Handle<JSAtom*> name) {
|
||||
varNames_.remove(name);
|
||||
}
|
||||
|
||||
// Whether the given name is in [[VarNames]].
|
||||
bool isInVarNames(JS::Handle<JSAtom*> name) {
|
||||
return varNames_.has(name);
|
||||
}
|
||||
};
|
||||
|
||||
namespace js {
|
||||
@ -1239,8 +1258,7 @@ JSContext::global() const
|
||||
* safe to use.
|
||||
*/
|
||||
MOZ_ASSERT(realm_, "Caller needs to enter a realm first");
|
||||
JSCompartment* comp = GetCompartmentForRealm(realm_);
|
||||
return js::Handle<js::GlobalObject*>::fromMarkedLocation(comp->global_.unsafeGet());
|
||||
return js::Handle<js::GlobalObject*>::fromMarkedLocation(realm_->global_.unsafeGet());
|
||||
}
|
||||
|
||||
namespace js {
|
||||
@ -1282,7 +1300,7 @@ class AutoRealm
|
||||
protected:
|
||||
inline AutoRealm(JSContext* cx, JS::Realm* target);
|
||||
|
||||
// Used only for entering the atoms compartment.
|
||||
// Used only for entering the atoms realm.
|
||||
inline AutoRealm(JSContext* cx, JS::Realm* target,
|
||||
AutoLockForExclusiveAccess& lock);
|
||||
|
||||
|
@ -491,7 +491,7 @@ inline void
|
||||
JSContext::enterRealmOf(const T& target)
|
||||
{
|
||||
MOZ_ASSERT(JS::CellIsNotGray(target));
|
||||
enterNonAtomsRealm(JS::GetRealmForCompartment(target->compartment()));
|
||||
enterNonAtomsRealm(target->realm());
|
||||
}
|
||||
|
||||
inline void
|
||||
@ -520,12 +520,12 @@ JSContext::setRealm(JS::Realm* realm,
|
||||
const js::AutoLockForExclusiveAccess* maybeLock /* = nullptr */)
|
||||
{
|
||||
// Only one thread can be in the atoms realm at a time.
|
||||
MOZ_ASSERT_IF(runtime_->isAtomsCompartment(realm), maybeLock != nullptr);
|
||||
MOZ_ASSERT_IF(runtime_->isAtomsCompartment(realm) || runtime_->isAtomsCompartment(realm_),
|
||||
MOZ_ASSERT_IF(realm && realm->isAtomsRealm(), maybeLock != nullptr);
|
||||
MOZ_ASSERT_IF((realm && realm->isAtomsRealm()) || (realm_ && realm_->isAtomsRealm()),
|
||||
runtime_->currentThreadHasExclusiveAccess());
|
||||
|
||||
// Make sure that the atoms realm has its own zone.
|
||||
MOZ_ASSERT_IF(realm && !runtime_->isAtomsCompartment(realm),
|
||||
MOZ_ASSERT_IF(realm && !realm->isAtomsRealm(),
|
||||
!realm->zone()->isAtomsZone());
|
||||
|
||||
// Both the current and the new realm should be properly marked as
|
||||
|
@ -1355,7 +1355,7 @@ JSContext::getPendingException(MutableHandleValue rval)
|
||||
{
|
||||
MOZ_ASSERT(throwing);
|
||||
rval.set(unwrappedException());
|
||||
if (IsAtomsCompartment(compartment()))
|
||||
if (realm()->isAtomsRealm())
|
||||
return true;
|
||||
bool wasOverRecursed = overRecursed_;
|
||||
clearPendingException();
|
||||
|
@ -275,8 +275,8 @@ struct JSContext : public JS::RootingContext,
|
||||
js::AtomSet& atoms(js::AutoLockForExclusiveAccess& lock) {
|
||||
return runtime_->atoms(lock);
|
||||
}
|
||||
JSCompartment* atomsCompartment(js::AutoLockForExclusiveAccess& lock) {
|
||||
return runtime_->atomsCompartment(lock);
|
||||
JS::Realm* atomsRealm(js::AutoLockForExclusiveAccess& lock) {
|
||||
return runtime_->atomsRealm(lock);
|
||||
}
|
||||
js::SymbolRegistry& symbolRegistry(js::AutoLockForExclusiveAccess& lock) {
|
||||
return runtime_->symbolRegistry(lock);
|
||||
@ -557,7 +557,7 @@ struct JSContext : public JS::RootingContext,
|
||||
// stacks of exclusive threads, so we need to avoid collecting their
|
||||
// objects in another way. The only GC thing pointers they have are to
|
||||
// their exclusive compartment (which is not collected) or to the atoms
|
||||
// compartment. Therefore, we avoid collecting the atoms compartment when
|
||||
// compartment. Therefore, we avoid collecting the atoms zone when
|
||||
// exclusive threads are running.
|
||||
js::ThreadData<unsigned> keepAtoms;
|
||||
|
||||
|
@ -394,17 +394,17 @@ JSObject::global() const
|
||||
{
|
||||
/*
|
||||
* The global is read-barriered so that it is kept live by access through
|
||||
* the JSCompartment. When accessed through a JSObject, however, the global
|
||||
* will be already be kept live by the black JSObject's parent pointer, so
|
||||
* does not need to be read-barriered.
|
||||
* the Realm. When accessed through a JSObject, however, the global will be
|
||||
* already kept live by the black JSObject's group pointer, so does not
|
||||
* need to be read-barriered.
|
||||
*/
|
||||
return *compartment()->unsafeUnbarrieredMaybeGlobal();
|
||||
return *realm()->unsafeUnbarrieredMaybeGlobal();
|
||||
}
|
||||
|
||||
inline js::GlobalObject*
|
||||
JSObject::globalForTracing(JSTracer*) const
|
||||
{
|
||||
return compartment()->unsafeUnbarrieredMaybeGlobal();
|
||||
return realm()->unsafeUnbarrieredMaybeGlobal();
|
||||
}
|
||||
|
||||
inline bool
|
||||
|
@ -138,10 +138,10 @@ inline js::GlobalObject&
|
||||
JSScript::global() const
|
||||
{
|
||||
/*
|
||||
* A JSScript always marks its compartment's global (via bindings) so we
|
||||
* can assert that maybeGlobal is non-null here.
|
||||
* A JSScript always marks its realm's global (via bindings) so we can
|
||||
* assert that maybeGlobal is non-null here.
|
||||
*/
|
||||
return *compartment()->maybeGlobal();
|
||||
return *realm()->maybeGlobal();
|
||||
}
|
||||
|
||||
inline js::LexicalScope*
|
||||
|
@ -332,6 +332,8 @@ StatsZoneCallback(JSRuntime* rt, void* data, Zone* zone)
|
||||
static void
|
||||
StatsRealmCallback(JSContext* cx, void* data, JSCompartment* compartment)
|
||||
{
|
||||
Realm* realm = JS::GetRealmForCompartment(compartment);
|
||||
|
||||
// Append a new RealmStats to the vector.
|
||||
RuntimeStats* rtStats = static_cast<StatsClosure*>(data)->rtStats;
|
||||
|
||||
@ -342,25 +344,25 @@ StatsRealmCallback(JSContext* cx, void* data, JSCompartment* compartment)
|
||||
MOZ_CRASH("oom");
|
||||
rtStats->initExtraRealmStats(compartment, &realmStats);
|
||||
|
||||
compartment->setRealmStats(&realmStats);
|
||||
realm->setRealmStats(&realmStats);
|
||||
|
||||
// Measure the compartment object itself, and things hanging off it.
|
||||
compartment->addSizeOfIncludingThis(rtStats->mallocSizeOf_,
|
||||
&realmStats.typeInferenceAllocationSiteTables,
|
||||
&realmStats.typeInferenceArrayTypeTables,
|
||||
&realmStats.typeInferenceObjectTypeTables,
|
||||
&realmStats.realmObject,
|
||||
&realmStats.realmTables,
|
||||
&realmStats.innerViewsTable,
|
||||
&realmStats.lazyArrayBuffersTable,
|
||||
&realmStats.objectMetadataTable,
|
||||
&realmStats.crossCompartmentWrappersTable,
|
||||
&realmStats.savedStacksSet,
|
||||
&realmStats.varNamesSet,
|
||||
&realmStats.nonSyntacticLexicalScopesTable,
|
||||
&realmStats.jitRealm,
|
||||
&realmStats.privateData,
|
||||
&realmStats.scriptCountsMap);
|
||||
// Measure the realm object itself, and things hanging off it.
|
||||
realm->addSizeOfIncludingThis(rtStats->mallocSizeOf_,
|
||||
&realmStats.typeInferenceAllocationSiteTables,
|
||||
&realmStats.typeInferenceArrayTypeTables,
|
||||
&realmStats.typeInferenceObjectTypeTables,
|
||||
&realmStats.realmObject,
|
||||
&realmStats.realmTables,
|
||||
&realmStats.innerViewsTable,
|
||||
&realmStats.lazyArrayBuffersTable,
|
||||
&realmStats.objectMetadataTable,
|
||||
&realmStats.crossCompartmentWrappersTable,
|
||||
&realmStats.savedStacksSet,
|
||||
&realmStats.varNamesSet,
|
||||
&realmStats.nonSyntacticLexicalScopesTable,
|
||||
&realmStats.jitRealm,
|
||||
&realmStats.privateData,
|
||||
&realmStats.scriptCountsMap);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -22,27 +22,27 @@ gc::TraceRealm(JSTracer* trc, JS::Realm* realm, const char* name)
|
||||
// reference to its GlobalObject, and vice versa.
|
||||
//
|
||||
// Here we simply trace our side of that edge. During GC,
|
||||
// GCRuntime::traceRuntimeCommon() marks all other compartment roots, for
|
||||
// all compartments.
|
||||
JS::GetCompartmentForRealm(realm)->traceGlobal(trc);
|
||||
// GCRuntime::traceRuntimeCommon() marks all other realm roots, for
|
||||
// all realms.
|
||||
realm->traceGlobal(trc);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
gc::RealmNeedsSweep(JS::Realm* realm)
|
||||
{
|
||||
return JS::GetCompartmentForRealm(realm)->globalIsAboutToBeFinalized();
|
||||
return realm->globalIsAboutToBeFinalized();
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JS::Realm*)
|
||||
JS::GetCurrentRealmOrNull(JSContext* cx)
|
||||
{
|
||||
return JS::GetRealmForCompartment(cx->compartment());
|
||||
return cx->realm();
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JS::Realm*)
|
||||
JS::GetObjectRealmOrNull(JSObject* obj)
|
||||
{
|
||||
return IsCrossCompartmentWrapper(obj) ? nullptr : GetRealmForCompartment(obj->compartment());
|
||||
return IsCrossCompartmentWrapper(obj) ? nullptr : obj->realm();
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void*)
|
||||
@ -72,7 +72,7 @@ JS::SetRealmNameCallback(JSContext* cx, JS::RealmNameCallback callback)
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS::GetRealmGlobalOrNull(Handle<JS::Realm*> realm)
|
||||
{
|
||||
return GetCompartmentForRealm(realm)->maybeGlobal();
|
||||
return realm->maybeGlobal();
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
|
@ -157,7 +157,7 @@ JSRuntime::JSRuntime(JSRuntime* parentRuntime)
|
||||
allowContentJS_(true),
|
||||
atoms_(nullptr),
|
||||
atomsAddedWhileSweeping_(nullptr),
|
||||
atomsCompartment_(nullptr),
|
||||
atomsRealm_(nullptr),
|
||||
staticStrings(nullptr),
|
||||
commonNames(nullptr),
|
||||
permanentAtoms(nullptr),
|
||||
@ -222,19 +222,19 @@ JSRuntime::init(JSContext* cx, uint32_t maxbytes, uint32_t maxNurseryBytes)
|
||||
return false;
|
||||
|
||||
JS::RealmOptions options;
|
||||
ScopedJSDeletePtr<Realm> atomsCompartment(js_new<Realm>(atomsZone.get(), options));
|
||||
if (!atomsCompartment || !atomsCompartment->init(nullptr))
|
||||
ScopedJSDeletePtr<Realm> atomsRealm(js_new<Realm>(atomsZone.get(), options));
|
||||
if (!atomsRealm || !atomsRealm->init(nullptr))
|
||||
return false;
|
||||
|
||||
gc.atomsZone = atomsZone.get();
|
||||
if (!atomsZone->compartments().append(atomsCompartment.get()))
|
||||
if (!atomsZone->compartments().append(atomsRealm.get()))
|
||||
return false;
|
||||
|
||||
atomsCompartment->setIsSystem(true);
|
||||
atomsCompartment->setIsAtomsCompartment();
|
||||
atomsRealm->setIsSystem(true);
|
||||
atomsRealm->setIsAtomsRealm();
|
||||
|
||||
atomsZone.forget();
|
||||
this->atomsCompartment_ = atomsCompartment.forget();
|
||||
this->atomsRealm_ = atomsRealm.forget();
|
||||
|
||||
if (!symbolRegistry_.ref().init())
|
||||
return false;
|
||||
@ -331,7 +331,7 @@ JSRuntime::destroyRuntime()
|
||||
#endif
|
||||
|
||||
gc.finish();
|
||||
atomsCompartment_ = nullptr;
|
||||
atomsRealm_ = nullptr;
|
||||
|
||||
js_delete(defaultFreeOp_.ref());
|
||||
|
||||
@ -435,7 +435,7 @@ static bool
|
||||
HandleInterrupt(JSContext* cx, bool invokeCallback)
|
||||
{
|
||||
MOZ_ASSERT(cx->requestDepth >= 1);
|
||||
MOZ_ASSERT(!cx->compartment()->isAtomsCompartment());
|
||||
MOZ_ASSERT(!cx->realm()->isAtomsRealm());
|
||||
|
||||
cx->runtime()->gc.gcIfRequested();
|
||||
|
||||
@ -768,7 +768,7 @@ JSRuntime::onOutOfMemoryCanGC(AllocFunction allocFunc, size_t bytes, void* reall
|
||||
bool
|
||||
JSRuntime::activeGCInAtomsZone()
|
||||
{
|
||||
Zone* zone = atomsCompartment_->zone();
|
||||
Zone* zone = atomsRealm_->zone();
|
||||
return (zone->needsIncrementalBarrier() && !gc.isVerifyPreBarriersEnabled()) ||
|
||||
zone->wasGCStarted();
|
||||
}
|
||||
|
@ -700,14 +700,14 @@ struct JSRuntime : public js::MallocProvider<JSRuntime>
|
||||
// Set of all atoms added while the main atoms table is being swept.
|
||||
js::ExclusiveAccessLockData<js::AtomSet*> atomsAddedWhileSweeping_;
|
||||
|
||||
// Compartment and associated zone containing all atoms in the runtime, as
|
||||
// Realm and associated zone containing all atoms in the runtime, as
|
||||
// well as runtime wide IonCode stubs. Modifying the contents of this
|
||||
// compartment requires the calling thread to use AutoLockForExclusiveAccess.
|
||||
js::WriteOnceData<JSCompartment*> atomsCompartment_;
|
||||
// zone requires the calling thread to use AutoLockForExclusiveAccess.
|
||||
js::WriteOnceData<JS::Realm*> atomsRealm_;
|
||||
|
||||
// Set of all live symbols produced by Symbol.for(). All such symbols are
|
||||
// allocated in the atomsCompartment. Reading or writing the symbol
|
||||
// registry requires the calling thread to use AutoLockForExclusiveAccess.
|
||||
// allocated in the atomsZone. Reading or writing the symbol registry
|
||||
// requires the calling thread to use AutoLockForExclusiveAccess.
|
||||
js::ExclusiveAccessLockOrGCTaskData<js::SymbolRegistry> symbolRegistry_;
|
||||
|
||||
public:
|
||||
@ -735,22 +735,25 @@ struct JSRuntime : public js::MallocProvider<JSRuntime>
|
||||
return atomsAddedWhileSweeping_;
|
||||
}
|
||||
|
||||
JSCompartment* atomsCompartment(js::AutoLockForExclusiveAccess& lock) {
|
||||
return atomsCompartment_;
|
||||
JS::Realm* atomsRealm(js::AutoLockForExclusiveAccess& lock) {
|
||||
return atomsRealm_;
|
||||
}
|
||||
JSCompartment* unsafeAtomsCompartment() {
|
||||
return atomsCompartment_;
|
||||
JS::Realm* unsafeAtomsRealm() {
|
||||
return atomsRealm_;
|
||||
}
|
||||
|
||||
// Note: once JS::Realm and JSCompartment are completely unrelated, the
|
||||
// atoms realm probably won't have a compartment so we can remove this
|
||||
// then.
|
||||
bool isAtomsCompartment(JSCompartment* comp) {
|
||||
return comp == atomsCompartment_;
|
||||
return JS::GetRealmForCompartment(comp) == atomsRealm_;
|
||||
}
|
||||
|
||||
const JS::Zone* atomsZone(js::AutoLockForExclusiveAccess& lock) const {
|
||||
return gc.atomsZone;
|
||||
}
|
||||
|
||||
// The atoms compartment is the only one in its zone.
|
||||
// The atoms realm is the only one in its zone.
|
||||
bool isAtomsZone(const JS::Zone* zone) const {
|
||||
return zone == gc.atomsZone;
|
||||
}
|
||||
|
@ -1808,7 +1808,8 @@ SavedStacks::getLocation(JSContext* cx, const FrameIter& iter,
|
||||
void
|
||||
SavedStacks::chooseSamplingProbability(JSCompartment* compartment)
|
||||
{
|
||||
GlobalObject* global = compartment->maybeGlobal();
|
||||
Realm* realm = JS::GetRealmForCompartment(compartment);
|
||||
GlobalObject* global = realm->maybeGlobal();
|
||||
if (!global)
|
||||
return;
|
||||
|
||||
|
@ -2785,7 +2785,7 @@ GlobalObject*
|
||||
JSRuntime::createSelfHostingGlobal(JSContext* cx)
|
||||
{
|
||||
MOZ_ASSERT(!cx->isExceptionPending());
|
||||
MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
MOZ_ASSERT(!cx->realm());
|
||||
|
||||
JS::RealmOptions options;
|
||||
options.creationOptions().setNewZone();
|
||||
|
@ -2160,8 +2160,8 @@ NewObjectCache::invalidateEntriesForShape(JSContext* cx, HandleShape shape, Hand
|
||||
}
|
||||
|
||||
EntryIndex entry;
|
||||
for (CompartmentsInZoneIter comp(shape->zone()); !comp.done(); comp.next()) {
|
||||
if (GlobalObject* global = comp->unsafeUnbarrieredMaybeGlobal()) {
|
||||
for (RealmsInZoneIter realm(shape->zone()); !realm.done(); realm.next()) {
|
||||
if (GlobalObject* global = realm->unsafeUnbarrieredMaybeGlobal()) {
|
||||
if (lookupGlobal(clasp, global, kind, &entry))
|
||||
PodZero(&entries[entry]);
|
||||
}
|
||||
|
@ -229,7 +229,7 @@ JSFlatString::new_(JSContext* cx, const CharT* chars, size_t length)
|
||||
return nullptr;
|
||||
|
||||
JSFlatString* str;
|
||||
if (cx->compartment()->isAtomsCompartment())
|
||||
if (cx->realm()->isAtomsRealm())
|
||||
str = js::Allocate<js::NormalAtom, allowGC>(cx);
|
||||
else
|
||||
str = js::Allocate<JSFlatString, allowGC>(cx, js::gc::DefaultHeap);
|
||||
@ -273,7 +273,7 @@ template <js::AllowGC allowGC>
|
||||
MOZ_ALWAYS_INLINE JSThinInlineString*
|
||||
JSThinInlineString::new_(JSContext* cx)
|
||||
{
|
||||
if (cx->compartment()->isAtomsCompartment())
|
||||
if (cx->realm()->isAtomsRealm())
|
||||
return (JSThinInlineString*)(js::Allocate<js::NormalAtom, allowGC>(cx));
|
||||
|
||||
return js::Allocate<JSThinInlineString, allowGC>(cx, js::gc::DefaultHeap);
|
||||
@ -283,7 +283,7 @@ template <js::AllowGC allowGC>
|
||||
MOZ_ALWAYS_INLINE JSFatInlineString*
|
||||
JSFatInlineString::new_(JSContext* cx)
|
||||
{
|
||||
if (cx->compartment()->isAtomsCompartment())
|
||||
if (cx->realm()->isAtomsRealm())
|
||||
return (JSFatInlineString*)(js::Allocate<js::FatInlineAtom, allowGC>(cx));
|
||||
|
||||
return js::Allocate<JSFatInlineString, allowGC>(cx, js::gc::DefaultHeap);
|
||||
|
@ -22,7 +22,7 @@ Symbol*
|
||||
Symbol::newInternal(JSContext* cx, JS::SymbolCode code, uint32_t hash, JSAtom* description,
|
||||
AutoLockForExclusiveAccess& lock)
|
||||
{
|
||||
MOZ_ASSERT(cx->compartment() == cx->atomsCompartment(lock));
|
||||
MOZ_ASSERT(cx->realm() == cx->atomsRealm(lock));
|
||||
|
||||
// Following js::AtomizeString, we grudgingly forgo last-ditch GC here.
|
||||
Symbol* p = Allocate<JS::Symbol, NoGC>(cx);
|
||||
|
@ -3546,10 +3546,10 @@ PreliminaryObjectArray::sweep()
|
||||
// Object.prototype group. This is done to ensure JSObject::finalize
|
||||
// sees a NativeObject Class even if we change the current group's
|
||||
// Class to one of the unboxed object classes in the meantime. If
|
||||
// the compartment's global is dead, we don't do anything as the
|
||||
// group's Class is not going to change in that case.
|
||||
// the realm's global is dead, we don't do anything as the group's
|
||||
// Class is not going to change in that case.
|
||||
JSObject* obj = *ptr;
|
||||
GlobalObject* global = obj->compartment()->unsafeUnbarrieredMaybeGlobal();
|
||||
GlobalObject* global = obj->realm()->unsafeUnbarrieredMaybeGlobal();
|
||||
if (global && !obj->isSingleton()) {
|
||||
JSObject* objectProto = global->maybeGetPrototype(JSProto_Object);
|
||||
obj->setGroup(objectProto->groupRaw());
|
||||
|
@ -33,7 +33,7 @@ CountDeleter::operator()(CountBase* ptr)
|
||||
JS_PUBLIC_API(bool)
|
||||
Census::init() {
|
||||
AutoLockForExclusiveAccess lock(cx);
|
||||
atomsZone = cx->runtime()->atomsCompartment(lock)->zone();
|
||||
atomsZone = cx->runtime()->atomsRealm(lock)->zone();
|
||||
return targetZones.init();
|
||||
}
|
||||
|
||||
|
@ -1078,7 +1078,7 @@ static void
|
||||
GetCompartmentName(JSCompartment* c, nsCString& name, int* anonymizeID,
|
||||
bool replaceSlashes)
|
||||
{
|
||||
if (js::IsAtomsCompartment(c)) {
|
||||
if (js::IsAtomsRealm(JS::GetRealmForCompartment(c))) {
|
||||
name.AssignLiteral("atoms");
|
||||
} else if (*anonymizeID && !js::IsSystemCompartment(c)) {
|
||||
name.AppendPrintf("<anonymized-%d>", *anonymizeID);
|
||||
|
@ -193,30 +193,26 @@ include css-grid/reftest.list
|
||||
# floats/
|
||||
include floats/reftest.list
|
||||
|
||||
###################################
|
||||
# These tests have been moved to reftest_fonts.list
|
||||
#
|
||||
# font-face
|
||||
#include font-face/reftest.list
|
||||
include font-face/reftest.list
|
||||
|
||||
# font features (opentype)
|
||||
#include font-features/reftest.list
|
||||
include font-features/reftest.list
|
||||
|
||||
# mobile font size inflation
|
||||
#include font-inflation/reftest.list
|
||||
include font-inflation/reftest.list
|
||||
|
||||
# CSS Font Loading API
|
||||
#include font-loading-api/reftest.list
|
||||
include font-loading-api/reftest.list
|
||||
|
||||
# font matching
|
||||
#include font-matching/reftest.list
|
||||
include font-matching/reftest.list
|
||||
|
||||
# font variations
|
||||
#include font-variations/reftest.list
|
||||
include font-variations/reftest.list
|
||||
|
||||
# forms
|
||||
#include forms/reftest.list
|
||||
#######################################
|
||||
include forms/reftest.list
|
||||
|
||||
# frameset
|
||||
include frameset/reftest.list
|
||||
@ -349,30 +345,26 @@ include table-width/reftest.list
|
||||
|
||||
include ../tables/reftests/reftest.list
|
||||
|
||||
##############################################
|
||||
# These tests have been moved to reftest_fonts.list
|
||||
#
|
||||
# text/
|
||||
#include text/reftest.list
|
||||
include text/reftest.list
|
||||
|
||||
# text-stroke
|
||||
#include text-stroke/reftest.list
|
||||
include text-stroke/reftest.list
|
||||
|
||||
# text-decoration/
|
||||
#include text-decoration/reftest.list
|
||||
include text-decoration/reftest.list
|
||||
|
||||
# text-indent/
|
||||
#include text-indent/reftest.list
|
||||
include text-indent/reftest.list
|
||||
|
||||
# text-shadow/
|
||||
#include text-shadow/reftest.list
|
||||
include text-shadow/reftest.list
|
||||
|
||||
# text-svgglyphs/
|
||||
#include text-svgglyphs/reftest.list
|
||||
include text-svgglyphs/reftest.list
|
||||
|
||||
# text-transform/
|
||||
#include text-transform/reftest.list
|
||||
##############################################
|
||||
include text-transform/reftest.list
|
||||
|
||||
# theme (osx)
|
||||
include ../../toolkit/themes/osx/reftests/reftest.list
|
||||
|
@ -1,45 +0,0 @@
|
||||
# font-face
|
||||
include font-face/reftest.list
|
||||
|
||||
# font features (opentype)
|
||||
include font-features/reftest.list
|
||||
|
||||
# mobile font size inflation
|
||||
include font-inflation/reftest.list
|
||||
|
||||
# CSS Font Loading API
|
||||
include font-loading-api/reftest.list
|
||||
|
||||
# font matching
|
||||
include font-matching/reftest.list
|
||||
|
||||
# font variations
|
||||
include font-variations/reftest.list
|
||||
|
||||
# from svg/reftest.list
|
||||
include svg/text/reftest.list
|
||||
|
||||
# text/
|
||||
include text/reftest.list
|
||||
|
||||
# text-stroke
|
||||
include text-stroke/reftest.list
|
||||
|
||||
# text-decoration/
|
||||
include text-decoration/reftest.list
|
||||
|
||||
# text-indent/
|
||||
include text-indent/reftest.list
|
||||
|
||||
# text-shadow/
|
||||
include text-shadow/reftest.list
|
||||
|
||||
# text-svgglyphs/
|
||||
include text-svgglyphs/reftest.list
|
||||
|
||||
# text-transform/
|
||||
include text-transform/reftest.list
|
||||
|
||||
# css writing mode
|
||||
skip-if(winWidget&&isDebugBuild&&/^Windows\x20NT\x206\.1/.test(http.oscpu)) include w3c-css/received/reftest_writing_modes.list # Bug 1392106
|
||||
|
@ -13,9 +13,8 @@ include filters/reftest.list
|
||||
# smil / animation tests
|
||||
include smil/reftest.list
|
||||
|
||||
# These tests have been moved to reftest_fonts.list
|
||||
# text tests
|
||||
# include text/reftest.list
|
||||
include text/reftest.list
|
||||
|
||||
# load only tests
|
||||
include load-only/reftest.list
|
||||
|
@ -71,6 +71,7 @@ support_dirs_mapped = set()
|
||||
filemap = {}
|
||||
speclinkmap = {}
|
||||
propsaddedfor = []
|
||||
tests = []
|
||||
gOptions = None
|
||||
gArgs = None
|
||||
gTestfiles = []
|
||||
@ -208,11 +209,10 @@ def get_document_for(srcname):
|
||||
document = xml.dom.minidom.parse(srcname)
|
||||
return document
|
||||
|
||||
def add_test_items(srcname, tests):
|
||||
|
||||
def add_test_items(srcname):
|
||||
if not (is_html(srcname) or is_xml(srcname)):
|
||||
map_file(srcname)
|
||||
return tests
|
||||
return None
|
||||
document = get_document_for(srcname)
|
||||
refs = []
|
||||
notrefs = []
|
||||
@ -236,10 +236,9 @@ def add_test_items(srcname, tests):
|
||||
tests.append(["!=", map_file(srcname), map_file(notref)])
|
||||
# Add chained references too
|
||||
for ref in refs:
|
||||
tests = add_test_items(ref, tests)
|
||||
add_test_items(ref)
|
||||
for notref in notrefs:
|
||||
tests = add_test_items(notref, tests)
|
||||
return tests
|
||||
add_test_items(notref)
|
||||
|
||||
AHEM_FONT_PATH = os.path.normpath(
|
||||
os.path.join(os.path.dirname(__file__), "../fonts/Ahem.ttf"))
|
||||
@ -333,9 +332,20 @@ def read_fail_list():
|
||||
pat = re.compile(fnmatch.translate(items.pop()))
|
||||
gFailList.append((pat, refpat, items))
|
||||
|
||||
def create_list_file(filename, tests):
|
||||
global gDestPath, gTestfiles, gTestFlags, gFailList
|
||||
listfile = open(os.path.join(gDestPath, filename), "wb")
|
||||
def main():
|
||||
global gDestPath, gLog, gTestfiles, gTestFlags, gFailList
|
||||
read_options()
|
||||
setup_paths()
|
||||
read_fail_list()
|
||||
setup_log()
|
||||
write_log_header()
|
||||
remove_existing_dirs()
|
||||
populate_test_files()
|
||||
|
||||
for t in gTestfiles:
|
||||
add_test_items(t)
|
||||
|
||||
listfile = open(os.path.join(gDestPath, "reftest.list"), "wb")
|
||||
listfile.write("# THIS FILE IS AUTOGENERATED BY {0}\n# DO NOT EDIT!\n".format(os.path.basename(__file__)))
|
||||
lastDefaultPreferences = None
|
||||
for test in tests:
|
||||
@ -367,30 +377,6 @@ def create_list_file(filename, tests):
|
||||
listfile.write(" ".join(test) + "\n")
|
||||
listfile.close()
|
||||
|
||||
def main():
|
||||
global gLog
|
||||
read_options()
|
||||
setup_paths()
|
||||
read_fail_list()
|
||||
setup_log()
|
||||
write_log_header()
|
||||
remove_existing_dirs()
|
||||
populate_test_files()
|
||||
|
||||
tests = []
|
||||
for t in gTestfiles:
|
||||
if 'css-writing-modes' in t:
|
||||
continue
|
||||
tests = add_test_items(t, tests)
|
||||
create_list_file("reftest.list", tests)
|
||||
|
||||
tests = []
|
||||
for t in gTestfiles:
|
||||
if 'css-writing-modes' not in t:
|
||||
continue
|
||||
tests = add_test_items(t, tests)
|
||||
create_list_file("reftest_writing_modes.list", tests)
|
||||
|
||||
gLog.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -46,46 +46,46 @@ Importing css-conditional/at-supports-037.html to css-conditional/at-supports-03
|
||||
Importing css-conditional/at-supports-038.html to css-conditional/at-supports-038.html
|
||||
Importing css-conditional/at-supports-039.html to css-conditional/at-supports-039.html
|
||||
Importing css-multicol/OWNERS to css-multicol/OWNERS
|
||||
Importing css-multicol/support/swatch-green.png to css-multicol/support/swatch-green.png
|
||||
Importing css-multicol/support/swatch-blue.png to css-multicol/support/swatch-blue.png
|
||||
Importing css-multicol/support/swatch-pink.png to css-multicol/support/swatch-pink.png
|
||||
Importing css-multicol/support/60x60-green.png to css-multicol/support/60x60-green.png
|
||||
Importing css-multicol/support/import-red.css to css-multicol/support/import-red.css
|
||||
Importing css-multicol/support/pattern-rgr-grg-rgr.png to css-multicol/support/pattern-rgr-grg-rgr.png
|
||||
Importing css-multicol/support/pattern-grg-rrg-rgg.png to css-multicol/support/pattern-grg-rrg-rgg.png
|
||||
Importing css-multicol/support/60x60-red.png to css-multicol/support/60x60-red.png
|
||||
Importing css-multicol/support/swatch-yellow.png to css-multicol/support/swatch-yellow.png
|
||||
Importing css-multicol/support/test-br.png to css-multicol/support/test-br.png
|
||||
Importing css-multicol/support/1x1-green.png to css-multicol/support/1x1-green.png
|
||||
Importing css-multicol/support/test-tl.png to css-multicol/support/test-tl.png
|
||||
Importing css-multicol/support/b-green.css to css-multicol/support/b-green.css
|
||||
Importing css-multicol/support/1x1-navy.png to css-multicol/support/1x1-navy.png
|
||||
Importing css-multicol/support/pattern-tr.png to css-multicol/support/pattern-tr.png
|
||||
Importing css-multicol/support/1x1-maroon.png to css-multicol/support/1x1-maroon.png
|
||||
Importing css-multicol/support/1x1-white.png to css-multicol/support/1x1-white.png
|
||||
Importing css-multicol/support/swatch-gray.png to css-multicol/support/swatch-gray.png
|
||||
Importing css-multicol/support/60x60-gg-rr.png to css-multicol/support/60x60-gg-rr.png
|
||||
Importing css-multicol/support/swatch-white.png to css-multicol/support/swatch-white.png
|
||||
Importing css-multicol/support/swatch-lime.png to css-multicol/support/swatch-lime.png
|
||||
Importing css-multicol/support/black20x20.png to css-multicol/support/black20x20.png
|
||||
Importing css-multicol/support/swatch-navy.png to css-multicol/support/swatch-navy.png
|
||||
Importing css-multicol/support/cat.png to css-multicol/support/cat.png
|
||||
Importing css-multicol/support/red20x20.png to css-multicol/support/red20x20.png
|
||||
Importing css-multicol/support/swatch-purple.png to css-multicol/support/swatch-purple.png
|
||||
Importing css-multicol/support/square-teal.png to css-multicol/support/square-teal.png
|
||||
Importing css-multicol/support/1x1-lime.png to css-multicol/support/1x1-lime.png
|
||||
Importing css-multicol/support/c-red.css to css-multicol/support/c-red.css
|
||||
Importing css-multicol/support/square-white.png to css-multicol/support/square-white.png
|
||||
Importing css-multicol/support/pattern-grg-rgr-grg.png to css-multicol/support/pattern-grg-rgr-grg.png
|
||||
Importing css-multicol/support/swatch-orange.png to css-multicol/support/swatch-orange.png
|
||||
Importing css-multicol/support/test-bl.png to css-multicol/support/test-bl.png
|
||||
Importing css-multicol/support/import-green.css to css-multicol/support/import-green.css
|
||||
Importing css-multicol/support/test-outer.png to css-multicol/support/test-outer.png
|
||||
Importing css-multicol/support/1x1-maroon.png to css-multicol/support/1x1-maroon.png
|
||||
Importing css-multicol/support/1x1-navy.png to css-multicol/support/1x1-navy.png
|
||||
Importing css-multicol/support/1x1-red.png to css-multicol/support/1x1-red.png
|
||||
Importing css-multicol/support/square-purple.png to css-multicol/support/square-purple.png
|
||||
Importing css-multicol/support/swatch-red.png to css-multicol/support/swatch-red.png
|
||||
Importing css-multicol/support/test-tr.png to css-multicol/support/test-tr.png
|
||||
Importing css-multicol/support/1x1-white.png to css-multicol/support/1x1-white.png
|
||||
Importing css-multicol/support/60x60-gg-rr.png to css-multicol/support/60x60-gg-rr.png
|
||||
Importing css-multicol/support/60x60-green.png to css-multicol/support/60x60-green.png
|
||||
Importing css-multicol/support/60x60-red.png to css-multicol/support/60x60-red.png
|
||||
Importing css-multicol/support/a-green.css to css-multicol/support/a-green.css
|
||||
Importing css-multicol/support/b-green.css to css-multicol/support/b-green.css
|
||||
Importing css-multicol/support/black20x20.png to css-multicol/support/black20x20.png
|
||||
Importing css-multicol/support/c-red.css to css-multicol/support/c-red.css
|
||||
Importing css-multicol/support/cat.png to css-multicol/support/cat.png
|
||||
Importing css-multicol/support/import-green.css to css-multicol/support/import-green.css
|
||||
Importing css-multicol/support/import-red.css to css-multicol/support/import-red.css
|
||||
Importing css-multicol/support/pattern-grg-rgr-grg.png to css-multicol/support/pattern-grg-rgr-grg.png
|
||||
Importing css-multicol/support/pattern-grg-rrg-rgg.png to css-multicol/support/pattern-grg-rrg-rgg.png
|
||||
Importing css-multicol/support/pattern-rgr-grg-rgr.png to css-multicol/support/pattern-rgr-grg-rgr.png
|
||||
Importing css-multicol/support/pattern-tr.png to css-multicol/support/pattern-tr.png
|
||||
Importing css-multicol/support/red20x20.png to css-multicol/support/red20x20.png
|
||||
Importing css-multicol/support/square-purple.png to css-multicol/support/square-purple.png
|
||||
Importing css-multicol/support/square-teal.png to css-multicol/support/square-teal.png
|
||||
Importing css-multicol/support/square-white.png to css-multicol/support/square-white.png
|
||||
Importing css-multicol/support/swatch-blue.png to css-multicol/support/swatch-blue.png
|
||||
Importing css-multicol/support/swatch-gray.png to css-multicol/support/swatch-gray.png
|
||||
Importing css-multicol/support/swatch-green.png to css-multicol/support/swatch-green.png
|
||||
Importing css-multicol/support/swatch-lime.png to css-multicol/support/swatch-lime.png
|
||||
Importing css-multicol/support/swatch-navy.png to css-multicol/support/swatch-navy.png
|
||||
Importing css-multicol/support/swatch-orange.png to css-multicol/support/swatch-orange.png
|
||||
Importing css-multicol/support/swatch-pink.png to css-multicol/support/swatch-pink.png
|
||||
Importing css-multicol/support/swatch-purple.png to css-multicol/support/swatch-purple.png
|
||||
Importing css-multicol/support/swatch-red.png to css-multicol/support/swatch-red.png
|
||||
Importing css-multicol/support/swatch-white.png to css-multicol/support/swatch-white.png
|
||||
Importing css-multicol/support/swatch-yellow.png to css-multicol/support/swatch-yellow.png
|
||||
Importing css-multicol/support/test-bl.png to css-multicol/support/test-bl.png
|
||||
Importing css-multicol/support/test-br.png to css-multicol/support/test-br.png
|
||||
Importing css-multicol/support/test-outer.png to css-multicol/support/test-outer.png
|
||||
Importing css-multicol/support/test-tl.png to css-multicol/support/test-tl.png
|
||||
Importing css-multicol/support/test-tr.png to css-multicol/support/test-tr.png
|
||||
Importing css-multicol/multicol-basic-001.html to css-multicol/multicol-basic-001.html
|
||||
Importing css-multicol/reference/multicol-basic-ref.html to css-multicol/reference/multicol-basic-ref.html
|
||||
Importing css-multicol/multicol-basic-002.html to css-multicol/multicol-basic-002.html
|
||||
@ -314,10 +314,10 @@ Importing css-multicol/multicol-width-small-001-ref.xht to css-multicol/multicol
|
||||
Importing css-multicol/multicol-zero-height-001.xht to css-multicol/multicol-zero-height-001.xht
|
||||
Importing css-multicol/multicol-zero-height-001-ref.xht to css-multicol/multicol-zero-height-001-ref.xht
|
||||
Importing css-namespaces/OWNERS to css-namespaces/OWNERS
|
||||
Importing css-namespaces/support/syntax-007.css to css-namespaces/support/syntax-007.css
|
||||
Importing css-namespaces/support/scope-002b.css to css-namespaces/support/scope-002b.css
|
||||
Importing css-namespaces/support/fail.css to css-namespaces/support/fail.css
|
||||
Importing css-namespaces/support/scope-002a.css to css-namespaces/support/scope-002a.css
|
||||
Importing css-namespaces/support/scope-002b.css to css-namespaces/support/scope-002b.css
|
||||
Importing css-namespaces/support/syntax-007.css to css-namespaces/support/syntax-007.css
|
||||
Importing css-namespaces/prefix-001.xml to css-namespaces/prefix-001.xml
|
||||
Importing css-namespaces/reftest/ref-lime-1.xml to css-namespaces/reftest/ref-lime-1.xml
|
||||
Importing css-namespaces/prefix-002.xml to css-namespaces/prefix-002.xml
|
||||
@ -350,52 +350,52 @@ Importing css-namespaces/syntax-013.xml to css-namespaces/syntax-013.xml
|
||||
Importing css-namespaces/syntax-014.xml to css-namespaces/syntax-014.xml
|
||||
Importing css-namespaces/syntax-015.xml to css-namespaces/syntax-015.xml
|
||||
Importing css-values/OWNERS to css-values/OWNERS
|
||||
Importing css-values/support/swatch-green.png to css-values/support/swatch-green.png
|
||||
Importing css-values/support/swatch-blue.png to css-values/support/swatch-blue.png
|
||||
Importing css-values/support/60x60-green.png to css-values/support/60x60-green.png
|
||||
Importing css-values/support/import-red.css to css-values/support/import-red.css
|
||||
Importing css-values/support/pattern-rgr-grg-rgr.png to css-values/support/pattern-rgr-grg-rgr.png
|
||||
Importing css-values/support/pattern-grg-rrg-rgg.png to css-values/support/pattern-grg-rrg-rgg.png
|
||||
Importing css-values/support/60x60-red.png to css-values/support/60x60-red.png
|
||||
Importing css-values/support/swatch-yellow.png to css-values/support/swatch-yellow.png
|
||||
Importing css-values/support/test-br.png to css-values/support/test-br.png
|
||||
Importing css-values/support/1x1-green.png to css-values/support/1x1-green.png
|
||||
Importing css-values/support/test-tl.png to css-values/support/test-tl.png
|
||||
Importing css-values/support/ruler-h-50%.png to css-values/support/ruler-h-50%.png
|
||||
Importing css-values/support/b-green.css to css-values/support/b-green.css
|
||||
Importing css-values/support/1x1-navy.png to css-values/support/1x1-navy.png
|
||||
Importing css-values/support/pattern-tr.png to css-values/support/pattern-tr.png
|
||||
Importing css-values/support/ruler-v-100px.png to css-values/support/ruler-v-100px.png
|
||||
Importing css-values/support/swatch-teal.png to css-values/support/swatch-teal.png
|
||||
Importing css-values/support/ruler-v-50px.png to css-values/support/ruler-v-50px.png
|
||||
Importing css-values/support/1x1-lime.png to css-values/support/1x1-lime.png
|
||||
Importing css-values/support/1x1-maroon.png to css-values/support/1x1-maroon.png
|
||||
Importing css-values/support/ruler-h-50px.png to css-values/support/ruler-h-50px.png
|
||||
Importing css-values/support/1x1-navy.png to css-values/support/1x1-navy.png
|
||||
Importing css-values/support/1x1-red.png to css-values/support/1x1-red.png
|
||||
Importing css-values/support/1x1-white.png to css-values/support/1x1-white.png
|
||||
Importing css-values/support/60x60-gg-rr.png to css-values/support/60x60-gg-rr.png
|
||||
Importing css-values/support/swatch-white.png to css-values/support/swatch-white.png
|
||||
Importing css-values/support/swatch-lime.png to css-values/support/swatch-lime.png
|
||||
Importing css-values/support/README to css-values/support/README
|
||||
Importing css-values/support/vh-support-transform-translate-iframe.html to css-values/support/vh-support-transform-translate-iframe.html
|
||||
Importing css-values/support/test-inner-half-size.png to css-values/support/test-inner-half-size.png
|
||||
Importing css-values/support/vh_not_refreshing_on_chrome_iframe.html to css-values/support/vh_not_refreshing_on_chrome_iframe.html
|
||||
Importing css-values/support/cat.png to css-values/support/cat.png
|
||||
Importing css-values/support/square-teal.png to css-values/support/square-teal.png
|
||||
Importing css-values/support/1x1-lime.png to css-values/support/1x1-lime.png
|
||||
Importing css-values/support/c-red.css to css-values/support/c-red.css
|
||||
Importing css-values/support/square-white.png to css-values/support/square-white.png
|
||||
Importing css-values/support/pattern-grg-rgr-grg.png to css-values/support/pattern-grg-rgr-grg.png
|
||||
Importing css-values/support/swatch-orange.png to css-values/support/swatch-orange.png
|
||||
Importing css-values/support/test-bl.png to css-values/support/test-bl.png
|
||||
Importing css-values/support/import-green.css to css-values/support/import-green.css
|
||||
Importing css-values/support/test-outer.png to css-values/support/test-outer.png
|
||||
Importing css-values/support/1x1-red.png to css-values/support/1x1-red.png
|
||||
Importing css-values/support/square-purple.png to css-values/support/square-purple.png
|
||||
Importing css-values/support/vh-support-transform-origin-iframe.html to css-values/support/vh-support-transform-origin-iframe.html
|
||||
Importing css-values/support/swatch-red.png to css-values/support/swatch-red.png
|
||||
Importing css-values/support/test-tr.png to css-values/support/test-tr.png
|
||||
Importing css-values/support/60x60-green.png to css-values/support/60x60-green.png
|
||||
Importing css-values/support/60x60-red.png to css-values/support/60x60-red.png
|
||||
Importing css-values/support/a-green.css to css-values/support/a-green.css
|
||||
Importing css-values/support/support/swatch-green.png to css-values/support/support/swatch-green.png
|
||||
Importing css-values/support/b-green.css to css-values/support/b-green.css
|
||||
Importing css-values/support/c-red.css to css-values/support/c-red.css
|
||||
Importing css-values/support/cat.png to css-values/support/cat.png
|
||||
Importing css-values/support/import-green.css to css-values/support/import-green.css
|
||||
Importing css-values/support/import-red.css to css-values/support/import-red.css
|
||||
Importing css-values/support/pattern-grg-rgr-grg.png to css-values/support/pattern-grg-rgr-grg.png
|
||||
Importing css-values/support/pattern-grg-rrg-rgg.png to css-values/support/pattern-grg-rrg-rgg.png
|
||||
Importing css-values/support/pattern-rgr-grg-rgr.png to css-values/support/pattern-rgr-grg-rgr.png
|
||||
Importing css-values/support/pattern-tr.png to css-values/support/pattern-tr.png
|
||||
Importing css-values/support/README to css-values/support/README
|
||||
Importing css-values/support/ruler-h-50%.png to css-values/support/ruler-h-50%.png
|
||||
Importing css-values/support/ruler-h-50px.png to css-values/support/ruler-h-50px.png
|
||||
Importing css-values/support/ruler-v-100px.png to css-values/support/ruler-v-100px.png
|
||||
Importing css-values/support/ruler-v-50px.png to css-values/support/ruler-v-50px.png
|
||||
Importing css-values/support/square-purple.png to css-values/support/square-purple.png
|
||||
Importing css-values/support/square-teal.png to css-values/support/square-teal.png
|
||||
Importing css-values/support/square-white.png to css-values/support/square-white.png
|
||||
Importing css-values/support/swatch-blue.png to css-values/support/swatch-blue.png
|
||||
Importing css-values/support/swatch-green.png to css-values/support/swatch-green.png
|
||||
Importing css-values/support/swatch-lime.png to css-values/support/swatch-lime.png
|
||||
Importing css-values/support/swatch-orange.png to css-values/support/swatch-orange.png
|
||||
Importing css-values/support/swatch-red.png to css-values/support/swatch-red.png
|
||||
Importing css-values/support/swatch-teal.png to css-values/support/swatch-teal.png
|
||||
Importing css-values/support/swatch-white.png to css-values/support/swatch-white.png
|
||||
Importing css-values/support/swatch-yellow.png to css-values/support/swatch-yellow.png
|
||||
Importing css-values/support/test-bl.png to css-values/support/test-bl.png
|
||||
Importing css-values/support/test-br.png to css-values/support/test-br.png
|
||||
Importing css-values/support/test-inner-half-size.png to css-values/support/test-inner-half-size.png
|
||||
Importing css-values/support/test-outer.png to css-values/support/test-outer.png
|
||||
Importing css-values/support/test-tl.png to css-values/support/test-tl.png
|
||||
Importing css-values/support/test-tr.png to css-values/support/test-tr.png
|
||||
Importing css-values/support/vh-support-transform-origin-iframe.html to css-values/support/vh-support-transform-origin-iframe.html
|
||||
Importing css-values/support/vh-support-transform-translate-iframe.html to css-values/support/vh-support-transform-translate-iframe.html
|
||||
Importing css-values/support/vh_not_refreshing_on_chrome_iframe.html to css-values/support/vh_not_refreshing_on_chrome_iframe.html
|
||||
Importing css-values/support/support/README to css-values/support/support/README
|
||||
Importing css-values/support/support/swatch-green.png to css-values/support/support/swatch-green.png
|
||||
Importing css-values/support/support/swatch-red.png to css-values/support/support/swatch-red.png
|
||||
Importing css-values/attr-color-invalid-cast.html to css-values/attr-color-invalid-cast.html
|
||||
Importing css-values/reference/200-200-green.html to css-values/reference/200-200-green.html
|
||||
@ -450,150 +450,150 @@ Importing css-values/vh-zero-support.html to css-values/vh-zero-support.html
|
||||
Importing css-values/vh_not_refreshing_on_chrome.html to css-values/vh_not_refreshing_on_chrome.html
|
||||
Importing css-values/reference/vh_not_refreshing_on_chrome-ref.html to css-values/reference/vh_not_refreshing_on_chrome-ref.html
|
||||
Importing css-writing-modes/OWNERS to css-writing-modes/OWNERS
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-023.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-023.html
|
||||
Importing css-writing-modes/support/form-controls-vlr.png to css-writing-modes/support/form-controls-vlr.png
|
||||
Importing css-writing-modes/support/swatch-green.png to css-writing-modes/support/swatch-green.png
|
||||
Importing css-writing-modes/support/swatch-blue.png to css-writing-modes/support/swatch-blue.png
|
||||
Importing css-writing-modes/support/bg-red-upp-left-corn-320x320.png to css-writing-modes/support/bg-red-upp-left-corn-320x320.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-019.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-019.html
|
||||
Importing css-writing-modes/support/yellow-square-vert-redline-right-59x59.png to css-writing-modes/support/yellow-square-vert-redline-right-59x59.png
|
||||
Importing css-writing-modes/support/swatch-olive.png to css-writing-modes/support/swatch-olive.png
|
||||
Importing css-writing-modes/support/pass-cdts-clearance-calculations.png to css-writing-modes/support/pass-cdts-clearance-calculations.png
|
||||
Importing css-writing-modes/support/swatch-yellow.png to css-writing-modes/support/swatch-yellow.png
|
||||
Importing css-writing-modes/support/bg-red-upp-rght-corn-320x320.png to css-writing-modes/support/bg-red-upp-rght-corn-320x320.png
|
||||
Importing css-writing-modes/support/text-orientation-sideways-right-001.png to css-writing-modes/support/text-orientation-sideways-right-001.png
|
||||
Importing css-writing-modes/support/test-br.png to css-writing-modes/support/test-br.png
|
||||
Importing css-writing-modes/support/right-side-filled-square-40x160.png to css-writing-modes/support/right-side-filled-square-40x160.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-015.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-015.html
|
||||
Importing css-writing-modes/support/vertical-form.png to css-writing-modes/support/vertical-form.png
|
||||
Importing css-writing-modes/support/sileot-webfont.woff to css-writing-modes/support/sileot-webfont.woff
|
||||
Importing css-writing-modes/support/blue-yellow-206w-165h.png to css-writing-modes/support/blue-yellow-206w-165h.png
|
||||
Importing css-writing-modes/support/swatch-fuchsia.png to css-writing-modes/support/swatch-fuchsia.png
|
||||
Importing css-writing-modes/support/block-flow-direction-066-exp-res.png to css-writing-modes/support/block-flow-direction-066-exp-res.png
|
||||
Importing css-writing-modes/support/pass-cdts-first-page-vrl-002.png to css-writing-modes/support/pass-cdts-first-page-vrl-002.png
|
||||
Importing css-writing-modes/support/test-tl.png to css-writing-modes/support/test-tl.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-014.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-014.html
|
||||
Importing css-writing-modes/support/pattern-gg-gr-100x100.png to css-writing-modes/support/pattern-gg-gr-100x100.png
|
||||
Importing css-writing-modes/support/pass-cdts-horiz-rule.png to css-writing-modes/support/pass-cdts-horiz-rule.png
|
||||
Importing css-writing-modes/support/left-center-green-200x300.png to css-writing-modes/support/left-center-green-200x300.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-022.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-022.html
|
||||
Importing css-writing-modes/support/pattern-rg-rg-100x100.png to css-writing-modes/support/pattern-rg-rg-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gg-rg-100x100.png to css-writing-modes/support/pattern-gg-rg-100x100.png
|
||||
Importing css-writing-modes/support/text-orientation-mixed-vrl-002.png to css-writing-modes/support/text-orientation-mixed-vrl-002.png
|
||||
Importing css-writing-modes/support/text-orientation.js to css-writing-modes/support/text-orientation.js
|
||||
Importing css-writing-modes/support/pattern-rg-gr-100x100.png to css-writing-modes/support/pattern-rg-gr-100x100.png
|
||||
Importing css-writing-modes/support/yellow-square-59x59.png to css-writing-modes/support/yellow-square-59x59.png
|
||||
Importing css-writing-modes/support/pass-cdts-abs-pos-non-replaced.png to css-writing-modes/support/pass-cdts-abs-pos-non-replaced.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-018.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-018.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-029.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-029.html
|
||||
Importing css-writing-modes/support/blue20x20.png to css-writing-modes/support/blue20x20.png
|
||||
Importing css-writing-modes/support/blue-horiz-line-220x1.png to css-writing-modes/support/blue-horiz-line-220x1.png
|
||||
Importing css-writing-modes/support/right-top-green-200x300.png to css-writing-modes/support/right-top-green-200x300.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-018.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-018.png
|
||||
Importing css-writing-modes/support/pattern-rg-rr-100x100.png to css-writing-modes/support/pattern-rg-rr-100x100.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-025.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-025.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-033.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-033.html
|
||||
Importing css-writing-modes/support/text-orientation-sideways-lr.png to css-writing-modes/support/text-orientation-sideways-lr.png
|
||||
Importing css-writing-modes/support/pass-cdts-float-contiguous.png to css-writing-modes/support/pass-cdts-float-contiguous.png
|
||||
Importing css-writing-modes/support/pattern-rg-gg-100x100.png to css-writing-modes/support/pattern-rg-gg-100x100.png
|
||||
Importing css-writing-modes/support/swatch-teal.png to css-writing-modes/support/swatch-teal.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-009.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-009.html
|
||||
Importing css-writing-modes/support/pattern-gg-rr-100x100.png to css-writing-modes/support/pattern-gg-rr-100x100.png
|
||||
Importing css-writing-modes/support/100x100-red.png to css-writing-modes/support/100x100-red.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-032.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-032.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-024.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-024.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-008.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-008.html
|
||||
Importing css-writing-modes/support/bg-red-low-left-corn-320x320.png to css-writing-modes/support/bg-red-low-left-corn-320x320.png
|
||||
Importing css-writing-modes/support/text-orientation-010.png to css-writing-modes/support/text-orientation-010.png
|
||||
Importing css-writing-modes/support/left-top-200x300.png to css-writing-modes/support/left-top-200x300.png
|
||||
Importing css-writing-modes/support/pass-cdts-first-page-vlr-003.png to css-writing-modes/support/pass-cdts-first-page-vlr-003.png
|
||||
Importing css-writing-modes/support/yellow-square-vert-redline-left-59x59.png to css-writing-modes/support/yellow-square-vert-redline-left-59x59.png
|
||||
Importing css-writing-modes/support/pass-cdts-box-offsets-rel-pos.png to css-writing-modes/support/pass-cdts-box-offsets-rel-pos.png
|
||||
Importing css-writing-modes/support/wm-propagation-body-003-exp-res.png to css-writing-modes/support/wm-propagation-body-003-exp-res.png
|
||||
Importing css-writing-modes/support/form-controls-slr.png to css-writing-modes/support/form-controls-slr.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-008.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-008.png
|
||||
Importing css-writing-modes/support/blue-horiz-line-320x1.png to css-writing-modes/support/blue-horiz-line-320x1.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-028.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-028.html
|
||||
Importing css-writing-modes/support/text-orientation-012.png to css-writing-modes/support/text-orientation-012.png
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-006.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-006.html
|
||||
Importing css-writing-modes/support/bg-red-low-rght-corn-320x320.png to css-writing-modes/support/bg-red-low-rght-corn-320x320.png
|
||||
Importing css-writing-modes/support/right-bottom-green-200x300.png to css-writing-modes/support/right-bottom-green-200x300.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-007.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-007.html
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-010.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-010.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-004.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-004.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p1.png to css-writing-modes/support/page-flow-direction-002p1.png
|
||||
Importing css-writing-modes/support/blue-vert-line-1x320.png to css-writing-modes/support/blue-vert-line-1x320.png
|
||||
Importing css-writing-modes/support/opaque-square-40x160.png to css-writing-modes/support/opaque-square-40x160.png
|
||||
Importing css-writing-modes/support/cat.png to css-writing-modes/support/cat.png
|
||||
Importing css-writing-modes/support/text-orientation-sideways-left-001.png to css-writing-modes/support/text-orientation-sideways-left-001.png
|
||||
Importing css-writing-modes/support/block-flow-direction-025-exp-res.png to css-writing-modes/support/block-flow-direction-025-exp-res.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p2.png to css-writing-modes/support/page-flow-direction-002p2.png
|
||||
Importing css-writing-modes/support/pattern-gr-rr-100x100.png to css-writing-modes/support/pattern-gr-rr-100x100.png
|
||||
Importing css-writing-modes/support/yellow-square-horiz-redline-bottom-59x59.png to css-writing-modes/support/yellow-square-horiz-redline-bottom-59x59.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p3.png to css-writing-modes/support/page-flow-direction-002p3.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-031.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-031.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-027.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-027.html
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-012.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-012.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-006.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-006.png
|
||||
Importing css-writing-modes/support/pattern-gr-gg-100x100.png to css-writing-modes/support/pattern-gr-gg-100x100.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-002.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-002.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-016.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-016.png
|
||||
Importing css-writing-modes/support/ortho-htb-alongside-vrl-floats-002-exp-res.png to css-writing-modes/support/ortho-htb-alongside-vrl-floats-002-exp-res.png
|
||||
Importing css-writing-modes/support/blue1x1.png to css-writing-modes/support/blue1x1.png
|
||||
Importing css-writing-modes/support/left-bottom-green-200x300.png to css-writing-modes/support/left-bottom-green-200x300.png
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-008.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-008.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-026.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-026.html
|
||||
Importing css-writing-modes/support/100x100-lime.png to css-writing-modes/support/100x100-lime.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-030.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-030.html
|
||||
Importing css-writing-modes/support/left-center-200x300.png to css-writing-modes/support/left-center-200x300.png
|
||||
Importing css-writing-modes/support/swatch-aqua.png to css-writing-modes/support/swatch-aqua.png
|
||||
Importing css-writing-modes/support/left-bottom-200x300.png to css-writing-modes/support/left-bottom-200x300.png
|
||||
Importing css-writing-modes/support/mplus-1p-regular.woff to css-writing-modes/support/mplus-1p-regular.woff
|
||||
Importing css-writing-modes/support/page-flow-direction-002p4.png to css-writing-modes/support/page-flow-direction-002p4.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-006.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-006.html
|
||||
Importing css-writing-modes/support/tcu-font.otf to css-writing-modes/support/tcu-font.otf
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-004.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-004.html
|
||||
Importing css-writing-modes/support/yellow-square-vert-redline-center-59x59.png to css-writing-modes/support/yellow-square-vert-redline-center-59x59.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-014.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-014.png
|
||||
Importing css-writing-modes/support/DejaVuSerif-webfont.woff to css-writing-modes/support/DejaVuSerif-webfont.woff
|
||||
Importing css-writing-modes/support/bg-red-3col-2row-320x320.png to css-writing-modes/support/bg-red-3col-2row-320x320.png
|
||||
Importing css-writing-modes/support/text-orientation-upright-001.png to css-writing-modes/support/text-orientation-upright-001.png
|
||||
Importing css-writing-modes/support/bg-red-2col-2row-320x320.png to css-writing-modes/support/bg-red-2col-2row-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-4col-3row-320x320.png to css-writing-modes/support/bg-red-4col-3row-320x320.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-021.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-021.html
|
||||
Importing css-writing-modes/support/swatch-orange.png to css-writing-modes/support/swatch-orange.png
|
||||
Importing css-writing-modes/support/test-bl.png to css-writing-modes/support/test-bl.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-017.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-017.html
|
||||
Importing css-writing-modes/support/100x100-red.png to css-writing-modes/support/100x100-red.png
|
||||
Importing css-writing-modes/support/bg-red-1col-2row-320x320.png to css-writing-modes/support/bg-red-1col-2row-320x320.png
|
||||
Importing css-writing-modes/support/clearance-calculation-vrl-002.png to css-writing-modes/support/clearance-calculation-vrl-002.png
|
||||
Importing css-writing-modes/support/blue-vert-line-1x220.png to css-writing-modes/support/blue-vert-line-1x220.png
|
||||
Importing css-writing-modes/support/form-controls-srl.png to css-writing-modes/support/form-controls-srl.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-016.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-016.html
|
||||
Importing css-writing-modes/support/margin-collapse-2em-space-wm-vert.png to css-writing-modes/support/margin-collapse-2em-space-wm-vert.png
|
||||
Importing css-writing-modes/support/clearance-calculation-vrl-006.png to css-writing-modes/support/clearance-calculation-vrl-006.png
|
||||
Importing css-writing-modes/support/test-tr.png to css-writing-modes/support/test-tr.png
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-002.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-002.html
|
||||
Importing css-writing-modes/support/right-center-green-200x300.png to css-writing-modes/support/right-center-green-200x300.png
|
||||
Importing css-writing-modes/support/bg-red-1col-3row-320x320.png to css-writing-modes/support/bg-red-1col-3row-320x320.png
|
||||
Importing css-writing-modes/support/right-top-200x300.png to css-writing-modes/support/right-top-200x300.png
|
||||
Importing css-writing-modes/support/right-center-200x300.png to css-writing-modes/support/right-center-200x300.png
|
||||
Importing css-writing-modes/support/bg-red-4col-2row-320x320.png to css-writing-modes/support/bg-red-4col-2row-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-2col-2row-320x320.png to css-writing-modes/support/bg-red-2col-2row-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-2col-3row-320x320.png to css-writing-modes/support/bg-red-2col-3row-320x320.png
|
||||
Importing css-writing-modes/support/pattern-gr-rg-100x100.png to css-writing-modes/support/pattern-gr-rg-100x100.png
|
||||
Importing css-writing-modes/support/tcu-font.woff to css-writing-modes/support/tcu-font.woff
|
||||
Importing css-writing-modes/support/pattern-rr-gr-100x100.png to css-writing-modes/support/pattern-rr-gr-100x100.png
|
||||
Importing css-writing-modes/support/right-bottom-200x300.png to css-writing-modes/support/right-bottom-200x300.png
|
||||
Importing css-writing-modes/support/pattern-gr-gr-100x100.png to css-writing-modes/support/pattern-gr-gr-100x100.png
|
||||
Importing css-writing-modes/support/clearance-calculation-vrl-004.png to css-writing-modes/support/clearance-calculation-vrl-004.png
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-020.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-020.html
|
||||
Importing css-writing-modes/support/left-side-filled-square-40x160.png to css-writing-modes/support/left-side-filled-square-40x160.png
|
||||
Importing css-writing-modes/support/bg-red-3col-2row-320x320.png to css-writing-modes/support/bg-red-3col-2row-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-3col-3row-320x320.png to css-writing-modes/support/bg-red-3col-3row-320x320.png
|
||||
Importing css-writing-modes/support/text-orientation-upright-vrl-002.png to css-writing-modes/support/text-orientation-upright-vrl-002.png
|
||||
Importing css-writing-modes/support/bg-red-4col-2row-320x320.png to css-writing-modes/support/bg-red-4col-2row-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-4col-3row-320x320.png to css-writing-modes/support/bg-red-4col-3row-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-low-left-corn-320x320.png to css-writing-modes/support/bg-red-low-left-corn-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-low-rght-corn-320x320.png to css-writing-modes/support/bg-red-low-rght-corn-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-upp-left-corn-320x320.png to css-writing-modes/support/bg-red-upp-left-corn-320x320.png
|
||||
Importing css-writing-modes/support/bg-red-upp-rght-corn-320x320.png to css-writing-modes/support/bg-red-upp-rght-corn-320x320.png
|
||||
Importing css-writing-modes/support/block-flow-direction-025-exp-res.png to css-writing-modes/support/block-flow-direction-025-exp-res.png
|
||||
Importing css-writing-modes/support/block-flow-direction-066-exp-res.png to css-writing-modes/support/block-flow-direction-066-exp-res.png
|
||||
Importing css-writing-modes/support/blue-horiz-line-220x1.png to css-writing-modes/support/blue-horiz-line-220x1.png
|
||||
Importing css-writing-modes/support/blue-horiz-line-320x1.png to css-writing-modes/support/blue-horiz-line-320x1.png
|
||||
Importing css-writing-modes/support/blue-vert-line-1x220.png to css-writing-modes/support/blue-vert-line-1x220.png
|
||||
Importing css-writing-modes/support/blue-vert-line-1x320.png to css-writing-modes/support/blue-vert-line-1x320.png
|
||||
Importing css-writing-modes/support/blue-yellow-206w-165h.png to css-writing-modes/support/blue-yellow-206w-165h.png
|
||||
Importing css-writing-modes/support/blue1x1.png to css-writing-modes/support/blue1x1.png
|
||||
Importing css-writing-modes/support/blue20x20.png to css-writing-modes/support/blue20x20.png
|
||||
Importing css-writing-modes/support/cat.png to css-writing-modes/support/cat.png
|
||||
Importing css-writing-modes/support/clearance-calculation-vrl-002.png to css-writing-modes/support/clearance-calculation-vrl-002.png
|
||||
Importing css-writing-modes/support/clearance-calculation-vrl-004.png to css-writing-modes/support/clearance-calculation-vrl-004.png
|
||||
Importing css-writing-modes/support/clearance-calculation-vrl-006.png to css-writing-modes/support/clearance-calculation-vrl-006.png
|
||||
Importing css-writing-modes/support/DejaVuSerif-webfont.woff to css-writing-modes/support/DejaVuSerif-webfont.woff
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-007.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-007.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-009.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-009.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-015.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-015.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-017.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-017.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-019.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-019.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-021.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-021.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-023.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-023.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-025.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-025.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-027.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-027.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-029.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-029.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-031.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-031.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-033.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vlr-033.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-006.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-006.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-008.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-008.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-014.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-014.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-016.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-016.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-018.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-018.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-020.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-020.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-022.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-022.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-024.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-024.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-026.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-026.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-028.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-028.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-030.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-030.html
|
||||
Importing css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-032.html to css-writing-modes/support/embedded-doc-abs-pos-non-replaced-icb-vrl-032.html
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-002.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-002.html
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-004.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-004.html
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-006.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-006.html
|
||||
Importing css-writing-modes/support/embedded-doc-for-background-size-root-vrl-008.html to css-writing-modes/support/embedded-doc-for-background-size-root-vrl-008.html
|
||||
Importing css-writing-modes/support/form-controls-slr.png to css-writing-modes/support/form-controls-slr.png
|
||||
Importing css-writing-modes/support/form-controls-srl.png to css-writing-modes/support/form-controls-srl.png
|
||||
Importing css-writing-modes/support/form-controls-vlr.png to css-writing-modes/support/form-controls-vlr.png
|
||||
Importing css-writing-modes/support/left-bottom-200x300.png to css-writing-modes/support/left-bottom-200x300.png
|
||||
Importing css-writing-modes/support/left-bottom-green-200x300.png to css-writing-modes/support/left-bottom-green-200x300.png
|
||||
Importing css-writing-modes/support/left-center-200x300.png to css-writing-modes/support/left-center-200x300.png
|
||||
Importing css-writing-modes/support/left-center-green-200x300.png to css-writing-modes/support/left-center-green-200x300.png
|
||||
Importing css-writing-modes/support/left-side-filled-square-40x160.png to css-writing-modes/support/left-side-filled-square-40x160.png
|
||||
Importing css-writing-modes/support/left-top-200x300.png to css-writing-modes/support/left-top-200x300.png
|
||||
Importing css-writing-modes/support/margin-collapse-2em-space-wm-vert.png to css-writing-modes/support/margin-collapse-2em-space-wm-vert.png
|
||||
Importing css-writing-modes/support/mplus-1p-regular.woff to css-writing-modes/support/mplus-1p-regular.woff
|
||||
Importing css-writing-modes/support/opaque-square-40x160.png to css-writing-modes/support/opaque-square-40x160.png
|
||||
Importing css-writing-modes/support/ortho-htb-alongside-vrl-floats-002-exp-res.png to css-writing-modes/support/ortho-htb-alongside-vrl-floats-002-exp-res.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p1.png to css-writing-modes/support/page-flow-direction-002p1.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p2.png to css-writing-modes/support/page-flow-direction-002p2.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p3.png to css-writing-modes/support/page-flow-direction-002p3.png
|
||||
Importing css-writing-modes/support/page-flow-direction-002p4.png to css-writing-modes/support/page-flow-direction-002p4.png
|
||||
Importing css-writing-modes/support/pass-cdts-abs-pos-non-replaced.png to css-writing-modes/support/pass-cdts-abs-pos-non-replaced.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-002.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-002.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-004.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-004.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-006.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-006.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-008.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-008.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-010.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-010.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-012.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-012.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-014.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-014.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-016.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-016.png
|
||||
Importing css-writing-modes/support/pass-cdts-bg-pos-vrl-018.png to css-writing-modes/support/pass-cdts-bg-pos-vrl-018.png
|
||||
Importing css-writing-modes/support/pass-cdts-box-offsets-rel-pos.png to css-writing-modes/support/pass-cdts-box-offsets-rel-pos.png
|
||||
Importing css-writing-modes/support/pass-cdts-clearance-calculations.png to css-writing-modes/support/pass-cdts-clearance-calculations.png
|
||||
Importing css-writing-modes/support/pass-cdts-first-page-vlr-003.png to css-writing-modes/support/pass-cdts-first-page-vlr-003.png
|
||||
Importing css-writing-modes/support/pass-cdts-first-page-vrl-002.png to css-writing-modes/support/pass-cdts-first-page-vrl-002.png
|
||||
Importing css-writing-modes/support/pass-cdts-float-contiguous.png to css-writing-modes/support/pass-cdts-float-contiguous.png
|
||||
Importing css-writing-modes/support/pass-cdts-horiz-rule.png to css-writing-modes/support/pass-cdts-horiz-rule.png
|
||||
Importing css-writing-modes/support/pattern-gg-gr-100x100.png to css-writing-modes/support/pattern-gg-gr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gg-rg-100x100.png to css-writing-modes/support/pattern-gg-rg-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gg-rr-100x100.png to css-writing-modes/support/pattern-gg-rr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gr-gg-100x100.png to css-writing-modes/support/pattern-gr-gg-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gr-gr-100x100.png to css-writing-modes/support/pattern-gr-gr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gr-rg-100x100.png to css-writing-modes/support/pattern-gr-rg-100x100.png
|
||||
Importing css-writing-modes/support/pattern-gr-rr-100x100.png to css-writing-modes/support/pattern-gr-rr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-rg-gg-100x100.png to css-writing-modes/support/pattern-rg-gg-100x100.png
|
||||
Importing css-writing-modes/support/pattern-rg-gr-100x100.png to css-writing-modes/support/pattern-rg-gr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-rg-rg-100x100.png to css-writing-modes/support/pattern-rg-rg-100x100.png
|
||||
Importing css-writing-modes/support/pattern-rg-rr-100x100.png to css-writing-modes/support/pattern-rg-rr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-rr-gr-100x100.png to css-writing-modes/support/pattern-rr-gr-100x100.png
|
||||
Importing css-writing-modes/support/pattern-rr-rg-100x100.png to css-writing-modes/support/pattern-rr-rg-100x100.png
|
||||
Importing css-writing-modes/support/right-bottom-200x300.png to css-writing-modes/support/right-bottom-200x300.png
|
||||
Importing css-writing-modes/support/right-bottom-green-200x300.png to css-writing-modes/support/right-bottom-green-200x300.png
|
||||
Importing css-writing-modes/support/right-center-200x300.png to css-writing-modes/support/right-center-200x300.png
|
||||
Importing css-writing-modes/support/right-center-green-200x300.png to css-writing-modes/support/right-center-green-200x300.png
|
||||
Importing css-writing-modes/support/right-side-filled-square-40x160.png to css-writing-modes/support/right-side-filled-square-40x160.png
|
||||
Importing css-writing-modes/support/right-top-200x300.png to css-writing-modes/support/right-top-200x300.png
|
||||
Importing css-writing-modes/support/right-top-green-200x300.png to css-writing-modes/support/right-top-green-200x300.png
|
||||
Importing css-writing-modes/support/sileot-webfont.woff to css-writing-modes/support/sileot-webfont.woff
|
||||
Importing css-writing-modes/support/swatch-aqua.png to css-writing-modes/support/swatch-aqua.png
|
||||
Importing css-writing-modes/support/swatch-blue.png to css-writing-modes/support/swatch-blue.png
|
||||
Importing css-writing-modes/support/swatch-fuchsia.png to css-writing-modes/support/swatch-fuchsia.png
|
||||
Importing css-writing-modes/support/swatch-green.png to css-writing-modes/support/swatch-green.png
|
||||
Importing css-writing-modes/support/swatch-olive.png to css-writing-modes/support/swatch-olive.png
|
||||
Importing css-writing-modes/support/swatch-orange.png to css-writing-modes/support/swatch-orange.png
|
||||
Importing css-writing-modes/support/swatch-teal.png to css-writing-modes/support/swatch-teal.png
|
||||
Importing css-writing-modes/support/swatch-yellow.png to css-writing-modes/support/swatch-yellow.png
|
||||
Importing css-writing-modes/support/tcu-font.otf to css-writing-modes/support/tcu-font.otf
|
||||
Importing css-writing-modes/support/tcu-font.woff to css-writing-modes/support/tcu-font.woff
|
||||
Importing css-writing-modes/support/test-bl.png to css-writing-modes/support/test-bl.png
|
||||
Importing css-writing-modes/support/test-br.png to css-writing-modes/support/test-br.png
|
||||
Importing css-writing-modes/support/test-tl.png to css-writing-modes/support/test-tl.png
|
||||
Importing css-writing-modes/support/test-tr.png to css-writing-modes/support/test-tr.png
|
||||
Importing css-writing-modes/support/text-orientation-010.png to css-writing-modes/support/text-orientation-010.png
|
||||
Importing css-writing-modes/support/text-orientation-012.png to css-writing-modes/support/text-orientation-012.png
|
||||
Importing css-writing-modes/support/text-orientation-mixed-vrl-002.png to css-writing-modes/support/text-orientation-mixed-vrl-002.png
|
||||
Importing css-writing-modes/support/text-orientation-sideways-left-001.png to css-writing-modes/support/text-orientation-sideways-left-001.png
|
||||
Importing css-writing-modes/support/text-orientation-sideways-lr.png to css-writing-modes/support/text-orientation-sideways-lr.png
|
||||
Importing css-writing-modes/support/text-orientation-sideways-right-001.png to css-writing-modes/support/text-orientation-sideways-right-001.png
|
||||
Importing css-writing-modes/support/text-orientation-upright-001.png to css-writing-modes/support/text-orientation-upright-001.png
|
||||
Importing css-writing-modes/support/text-orientation-upright-vrl-002.png to css-writing-modes/support/text-orientation-upright-vrl-002.png
|
||||
Importing css-writing-modes/support/text-orientation.js to css-writing-modes/support/text-orientation.js
|
||||
Importing css-writing-modes/support/vertical-form.png to css-writing-modes/support/vertical-form.png
|
||||
Importing css-writing-modes/support/wm-propagation-body-003-exp-res.png to css-writing-modes/support/wm-propagation-body-003-exp-res.png
|
||||
Importing css-writing-modes/support/yellow-square-59x59.png to css-writing-modes/support/yellow-square-59x59.png
|
||||
Importing css-writing-modes/support/yellow-square-horiz-redline-bottom-59x59.png to css-writing-modes/support/yellow-square-horiz-redline-bottom-59x59.png
|
||||
Importing css-writing-modes/support/yellow-square-vert-redline-center-59x59.png to css-writing-modes/support/yellow-square-vert-redline-center-59x59.png
|
||||
Importing css-writing-modes/support/yellow-square-vert-redline-left-59x59.png to css-writing-modes/support/yellow-square-vert-redline-left-59x59.png
|
||||
Importing css-writing-modes/support/yellow-square-vert-redline-right-59x59.png to css-writing-modes/support/yellow-square-vert-redline-right-59x59.png
|
||||
Importing css-writing-modes/support/adobe-fonts/CSSFWOrientationTest.otf to css-writing-modes/support/adobe-fonts/CSSFWOrientationTest.otf
|
||||
Importing css-writing-modes/support/adobe-fonts/CSSHWOrientationTest.otf to css-writing-modes/support/adobe-fonts/CSSHWOrientationTest.otf
|
||||
Importing css-writing-modes/support/adobe-fonts/LICENSE to css-writing-modes/support/adobe-fonts/LICENSE
|
||||
Importing css-writing-modes/support/adobe-fonts/README.md to css-writing-modes/support/adobe-fonts/README.md
|
||||
Importing css-writing-modes/support/adobe-fonts/CSSHWOrientationTest.otf to css-writing-modes/support/adobe-fonts/CSSHWOrientationTest.otf
|
||||
Importing css-writing-modes/support/adobe-fonts/CSSFWOrientationTest.otf to css-writing-modes/support/adobe-fonts/CSSFWOrientationTest.otf
|
||||
Importing css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht to css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht
|
||||
Importing css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht to css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht
|
||||
Importing css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht to css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
|
||||
|
@ -242,6 +242,927 @@ skip == css-values/vh-support-transform-translate.html css-values/reference/all-
|
||||
== css-values/vh-support.html css-values/reference/all-green.html
|
||||
== css-values/vh-zero-support.html css-values/reference/all-green.html
|
||||
skip == css-values/vh_not_refreshing_on_chrome.html css-values/reference/vh_not_refreshing_on_chrome-ref.html
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-009.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-011.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-013.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-015.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-017.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-019.xht reference/ref-filled-green-100px-square.xht
|
||||
skip == css-writing-modes/abs-pos-non-replaced-icb-vlr-021.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-023.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-025.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-027.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-029.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-031.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-033.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-004.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-006.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-008.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-010.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-012.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-014.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-016.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-018.xht reference/ref-filled-green-100px-square.xht
|
||||
skip == css-writing-modes/abs-pos-non-replaced-icb-vrl-020.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-022.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-024.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-026.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-028.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-030.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vrl-032.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-005.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-007.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-009.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-011.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-013.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-015.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-017.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-019.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-021.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-023.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-025.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-027.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-029.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-031.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-033.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-035.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-037.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-039.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-041.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-043.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-045.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-047.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-049.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-051.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-053.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-055.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-057.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-059.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-061.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-063.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-065.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-067.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-069.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-071.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-073.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-075.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-077.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-079.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-081.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-083.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-085.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-087.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-089.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-091.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-093.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-095.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-097.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-103.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-105.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-107.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-109.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-111.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-113.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-115.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-117.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-119.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-121.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-123.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-125.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-127.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-129.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-131.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-133.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-135.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-137.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-139.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-141.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-143.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-145.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-147.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-149.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-151.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-153.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-155.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-157.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-159.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-161.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-163.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-165.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-167.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-169.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-171.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-173.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-175.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-177.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-179.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-181.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-183.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-185.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-187.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-189.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-191.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-193.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-195.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-197.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-199.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-201.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-203.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-205.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-207.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-209.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-211.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-213.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-215.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-217.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-219.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-221.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-223.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-225.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-227.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-229.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-004.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-006.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-008.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-010.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-012.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-014.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-016.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-018.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-020.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-022.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-024.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-026.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-028.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-030.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-032.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-034.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-036.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-038.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-040.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-042.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-044.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-046.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-048.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-050.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-052.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-054.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-056.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-058.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-060.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-062.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-064.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-066.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-068.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-070.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-072.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-074.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-076.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-078.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-080.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-082.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-084.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-086.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-088.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-090.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-092.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-094.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-096.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-102.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-104.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-106.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-108.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-110.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-112.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-114.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-116.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-118.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-120.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-122.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-124.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-126.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-128.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-130.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-132.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-134.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-136.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-138.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-140.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-142.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-144.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-146.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-148.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-150.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-152.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-154.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-156.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-158.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-160.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-162.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-164.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-166.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-168.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-170.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-172.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-174.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-176.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-178.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-180.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-182.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-184.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-186.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-188.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-190.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-192.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-194.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-196.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-198.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-200.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-202.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-204.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-206.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-208.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-210.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-212.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-214.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-216.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-218.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-220.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-222.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-224.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-226.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-228.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
== css-writing-modes/background-position-vrl-018.xht css-writing-modes/background-position-vrl-018-ref.xht
|
||||
== css-writing-modes/background-position-vrl-020.xht css-writing-modes/background-position-vrl-018-ref.xht
|
||||
== css-writing-modes/background-position-vrl-022.xht css-writing-modes/background-position-vrl-018-ref.xht
|
||||
== css-writing-modes/background-size-document-root-vrl-002.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
|
||||
== css-writing-modes/background-size-document-root-vrl-004.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
|
||||
== css-writing-modes/background-size-document-root-vrl-006.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
|
||||
== css-writing-modes/background-size-document-root-vrl-008.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,114,600) == css-writing-modes/baseline-inline-non-replaced-002.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,114,600) == css-writing-modes/baseline-inline-non-replaced-003.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,114,600) == css-writing-modes/baseline-inline-non-replaced-004.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,114,600) == css-writing-modes/baseline-inline-non-replaced-005.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/baseline-inline-replaced-002.xht css-writing-modes/baseline-inline-replaced-002-ref.xht
|
||||
== css-writing-modes/baseline-inline-replaced-003.xht css-writing-modes/baseline-inline-replaced-002-ref.xht
|
||||
== css-writing-modes/bidi-embed-001.html css-writing-modes/reference/bidi-embed-001.html
|
||||
== css-writing-modes/bidi-embed-002.html css-writing-modes/reference/bidi-embed-002.html
|
||||
== css-writing-modes/bidi-embed-003.html css-writing-modes/reference/bidi-embed-003.html
|
||||
== css-writing-modes/bidi-embed-004.html css-writing-modes/reference/bidi-embed-004.html
|
||||
== css-writing-modes/bidi-embed-005.html css-writing-modes/reference/bidi-embed-005.html
|
||||
== css-writing-modes/bidi-embed-006.html css-writing-modes/reference/bidi-embed-006.html
|
||||
== css-writing-modes/bidi-embed-007.html css-writing-modes/reference/bidi-embed-007.html
|
||||
== css-writing-modes/bidi-embed-008.html css-writing-modes/reference/bidi-embed-008.html
|
||||
== css-writing-modes/bidi-embed-009.html css-writing-modes/reference/bidi-embed-009.html
|
||||
== css-writing-modes/bidi-embed-010.html css-writing-modes/reference/bidi-embed-010.html
|
||||
== css-writing-modes/bidi-embed-011.html css-writing-modes/reference/bidi-embed-011.html
|
||||
== css-writing-modes/bidi-isolate-001.html css-writing-modes/reference/bidi-isolate-001.html
|
||||
== css-writing-modes/bidi-isolate-002.html css-writing-modes/reference/bidi-isolate-002.html
|
||||
== css-writing-modes/bidi-isolate-003.html css-writing-modes/reference/bidi-isolate-003.html
|
||||
== css-writing-modes/bidi-isolate-004.html css-writing-modes/reference/bidi-isolate-004.html
|
||||
== css-writing-modes/bidi-isolate-005.html css-writing-modes/reference/bidi-isolate-005.html
|
||||
== css-writing-modes/bidi-isolate-006.html css-writing-modes/reference/bidi-isolate-006.html
|
||||
== css-writing-modes/bidi-isolate-007.html css-writing-modes/reference/bidi-isolate-007.html
|
||||
== css-writing-modes/bidi-isolate-008.html css-writing-modes/reference/bidi-isolate-008.html
|
||||
== css-writing-modes/bidi-isolate-009.html css-writing-modes/reference/bidi-isolate-009.html
|
||||
== css-writing-modes/bidi-isolate-010.html css-writing-modes/reference/bidi-isolate-010.html
|
||||
== css-writing-modes/bidi-isolate-011.html css-writing-modes/reference/bidi-embed-011.html
|
||||
== css-writing-modes/bidi-isolate-override-001.html css-writing-modes/reference/bidi-isolate-override-001.html
|
||||
== css-writing-modes/bidi-isolate-override-002.html css-writing-modes/reference/bidi-isolate-override-002.html
|
||||
== css-writing-modes/bidi-isolate-override-003.html css-writing-modes/reference/bidi-isolate-override-003.html
|
||||
== css-writing-modes/bidi-isolate-override-004.html css-writing-modes/reference/bidi-isolate-override-004.html
|
||||
== css-writing-modes/bidi-isolate-override-005.html css-writing-modes/reference/bidi-isolate-override-005.html
|
||||
== css-writing-modes/bidi-isolate-override-006.html css-writing-modes/reference/bidi-isolate-override-006.html
|
||||
== css-writing-modes/bidi-isolate-override-007.html css-writing-modes/reference/bidi-isolate-override-007.html
|
||||
== css-writing-modes/bidi-isolate-override-008.html css-writing-modes/reference/bidi-isolate-override-008.html
|
||||
== css-writing-modes/bidi-isolate-override-009.html css-writing-modes/reference/bidi-isolate-override-009.html
|
||||
== css-writing-modes/bidi-isolate-override-010.html css-writing-modes/reference/bidi-isolate-override-010.html
|
||||
== css-writing-modes/bidi-isolate-override-011.html css-writing-modes/reference/bidi-isolate-override-011.html
|
||||
== css-writing-modes/bidi-isolate-override-012.html css-writing-modes/reference/bidi-isolate-override-012.html
|
||||
== css-writing-modes/bidi-normal-001.html css-writing-modes/reference/bidi-normal-001.html
|
||||
== css-writing-modes/bidi-normal-002.html css-writing-modes/reference/bidi-normal-002.html
|
||||
== css-writing-modes/bidi-normal-003.html css-writing-modes/reference/bidi-normal-003.html
|
||||
== css-writing-modes/bidi-normal-004.html css-writing-modes/reference/bidi-normal-004.html
|
||||
== css-writing-modes/bidi-normal-005.html css-writing-modes/reference/bidi-normal-005.html
|
||||
== css-writing-modes/bidi-normal-006.html css-writing-modes/reference/bidi-normal-006.html
|
||||
== css-writing-modes/bidi-normal-007.html css-writing-modes/reference/bidi-normal-007.html
|
||||
== css-writing-modes/bidi-normal-008.html css-writing-modes/reference/bidi-normal-008.html
|
||||
== css-writing-modes/bidi-normal-009.html css-writing-modes/reference/bidi-normal-009.html
|
||||
== css-writing-modes/bidi-normal-010.html css-writing-modes/reference/bidi-normal-010.html
|
||||
== css-writing-modes/bidi-normal-011.html css-writing-modes/reference/bidi-normal-011.html
|
||||
== css-writing-modes/bidi-override-001.html css-writing-modes/reference/bidi-override-001.html
|
||||
== css-writing-modes/bidi-override-002.html css-writing-modes/reference/bidi-override-002.html
|
||||
== css-writing-modes/bidi-override-003.html css-writing-modes/reference/bidi-override-003.html
|
||||
== css-writing-modes/bidi-override-004.html css-writing-modes/reference/bidi-override-004.html
|
||||
== css-writing-modes/bidi-override-005.html css-writing-modes/reference/bidi-override-005.html
|
||||
== css-writing-modes/bidi-override-006.html css-writing-modes/reference/bidi-override-006.html
|
||||
== css-writing-modes/bidi-override-007.html css-writing-modes/reference/bidi-override-007.html
|
||||
== css-writing-modes/bidi-override-008.html css-writing-modes/reference/bidi-override-008.html
|
||||
== css-writing-modes/bidi-override-009.html css-writing-modes/reference/bidi-override-009.html
|
||||
== css-writing-modes/bidi-override-010.html css-writing-modes/reference/bidi-override-010.html
|
||||
== css-writing-modes/bidi-override-011.html css-writing-modes/reference/bidi-override-011.html
|
||||
== css-writing-modes/bidi-override-012.html css-writing-modes/reference/bidi-override-012.html
|
||||
== css-writing-modes/bidi-plaintext-001.html css-writing-modes/reference/bidi-plaintext-001.html
|
||||
== css-writing-modes/bidi-plaintext-002.html css-writing-modes/reference/bidi-plaintext-002.html
|
||||
== css-writing-modes/bidi-plaintext-003.html css-writing-modes/reference/bidi-plaintext-003.html
|
||||
== css-writing-modes/bidi-plaintext-004.html css-writing-modes/reference/bidi-plaintext-004.html
|
||||
== css-writing-modes/bidi-plaintext-005.html css-writing-modes/reference/bidi-plaintext-005.html
|
||||
== css-writing-modes/bidi-plaintext-006.html css-writing-modes/reference/bidi-plaintext-006.html
|
||||
== css-writing-modes/bidi-plaintext-007.html css-writing-modes/reference/bidi-plaintext-007.html
|
||||
== css-writing-modes/bidi-plaintext-008.html css-writing-modes/reference/bidi-plaintext-008.html
|
||||
== css-writing-modes/bidi-plaintext-009.html css-writing-modes/reference/bidi-plaintext-009.html
|
||||
== css-writing-modes/bidi-plaintext-010.html css-writing-modes/reference/bidi-plaintext-010.html
|
||||
== css-writing-modes/bidi-plaintext-011.html css-writing-modes/reference/bidi-plaintext-011.html
|
||||
skip == css-writing-modes/bidi-table-001.html css-writing-modes/reference/bidi-table-001.html
|
||||
== css-writing-modes/bidi-unset-001.html css-writing-modes/reference/bidi-normal-001.html
|
||||
== css-writing-modes/bidi-unset-002.html css-writing-modes/reference/bidi-normal-002.html
|
||||
== css-writing-modes/bidi-unset-003.html css-writing-modes/reference/bidi-normal-003.html
|
||||
== css-writing-modes/bidi-unset-004.html css-writing-modes/reference/bidi-normal-004.html
|
||||
== css-writing-modes/bidi-unset-005.html css-writing-modes/reference/bidi-normal-005.html
|
||||
== css-writing-modes/bidi-unset-006.html css-writing-modes/reference/bidi-normal-006.html
|
||||
== css-writing-modes/bidi-unset-007.html css-writing-modes/reference/bidi-normal-007.html
|
||||
== css-writing-modes/bidi-unset-008.html css-writing-modes/reference/bidi-normal-008.html
|
||||
== css-writing-modes/bidi-unset-009.html css-writing-modes/reference/bidi-normal-009.html
|
||||
== css-writing-modes/bidi-unset-010.html css-writing-modes/reference/bidi-normal-010.html
|
||||
== css-writing-modes/block-embed-001.html css-writing-modes/reference/block-embed-001.html
|
||||
== css-writing-modes/block-embed-002.html css-writing-modes/reference/block-embed-002.html
|
||||
== css-writing-modes/block-embed-003.html css-writing-modes/reference/block-embed-003.html
|
||||
== css-writing-modes/block-flow-direction-004.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-htb-001.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-043.xht css-writing-modes/block-flow-direction-043-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-047.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-048.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-050.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-054.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-055.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-056.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fails == css-writing-modes/block-flow-direction-slr-058.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-060.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-062.xht css-writing-modes/block-flow-direction-043-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-063.xht css-writing-modes/block-flow-direction-043-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-066.xht css-writing-modes/block-flow-direction-066-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-042.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-045.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-046.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-049.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-051.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-052.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-053.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fails == css-writing-modes/block-flow-direction-srl-057.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-059.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-061.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-064.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-065.xht css-writing-modes/block-flow-direction-025-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-007.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-008.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-010.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-014.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-015.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-016.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fails == css-writing-modes/block-flow-direction-vlr-018.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-020.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-022.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-023.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-002.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-005.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-009.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-011.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-012.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-013.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fails == css-writing-modes/block-flow-direction-vrl-017.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-019.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-021.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-024.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-025.xht css-writing-modes/block-flow-direction-025-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-026.xht css-writing-modes/block-flow-direction-vrl-026-ref.xht
|
||||
== css-writing-modes/block-override-001.html css-writing-modes/reference/block-override-001.html
|
||||
== css-writing-modes/block-override-002.html css-writing-modes/reference/block-override-002.html
|
||||
== css-writing-modes/block-override-003.html css-writing-modes/reference/block-override-003.html
|
||||
== css-writing-modes/block-override-004.html css-writing-modes/reference/block-override-004.html
|
||||
== css-writing-modes/block-override-isolate-001.html css-writing-modes/reference/block-override-isolate-001.html
|
||||
== css-writing-modes/block-override-isolate-002.html css-writing-modes/reference/block-override-isolate-002.html
|
||||
== css-writing-modes/block-override-isolate-003.html css-writing-modes/reference/block-override-isolate-003.html
|
||||
== css-writing-modes/block-override-isolate-004.html css-writing-modes/reference/block-override-isolate-004.html
|
||||
== css-writing-modes/block-plaintext-001.html css-writing-modes/reference/block-plaintext-001.html
|
||||
== css-writing-modes/block-plaintext-002.html css-writing-modes/reference/block-plaintext-002.html
|
||||
== css-writing-modes/block-plaintext-003.html css-writing-modes/reference/block-plaintext-003.html
|
||||
== css-writing-modes/block-plaintext-004.html css-writing-modes/reference/block-plaintext-004.html
|
||||
skip == css-writing-modes/block-plaintext-006.html css-writing-modes/reference/block-plaintext-006.html
|
||||
== css-writing-modes/border-conflict-element-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vlr-009.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vlr-011.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vlr-013.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vrl-004.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vrl-006.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vrl-008.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vrl-010.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-conflict-element-vrl-012.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/border-spacing-vlr-003.xht css-writing-modes/border-spacing-vrl-002-ref.xht
|
||||
== css-writing-modes/border-spacing-vlr-005.xht css-writing-modes/border-spacing-vrl-002-ref.xht
|
||||
== css-writing-modes/border-spacing-vrl-002.xht css-writing-modes/border-spacing-vrl-002-ref.xht
|
||||
== css-writing-modes/border-spacing-vrl-004.xht css-writing-modes/border-spacing-vrl-002-ref.xht
|
||||
== css-writing-modes/border-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/border-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/box-offsets-rel-pos-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
fuzzy-if(OSX,255,200) == css-writing-modes/box-offsets-rel-pos-vlr-005.xht css-writing-modes/box-offsets-rel-pos-vlr-005-ref.xht
|
||||
== css-writing-modes/box-offsets-rel-pos-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
fuzzy-if(OSX,255,200) == css-writing-modes/box-offsets-rel-pos-vrl-004.xht css-writing-modes/box-offsets-rel-pos-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,114,300) == css-writing-modes/caption-side-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,114,300) == css-writing-modes/caption-side-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,114,300) == css-writing-modes/caption-side-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,114,300) == css-writing-modes/caption-side-vrl-004.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/central-baseline-alignment-002.xht css-writing-modes/central-baseline-alignment-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/central-baseline-alignment-003.xht css-writing-modes/central-baseline-alignment-002-ref.xht
|
||||
== css-writing-modes/clearance-calculations-vrl-002.xht css-writing-modes/clearance-calculations-vrl-002-ref.xht
|
||||
== css-writing-modes/clearance-calculations-vrl-004.xht css-writing-modes/clearance-calculations-vrl-004-ref.xht
|
||||
== css-writing-modes/clearance-calculations-vrl-006.xht css-writing-modes/clearance-calculations-vrl-006-ref.xht
|
||||
== css-writing-modes/clearance-calculations-vrl-008.xht css-writing-modes/clearance-calculations-vrl-008-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-003.xht css-writing-modes/clip-rect-vrl-002-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-005.xht css-writing-modes/clip-rect-vrl-004-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-007.xht css-writing-modes/clip-rect-vrl-006-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-009.xht css-writing-modes/clip-rect-vrl-008-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-011.xht css-writing-modes/clip-rect-vlr-011-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-013.xht css-writing-modes/clip-rect-vlr-013-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-015.xht css-writing-modes/clip-rect-vlr-015-ref.xht
|
||||
== css-writing-modes/clip-rect-vlr-017.xht css-writing-modes/clip-rect-vlr-017-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-002.xht css-writing-modes/clip-rect-vrl-002-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-004.xht css-writing-modes/clip-rect-vrl-004-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-006.xht css-writing-modes/clip-rect-vrl-006-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-008.xht css-writing-modes/clip-rect-vrl-008-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-010.xht css-writing-modes/clip-rect-vrl-010-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-012.xht css-writing-modes/clip-rect-vrl-012-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-014.xht css-writing-modes/clip-rect-vrl-014-ref.xht
|
||||
== css-writing-modes/clip-rect-vrl-016.xht css-writing-modes/clip-rect-vrl-016-ref.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vlr-009.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vrl-004.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vrl-006.xht reference/ref-filled-green-100px-square.xht
|
||||
fails == css-writing-modes/contiguous-floated-table-vrl-008.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(webrender&&cocoaWidget,15-15,3-3) == css-writing-modes/different-block-flow-dir-001.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(webrender&&cocoaWidget,7-7,2-2) == css-writing-modes/different-block-flow-dir-002.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/direction-vlr-003.xht css-writing-modes/direction-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/direction-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/direction-vrl-002.xht css-writing-modes/direction-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/direction-vrl-004.xht css-writing-modes/direction-vrl-004-ref.xht
|
||||
== css-writing-modes/flexbox_align-items-stretch-writing-modes.html css-writing-modes/flexbox_align-items-stretch-writing-modes-ref.html
|
||||
== css-writing-modes/float-clear-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vlr-009.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vrl-004.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vrl-006.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-clear-vrl-008.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-contiguous-vlr-003.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
|
||||
== css-writing-modes/float-contiguous-vlr-005.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
|
||||
== css-writing-modes/float-contiguous-vlr-007.xht css-writing-modes/float-contiguous-vlr-007-ref.xht
|
||||
== css-writing-modes/float-contiguous-vlr-009.xht css-writing-modes/float-contiguous-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vlr-011.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vlr-013.xht css-writing-modes/float-contiguous-vrl-012-ref.xht
|
||||
== css-writing-modes/float-contiguous-vrl-002.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
|
||||
== css-writing-modes/float-contiguous-vrl-004.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
|
||||
== css-writing-modes/float-contiguous-vrl-006.xht css-writing-modes/float-contiguous-vrl-006-ref.xht
|
||||
== css-writing-modes/float-contiguous-vrl-008.xht css-writing-modes/float-contiguous-vrl-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vrl-010.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vrl-012.xht css-writing-modes/float-contiguous-vrl-012-ref.xht
|
||||
fails == css-writing-modes/float-lft-orthog-htb-in-vlr-002.xht css-writing-modes/float-lft-orthog-htb-in-vlr-002-ref.xht
|
||||
fails == css-writing-modes/float-lft-orthog-htb-in-vrl-002.xht css-writing-modes/float-lft-orthog-htb-in-vrl-002-ref.xht
|
||||
fails == css-writing-modes/float-lft-orthog-vlr-in-htb-002.xht css-writing-modes/float-lft-orthog-vlr-in-htb-002-ref.xht
|
||||
fails == css-writing-modes/float-lft-orthog-vrl-in-htb-002.xht css-writing-modes/float-lft-orthog-vrl-in-htb-002-ref.xht
|
||||
fails == css-writing-modes/float-rgt-orthog-htb-in-vlr-003.xht css-writing-modes/float-rgt-orthog-htb-in-vlr-003-ref.xht
|
||||
fails == css-writing-modes/float-rgt-orthog-htb-in-vrl-003.xht css-writing-modes/float-rgt-orthog-htb-in-vrl-003-ref.xht
|
||||
fails == css-writing-modes/float-rgt-orthog-vlr-in-htb-003.xht css-writing-modes/float-rgt-orthog-vlr-in-htb-003-ref.xht
|
||||
fails == css-writing-modes/float-rgt-orthog-vrl-in-htb-003.xht css-writing-modes/float-rgt-orthog-vrl-in-htb-003-ref.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,109,300) == css-writing-modes/float-shrink-to-fit-vlr-009.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vrl-004.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vrl-006.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,109,300) == css-writing-modes/float-shrink-to-fit-vrl-008.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/float-shrink-to-fit-vrl-vlr-016.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vlr-009.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vlr-011.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vlr-013.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vrl-004.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vrl-006.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vrl-008.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vrl-010.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,108,300) == css-writing-modes/float-vrl-012.xht reference/ref-filled-green-100px-square.xht
|
||||
!= css-writing-modes/full-width-001.html css-writing-modes/reference/full-width-001-horizontal-notref.html
|
||||
!= css-writing-modes/full-width-001.html css-writing-modes/reference/full-width-001-nofullwidth-notref.html
|
||||
!= css-writing-modes/full-width-002.html css-writing-modes/reference/full-width-002-notcu-notref.html
|
||||
!= css-writing-modes/full-width-002.html css-writing-modes/reference/full-width-002-horizontal-notref.html
|
||||
skip != css-writing-modes/full-width-003.html css-writing-modes/reference/full-width-002-notcu-notref.html
|
||||
skip != css-writing-modes/full-width-003.html css-writing-modes/reference/full-width-002-horizontal-notref.html
|
||||
fuzzy-if(OSX||winWidget,62,404) fuzzy-if(webrender&&winWidget,92-92,100-100) fails-if(webrender&&cocoaWidget) == css-writing-modes/height-width-inline-non-replaced-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,62,404) fuzzy-if(webrender&&winWidget,92-92,100-100) fails-if(webrender&&cocoaWidget) == css-writing-modes/height-width-inline-non-replaced-vrl-002.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
|
||||
== css-writing-modes/horizontal-rule-vlr-003.xht css-writing-modes/horizontal-rule-vlr-003-ref.xht
|
||||
== css-writing-modes/horizontal-rule-vlr-005.xht css-writing-modes/horizontal-rule-vrl-004-ref.xht
|
||||
== css-writing-modes/horizontal-rule-vrl-002.xht css-writing-modes/horizontal-rule-vrl-002-ref.xht
|
||||
== css-writing-modes/horizontal-rule-vrl-004.xht css-writing-modes/horizontal-rule-vrl-004-ref.xht
|
||||
fails == css-writing-modes/inline-block-alignment-002.xht css-writing-modes/inline-block-alignment-002-ref.xht
|
||||
fails == css-writing-modes/inline-block-alignment-003.xht css-writing-modes/inline-block-alignment-003-ref.xht
|
||||
fails == css-writing-modes/inline-block-alignment-004.xht css-writing-modes/inline-block-alignment-002-ref.xht
|
||||
fails == css-writing-modes/inline-block-alignment-005.xht css-writing-modes/inline-block-alignment-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,112,960) == css-writing-modes/inline-block-alignment-006.xht css-writing-modes/inline-block-alignment-006-ref.xht
|
||||
fails == css-writing-modes/inline-block-alignment-007.xht css-writing-modes/inline-block-alignment-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vlr-003.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vlr-005.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vrl-002.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vrl-004.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,135,1080) == css-writing-modes/inline-block-alignment-slr-009.xht css-writing-modes/inline-block-alignment-slr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,112,960) == css-writing-modes/inline-block-alignment-srl-008.xht css-writing-modes/inline-block-alignment-006-ref.xht
|
||||
== css-writing-modes/inline-replaced-vlr-003.xht css-writing-modes/inline-replaced-vrl-002-ref.xht
|
||||
== css-writing-modes/inline-replaced-vlr-005.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
|
||||
== css-writing-modes/inline-replaced-vrl-002.xht css-writing-modes/inline-replaced-vrl-002-ref.xht
|
||||
== css-writing-modes/inline-replaced-vrl-004.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
|
||||
fails == css-writing-modes/inline-table-alignment-002.xht css-writing-modes/inline-table-alignment-002-ref.xht
|
||||
fails == css-writing-modes/inline-table-alignment-003.xht css-writing-modes/inline-table-alignment-003-ref.xht
|
||||
fails == css-writing-modes/inline-table-alignment-004.xht css-writing-modes/inline-table-alignment-002-ref.xht
|
||||
fails == css-writing-modes/inline-table-alignment-005.xht css-writing-modes/inline-table-alignment-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-htb-001.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-043.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-047.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-048.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-050.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-053.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-054.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
random == css-writing-modes/line-box-direction-slr-056.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-058.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-060.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-042.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-045.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-046.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-049.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-051.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-052.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
random == css-writing-modes/line-box-direction-srl-055.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-057.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-059.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-007.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-008.xht css-writing-modes/block-flow-direction-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-010.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-013.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-014.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
random == css-writing-modes/line-box-direction-vlr-016.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-018.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-020.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-002.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-005.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-009.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-011.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-012.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
random == css-writing-modes/line-box-direction-vrl-015.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-017.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-019.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vlr-003.xht css-writing-modes/line-box-height-vlr-003-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vlr-005.xht css-writing-modes/line-box-height-vlr-003-ref.xht
|
||||
== css-writing-modes/line-box-height-vlr-007.xht css-writing-modes/line-box-height-vlr-007-ref.xht
|
||||
== css-writing-modes/line-box-height-vlr-009.xht css-writing-modes/line-box-height-vlr-007-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vlr-011.xht css-writing-modes/line-box-height-vlr-011-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vlr-013.xht css-writing-modes/line-box-height-vlr-011-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vlr-021.xht css-writing-modes/line-box-height-vlr-021-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vlr-023.xht css-writing-modes/line-box-height-vlr-023-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vrl-002.xht css-writing-modes/line-box-height-vrl-002-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vrl-004.xht css-writing-modes/line-box-height-vrl-002-ref.xht
|
||||
== css-writing-modes/line-box-height-vrl-006.xht css-writing-modes/line-box-height-vrl-006-ref.xht
|
||||
== css-writing-modes/line-box-height-vrl-008.xht css-writing-modes/line-box-height-vrl-006-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vrl-010.xht css-writing-modes/line-box-height-vrl-010-ref.xht
|
||||
fails == css-writing-modes/line-box-height-vrl-012.xht css-writing-modes/line-box-height-vrl-010-ref.xht
|
||||
== css-writing-modes/margin-collapse-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-009.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-011.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-015.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-017.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-025.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-031.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-035.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vlr-037.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-002.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-008.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-010.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-014.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-016.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-024.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-030.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-034.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-collapse-vrl-036.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/margin-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/margin-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/normal-flow-overconstrained-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
|
||||
== css-writing-modes/normal-flow-overconstrained-vlr-005.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
|
||||
== css-writing-modes/normal-flow-overconstrained-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
|
||||
== css-writing-modes/normal-flow-overconstrained-vrl-004.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
|
||||
== css-writing-modes/ortho-htb-alongside-vrl-floats-002.xht css-writing-modes/ortho-htb-alongside-vrl-floats-002-ref.xht
|
||||
== css-writing-modes/ortho-htb-alongside-vrl-floats-006.xht css-writing-modes/ortho-htb-alongside-vrl-floats-006-ref.xht
|
||||
== css-writing-modes/ortho-htb-alongside-vrl-floats-010.xht css-writing-modes/ortho-htb-alongside-vrl-floats-010-ref.xht
|
||||
== css-writing-modes/ortho-htb-alongside-vrl-floats-014.xht css-writing-modes/ortho-htb-alongside-vrl-floats-014-ref.xht
|
||||
== css-writing-modes/outline-inline-block-vrl-006.html css-writing-modes/reference/outline-inline-block-vrl-006.html
|
||||
== css-writing-modes/outline-inline-vlr-006.html css-writing-modes/reference/outline-inline-vlr-006.html
|
||||
== css-writing-modes/outline-inline-vrl-006.html css-writing-modes/reference/outline-inline-vrl-006.html
|
||||
== css-writing-modes/overconstrained-rel-pos-ltr-left-right-vlr-005.xht css-writing-modes/overconstrained-rel-pos-ltr-left-right-vlr-005-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-ltr-left-right-vrl-004.xht css-writing-modes/overconstrained-rel-pos-ltr-left-right-vrl-004-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vlr-003.xht css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vlr-003-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vrl-002.xht css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vrl-002-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-rtl-left-right-vlr-009.xht css-writing-modes/overconstrained-rel-pos-rtl-left-right-vlr-009-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-rtl-left-right-vrl-008.xht css-writing-modes/overconstrained-rel-pos-rtl-left-right-vrl-008-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vlr-007.xht css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vlr-007-ref.xht
|
||||
== css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vrl-006.xht css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vrl-006-ref.xht
|
||||
== css-writing-modes/padding-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/padding-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-margin-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-margin-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-margin-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-margin-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-margin-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-margin-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-padding-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-padding-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-padding-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-padding-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-padding-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
== css-writing-modes/percent-padding-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-slr-023.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-slr-029.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-srl-022.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-srl-028.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-005.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-007.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-009.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-002.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-004.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-008.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-001.xht css-writing-modes/sizing-orthog-htb-in-vlr-001-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-003.xht css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-004.xht css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-006.xht css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-007.xht css-writing-modes/sizing-orthog-htb-in-vlr-007-ref.xht
|
||||
fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vlr-008.xht css-writing-modes/sizing-orthog-htb-in-vlr-008-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-009.xht css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-010.xht css-writing-modes/sizing-orthog-htb-in-vlr-010-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-011.xht css-writing-modes/sizing-orthog-htb-in-vlr-011-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-012.xht css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-013.xht css-writing-modes/sizing-orthog-htb-in-vlr-013-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-015.xht css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-016.xht css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-018.xht css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-019.xht css-writing-modes/sizing-orthog-htb-in-vlr-019-ref.xht
|
||||
fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vlr-020.xht css-writing-modes/sizing-orthog-htb-in-vlr-020-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-021.xht css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-022.xht css-writing-modes/sizing-orthog-htb-in-vlr-022-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-023.xht css-writing-modes/sizing-orthog-htb-in-vlr-023-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vlr-024.xht css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht
|
||||
fails == css-writing-modes/sizing-orthog-htb-in-vrl-001.xht css-writing-modes/sizing-orthog-htb-in-vrl-001-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-003.xht css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht
|
||||
fails == css-writing-modes/sizing-orthog-htb-in-vrl-004.xht css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-006.xht css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-007.xht css-writing-modes/sizing-orthog-htb-in-vrl-007-ref.xht
|
||||
fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vrl-008.xht css-writing-modes/sizing-orthog-htb-in-vrl-008-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-009.xht css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-010.xht css-writing-modes/sizing-orthog-htb-in-vrl-010-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-011.xht css-writing-modes/sizing-orthog-htb-in-vrl-011-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-012.xht css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht
|
||||
fails == css-writing-modes/sizing-orthog-htb-in-vrl-013.xht css-writing-modes/sizing-orthog-htb-in-vrl-013-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-015.xht css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-016.xht css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-018.xht css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-019.xht css-writing-modes/sizing-orthog-htb-in-vrl-019-ref.xht
|
||||
fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vrl-020.xht css-writing-modes/sizing-orthog-htb-in-vrl-020-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-021.xht css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-022.xht css-writing-modes/sizing-orthog-htb-in-vrl-022-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-023.xht css-writing-modes/sizing-orthog-htb-in-vrl-023-ref.xht
|
||||
== css-writing-modes/sizing-orthog-htb-in-vrl-024.xht css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-001.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-001-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-002.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-002-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-003.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-004.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-005.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-005-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-006.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-007.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-007-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vlr-008.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-008-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-001.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-001-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-002.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-002-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-003.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-004.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-005.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-005-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-006.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-007.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-007-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-htb-in-vrl-008.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-008-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-001-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-002.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-002-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-005.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-005-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-007-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-008-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-001-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-002.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-002-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-005.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-005-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-007-ref.xht
|
||||
== css-writing-modes/sizing-orthog-prct-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-008-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-vlr-in-htb-001-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-vlr-in-htb-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-vlr-in-htb-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-vlr-in-htb-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-vlr-in-htb-007-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-vlr-in-htb-008-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-009.xht css-writing-modes/sizing-orthog-vlr-in-htb-009-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-010.xht css-writing-modes/sizing-orthog-vlr-in-htb-010-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-011.xht css-writing-modes/sizing-orthog-vlr-in-htb-011-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-012.xht css-writing-modes/sizing-orthog-vlr-in-htb-012-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-013.xht css-writing-modes/sizing-orthog-vlr-in-htb-013-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-015.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-016.xht css-writing-modes/sizing-orthog-vlr-in-htb-016-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-018.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-019.xht css-writing-modes/sizing-orthog-vlr-in-htb-019-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-020.xht css-writing-modes/sizing-orthog-vlr-in-htb-020-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-021.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-022.xht css-writing-modes/sizing-orthog-vlr-in-htb-022-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-023.xht css-writing-modes/sizing-orthog-vlr-in-htb-023-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vlr-in-htb-024.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-vrl-in-htb-001-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-vrl-in-htb-003-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-vrl-in-htb-004-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-vrl-in-htb-006-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-vrl-in-htb-007-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-vrl-in-htb-008-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-009.xht css-writing-modes/sizing-orthog-vrl-in-htb-009-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-010.xht css-writing-modes/sizing-orthog-vrl-in-htb-010-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-011.xht css-writing-modes/sizing-orthog-vrl-in-htb-011-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-012.xht css-writing-modes/sizing-orthog-vrl-in-htb-012-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-013.xht css-writing-modes/sizing-orthog-vrl-in-htb-013-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-015.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-016.xht css-writing-modes/sizing-orthog-vrl-in-htb-016-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-018.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-019.xht css-writing-modes/sizing-orthog-vrl-in-htb-019-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-020.xht css-writing-modes/sizing-orthog-vrl-in-htb-020-ref.xht
|
||||
fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-021.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-022.xht css-writing-modes/sizing-orthog-vrl-in-htb-022-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-023.xht css-writing-modes/sizing-orthog-vrl-in-htb-023-ref.xht
|
||||
== css-writing-modes/sizing-orthog-vrl-in-htb-024.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
|
||||
skip == css-writing-modes/table-cell-001.html css-writing-modes/reference/table-cell-001-ref.html
|
||||
skip == css-writing-modes/table-cell-002.html css-writing-modes/reference/table-cell-002-ref.html
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-002.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-003.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-004.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-005.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(winWidget,110,1200) fuzzy-if(webrender&&cocoaWidget,1-1,2-2) == css-writing-modes/table-column-order-slr-007.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-srl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
|
||||
== css-writing-modes/table-progression-slr-001.html css-writing-modes/table-progression-slr-001-ref.html
|
||||
fails == css-writing-modes/table-progression-slr-002.html css-writing-modes/table-progression-002-ref.html
|
||||
== css-writing-modes/table-progression-srl-001.html css-writing-modes/table-progression-001-ref.html
|
||||
fails == css-writing-modes/table-progression-srl-002.html css-writing-modes/table-progression-002-ref.html
|
||||
== css-writing-modes/table-progression-vlr-001.html css-writing-modes/table-progression-001-ref.html
|
||||
fails == css-writing-modes/table-progression-vlr-002.html css-writing-modes/table-progression-002-ref.html
|
||||
fails == css-writing-modes/table-progression-vlr-003.html css-writing-modes/table-progression-001-ref.html
|
||||
fails == css-writing-modes/table-progression-vlr-004.html css-writing-modes/table-progression-002-ref.html
|
||||
== css-writing-modes/table-progression-vrl-001.html css-writing-modes/table-progression-001-ref.html
|
||||
fails == css-writing-modes/table-progression-vrl-002.html css-writing-modes/table-progression-002-ref.html
|
||||
fails == css-writing-modes/table-progression-vrl-003.html css-writing-modes/table-progression-001-ref.html
|
||||
fails == css-writing-modes/table-progression-vrl-004.html css-writing-modes/table-progression-002-ref.html
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-005.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-009.xht css-writing-modes/text-align-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-011.xht css-writing-modes/text-align-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-013.xht css-writing-modes/text-align-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-015.xht css-writing-modes/direction-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-017.xht css-writing-modes/direction-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vlr-019.xht css-writing-modes/direction-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-002.xht css-writing-modes/direction-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-004.xht css-writing-modes/direction-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-006.xht css-writing-modes/direction-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-008.xht css-writing-modes/text-align-vrl-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-010.xht css-writing-modes/text-align-vrl-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-012.xht css-writing-modes/text-align-vrl-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-014.xht css-writing-modes/direction-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-016.xht css-writing-modes/direction-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&!gtkWidget,92-108,300-302) == css-writing-modes/text-align-vrl-018.xht css-writing-modes/direction-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-slr-009.xht css-writing-modes/text-baseline-slr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-srl-008.xht css-writing-modes/text-baseline-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-003.xht css-writing-modes/text-baseline-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-005.xht css-writing-modes/text-baseline-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-007.xht css-writing-modes/text-baseline-vrl-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-002.xht css-writing-modes/text-baseline-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-004.xht css-writing-modes/text-baseline-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-006.xht css-writing-modes/text-baseline-vrl-006-ref.xht
|
||||
fuzzy-if(OSX,15,16) == css-writing-modes/text-combine-upright-decorations-001.html css-writing-modes/reference/text-combine-upright-decorations-001.html
|
||||
== css-writing-modes/text-combine-upright-inherit-all-001.html css-writing-modes/reference/text-combine-upright-inherit-all-001.html
|
||||
== css-writing-modes/text-combine-upright-inherit-all-002.html css-writing-modes/reference/text-combine-upright-inherit-all-002.html
|
||||
== css-writing-modes/text-combine-upright-layout-rules-001.html css-writing-modes/reference/text-combine-upright-layout-rules-001-ref.html
|
||||
== css-writing-modes/text-combine-upright-line-breaking-rules-001.html css-writing-modes/text-combine-upright-line-breaking-rules-001-ref.html
|
||||
fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-001.html css-writing-modes/reference/text-combine-upright-value-single-character.html
|
||||
fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
fuzzy(255,960) != css-writing-modes/text-combine-upright-value-all-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-003.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
fuzzy(255,960) != css-writing-modes/text-combine-upright-value-all-003.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
skip == css-writing-modes/text-combine-upright-value-digits2-001.html css-writing-modes/reference/text-combine-upright-value-single-character.html
|
||||
skip == css-writing-modes/text-combine-upright-value-digits2-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
skip != css-writing-modes/text-combine-upright-value-digits2-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
== css-writing-modes/text-combine-upright-value-digits2-003.html css-writing-modes/reference/vertical-ahem-1x3-ref.html
|
||||
!= css-writing-modes/text-combine-upright-value-digits2-003.html css-writing-modes/reference/horizontal-ahem-1x3-notref.html
|
||||
skip == css-writing-modes/text-combine-upright-value-digits3-001.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
skip != css-writing-modes/text-combine-upright-value-digits3-001.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
skip == css-writing-modes/text-combine-upright-value-digits3-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
skip != css-writing-modes/text-combine-upright-value-digits3-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
== css-writing-modes/text-combine-upright-value-digits3-003.html css-writing-modes/reference/vertical-ahem-1x4-ref.html
|
||||
!= css-writing-modes/text-combine-upright-value-digits3-003.html css-writing-modes/reference/horizontal-ahem-1x4-notref.html
|
||||
skip == css-writing-modes/text-combine-upright-value-digits4-001.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
skip != css-writing-modes/text-combine-upright-value-digits4-001.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
skip == css-writing-modes/text-combine-upright-value-digits4-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
|
||||
skip != css-writing-modes/text-combine-upright-value-digits4-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
|
||||
== css-writing-modes/text-combine-upright-value-digits4-003.html css-writing-modes/reference/vertical-ahem-1x5-ref.html
|
||||
!= css-writing-modes/text-combine-upright-value-digits4-003.html css-writing-modes/reference/horizontal-ahem-1x5-notref.html
|
||||
== css-writing-modes/text-combine-upright-value-none-001.html css-writing-modes/reference/vertical-ahem-1x3-ref.html
|
||||
!= css-writing-modes/text-combine-upright-value-none-001.html css-writing-modes/reference/horizontal-ahem-1x3-notref.html
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-003.xht css-writing-modes/text-indent-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-005.xht css-writing-modes/text-indent-vlr-005-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-007.xht css-writing-modes/text-indent-vlr-003-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-009.xht css-writing-modes/text-indent-vlr-005-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-011.xht css-writing-modes/text-indent-vlr-011-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-013.xht css-writing-modes/text-indent-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-015.xht css-writing-modes/text-indent-vlr-011-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-017.xht css-writing-modes/text-indent-vlr-013-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-002.xht css-writing-modes/text-indent-vrl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-004.xht css-writing-modes/text-indent-vrl-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-006.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-008.xht css-writing-modes/text-indent-vrl-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-010.xht css-writing-modes/text-indent-vrl-010-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-012.xht css-writing-modes/text-indent-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-014.xht css-writing-modes/text-indent-vrl-010-ref.xht
|
||||
fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-016.xht css-writing-modes/text-indent-vrl-012-ref.xht
|
||||
fuzzy-if(OSX||winWidget,226,960) fails-if(webrender&&cocoaWidget) == css-writing-modes/text-orientation-016.xht css-writing-modes/text-orientation-016-ref.xht
|
||||
== css-writing-modes/text-orientation-mixed-srl-016.xht css-writing-modes/text-orientation-mixed-srl-016-ref.xht
|
||||
== css-writing-modes/text-orientation-mixed-vlr-100.html css-writing-modes/text-orientation-mixed-vlr-100-ref.html
|
||||
== css-writing-modes/text-orientation-mixed-vrl-100.html css-writing-modes/text-orientation-mixed-vrl-100-ref.html
|
||||
== css-writing-modes/text-orientation-sideways-vlr-100.html css-writing-modes/text-orientation-sideways-vlr-100-ref.html
|
||||
== css-writing-modes/text-orientation-sideways-vrl-100.html css-writing-modes/text-orientation-sideways-vrl-100-ref.html
|
||||
== css-writing-modes/text-orientation-upright-srl-018.xht css-writing-modes/text-orientation-mixed-srl-016-ref.xht
|
||||
== css-writing-modes/text-orientation-upright-vlr-100.html css-writing-modes/text-orientation-upright-vlr-100-ref.html
|
||||
== css-writing-modes/text-orientation-upright-vrl-100.html css-writing-modes/text-orientation-upright-vrl-100-ref.html
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-002.xht css-writing-modes/vertical-alignment-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-003.xht css-writing-modes/vertical-alignment-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-004.xht css-writing-modes/vertical-alignment-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-005.xht css-writing-modes/vertical-alignment-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-006.xht css-writing-modes/vertical-alignment-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-007.xht css-writing-modes/vertical-alignment-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-008.xht css-writing-modes/vertical-alignment-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-009.xht css-writing-modes/vertical-alignment-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-029.xht css-writing-modes/vertical-alignment-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-031.xht css-writing-modes/vertical-alignment-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-033.xht css-writing-modes/vertical-alignment-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-035.xht css-writing-modes/vertical-alignment-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-041.xht css-writing-modes/vertical-alignment-slr-049-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-028.xht css-writing-modes/vertical-alignment-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-030.xht css-writing-modes/vertical-alignment-004-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-032.xht css-writing-modes/vertical-alignment-006-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-034.xht css-writing-modes/vertical-alignment-008-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-040.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
|
||||
fails == css-writing-modes/vertical-alignment-vlr-023.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
|
||||
fails == css-writing-modes/vertical-alignment-vlr-025.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-vlr-027.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
|
||||
fails == css-writing-modes/vertical-alignment-vrl-022.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
|
||||
fails == css-writing-modes/vertical-alignment-vrl-024.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
|
||||
fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-vrl-026.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
|
||||
fails == css-writing-modes/wm-propagation-body-006.xht css-writing-modes/block-flow-direction-025-ref.xht
|
||||
fails == css-writing-modes/wm-propagation-body-008.xht css-writing-modes/block-flow-direction-025-ref.xht
|
||||
fails == css-writing-modes/wm-propagation-body-010.xht css-writing-modes/wm-propagation-body-003-ref.xht
|
||||
fails == css-writing-modes/wm-propagation-body-011.xht css-writing-modes/wm-propagation-body-003-ref.xht
|
||||
fails == css-writing-modes/wm-propagation-body-015.xht css-writing-modes/block-flow-direction-025-ref.xht
|
||||
== css-writing-modes/writing-mode-horizontal-001l.html css-writing-modes/reference/writing-mode-horizontal-001l-ref.html
|
||||
== css-writing-modes/writing-mode-horizontal-001r.html css-writing-modes/reference/writing-mode-horizontal-001r-ref.html
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-lr-002.xht css-writing-modes/reftest/writing-mode-vertical-lr-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-001.xht css-writing-modes/reftest/writing-mode-vertical-rl-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-002.xht css-writing-modes/reftest/writing-mode-vertical-rl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-003.htm css-writing-modes/writing-mode-vertical-rl-003-ref.htm
|
||||
skip == selectors/any-link-dynamic-001.html selectors/any-link-dynamic-001-ref.html
|
||||
needs-focus == selectors/focus-within-001.html selectors/focus-within-001-ref.html
|
||||
needs-focus == selectors/focus-within-002.html selectors/focus-within-001-ref.html
|
||||
|
@ -1,5 +1,3 @@
|
||||
# THIS FILE IS AUTOGENERATED BY import-tests.py
|
||||
# DO NOT EDIT!
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht reference/ref-filled-green-100px-square.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
|
||||
== css-writing-modes/abs-pos-non-replaced-icb-vlr-007.xht reference/ref-filled-green-100px-square.xht
|
||||
@ -921,3 +919,4 @@ fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-lr-0
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-001.xht css-writing-modes/reftest/writing-mode-vertical-rl-001-ref.xht
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-002.xht css-writing-modes/reftest/writing-mode-vertical-rl-002-ref.xht
|
||||
fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-003.htm css-writing-modes/writing-mode-vertical-rl-003-ref.htm
|
||||
|
||||
|
@ -462,47 +462,55 @@ nsTransitionManager::DoUpdateTransitions(
|
||||
// Per http://lists.w3.org/Archives/Public/www-style/2009Aug/0109.html
|
||||
// I'll consider only the transitions from the number of items in
|
||||
// 'transition-property' on down, and later ones will override earlier
|
||||
// ones (tracked using |whichStarted|).
|
||||
// ones (tracked using |propertiesChecked|).
|
||||
bool startedAny = false;
|
||||
nsCSSPropertyIDSet whichStarted;
|
||||
for (uint32_t i = aDisp.mTransitionPropertyCount; i-- != 0; ) {
|
||||
// Check the combined duration (combination of delay and duration)
|
||||
// first, since it defaults to zero, which means we can ignore the
|
||||
// transition.
|
||||
if (aDisp.GetTransitionCombinedDuration(i) > 0.0f) {
|
||||
// We might have something to transition. See if any of the
|
||||
// properties in question changed and are animatable.
|
||||
// FIXME: Would be good to find a way to share code between this
|
||||
// interpretation of transition-property and the one below.
|
||||
nsCSSPropertyID property = aDisp.GetTransitionProperty(i);
|
||||
if (property == eCSSPropertyExtra_no_properties ||
|
||||
property == eCSSPropertyExtra_variable ||
|
||||
property == eCSSProperty_UNKNOWN) {
|
||||
// Nothing to do, but need to exclude this from cases below.
|
||||
} else if (property == eCSSPropertyExtra_all_properties) {
|
||||
for (nsCSSPropertyID p = nsCSSPropertyID(0);
|
||||
p < eCSSProperty_COUNT_no_shorthands;
|
||||
p = nsCSSPropertyID(p + 1)) {
|
||||
nsCSSPropertyIDSet propertiesChecked;
|
||||
for (uint32_t i = aDisp.mTransitionPropertyCount; i--; ) {
|
||||
// We're not going to look at any further transitions, so we can just avoid
|
||||
// looking at this if we know it will not start any transitions.
|
||||
if (i == 0 && aDisp.GetTransitionCombinedDuration(i) <= 0.0f) {
|
||||
continue;
|
||||
}
|
||||
|
||||
nsCSSPropertyID property = aDisp.GetTransitionProperty(i);
|
||||
if (property == eCSSPropertyExtra_no_properties ||
|
||||
property == eCSSPropertyExtra_variable ||
|
||||
property == eCSSProperty_UNKNOWN) {
|
||||
// Nothing to do.
|
||||
continue;
|
||||
}
|
||||
// We might have something to transition. See if any of the
|
||||
// properties in question changed and are animatable.
|
||||
// FIXME: Would be good to find a way to share code between this
|
||||
// interpretation of transition-property and the one below.
|
||||
// FIXME(emilio): This should probably just use the "all" shorthand id, and
|
||||
// we should probably remove eCSSPropertyExtra_all_properties.
|
||||
if (property == eCSSPropertyExtra_all_properties) {
|
||||
for (nsCSSPropertyID p = nsCSSPropertyID(0);
|
||||
p < eCSSProperty_COUNT_no_shorthands;
|
||||
p = nsCSSPropertyID(p + 1)) {
|
||||
startedAny |=
|
||||
ConsiderInitiatingTransition(p, aDisp, i, aElement, aPseudoType,
|
||||
aElementTransitions,
|
||||
aOldStyle, aNewStyle,
|
||||
&startedAny, &whichStarted);
|
||||
}
|
||||
} else if (nsCSSProps::IsShorthand(property)) {
|
||||
CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(subprop, property,
|
||||
CSSEnabledState::eForAllContent)
|
||||
{
|
||||
propertiesChecked);
|
||||
}
|
||||
} else if (nsCSSProps::IsShorthand(property)) {
|
||||
CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(subprop, property,
|
||||
CSSEnabledState::eForAllContent)
|
||||
{
|
||||
startedAny |=
|
||||
ConsiderInitiatingTransition(*subprop, aDisp, i, aElement, aPseudoType,
|
||||
aElementTransitions,
|
||||
aOldStyle, aNewStyle,
|
||||
&startedAny, &whichStarted);
|
||||
}
|
||||
} else {
|
||||
propertiesChecked);
|
||||
}
|
||||
} else {
|
||||
startedAny |=
|
||||
ConsiderInitiatingTransition(property, aDisp, i, aElement, aPseudoType,
|
||||
aElementTransitions,
|
||||
aOldStyle, aNewStyle,
|
||||
&startedAny, &whichStarted);
|
||||
}
|
||||
propertiesChecked);
|
||||
}
|
||||
}
|
||||
|
||||
@ -631,7 +639,7 @@ IsTransitionable(nsCSSPropertyID aProperty)
|
||||
return Servo_Property_IsTransitionable(aProperty);
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
nsTransitionManager::ConsiderInitiatingTransition(
|
||||
nsCSSPropertyID aProperty,
|
||||
const nsStyleDisplay& aStyleDisplay,
|
||||
@ -641,8 +649,7 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
CSSTransitionCollection*& aElementTransitions,
|
||||
const ComputedStyle& aOldStyle,
|
||||
const ComputedStyle& aNewStyle,
|
||||
bool* aStartedAny,
|
||||
nsCSSPropertyIDSet* aWhichStarted)
|
||||
nsCSSPropertyIDSet& aPropertiesChecked)
|
||||
{
|
||||
// IsShorthand itself will assert if aProperty is not a property.
|
||||
MOZ_ASSERT(!nsCSSProps::IsShorthand(aProperty),
|
||||
@ -650,23 +657,36 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
NS_ASSERTION(!aElementTransitions ||
|
||||
aElementTransitions->mElement == aElement, "Element mismatch");
|
||||
|
||||
// A later item in transition-property already specified a transition for this
|
||||
// property, so we ignore this one.
|
||||
// See http://lists.w3.org/Archives/Public/www-style/2009Aug/0109.html .
|
||||
if (aPropertiesChecked.HasProperty(aProperty)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aPropertiesChecked.AddProperty(aProperty);
|
||||
|
||||
// Ignore disabled properties. We can arrive here if the transition-property
|
||||
// is 'all' and the disabled property has a default value which derives value
|
||||
// from another property, e.g. color.
|
||||
if (!nsCSSProps::IsEnabled(aProperty, CSSEnabledState::eForAllContent)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (aWhichStarted->HasProperty(aProperty)) {
|
||||
// A later item in transition-property already started a
|
||||
// transition for this property, so we ignore this one.
|
||||
// See comment above and
|
||||
// http://lists.w3.org/Archives/Public/www-style/2009Aug/0109.html .
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsTransitionable(aProperty)) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
float delay = aStyleDisplay.GetTransitionDelay(transitionIdx);
|
||||
|
||||
// The spec says a negative duration is treated as zero.
|
||||
float duration =
|
||||
std::max(aStyleDisplay.GetTransitionDuration(transitionIdx), 0.0f);
|
||||
|
||||
// If the combined duration of this transition is 0 or less don't start a
|
||||
// transition.
|
||||
if (delay + duration <= 0.0f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
dom::DocumentTimeline* timeline = aElement->OwnerDoc()->Timeline();
|
||||
@ -717,7 +737,7 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
if (haveCurrentTransition && haveValues &&
|
||||
aElementTransitions->mAnimations[currentIndex]->ToValue() == endValue) {
|
||||
// GetAnimationRule already called RestyleForAnimation.
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!shouldAnimate) {
|
||||
@ -745,17 +765,11 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
}
|
||||
// GetAnimationRule already called RestyleForAnimation.
|
||||
}
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
const nsTimingFunction &tf =
|
||||
aStyleDisplay.GetTransitionTimingFunction(transitionIdx);
|
||||
float delay = aStyleDisplay.GetTransitionDelay(transitionIdx);
|
||||
float duration = aStyleDisplay.GetTransitionDuration(transitionIdx);
|
||||
if (duration < 0.0) {
|
||||
// The spec says a negative duration is treated as zero.
|
||||
duration = 0.0;
|
||||
}
|
||||
|
||||
AnimationValue startForReversingTest = startValue;
|
||||
double reversePortion = 1.0;
|
||||
@ -839,7 +853,7 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
if (!aElementTransitions) {
|
||||
MOZ_ASSERT(!createdCollection, "outparam should agree with return value");
|
||||
NS_WARNING("allocating collection failed");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (createdCollection) {
|
||||
@ -886,7 +900,7 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
} else {
|
||||
if (!animations.AppendElement(animation)) {
|
||||
NS_WARNING("out of memory");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -895,7 +909,6 @@ nsTransitionManager::ConsiderInitiatingTransition(
|
||||
effectSet->UpdateAnimationGeneration(mPresContext);
|
||||
}
|
||||
|
||||
*aStartedAny = true;
|
||||
aWhichStarted->AddProperty(aProperty);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -339,7 +339,8 @@ protected:
|
||||
const mozilla::ComputedStyle& aOldStyle,
|
||||
const mozilla::ComputedStyle& aNewStyle);
|
||||
|
||||
void ConsiderInitiatingTransition(nsCSSPropertyID aProperty,
|
||||
// Returns whether the transition actually started.
|
||||
bool ConsiderInitiatingTransition(nsCSSPropertyID aProperty,
|
||||
const nsStyleDisplay& aStyleDisplay,
|
||||
uint32_t transitionIdx,
|
||||
mozilla::dom::Element* aElement,
|
||||
@ -347,9 +348,7 @@ protected:
|
||||
CSSTransitionCollection*& aElementTransitions,
|
||||
const mozilla::ComputedStyle& aOldStyle,
|
||||
const mozilla::ComputedStyle& aNewStyle,
|
||||
bool* aStartedAny,
|
||||
nsCSSPropertyIDSet* aWhichStarted);
|
||||
|
||||
nsCSSPropertyIDSet& aPropertiesChecked);
|
||||
};
|
||||
|
||||
#endif /* !defined(nsTransitionManager_h_) */
|
||||
|
@ -71,9 +71,6 @@ for (let [key, val] of Object.entries({
|
||||
focusFilterMode: "all",
|
||||
compareRetainedDisplayLists: false,
|
||||
|
||||
// add a delay between loading tests
|
||||
runSlower: false,
|
||||
|
||||
browser: undefined,
|
||||
// Are we testing web content loaded in a separate process?
|
||||
browserIsRemote: undefined, // bool
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user