mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Merge m-c to autoland, a=merge
MozReview-Commit-ID: CtdOO1SeODv
This commit is contained in:
commit
1b3ffba4d5
@ -151,30 +151,48 @@ button {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.addons-install-error {
|
||||
background-color: #f3b0b0;
|
||||
.addons-install-error,
|
||||
.service-worker-multi-process {
|
||||
padding: 5px 10px;
|
||||
margin-top: 5px;
|
||||
margin-inline-end: 4px;
|
||||
}
|
||||
|
||||
.service-worker-disabled .warning,
|
||||
.addons-install-error .warning {
|
||||
.addons-install-error {
|
||||
background-color: #f3b0b0;
|
||||
}
|
||||
|
||||
.service-worker-multi-process {
|
||||
background-color: #ffeebb;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
.service-worker-multi-process .update-button {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-image: url(chrome://devtools/skin/images/alerticon-warning.png);
|
||||
background-size: 13px 12px;
|
||||
margin-inline-end: 10px;
|
||||
display: inline-block;
|
||||
width: 13px;
|
||||
height: 12px;
|
||||
margin-inline-end: 10px;
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.service-worker-disabled .warning,
|
||||
.addons-install-error .warning {
|
||||
.warning {
|
||||
background-image: url(chrome://devtools/skin/images/alerticon-warning@2x.png);
|
||||
}
|
||||
}
|
||||
|
||||
.addons-install-error .warning,
|
||||
.service-worker-multi-process .warning {
|
||||
/* The warning icon can be hard to see on red / yellow backgrounds, this turns the icon
|
||||
to a black icon. */
|
||||
filter: brightness(0%);
|
||||
}
|
||||
|
||||
.addons-options {
|
||||
flex: 1;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DevToolsModules(
|
||||
'multi-e10s-warning.js',
|
||||
'panel.js',
|
||||
'service-worker-target.js',
|
||||
'target.js',
|
||||
|
@ -0,0 +1,60 @@
|
||||
/* 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/. */
|
||||
|
||||
/* eslint-env browser */
|
||||
|
||||
"use strict";
|
||||
|
||||
loader.lazyImporter(this, "PrivateBrowsingUtils",
|
||||
"resource://gre/modules/PrivateBrowsingUtils.jsm");
|
||||
const { createClass, DOM: dom } =
|
||||
require("devtools/client/shared/vendor/react");
|
||||
const Services = require("Services");
|
||||
const { Ci } = require("chrome");
|
||||
|
||||
loader.lazyImporter(this, "PrivateBrowsingUtils",
|
||||
"resource://gre/modules/PrivateBrowsingUtils.jsm");
|
||||
|
||||
loader.lazyRequireGetter(this, "DebuggerClient",
|
||||
"devtools/shared/client/main", true);
|
||||
|
||||
const Strings = Services.strings.createBundle("chrome://devtools/locale/aboutdebugging.properties");
|
||||
const PROCESS_COUNT_PREF = "dom.ipc.processCount";
|
||||
|
||||
module.exports = createClass({
|
||||
displayName: "multiE10SWarning",
|
||||
|
||||
onUpdatePreferenceClick() {
|
||||
let message = Strings.GetStringFromName("multiProcessWarningConfirmUpdate");
|
||||
if (window.confirm(message)) {
|
||||
Services.prefs.setIntPref(PROCESS_COUNT_PREF, 1);
|
||||
// Restart the browser.
|
||||
Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
|
||||
}
|
||||
},
|
||||
|
||||
render() {
|
||||
return dom.div(
|
||||
{
|
||||
className: "service-worker-multi-process"
|
||||
},
|
||||
dom.div(
|
||||
{},
|
||||
dom.div({ className: "warning" }),
|
||||
dom.b({}, Strings.GetStringFromName("multiProcessWarningTitle"))
|
||||
),
|
||||
dom.div(
|
||||
{},
|
||||
Strings.GetStringFromName("multiProcessWarningMessage")
|
||||
),
|
||||
dom.button(
|
||||
{
|
||||
className: "update-button",
|
||||
onClick: this.onUpdatePreferenceClick,
|
||||
},
|
||||
Strings.GetStringFromName("multiProcessWarningUpdateLink")
|
||||
)
|
||||
);
|
||||
},
|
||||
});
|
@ -16,6 +16,7 @@ const Services = require("Services");
|
||||
const PanelHeader = createFactory(require("../panel-header"));
|
||||
const TargetList = createFactory(require("../target-list"));
|
||||
const WorkerTarget = createFactory(require("./target"));
|
||||
const MultiE10SWarning = createFactory(require("./multi-e10s-warning"));
|
||||
const ServiceWorkerTarget = createFactory(require("./service-worker-target"));
|
||||
|
||||
loader.lazyImporter(this, "PrivateBrowsingUtils",
|
||||
@ -29,6 +30,7 @@ const Strings = Services.strings.createBundle(
|
||||
|
||||
const WorkerIcon = "chrome://devtools/skin/images/debugging-workers.svg";
|
||||
const MORE_INFO_URL = "https://developer.mozilla.org/en-US/docs/Tools/about%3Adebugging";
|
||||
const PROCESS_COUNT_PREF = "dom.ipc.processCount";
|
||||
|
||||
module.exports = createClass({
|
||||
displayName: "WorkersPanel",
|
||||
@ -44,29 +46,40 @@ module.exports = createClass({
|
||||
service: [],
|
||||
shared: [],
|
||||
other: []
|
||||
}
|
||||
},
|
||||
processCount: 1,
|
||||
};
|
||||
},
|
||||
|
||||
componentDidMount() {
|
||||
let client = this.props.client;
|
||||
client.addListener("workerListChanged", this.update);
|
||||
client.addListener("serviceWorkerRegistrationListChanged", this.update);
|
||||
client.addListener("processListChanged", this.update);
|
||||
client.addListener("registration-changed", this.update);
|
||||
client.addListener("workerListChanged", this.updateWorkers);
|
||||
client.addListener("serviceWorkerRegistrationListChanged", this.updateWorkers);
|
||||
client.addListener("processListChanged", this.updateWorkers);
|
||||
client.addListener("registration-changed", this.updateWorkers);
|
||||
|
||||
this.update();
|
||||
Services.prefs.addObserver(PROCESS_COUNT_PREF, this.updateMultiE10S, false);
|
||||
|
||||
this.updateMultiE10S();
|
||||
this.updateWorkers();
|
||||
},
|
||||
|
||||
componentWillUnmount() {
|
||||
let client = this.props.client;
|
||||
client.removeListener("processListChanged", this.update);
|
||||
client.removeListener("serviceWorkerRegistrationListChanged", this.update);
|
||||
client.removeListener("workerListChanged", this.update);
|
||||
client.removeListener("registration-changed", this.update);
|
||||
client.removeListener("processListChanged", this.updateWorkers);
|
||||
client.removeListener("serviceWorkerRegistrationListChanged", this.updateWorkers);
|
||||
client.removeListener("workerListChanged", this.updateWorkers);
|
||||
client.removeListener("registration-changed", this.updateWorkers);
|
||||
|
||||
Services.prefs.removeObserver(PROCESS_COUNT_PREF, this.updateMultiE10S);
|
||||
},
|
||||
|
||||
update() {
|
||||
updateMultiE10S() {
|
||||
let processCount = Services.prefs.getIntPref(PROCESS_COUNT_PREF);
|
||||
this.setState({ processCount });
|
||||
},
|
||||
|
||||
updateWorkers() {
|
||||
let workers = this.getInitialState().workers;
|
||||
|
||||
getWorkerForms(this.props.client).then(forms => {
|
||||
@ -136,61 +149,89 @@ module.exports = createClass({
|
||||
return null;
|
||||
},
|
||||
|
||||
render() {
|
||||
let { client, id } = this.props;
|
||||
let { workers } = this.state;
|
||||
isE10S() {
|
||||
return Services.appinfo.browserTabsRemoteAutostart;
|
||||
},
|
||||
|
||||
renderServiceWorkersError() {
|
||||
let isWindowPrivate = PrivateBrowsingUtils.isContentWindowPrivate(window);
|
||||
let isPrivateBrowsingMode = PrivateBrowsingUtils.permanentPrivateBrowsing;
|
||||
let isServiceWorkerDisabled = !Services.prefs
|
||||
.getBoolPref("dom.serviceWorkers.enabled");
|
||||
let errorMsg = isWindowPrivate || isPrivateBrowsingMode ||
|
||||
isServiceWorkerDisabled ?
|
||||
dom.p({ className: "service-worker-disabled" },
|
||||
dom.div({ className: "warning" }),
|
||||
Strings.GetStringFromName("configurationIsNotCompatible"),
|
||||
" (",
|
||||
dom.a({ href: MORE_INFO_URL, target: "_blank" },
|
||||
Strings.GetStringFromName("moreInfo")),
|
||||
")"
|
||||
) : "";
|
||||
|
||||
return dom.div({
|
||||
id: id + "-panel",
|
||||
className: "panel",
|
||||
role: "tabpanel",
|
||||
"aria-labelledby": id + "-header"
|
||||
},
|
||||
PanelHeader({
|
||||
id: id + "-header",
|
||||
name: Strings.GetStringFromName("workers")
|
||||
}),
|
||||
dom.div({ id: "workers", className: "inverted-icons" },
|
||||
TargetList({
|
||||
client,
|
||||
error: errorMsg,
|
||||
id: "service-workers",
|
||||
name: Strings.GetStringFromName("serviceWorkers"),
|
||||
sort: true,
|
||||
targetClass: ServiceWorkerTarget,
|
||||
targets: workers.service
|
||||
let isDisabled = isWindowPrivate || isPrivateBrowsingMode || isServiceWorkerDisabled;
|
||||
if (!isDisabled) {
|
||||
return "";
|
||||
}
|
||||
return dom.p(
|
||||
{
|
||||
className: "service-worker-disabled"
|
||||
},
|
||||
dom.div({ className: "warning" }),
|
||||
Strings.GetStringFromName("configurationIsNotCompatible"),
|
||||
" (",
|
||||
dom.a(
|
||||
{
|
||||
href: MORE_INFO_URL,
|
||||
target: "_blank"
|
||||
},
|
||||
Strings.GetStringFromName("moreInfo")
|
||||
),
|
||||
")"
|
||||
);
|
||||
},
|
||||
|
||||
render() {
|
||||
let { client, id } = this.props;
|
||||
let { workers, processCount } = this.state;
|
||||
|
||||
let isE10S = Services.appinfo.browserTabsRemoteAutostart;
|
||||
let isMultiE10S = isE10S && processCount > 1;
|
||||
|
||||
return dom.div(
|
||||
{
|
||||
id: id + "-panel",
|
||||
className: "panel",
|
||||
role: "tabpanel",
|
||||
"aria-labelledby": id + "-header"
|
||||
},
|
||||
PanelHeader({
|
||||
id: id + "-header",
|
||||
name: Strings.GetStringFromName("workers")
|
||||
}),
|
||||
TargetList({
|
||||
client,
|
||||
id: "shared-workers",
|
||||
name: Strings.GetStringFromName("sharedWorkers"),
|
||||
sort: true,
|
||||
targetClass: WorkerTarget,
|
||||
targets: workers.shared
|
||||
}),
|
||||
TargetList({
|
||||
client,
|
||||
id: "other-workers",
|
||||
name: Strings.GetStringFromName("otherWorkers"),
|
||||
sort: true,
|
||||
targetClass: WorkerTarget,
|
||||
targets: workers.other
|
||||
})
|
||||
));
|
||||
isMultiE10S ? MultiE10SWarning() : "",
|
||||
dom.div(
|
||||
{
|
||||
id: "workers",
|
||||
className: "inverted-icons"
|
||||
},
|
||||
TargetList({
|
||||
client,
|
||||
debugDisabled: isMultiE10S,
|
||||
error: this.renderServiceWorkersError(),
|
||||
id: "service-workers",
|
||||
name: Strings.GetStringFromName("serviceWorkers"),
|
||||
sort: true,
|
||||
targetClass: ServiceWorkerTarget,
|
||||
targets: workers.service
|
||||
}),
|
||||
TargetList({
|
||||
client,
|
||||
id: "shared-workers",
|
||||
name: Strings.GetStringFromName("sharedWorkers"),
|
||||
sort: true,
|
||||
targetClass: WorkerTarget,
|
||||
targets: workers.shared
|
||||
}),
|
||||
TargetList({
|
||||
client,
|
||||
id: "other-workers",
|
||||
name: Strings.GetStringFromName("otherWorkers"),
|
||||
sort: true,
|
||||
targetClass: WorkerTarget,
|
||||
targets: workers.other
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
@ -155,7 +155,8 @@ module.exports = createClass({
|
||||
renderButtons() {
|
||||
let pushButton = dom.button({
|
||||
className: "push-button",
|
||||
onClick: this.push
|
||||
onClick: this.push,
|
||||
disabled: this.props.debugDisabled
|
||||
}, Strings.GetStringFromName("push"));
|
||||
|
||||
let debugButton = dom.button({
|
||||
@ -167,6 +168,7 @@ module.exports = createClass({
|
||||
let startButton = dom.button({
|
||||
className: "start-button",
|
||||
onClick: this.start,
|
||||
disabled: this.props.debugDisabled
|
||||
}, Strings.GetStringFromName("start"));
|
||||
|
||||
if (this.isRunning()) {
|
||||
@ -187,7 +189,7 @@ module.exports = createClass({
|
||||
|
||||
return dom.a({
|
||||
onClick: this.unregister,
|
||||
className: "unregister-link"
|
||||
className: "unregister-link",
|
||||
}, Strings.GetStringFromName("unregister"));
|
||||
},
|
||||
|
||||
|
@ -35,6 +35,8 @@ tags = webextensions
|
||||
[browser_page_not_found.js]
|
||||
[browser_service_workers.js]
|
||||
[browser_service_workers_fetch_flag.js]
|
||||
[browser_service_workers_multi_content_process.js]
|
||||
skip-if = !e10s # This test is only valid in e10s
|
||||
[browser_service_workers_not_compatible.js]
|
||||
[browser_service_workers_push.js]
|
||||
[browser_service_workers_push_service.js]
|
||||
|
@ -9,13 +9,7 @@ const SERVICE_WORKER = URL_ROOT + "service-workers/empty-sw.js";
|
||||
const TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
|
||||
|
||||
add_task(function* () {
|
||||
yield new Promise(done => {
|
||||
let options = {"set": [
|
||||
["dom.serviceWorkers.enabled", true],
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
yield enableServiceWorkerDebugging();
|
||||
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
|
@ -9,14 +9,7 @@ const EMPTY_SW_TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
|
||||
const FETCH_SW_TAB_URL = URL_ROOT + "service-workers/fetch-sw.html";
|
||||
|
||||
function* testBody(url, expecting) {
|
||||
yield new Promise(done => {
|
||||
let options = {"set": [
|
||||
["dom.serviceWorkers.enabled", true],
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
|
||||
yield enableServiceWorkerDebugging();
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
let swTab = yield addTab(url);
|
||||
|
@ -0,0 +1,61 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Service worker debugging is unavailable when multi-e10s is enabled.
|
||||
// Check that the appropriate warning panel is displayed when there are more than 1
|
||||
// content process available.
|
||||
|
||||
const SERVICE_WORKER = URL_ROOT + "service-workers/empty-sw.js";
|
||||
const TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
|
||||
|
||||
add_task(function* () {
|
||||
yield enableServiceWorkerDebugging();
|
||||
info("Force two content processes");
|
||||
yield pushPref("dom.ipc.processCount", 2);
|
||||
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
let warningSection = document.querySelector(".service-worker-multi-process");
|
||||
let img = warningSection.querySelector(".warning");
|
||||
ok(img, "warning message is rendered");
|
||||
|
||||
let swTab = yield addTab(TAB_URL, { background: true });
|
||||
let serviceWorkersElement = getServiceWorkerList(document);
|
||||
|
||||
yield waitForMutation(serviceWorkersElement, { childList: true });
|
||||
|
||||
info("Check that service worker buttons are disabled.");
|
||||
// Check that the service worker appears in the UI
|
||||
let serviceWorkerContainer = getServiceWorkerContainer(SERVICE_WORKER, document);
|
||||
let debugButton = serviceWorkerContainer.querySelector(".debug-button");
|
||||
ok(debugButton.disabled, "Start/Debug button is disabled");
|
||||
|
||||
info("Update the preference to 1");
|
||||
let onWarningCleared = waitUntil(() => {
|
||||
return document.querySelector(".service-worker-multi-process");
|
||||
});
|
||||
yield pushPref("dom.ipc.processCount", 1);
|
||||
yield onWarningCleared;
|
||||
ok(!debugButton.disabled, "Debug button is enabled.");
|
||||
|
||||
info("Update the preference back to 2");
|
||||
let onWarningRestored = waitUntil(() => {
|
||||
return document.querySelector(".service-worker-multi-process");
|
||||
});
|
||||
yield pushPref("dom.ipc.processCount", 2);
|
||||
yield onWarningRestored;
|
||||
ok(debugButton.disabled, "Debug button is disabled again.");
|
||||
|
||||
info("Unregister service worker");
|
||||
try {
|
||||
yield unregisterServiceWorker(swTab, serviceWorkersElement);
|
||||
ok(true, "Service worker registration unregistered");
|
||||
} catch (e) {
|
||||
ok(false, "SW not unregistered; " + e);
|
||||
}
|
||||
|
||||
yield removeTab(swTab);
|
||||
yield closeAboutDebugging(tab);
|
||||
});
|
@ -15,15 +15,7 @@ const SERVICE_WORKER = URL_ROOT + "service-workers/push-sw.js";
|
||||
const TAB_URL = URL_ROOT + "service-workers/push-sw.html";
|
||||
|
||||
add_task(function* () {
|
||||
info("Turn on workers via mochitest http.");
|
||||
yield new Promise(done => {
|
||||
let options = { "set": [
|
||||
// Accept workers from mochitest's http.
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
|
||||
yield enableServiceWorkerDebugging();
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
// Listen for mutations in the service-workers list.
|
||||
|
@ -18,14 +18,9 @@ const PushService = Cc["@mozilla.org/push/Service;1"]
|
||||
|
||||
add_task(function* () {
|
||||
info("Turn on workers via mochitest http.");
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
"set": [
|
||||
// Accept workers from mochitest's http.
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
// Enable the push service.
|
||||
["dom.push.connection.enabled", true],
|
||||
]
|
||||
});
|
||||
yield enableServiceWorkerDebugging();
|
||||
// Enable the push service.
|
||||
yield pushPref("dom.push.connection.enabled", true);
|
||||
|
||||
info("Mock the push service");
|
||||
PushService.service = {
|
||||
|
@ -15,17 +15,9 @@ const TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
|
||||
const SW_TIMEOUT = 1000;
|
||||
|
||||
add_task(function* () {
|
||||
info("Turn on workers via mochitest http.");
|
||||
yield new Promise(done => {
|
||||
let options = { "set": [
|
||||
// Accept workers from mochitest's http.
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
// Reduce the timeout to accelerate service worker freezing
|
||||
["dom.serviceWorkers.idle_timeout", SW_TIMEOUT],
|
||||
["dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
yield enableServiceWorkerDebugging();
|
||||
yield pushPref("dom.serviceWorkers.idle_timeout", SW_TIMEOUT);
|
||||
yield pushPref("dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT);
|
||||
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
|
@ -12,15 +12,9 @@ const SW_TIMEOUT = 2000;
|
||||
requestLongerTimeout(2);
|
||||
|
||||
add_task(function* () {
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
"set": [
|
||||
// Accept workers from mochitest's http.
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
["dom.serviceWorkers.idle_timeout", SW_TIMEOUT],
|
||||
["dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT],
|
||||
["dom.ipc.processCount", 1],
|
||||
]
|
||||
});
|
||||
yield enableServiceWorkerDebugging();
|
||||
yield pushPref("dom.serviceWorkers.idle_timeout", SW_TIMEOUT);
|
||||
yield pushPref("dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT);
|
||||
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
|
@ -11,17 +11,9 @@ const TAB_URL = URL_ROOT + "service-workers/empty-sw.html";
|
||||
const SW_TIMEOUT = 1000;
|
||||
|
||||
add_task(function* () {
|
||||
yield new Promise(done => {
|
||||
let options = {"set": [
|
||||
// Accept workers from mochitest's http
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
// Reduce the timeout to expose issues when service worker
|
||||
// freezing is broken
|
||||
["dom.serviceWorkers.idle_timeout", SW_TIMEOUT],
|
||||
["dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
yield enableServiceWorkerDebugging();
|
||||
yield pushPref("dom.serviceWorkers.idle_timeout", SW_TIMEOUT);
|
||||
yield pushPref("dom.serviceWorkers.idle_extended_timeout", SW_TIMEOUT);
|
||||
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
|
@ -15,15 +15,7 @@ const SERVICE_WORKER = SCOPE + "empty-sw.js";
|
||||
const TAB_URL = SCOPE + "empty-sw.html";
|
||||
|
||||
add_task(function* () {
|
||||
info("Turn on workers via mochitest http.");
|
||||
yield new Promise(done => {
|
||||
let options = { "set": [
|
||||
// Accept workers from mochitest's http.
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
["dom.ipc.processCount", 1],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
yield enableServiceWorkerDebugging();
|
||||
|
||||
let { tab, document } = yield openAboutDebugging("workers");
|
||||
|
||||
|
@ -7,7 +7,8 @@
|
||||
getServiceWorkerList, getTabList, openPanel, waitForInitialAddonList,
|
||||
waitForServiceWorkerRegistered, unregisterServiceWorker,
|
||||
waitForDelayedStartupFinished, setupTestAboutDebuggingWebExtension,
|
||||
waitForServiceWorkerActivation */
|
||||
waitForServiceWorkerActivation, enableServiceWorkerDebugging,
|
||||
getServiceWorkerContainer */
|
||||
/* import-globals-from ../../framework/test/shared-head.js */
|
||||
|
||||
"use strict";
|
||||
@ -131,6 +132,26 @@ function getServiceWorkerList(document) {
|
||||
document.querySelector("#service-workers.targets");
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the container element for the service worker corresponding to the provided
|
||||
* name.
|
||||
*
|
||||
* @param {String} name
|
||||
* expected service worker name
|
||||
* @param {DOMDocument} document
|
||||
* #service-workers section container document
|
||||
* @return {DOMNode} container element
|
||||
*/
|
||||
function getServiceWorkerContainer(name, document) {
|
||||
let nameElements = [...document.querySelectorAll("#service-workers .target-name")];
|
||||
let nameElement = nameElements.filter(element => element.textContent === name)[0];
|
||||
if (nameElement) {
|
||||
return nameElement.closest(".target-container");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Depending on whether there are tabs opened, return either a
|
||||
* target list element or its container.
|
||||
@ -397,3 +418,20 @@ function* waitForServiceWorkerActivation(swUrl, document) {
|
||||
yield waitForMutation(serviceWorkersElement, { childList: true, subtree: true });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all preferences needed to enable service worker debugging and testing.
|
||||
*/
|
||||
function enableServiceWorkerDebugging() {
|
||||
return new Promise(done => {
|
||||
let options = { "set": [
|
||||
// Enable service workers.
|
||||
["dom.serviceWorkers.enabled", true],
|
||||
// Accept workers from mochitest's http.
|
||||
["dom.serviceWorkers.testing.enabled", true],
|
||||
// Force single content process.
|
||||
["dom.ipc.processCount", 1],
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
}
|
||||
|
@ -119,3 +119,23 @@ doesNotExist = #%S does not exist!
|
||||
nothing = Nothing yet.
|
||||
|
||||
configurationIsNotCompatible = Your browser configuration is not compatible with Service Workers
|
||||
|
||||
# LOCALIZATION NOTE (multiProcessWarningTitle):
|
||||
# This string is displayed as a warning message on top of the about:debugging#workers
|
||||
# page when multi-e10s is enabled
|
||||
multiProcessWarningTitle = Service Worker debugging is not compatible with multiple content processes at the moment.
|
||||
|
||||
# LOCALIZATION NOTE (multiProcessWarningMessage):
|
||||
# This string is displayed in the warning section for multi-e10s in
|
||||
# about:debugging#workers
|
||||
multiProcessWarningMessage = The preference “dom.ipc.processCount” can be set to 1 to force a single content process.
|
||||
|
||||
# LOCALIZATION NOTE (multiProcessWarningLink):
|
||||
# This string is the text content of a link in the warning section for multi-e10s in
|
||||
# about:debugging#workers. The link updates the pref and restarts the browser.
|
||||
multiProcessWarningUpdateLink = Set dom.ipc.processCount to 1
|
||||
|
||||
# LOCALIZATION NOTE (multiProcessWarningConfirmUpdate):
|
||||
# This string is displayed as a confirmation message when the user clicks on
|
||||
# the multiProcessWarningUpdateLink in about:debugging#workers
|
||||
multiProcessWarningConfirmUpdate = Set “dom.ipc.processCount” to 1 and restart the browser?
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "mozilla/dom/DocumentFragment.h"
|
||||
#include "mozilla/dom/DOMTypes.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/FileSystemSecurity.h"
|
||||
#include "mozilla/dom/FileBlobImpl.h"
|
||||
#include "mozilla/dom/HTMLMediaElement.h"
|
||||
#include "mozilla/dom/HTMLTemplateElement.h"
|
||||
@ -7885,6 +7886,19 @@ nsContentUtils::TransferableToIPCTransferable(nsITransferable* aTransferable,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aParent) {
|
||||
bool isDir = false;
|
||||
if (NS_SUCCEEDED(file->IsDirectory(&isDir)) && isDir) {
|
||||
nsAutoString path;
|
||||
if (NS_WARN_IF(NS_FAILED(file->GetPath(path)))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RefPtr<FileSystemSecurity> fss = FileSystemSecurity::GetOrCreate();
|
||||
fss->GrantAccessToContentProcess(aParent->ChildID(), path);
|
||||
}
|
||||
}
|
||||
|
||||
blobImpl = new FileBlobImpl(file);
|
||||
|
||||
IgnoredErrorResult rv;
|
||||
|
@ -10,8 +10,12 @@
|
||||
#include "GetDirectoryListingTask.h"
|
||||
#include "GetFileOrDirectoryTask.h"
|
||||
|
||||
#include "mozilla/dom/ContentParent.h"
|
||||
#include "mozilla/dom/FileSystemBase.h"
|
||||
#include "mozilla/dom/FileSystemSecurity.h"
|
||||
#include "mozilla/ipc/BackgroundParent.h"
|
||||
#include "mozilla/Unused.h"
|
||||
#include "nsProxyRelease.h"
|
||||
|
||||
using namespace mozilla::ipc;
|
||||
|
||||
@ -69,14 +73,104 @@ FileSystemRequestParent::Initialize(const FileSystemParams& aParams)
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
class CheckPermissionRunnable final : public Runnable
|
||||
{
|
||||
public:
|
||||
CheckPermissionRunnable(already_AddRefed<ContentParent> aParent,
|
||||
FileSystemRequestParent* aActor,
|
||||
FileSystemTaskParentBase* aTask,
|
||||
const nsAString& aPath)
|
||||
: mContentParent(aParent)
|
||||
, mActor(aActor)
|
||||
, mTask(aTask)
|
||||
, mPath(aPath)
|
||||
, mBackgroundEventTarget(NS_GetCurrentThread())
|
||||
{
|
||||
AssertIsInMainProcess();
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
MOZ_ASSERT(mContentParent);
|
||||
MOZ_ASSERT(mActor);
|
||||
MOZ_ASSERT(mTask);
|
||||
MOZ_ASSERT(mBackgroundEventTarget);
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
Run() override
|
||||
{
|
||||
if (NS_IsMainThread()) {
|
||||
auto raii = mozilla::MakeScopeExit([&] { mContentParent = nullptr; });
|
||||
|
||||
|
||||
if (!mozilla::Preferences::GetBool("dom.filesystem.pathcheck.disabled", false)) {
|
||||
RefPtr<FileSystemSecurity> fss = FileSystemSecurity::Get();
|
||||
if (NS_WARN_IF(!fss ||
|
||||
!fss->ContentProcessHasAccessTo(mContentParent->ChildID(),
|
||||
mPath))) {
|
||||
mContentParent->KillHard("This path is not allowed.");
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return mBackgroundEventTarget->Dispatch(this, NS_DISPATCH_NORMAL);
|
||||
}
|
||||
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
// It can happen that this actor has been destroyed in the meantime we were
|
||||
// on the main-thread.
|
||||
if (!mActor->Destroyed()) {
|
||||
mTask->Start();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
~CheckPermissionRunnable()
|
||||
{
|
||||
NS_ProxyRelease(mBackgroundEventTarget, mActor.forget());
|
||||
}
|
||||
|
||||
RefPtr<ContentParent> mContentParent;
|
||||
RefPtr<FileSystemRequestParent> mActor;
|
||||
RefPtr<FileSystemTaskParentBase> mTask;
|
||||
const nsString mPath;
|
||||
|
||||
nsCOMPtr<nsIEventTarget> mBackgroundEventTarget;
|
||||
};
|
||||
|
||||
} // anonymous
|
||||
|
||||
void
|
||||
FileSystemRequestParent::Start()
|
||||
{
|
||||
AssertIsInMainProcess();
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
MOZ_ASSERT(!mDestroyed);
|
||||
MOZ_ASSERT(mFileSystem);
|
||||
MOZ_ASSERT(mTask);
|
||||
|
||||
mTask->Start();
|
||||
nsAutoString path;
|
||||
if (NS_WARN_IF(NS_FAILED(mTask->GetTargetPath(path)))) {
|
||||
Unused << Send__delete__(this, FileSystemErrorResponse(NS_ERROR_DOM_SECURITY_ERR));
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<ContentParent> parent = BackgroundParent::GetContentParent(Manager());
|
||||
|
||||
// If the ContentParent is null we are dealing with a same-process actor.
|
||||
if (!parent) {
|
||||
mTask->Start();
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<Runnable> runnable =
|
||||
new CheckPermissionRunnable(parent.forget(), this, mTask, path);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
void
|
||||
|
107
dom/filesystem/FileSystemSecurity.cpp
Normal file
107
dom/filesystem/FileSystemSecurity.cpp
Normal file
@ -0,0 +1,107 @@
|
||||
/* -*- 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 "FileSystemSecurity.h"
|
||||
#include "FileSystemUtils.h"
|
||||
#include "mozilla/ClearOnShutdown.h"
|
||||
#include "mozilla/StaticPtr.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
namespace {
|
||||
|
||||
StaticRefPtr<FileSystemSecurity> gFileSystemSecurity;
|
||||
|
||||
} // anonymous
|
||||
|
||||
/* static */ already_AddRefed<FileSystemSecurity>
|
||||
FileSystemSecurity::Get()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
|
||||
RefPtr<FileSystemSecurity> service = gFileSystemSecurity.get();
|
||||
return service.forget();
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<FileSystemSecurity>
|
||||
FileSystemSecurity::GetOrCreate()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
|
||||
if (!gFileSystemSecurity) {
|
||||
gFileSystemSecurity = new FileSystemSecurity();
|
||||
ClearOnShutdown(&gFileSystemSecurity);
|
||||
}
|
||||
|
||||
RefPtr<FileSystemSecurity> service = gFileSystemSecurity.get();
|
||||
return service.forget();
|
||||
}
|
||||
|
||||
FileSystemSecurity::FileSystemSecurity()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
}
|
||||
|
||||
FileSystemSecurity::~FileSystemSecurity()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
}
|
||||
|
||||
void
|
||||
FileSystemSecurity::GrantAccessToContentProcess(ContentParentId aId,
|
||||
const nsAString& aDirectoryPath)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
|
||||
nsTArray<nsString>* paths;
|
||||
if (!mPaths.Get(aId, &paths)) {
|
||||
paths = new nsTArray<nsString>();
|
||||
mPaths.Put(aId, paths);
|
||||
} else if (paths->Contains(aDirectoryPath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
paths->AppendElement(aDirectoryPath);
|
||||
}
|
||||
|
||||
void
|
||||
FileSystemSecurity::Forget(ContentParentId aId)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
|
||||
mPaths.Remove(aId);
|
||||
}
|
||||
|
||||
bool
|
||||
FileSystemSecurity::ContentProcessHasAccessTo(ContentParentId aId,
|
||||
const nsAString& aPath)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
AssertIsInMainProcess();
|
||||
|
||||
nsTArray<nsString>* paths;
|
||||
if (!mPaths.Get(aId, &paths)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0, len = paths->Length(); i < len; ++i) {
|
||||
if (FileSystemUtils::IsDescendantPath(paths->ElementAt(i), aPath)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // dom namespace
|
||||
} // mozilla namespace
|
48
dom/filesystem/FileSystemSecurity.h
Normal file
48
dom/filesystem/FileSystemSecurity.h
Normal file
@ -0,0 +1,48 @@
|
||||
/* -*- 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 mozilla_dom_FileSystemSecurity_h
|
||||
#define mozilla_dom_FileSystemSecurity_h
|
||||
|
||||
#include "mozilla/dom/ipc/IdType.h"
|
||||
#include "nsClassHashtable.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class FileSystemSecurity final
|
||||
{
|
||||
public:
|
||||
NS_INLINE_DECL_REFCOUNTING(FileSystemSecurity)
|
||||
|
||||
static already_AddRefed<FileSystemSecurity>
|
||||
Get();
|
||||
|
||||
static already_AddRefed<FileSystemSecurity>
|
||||
GetOrCreate();
|
||||
|
||||
void
|
||||
GrantAccessToContentProcess(ContentParentId aId,
|
||||
const nsAString& aDirectoryPath);
|
||||
|
||||
void
|
||||
Forget(ContentParentId aId);
|
||||
|
||||
bool
|
||||
ContentProcessHasAccessTo(ContentParentId aId, const nsAString& aPath);
|
||||
|
||||
private:
|
||||
FileSystemSecurity();
|
||||
~FileSystemSecurity();
|
||||
|
||||
nsClassHashtable<nsUint64HashKey, nsTArray<nsString>> mPaths;
|
||||
};
|
||||
|
||||
} // dom namespace
|
||||
} // mozilla namespace
|
||||
|
||||
#endif // mozilla_dom_FileSystemSecurity_h
|
@ -231,6 +231,9 @@ public:
|
||||
NS_IMETHOD
|
||||
Run() override;
|
||||
|
||||
virtual nsresult
|
||||
GetTargetPath(nsAString& aPath) const = 0;
|
||||
|
||||
private:
|
||||
/*
|
||||
* Wrap the task result to FileSystemResponseValue for sending it through IPC.
|
||||
|
@ -20,24 +20,12 @@ TokenizerIgnoreNothing(char16_t /* aChar */)
|
||||
} // anonymous namespace
|
||||
|
||||
/* static */ bool
|
||||
FileSystemUtils::IsDescendantPath(nsIFile* aFile,
|
||||
nsIFile* aDescendantFile)
|
||||
FileSystemUtils::IsDescendantPath(const nsAString& aPath,
|
||||
const nsAString& aDescendantPath)
|
||||
{
|
||||
nsAutoString path;
|
||||
nsresult rv = aFile->GetPath(path);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsAutoString descendantPath;
|
||||
rv = aDescendantFile->GetPath(descendantPath);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check the sub-directory path to see if it has the parent path as prefix.
|
||||
if (descendantPath.Length() <= path.Length() ||
|
||||
!StringBeginsWith(descendantPath, path)) {
|
||||
if (!aDescendantPath.Equals(aPath) &&
|
||||
!StringBeginsWith(aDescendantPath, aPath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,8 @@ public:
|
||||
* Return true if aDescendantPath is a descendant of aPath.
|
||||
*/
|
||||
static bool
|
||||
IsDescendantPath(nsIFile* aPath, nsIFile* aDescendantPath);
|
||||
IsDescendantPath(const nsAString& aPath,
|
||||
const nsAString& aDescendantPath);
|
||||
|
||||
/**
|
||||
* Return true if this is valid DOMPath. It also splits the path in
|
||||
|
@ -380,5 +380,11 @@ GetDirectoryListingTaskParent::IOWork()
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
GetDirectoryListingTaskParent::GetTargetPath(nsAString& aPath) const
|
||||
{
|
||||
return mTargetPath->GetPath(aPath);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
@ -69,6 +69,9 @@ public:
|
||||
FileSystemRequestParent* aParent,
|
||||
ErrorResult& aRv);
|
||||
|
||||
nsresult
|
||||
GetTargetPath(nsAString& aPath) const override;
|
||||
|
||||
private:
|
||||
GetDirectoryListingTaskParent(FileSystemBase* aFileSystem,
|
||||
const FileSystemGetDirectoryListingParams& aParam,
|
||||
|
@ -270,5 +270,11 @@ GetFileOrDirectoryTaskParent::IOWork()
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
GetFileOrDirectoryTaskParent::GetTargetPath(nsAString& aPath) const
|
||||
{
|
||||
return mTargetPath->GetPath(aPath);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
@ -62,6 +62,9 @@ public:
|
||||
FileSystemRequestParent* aParent,
|
||||
ErrorResult& aRv);
|
||||
|
||||
nsresult
|
||||
GetTargetPath(nsAString& aPath) const override;
|
||||
|
||||
protected:
|
||||
virtual FileSystemResponseValue
|
||||
GetSuccessRequestResult(ErrorResult& aRv) const override;
|
||||
|
@ -253,5 +253,11 @@ GetFilesTaskParent::IOWork()
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
GetFilesTaskParent::GetTargetPath(nsAString& aPath) const
|
||||
{
|
||||
return mTargetPath->GetPath(aPath);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
@ -71,6 +71,9 @@ public:
|
||||
FileSystemRequestParent* aParent,
|
||||
ErrorResult& aRv);
|
||||
|
||||
nsresult
|
||||
GetTargetPath(nsAString& aPath) const override;
|
||||
|
||||
private:
|
||||
GetFilesTaskParent(FileSystemBase* aFileSystem,
|
||||
const FileSystemGetFilesParams& aParam,
|
||||
|
@ -16,6 +16,7 @@ var script;
|
||||
|
||||
function setup_tests() {
|
||||
SpecialPowers.pushPrefEnv({"set": [["dom.webkitBlink.dirPicker.enabled", true],
|
||||
["dom.filesystem.pathcheck.disabled", true],
|
||||
["dom.webkitBlink.filesystem.enabled", true]]}, next);
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,7 @@ function setup_tests() {
|
||||
|
||||
SpecialPowers.pushPrefEnv({"set": [["dom.input.dirpicker", true],
|
||||
["dom.webkitBlink.dirPicker.enabled", true],
|
||||
["dom.filesystem.pathcheck.disabled", true],
|
||||
["dom.webkitBlink.filesystem.enabled", true]]}, next);
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@ var entries;
|
||||
|
||||
function setup_tests() {
|
||||
SpecialPowers.pushPrefEnv({"set": [["dom.webkitBlink.dirPicker.enabled", true],
|
||||
["dom.filesystem.pathcheck.disabled", true],
|
||||
["dom.webkitBlink.filesystem.enabled", true]]}, next);
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@ EXPORTS.mozilla.dom += [
|
||||
'Directory.h',
|
||||
'FileSystemBase.h',
|
||||
'FileSystemRequestParent.h',
|
||||
'FileSystemSecurity.h',
|
||||
'FileSystemTaskBase.h',
|
||||
'FileSystemUtils.h',
|
||||
'GetFilesHelper.h',
|
||||
@ -25,6 +26,7 @@ UNIFIED_SOURCES += [
|
||||
'Directory.cpp',
|
||||
'FileSystemBase.cpp',
|
||||
'FileSystemRequestParent.cpp',
|
||||
'FileSystemSecurity.cpp',
|
||||
'FileSystemTaskBase.cpp',
|
||||
'FileSystemUtils.cpp',
|
||||
'GetDirectoryListingTask.cpp',
|
||||
|
@ -11,6 +11,7 @@ function createRelativePath(parentDir, dirOrFile) {
|
||||
function setup_tests(aNext) {
|
||||
SimpleTest.requestLongerTimeout(2);
|
||||
SpecialPowers.pushPrefEnv({"set": [["dom.input.dirpicker", true],
|
||||
["dom.filesystem.pathcheck.disabled", true],
|
||||
["dom.webkitBlink.dirPicker.enabled", true]]}, aNext);
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/File.h"
|
||||
#include "mozilla/dom/FileCreatorHelper.h"
|
||||
#include "mozilla/dom/FileSystemSecurity.h"
|
||||
#include "mozilla/dom/ExternalHelperAppParent.h"
|
||||
#include "mozilla/dom/GetFilesHelper.h"
|
||||
#include "mozilla/dom/GeolocationBinding.h"
|
||||
@ -1680,6 +1681,11 @@ ContentParent::ActorDestroy(ActorDestroyReason why)
|
||||
mHangMonitorActor = nullptr;
|
||||
}
|
||||
|
||||
RefPtr<FileSystemSecurity> fss = FileSystemSecurity::Get();
|
||||
if (fss) {
|
||||
fss->Forget(ChildID());
|
||||
}
|
||||
|
||||
if (why == NormalShutdown && !mCalledClose) {
|
||||
// If we shut down normally but haven't called Close, assume somebody
|
||||
// else called Close on us. In that case, we still need to call
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "nsISimpleEnumerator.h"
|
||||
#include "mozilla/Unused.h"
|
||||
#include "mozilla/dom/FileBlobImpl.h"
|
||||
#include "mozilla/dom/FileSystemSecurity.h"
|
||||
#include "mozilla/dom/ContentParent.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/TabParent.h"
|
||||
@ -145,6 +146,8 @@ FilePickerParent::IORunnable::Destroy()
|
||||
void
|
||||
FilePickerParent::SendFilesOrDirectories(const nsTArray<BlobImplOrString>& aData)
|
||||
{
|
||||
nsIContentParent* parent = TabParent::GetFrom(Manager())->Manager();
|
||||
|
||||
if (mMode == nsIFilePicker::modeGetFolder) {
|
||||
MOZ_ASSERT(aData.Length() <= 1);
|
||||
if (aData.IsEmpty()) {
|
||||
@ -154,13 +157,18 @@ FilePickerParent::SendFilesOrDirectories(const nsTArray<BlobImplOrString>& aData
|
||||
|
||||
MOZ_ASSERT(aData[0].mType == BlobImplOrString::eDirectoryPath);
|
||||
|
||||
// Let's inform the security singleton about the given access of this tab on
|
||||
// this directory path.
|
||||
RefPtr<FileSystemSecurity> fss = FileSystemSecurity::GetOrCreate();
|
||||
fss->GrantAccessToContentProcess(parent->ChildID(),
|
||||
aData[0].mDirectoryPath);
|
||||
|
||||
InputDirectory input;
|
||||
input.directoryPath() = aData[0].mDirectoryPath;
|
||||
Unused << Send__delete__(this, input, mResult);
|
||||
return;
|
||||
}
|
||||
|
||||
nsIContentParent* parent = TabParent::GetFrom(Manager())->Manager();
|
||||
InfallibleTArray<PBlobParent*> blobs;
|
||||
|
||||
for (unsigned i = 0; i < aData.Length(); i++) {
|
||||
|
@ -80,7 +80,7 @@ DynamicImage::OnImageDataComplete(nsIRequest* aRequest,
|
||||
}
|
||||
|
||||
void
|
||||
DynamicImage::OnSurfaceDiscarded()
|
||||
DynamicImage::OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey)
|
||||
{ }
|
||||
|
||||
void
|
||||
|
@ -53,7 +53,7 @@ public:
|
||||
nsresult aStatus,
|
||||
bool aLastPart) override;
|
||||
|
||||
virtual void OnSurfaceDiscarded() override;
|
||||
virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) override;
|
||||
|
||||
virtual void SetInnerWindowID(uint64_t aInnerWindowId) override;
|
||||
virtual uint64_t InnerWindowID() const override;
|
||||
|
@ -28,9 +28,25 @@ namespace image {
|
||||
void
|
||||
AnimationState::NotifyDecodeComplete()
|
||||
{
|
||||
// If we weren't discarded before the decode finished then mark ourselves as
|
||||
// currently decoded.
|
||||
if (!mDiscarded) {
|
||||
mIsCurrentlyDecoded = true;
|
||||
}
|
||||
mHasBeenDecoded = true;
|
||||
}
|
||||
|
||||
void
|
||||
AnimationState::SetDiscarded(bool aDiscarded)
|
||||
{
|
||||
if (aDiscarded) {
|
||||
MOZ_ASSERT(gfxPrefs::ImageMemAnimatedDiscardable());
|
||||
mIsCurrentlyDecoded = false;
|
||||
mCompositedFrameInvalid = true;
|
||||
}
|
||||
mDiscarded = aDiscarded;
|
||||
}
|
||||
|
||||
void
|
||||
AnimationState::ResetAnimation()
|
||||
{
|
||||
@ -265,13 +281,17 @@ FrameAnimator::AdvanceFrame(AnimationState& aState, TimeStamp aTime)
|
||||
RefreshResult
|
||||
FrameAnimator::RequestRefresh(AnimationState& aState, const TimeStamp& aTime)
|
||||
{
|
||||
// By default, an empty RefreshResult.
|
||||
RefreshResult ret;
|
||||
|
||||
if (aState.IsDiscarded()) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// only advance the frame if the current time is greater than or
|
||||
// equal to the current frame's end time.
|
||||
TimeStamp currentFrameEndTime = GetCurrentImgFrameEndTime(aState);
|
||||
|
||||
// By default, an empty RefreshResult.
|
||||
RefreshResult ret;
|
||||
|
||||
while (currentFrameEndTime <= aTime) {
|
||||
TimeStamp oldFrameEndTime = currentFrameEndTime;
|
||||
|
||||
@ -290,12 +310,26 @@ FrameAnimator::RequestRefresh(AnimationState& aState, const TimeStamp& aTime)
|
||||
}
|
||||
}
|
||||
|
||||
// Advanced to the correct frame, the composited frame is now valid to be drawn.
|
||||
if (currentFrameEndTime > aTime) {
|
||||
aState.mCompositedFrameInvalid = false;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(!aState.mIsCurrentlyDecoded || !aState.mCompositedFrameInvalid);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
LookupResult
|
||||
FrameAnimator::GetCompositedFrame(AnimationState& aState)
|
||||
{
|
||||
if (aState.mCompositedFrameInvalid) {
|
||||
MOZ_ASSERT(gfxPrefs::ImageMemAnimatedDiscardable());
|
||||
MOZ_ASSERT(aState.GetHasBeenDecoded());
|
||||
MOZ_ASSERT(!aState.GetIsCurrentlyDecoded());
|
||||
return LookupResult(MatchType::NOT_FOUND);
|
||||
}
|
||||
|
||||
// If we have a composited version of this frame, return that.
|
||||
if (mLastCompositedFrameIndex >= 0 &&
|
||||
(uint32_t(mLastCompositedFrameIndex) == aState.mCurrentAnimationFrameIndex)) {
|
||||
|
@ -33,6 +33,9 @@ public:
|
||||
, mFirstFrameTimeout(FrameTimeout::FromRawMilliseconds(0))
|
||||
, mAnimationMode(aAnimationMode)
|
||||
, mHasBeenDecoded(false)
|
||||
, mIsCurrentlyDecoded(false)
|
||||
, mCompositedFrameInvalid(false)
|
||||
, mDiscarded(false)
|
||||
{ }
|
||||
|
||||
/**
|
||||
@ -45,6 +48,40 @@ public:
|
||||
*/
|
||||
bool GetHasBeenDecoded() { return mHasBeenDecoded; }
|
||||
|
||||
/**
|
||||
* Call this with true when this image is discarded. Call this with false
|
||||
* when a decoder is created to decode the image.
|
||||
*/
|
||||
void SetDiscarded(bool aDiscarded);
|
||||
|
||||
/**
|
||||
* Returns true if this image has been discarded and a decoded has not yet
|
||||
* been created to redecode it.
|
||||
*/
|
||||
bool IsDiscarded() { return mDiscarded; }
|
||||
|
||||
/**
|
||||
* Sets the composited frame as valid or invalid.
|
||||
*/
|
||||
void SetCompositedFrameInvalid(bool aInvalid) {
|
||||
MOZ_ASSERT(!aInvalid || gfxPrefs::ImageMemAnimatedDiscardable());
|
||||
mCompositedFrameInvalid = aInvalid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the composited frame is valid to draw to the screen.
|
||||
*/
|
||||
bool GetCompositedFrameInvalid() {
|
||||
return mCompositedFrameInvalid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the image is currently full decoded..
|
||||
*/
|
||||
bool GetIsCurrentlyDecoded() {
|
||||
return mIsCurrentlyDecoded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call when you need to re-start animating. Ensures we start from the first
|
||||
* frame.
|
||||
@ -145,8 +182,44 @@ private:
|
||||
//! The animation mode of this image. Constants defined in imgIContainer.
|
||||
uint16_t mAnimationMode;
|
||||
|
||||
/**
|
||||
* The following four bools (mHasBeenDecoded, mIsCurrentlyDecoded,
|
||||
* mCompositedFrameInvalid, mDiscarded) track the state of the image with
|
||||
* regards to decoding. They all start out false, including mDiscarded,
|
||||
* because we want to treat being discarded differently from "not yet decoded
|
||||
* for the first time".
|
||||
*
|
||||
* (When we are decoding the image for the first time we want to show the
|
||||
* image at the speed of data coming in from the network or the speed
|
||||
* specified in the image file, whichever is slower. But when redecoding we
|
||||
* want to show nothing until the frame for the current time has been
|
||||
* decoded. The prevents the user from seeing the image "fast forward"
|
||||
* to the expected spot.)
|
||||
*
|
||||
* When the image is decoded for the first time mHasBeenDecoded and
|
||||
* mIsCurrentlyDecoded get set to true. When the image is discarded
|
||||
* mIsCurrentlyDecoded gets set to false, and mCompositedFrameInvalid
|
||||
* & mDiscarded get set to true. When we create a decoder to redecode the
|
||||
* image mDiscarded gets set to false. mCompositedFrameInvalid gets set to
|
||||
* false when we are able to advance to the frame that should be showing
|
||||
* for the current time. mIsCurrentlyDecoded gets set to true when the
|
||||
* redecode finishes.
|
||||
*/
|
||||
|
||||
//! Whether this image has been decoded at least once.
|
||||
bool mHasBeenDecoded;
|
||||
|
||||
//! Whether this image is currently fully decoded.
|
||||
bool mIsCurrentlyDecoded;
|
||||
|
||||
//! Whether the composited frame is valid to draw to the screen, note that
|
||||
//! the composited frame can exist and be filled with image data but not
|
||||
//! valid to draw to the screen.
|
||||
bool mCompositedFrameInvalid;
|
||||
|
||||
//! Whether this image is currently discarded. Only set to true after the
|
||||
//! image has been decoded at least once.
|
||||
bool mDiscarded;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -216,7 +216,7 @@ public:
|
||||
/**
|
||||
* Called when the SurfaceCache discards a surface belonging to this image.
|
||||
*/
|
||||
virtual void OnSurfaceDiscarded() = 0;
|
||||
virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) = 0;
|
||||
|
||||
virtual void SetInnerWindowID(uint64_t aInnerWindowId) = 0;
|
||||
virtual uint64_t InnerWindowID() const = 0;
|
||||
@ -256,7 +256,7 @@ public:
|
||||
}
|
||||
#endif
|
||||
|
||||
virtual void OnSurfaceDiscarded() override { }
|
||||
virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) override { }
|
||||
|
||||
virtual void SetInnerWindowID(uint64_t aInnerWindowId) override
|
||||
{
|
||||
|
@ -88,9 +88,9 @@ ImageWrapper::OnImageDataComplete(nsIRequest* aRequest,
|
||||
}
|
||||
|
||||
void
|
||||
ImageWrapper::OnSurfaceDiscarded()
|
||||
ImageWrapper::OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey)
|
||||
{
|
||||
return mInnerImage->OnSurfaceDiscarded();
|
||||
return mInnerImage->OnSurfaceDiscarded(aSurfaceKey);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -45,7 +45,7 @@ public:
|
||||
nsresult aStatus,
|
||||
bool aLastPart) override;
|
||||
|
||||
virtual void OnSurfaceDiscarded() override;
|
||||
virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) override;
|
||||
|
||||
virtual void SetInnerWindowID(uint64_t aInnerWindowId) override;
|
||||
virtual uint64_t InnerWindowID() const override;
|
||||
|
@ -420,10 +420,15 @@ RasterImage::WillDrawOpaqueNow()
|
||||
}
|
||||
|
||||
void
|
||||
RasterImage::OnSurfaceDiscarded()
|
||||
RasterImage::OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey)
|
||||
{
|
||||
MOZ_ASSERT(mProgressTracker);
|
||||
|
||||
if (mAnimationState && aSurfaceKey.Playback() == PlaybackType::eAnimated) {
|
||||
MOZ_ASSERT(gfxPrefs::ImageMemAnimatedDiscardable());
|
||||
mAnimationState->SetDiscarded(true);
|
||||
}
|
||||
|
||||
NS_DispatchToMainThread(NewRunnableMethod("ProgressTracker::OnDiscard",
|
||||
mProgressTracker, &ProgressTracker::OnDiscard));
|
||||
}
|
||||
@ -1028,6 +1033,10 @@ RasterImage::Discard()
|
||||
// Delete all the decoded frames.
|
||||
SurfaceCache::RemoveImage(ImageKey(this));
|
||||
|
||||
if (mAnimationState) {
|
||||
mAnimationState->SetDiscarded(true);
|
||||
}
|
||||
|
||||
// Notify that we discarded.
|
||||
if (mProgressTracker) {
|
||||
mProgressTracker->OnDiscard();
|
||||
@ -1194,6 +1203,7 @@ RasterImage::Decode(const IntSize& aSize,
|
||||
// Create a decoder.
|
||||
RefPtr<IDecodingTask> task;
|
||||
if (mAnimationState && aPlaybackType == PlaybackType::eAnimated) {
|
||||
mAnimationState->SetDiscarded(false);
|
||||
task = DecoderFactory::CreateAnimationDecoder(mDecoderType, WrapNotNull(this),
|
||||
mSourceBuffer, mSize,
|
||||
decoderFlags, surfaceFlags);
|
||||
|
@ -164,7 +164,7 @@ public:
|
||||
virtual nsresult StopAnimation() override;
|
||||
|
||||
// Methods inherited from Image
|
||||
virtual void OnSurfaceDiscarded() override;
|
||||
virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) override;
|
||||
|
||||
virtual size_t SizeOfSourceWithComputedFallback(MallocSizeOf aMallocSizeOf)
|
||||
const override;
|
||||
|
@ -502,7 +502,7 @@ public:
|
||||
|
||||
// If the surface was not a placeholder, tell its image that we discarded it.
|
||||
if (!aSurface->IsPlaceholder()) {
|
||||
static_cast<Image*>(imageKey)->OnSurfaceDiscarded();
|
||||
static_cast<Image*>(imageKey)->OnSurfaceDiscarded(aSurface->GetSurfaceKey());
|
||||
}
|
||||
|
||||
StopTracking(aSurface);
|
||||
|
@ -1123,7 +1123,7 @@ VectorImage::RequestDiscard()
|
||||
}
|
||||
|
||||
void
|
||||
VectorImage::OnSurfaceDiscarded()
|
||||
VectorImage::OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey)
|
||||
{
|
||||
MOZ_ASSERT(mProgressTracker);
|
||||
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
nsresult aResult,
|
||||
bool aLastPart) override;
|
||||
|
||||
virtual void OnSurfaceDiscarded() override;
|
||||
virtual void OnSurfaceDiscarded(const SurfaceKey& aSurfaceKey) override;
|
||||
|
||||
/**
|
||||
* Callback for SVGRootRenderingObserver.
|
||||
|
@ -787,11 +787,18 @@ BackgroundParentImpl::AllocPFileSystemRequestParent(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
result->Start();
|
||||
|
||||
return result.forget().take();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
BackgroundParentImpl::RecvPFileSystemRequestConstructor(
|
||||
PFileSystemRequestParent* aActor,
|
||||
const FileSystemParams& params)
|
||||
{
|
||||
static_cast<FileSystemRequestParent*>(aActor)->Start();
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
bool
|
||||
BackgroundParentImpl::DeallocPFileSystemRequestParent(
|
||||
PFileSystemRequestParent* aDoomed)
|
||||
|
@ -193,6 +193,10 @@ protected:
|
||||
virtual PFileSystemRequestParent*
|
||||
AllocPFileSystemRequestParent(const FileSystemParams&) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult
|
||||
RecvPFileSystemRequestConstructor(PFileSystemRequestParent* actor,
|
||||
const FileSystemParams& params) override;
|
||||
|
||||
virtual bool
|
||||
DeallocPFileSystemRequestParent(PFileSystemRequestParent*) override;
|
||||
|
||||
|
@ -5183,7 +5183,7 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
|
||||
nscoord iSize, minISize, maxISize, bSize, minBSize, maxBSize;
|
||||
enum class Stretch {
|
||||
// stretch to fill the CB (preserving intrinsic ratio) in the relevant axis
|
||||
eStretchPreservingRatio,
|
||||
eStretchPreservingRatio, // XXX not used yet
|
||||
// stretch to fill the CB in the relevant axis
|
||||
eStretch,
|
||||
// no stretching in the relevant axis
|
||||
@ -5197,6 +5197,35 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
|
||||
Stretch stretchI = eNoStretch; // stretch behavior in the inline axis
|
||||
Stretch stretchB = eNoStretch; // stretch behavior in the block axis
|
||||
|
||||
const bool isVertical = aWM.IsVertical();
|
||||
const nsStyleCoord& isizeCoord =
|
||||
isVertical ? aIntrinsicSize.height : aIntrinsicSize.width;
|
||||
const bool hasIntrinsicISize = isizeCoord.GetUnit() == eStyleUnit_Coord;
|
||||
nscoord intrinsicISize;
|
||||
if (hasIntrinsicISize) {
|
||||
intrinsicISize = std::max(nscoord(0), isizeCoord.GetCoordValue());
|
||||
} else {
|
||||
NS_ASSERTION(isizeCoord.GetUnit() == eStyleUnit_None,
|
||||
"unexpected unit");
|
||||
intrinsicISize = 0;
|
||||
}
|
||||
|
||||
const nsStyleCoord& bsizeCoord =
|
||||
isVertical ? aIntrinsicSize.width : aIntrinsicSize.height;
|
||||
const bool hasIntrinsicBSize = bsizeCoord.GetUnit() == eStyleUnit_Coord;
|
||||
nscoord intrinsicBSize;
|
||||
if (hasIntrinsicBSize) {
|
||||
intrinsicBSize = std::max(nscoord(0), bsizeCoord.GetCoordValue());
|
||||
} else {
|
||||
NS_ASSERTION(bsizeCoord.GetUnit() == eStyleUnit_None,
|
||||
"unexpected unit");
|
||||
intrinsicBSize = 0;
|
||||
}
|
||||
|
||||
NS_ASSERTION(aIntrinsicRatio.width >= 0 && aIntrinsicRatio.height >= 0,
|
||||
"Intrinsic ratio has a negative component!");
|
||||
LogicalSize logicalRatio(aWM, aIntrinsicRatio);
|
||||
|
||||
if (!isAutoISize) {
|
||||
iSize = ComputeISizeValue(aRenderingContext,
|
||||
aCBSize.ISize(aWM), boxSizingAdjust.ISize(aWM),
|
||||
@ -5211,9 +5240,13 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
|
||||
aWM.IsOrthogonalTo(GetParent()->GetWritingMode()) ?
|
||||
stylePos->UsedAlignSelf(GetParent()->StyleContext()) :
|
||||
stylePos->UsedJustifySelf(GetParent()->StyleContext());
|
||||
if (inlineAxisAlignment == NS_STYLE_ALIGN_NORMAL) {
|
||||
stretchI = eStretchPreservingRatio;
|
||||
} else if (inlineAxisAlignment == NS_STYLE_ALIGN_STRETCH) {
|
||||
// Note: 'normal' means 'start' for elements with an intrinsic size
|
||||
// or ratio in the relevant dimension, otherwise 'stretch'.
|
||||
// https://drafts.csswg.org/css-grid/#grid-item-sizing
|
||||
if ((inlineAxisAlignment == NS_STYLE_ALIGN_NORMAL &&
|
||||
!hasIntrinsicISize &&
|
||||
!(logicalRatio.ISize(aWM) > 0)) ||
|
||||
inlineAxisAlignment == NS_STYLE_ALIGN_STRETCH) {
|
||||
stretchI = eStretch;
|
||||
}
|
||||
}
|
||||
@ -5276,9 +5309,13 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
|
||||
!aWM.IsOrthogonalTo(GetParent()->GetWritingMode()) ?
|
||||
stylePos->UsedAlignSelf(GetParent()->StyleContext()) :
|
||||
stylePos->UsedJustifySelf(GetParent()->StyleContext());
|
||||
if (blockAxisAlignment == NS_STYLE_ALIGN_NORMAL) {
|
||||
stretchB = eStretchPreservingRatio;
|
||||
} else if (blockAxisAlignment == NS_STYLE_ALIGN_STRETCH) {
|
||||
// Note: 'normal' means 'start' for elements with an intrinsic size
|
||||
// or ratio in the relevant dimension, otherwise 'stretch'.
|
||||
// https://drafts.csswg.org/css-grid/#grid-item-sizing
|
||||
if ((blockAxisAlignment == NS_STYLE_ALIGN_NORMAL &&
|
||||
!hasIntrinsicBSize &&
|
||||
!(logicalRatio.BSize(aWM) > 0)) ||
|
||||
blockAxisAlignment == NS_STYLE_ALIGN_STRETCH) {
|
||||
stretchB = eStretch;
|
||||
}
|
||||
}
|
||||
@ -5316,48 +5353,9 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
|
||||
minBSize = 0;
|
||||
}
|
||||
|
||||
// Resolve percentage intrinsic iSize/bSize as necessary:
|
||||
|
||||
NS_ASSERTION(aCBSize.ISize(aWM) != NS_UNCONSTRAINEDSIZE,
|
||||
"Our containing block must not have unconstrained inline-size!");
|
||||
|
||||
const bool isVertical = aWM.IsVertical();
|
||||
const nsStyleCoord& isizeCoord =
|
||||
isVertical ? aIntrinsicSize.height : aIntrinsicSize.width;
|
||||
const nsStyleCoord& bsizeCoord =
|
||||
isVertical ? aIntrinsicSize.width : aIntrinsicSize.height;
|
||||
|
||||
bool hasIntrinsicISize, hasIntrinsicBSize;
|
||||
nscoord intrinsicISize, intrinsicBSize;
|
||||
|
||||
if (isizeCoord.GetUnit() == eStyleUnit_Coord) {
|
||||
hasIntrinsicISize = true;
|
||||
intrinsicISize = isizeCoord.GetCoordValue();
|
||||
if (intrinsicISize < 0)
|
||||
intrinsicISize = 0;
|
||||
} else {
|
||||
NS_ASSERTION(isizeCoord.GetUnit() == eStyleUnit_None,
|
||||
"unexpected unit");
|
||||
hasIntrinsicISize = false;
|
||||
intrinsicISize = 0;
|
||||
}
|
||||
|
||||
if (bsizeCoord.GetUnit() == eStyleUnit_Coord) {
|
||||
hasIntrinsicBSize = true;
|
||||
intrinsicBSize = bsizeCoord.GetCoordValue();
|
||||
if (intrinsicBSize < 0)
|
||||
intrinsicBSize = 0;
|
||||
} else {
|
||||
NS_ASSERTION(bsizeCoord.GetUnit() == eStyleUnit_None,
|
||||
"unexpected unit");
|
||||
hasIntrinsicBSize = false;
|
||||
intrinsicBSize = 0;
|
||||
}
|
||||
|
||||
NS_ASSERTION(aIntrinsicRatio.width >= 0 && aIntrinsicRatio.height >= 0,
|
||||
"Intrinsic ratio has a negative component!");
|
||||
LogicalSize logicalRatio(aWM, aIntrinsicRatio);
|
||||
|
||||
// Now calculate the used values for iSize and bSize:
|
||||
|
||||
if (isAutoISize) {
|
||||
|
@ -4758,14 +4758,14 @@ nsGridContainerFrame::Tracks::StretchFlexibleTracks(
|
||||
: ri->ComputedMaxISize();
|
||||
}
|
||||
Maybe<nsTArray<TrackSize>> origSizes;
|
||||
bool applyMinMax = (minSize != 0 || maxSize != NS_UNCONSTRAINEDSIZE) &&
|
||||
aAvailableSize == NS_UNCONSTRAINEDSIZE;
|
||||
// We iterate twice at most. The 2nd time if the grid size changed after
|
||||
// applying a min/max-size (can only occur if aAvailableSize is indefinite).
|
||||
while (true) {
|
||||
float fr = FindUsedFlexFraction(aState, aGridItems, flexTracks,
|
||||
aFunctions, aAvailableSize);
|
||||
if (fr != 0.0f) {
|
||||
bool applyMinMax = (minSize != 0 || maxSize != NS_UNCONSTRAINEDSIZE) &&
|
||||
aAvailableSize == NS_UNCONSTRAINEDSIZE;
|
||||
for (uint32_t i : flexTracks) {
|
||||
float flexFactor = aFunctions.MaxSizingFor(i).GetFlexFractionValue();
|
||||
nscoord flexLength = NSToCoordRound(flexFactor * fr);
|
||||
@ -4777,36 +4777,36 @@ nsGridContainerFrame::Tracks::StretchFlexibleTracks(
|
||||
base = flexLength;
|
||||
}
|
||||
}
|
||||
if (applyMinMax && origSizes.isSome()) {
|
||||
// https://drafts.csswg.org/css-grid/#algo-flex-tracks
|
||||
// "If using this flex fraction would cause the grid to be smaller than
|
||||
// the grid container’s min-width/height (or larger than the grid
|
||||
// container’s max-width/height), then redo this step, treating the free
|
||||
// space as definite [...]"
|
||||
nscoord newSize = 0;
|
||||
for (auto& sz : mSizes) {
|
||||
newSize += sz.mBase;
|
||||
}
|
||||
const auto sumOfGridGaps = SumOfGridGaps();
|
||||
newSize += sumOfGridGaps;
|
||||
if (newSize > maxSize) {
|
||||
aAvailableSize = maxSize;
|
||||
} else if (newSize < minSize) {
|
||||
aAvailableSize = minSize;
|
||||
}
|
||||
if (aAvailableSize != NS_UNCONSTRAINEDSIZE) {
|
||||
// Reset min/max-size to ensure 'applyMinMax' becomes false next time.
|
||||
minSize = 0;
|
||||
maxSize = NS_UNCONSTRAINEDSIZE;
|
||||
aAvailableSize = std::max(0, aAvailableSize - sumOfGridGaps);
|
||||
// Restart with the original track sizes and definite aAvailableSize.
|
||||
}
|
||||
if (applyMinMax) {
|
||||
applyMinMax = false;
|
||||
// https://drafts.csswg.org/css-grid/#algo-flex-tracks
|
||||
// "If using this flex fraction would cause the grid to be smaller than
|
||||
// the grid container’s min-width/height (or larger than the grid
|
||||
// container’s max-width/height), then redo this step, treating the free
|
||||
// space as definite [...]"
|
||||
nscoord newSize = 0;
|
||||
for (auto& sz : mSizes) {
|
||||
newSize += sz.mBase;
|
||||
}
|
||||
const auto sumOfGridGaps = SumOfGridGaps();
|
||||
newSize += sumOfGridGaps;
|
||||
if (newSize > maxSize) {
|
||||
aAvailableSize = maxSize;
|
||||
} else if (newSize < minSize) {
|
||||
aAvailableSize = minSize;
|
||||
}
|
||||
if (aAvailableSize != NS_UNCONSTRAINEDSIZE) {
|
||||
aAvailableSize = std::max(0, aAvailableSize - sumOfGridGaps);
|
||||
// Restart with the original track sizes and definite aAvailableSize.
|
||||
if (origSizes.isSome()) {
|
||||
mSizes = Move(*origSizes);
|
||||
origSizes.reset();
|
||||
if (aAvailableSize == 0) {
|
||||
break; // zero available size wouldn't change any sizes though...
|
||||
}
|
||||
continue;
|
||||
} // else, no mSizes[].mBase were changed above so it's still correct
|
||||
if (aAvailableSize == 0) {
|
||||
break; // zero available size wouldn't change any sizes though...
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -82,5 +82,8 @@ a30 {
|
||||
<div class="grid rel" style="width:100px; height:100px; position:relative">
|
||||
<button style="top:0;width:40px;height:40px">AB</button><button style="top:0;right:0;height:40px"> </button><button style="bottom:0;width:40px;">AB</button><button style="bottom:0;right:0"> </button></div>
|
||||
|
||||
<div class="grid rel" style="width:100px; height:100px; position:relative">
|
||||
<button style="top:0;width:40px;height:40px">AB</button><button style="top:0;right:0;height:40px"> </button><button style="bottom:0;width:40px;">AB</button><button style="bottom:0;right:0"> </button></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -149,5 +149,12 @@ button:nth-child(4n) { background: silver; }
|
||||
<button class="end"> </button>
|
||||
</div>
|
||||
|
||||
<div class="grid max40" style="grid:50px 50px/50px 50px; place-items:stretch">
|
||||
<button>AB</button>
|
||||
<button class="jend"> </button>
|
||||
<button class="aend">AB</button>
|
||||
<button class="end"> </button>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -47,6 +47,7 @@ input {
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="grid"><div><input></div></div>
|
||||
<div class="grid"><input class="m" style="width:190px; height:20px"></div>
|
||||
<div class="grid"><input class="hma10 je" style="height:20px"></div>
|
||||
<div class="grid"><input class="hmaa jc" style="height:20px"></div>
|
||||
|
@ -16,6 +16,7 @@
|
||||
display: inline-grid;
|
||||
border: 1px solid;
|
||||
grid: 2px 30px 3px / 6px 200px 4px;
|
||||
place-items: stretch;
|
||||
}
|
||||
|
||||
input {
|
||||
@ -40,6 +41,7 @@ input {
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="grid" style="place-items:start"><input></div>
|
||||
<div class="grid"><input class="m"></div>
|
||||
<div class="grid"><input class="hma10"></div>
|
||||
<div class="grid"><input class="hmaa"></div>
|
||||
|
@ -91,75 +91,75 @@ var js = [ "normal", "start", "center", "stretch" ];
|
||||
var as = [ "normal", "start", "center", "stretch" ];
|
||||
var imgSizes =
|
||||
[
|
||||
['24px', '24px'],
|
||||
['32px', '32px'],
|
||||
['32px', '32px'],
|
||||
['24px', '24px'],
|
||||
['24px', '24px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '24px'],
|
||||
['24px', '24px'],
|
||||
['16px', '16px'],
|
||||
['16px', '24px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '24px'],
|
||||
['32px', '16px'],
|
||||
['32px', '16px'],
|
||||
['32px', '16px'],
|
||||
['32px', '24px'],
|
||||
['24px', '24px'],
|
||||
['24px', '24px'],
|
||||
['24px', '24px'],
|
||||
['32px', '32px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['24px', '24px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['24px', '16px'],
|
||||
['24px', '16px'],
|
||||
['24px', '16px'],
|
||||
['24px', '32px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['8px', '8px'],
|
||||
['8px', '8px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '8px'],
|
||||
['8px', '8px'],
|
||||
['16px', '16px'],
|
||||
['16px', '8px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['16px', '8px'],
|
||||
['4px', '16px'],
|
||||
['4px', '16px'],
|
||||
['4px', '16px'],
|
||||
['4px', '8px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['32px', '32px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['4px', '16px'],
|
||||
['4px', '16px'],
|
||||
['4px', '16px'],
|
||||
['4px', '32px'],
|
||||
['4px', '4px'],
|
||||
['8px', '8px'],
|
||||
['8px', '8px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '4px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['16px', '4px'],
|
||||
['8px', '8px'],
|
||||
['16px', '16px'],
|
||||
['16px', '4px'],
|
||||
['8px', '16px'],
|
||||
['8px', '16px'],
|
||||
['8px', '16px'],
|
||||
['8px', '4px'],
|
||||
['8px', '8px'],
|
||||
['32px', '32px'],
|
||||
['32px', '32px'],
|
||||
['8px', '8px'],
|
||||
['8px', '8px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '8px'],
|
||||
['8px', '8px'],
|
||||
['16px', '16px'],
|
||||
['16px', '8px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '8px'],
|
||||
['32px', '16px'],
|
||||
['32px', '16px'],
|
||||
['32px', '16px'],
|
||||
['32px', '8px'],
|
||||
|
@ -87,27 +87,27 @@ var js = [ "normal", "start", "center", "stretch" ];
|
||||
var as = [ "normal", "start", "center", "stretch" ];
|
||||
var imgSizes =
|
||||
[
|
||||
['24px', '24px'],
|
||||
['32px', '32px'],
|
||||
['32px', '32px'],
|
||||
['24px', '24px'],
|
||||
['24px', '24px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '24px'],
|
||||
['24px', '24px'],
|
||||
['16px', '16px'],
|
||||
['16px', '24px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '24px'],
|
||||
['32px', '16px'],
|
||||
['32px', '16px'],
|
||||
['32px', '16px'],
|
||||
['32px', '24px'],
|
||||
['24px', '24px'],
|
||||
['24px', '24px'],
|
||||
['24px', '24px'],
|
||||
['32px', '32px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['24px', '24px'],
|
||||
['16px', '16px'],
|
||||
['16px', '32px'],
|
||||
['24px', '16px'],
|
||||
['24px', '16px'],
|
||||
['24px', '16px'],
|
||||
['24px', '32px'],
|
||||
@ -131,7 +131,7 @@ var imgSizes =
|
||||
['4px', '32px'],
|
||||
['4px', '4px'],
|
||||
['4px', '32px'],
|
||||
['4px', '4px'],
|
||||
['4px', '16px'],
|
||||
['4px', '16px'],
|
||||
['4px', '16px'],
|
||||
['4px', '32px'],
|
||||
@ -150,7 +150,7 @@ var imgSizes =
|
||||
['8px', '8px'],
|
||||
['8px', '8px'],
|
||||
['8px', '8px'],
|
||||
['8px', '8px'],
|
||||
['16px', '8px'],
|
||||
['8px', '8px'],
|
||||
['16px', '8px'],
|
||||
['8px', '8px'],
|
||||
|
@ -140,7 +140,7 @@
|
||||
var url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAEElEQVQoz2NgGAWjYBTAAAADEAABaJFtwwAAAABJRU5ErkJggg%3D%3D";
|
||||
var imgs = document.querySelectorAll('img');
|
||||
var imgSizes =
|
||||
[
|
||||
[
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['16px', '4px'],
|
||||
@ -155,13 +155,13 @@ var imgSizes =
|
||||
['10px', '20px'],
|
||||
['20px', '20px'],
|
||||
['10px', '20px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['10px', '10px'],
|
||||
['16px', '16px'],
|
||||
['10px', '10px'],
|
||||
['16px', '4px'],
|
||||
['10px', '4px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['2px', '2px'],
|
||||
['4px', '4px'],
|
||||
['2px', '2px'],
|
||||
@ -177,15 +177,15 @@ var imgSizes =
|
||||
['20px', '10px'],
|
||||
['20px', '32px'],
|
||||
['20px', '10px'],
|
||||
['32px', '32px'],
|
||||
['20px', '20px'],
|
||||
['20px', '10px'],
|
||||
['4px', '4px'],
|
||||
['4px', '4px'],
|
||||
['16px', '16px'],
|
||||
['10px', '10px'],
|
||||
['16px', '16px'],
|
||||
['10px', '10px'],
|
||||
['16px', '32px'],
|
||||
['16px', '10px'],
|
||||
['32px', '32px'],
|
||||
['16px', '16px'],
|
||||
['10px', '10px'],
|
||||
['20px', '20px'],
|
||||
['20px', '10px'],
|
||||
|
@ -157,6 +157,7 @@ for (var i = 0; i < imgs.length; ++i) {
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- For generating button size results in -ref file
|
||||
<script>
|
||||
document.body.clientHeight;
|
||||
var imgs = document.querySelectorAll('img');
|
||||
@ -167,19 +168,6 @@ for (var i = 0; i < imgs.length; ++i) {
|
||||
s += ']';
|
||||
console.log(s)
|
||||
</script>
|
||||
|
||||
<!-- For generating button size results in -ref file
|
||||
<script>
|
||||
document.body.clientHeight;
|
||||
var buttons = document.querySelectorAll('button');
|
||||
var s = ' [\n';
|
||||
for (var i = 0; i < buttons.length; ++i) {
|
||||
var cs = window.getComputedStyle(buttons[i]);
|
||||
s += " ['"+ cs['width'] + "', '" + cs['height'] + "'],\n";
|
||||
}
|
||||
s += ']';
|
||||
console.log(s)
|
||||
</script>
|
||||
-->
|
||||
|
||||
</body>
|
||||
|
@ -5,7 +5,7 @@
|
||||
-->
|
||||
<html><head>
|
||||
<meta charset="utf-8">
|
||||
<title>Reference: stretching intrinsic ratio item with min/max-size:0</title>
|
||||
<title>Reference: stretching intrinsic ratio item with min-size:0</title>
|
||||
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1176775">
|
||||
<style type="text/css">
|
||||
body,html { color:black; background:white; font:16px/1 monospace; padding:0; margin:0; }
|
||||
@ -22,59 +22,59 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<body>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:8px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:calc(2px * (20 / 24))">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:8px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:120px; width:10px; margin-bottom:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:120px; width:10px; margin-top:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:24px; width:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:24px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:24px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:48px; height:4px; margin-right:-38px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:24px; height:4px; margin-right:-14px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 80px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:48px; height:4px; margin-left:-38px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:24px; height:4px; margin-left:-38px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
@ -82,59 +82,59 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<div class="vertical-tests">
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:8px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:calc(2px * (20 / 24))">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:8px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:120px; width:10px; margin-bottom:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:120px; width:10px; margin-top:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:24px; width:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:24px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:24px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:48px; height:4px; margin-right:-38px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:24px; height:4px; margin-right:-14px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 80px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:48px; height:4px; margin-left:-38px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:24px; height:4px; margin-left:-38px">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
-->
|
||||
<html><head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Grid Test: stretching intrinsic ratio item with min/max-size:0</title>
|
||||
<title>CSS Grid Test: stretching intrinsic ratio item with min-size:0</title>
|
||||
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1176775">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-stretch">
|
||||
<link rel="match" href="grid-item-intrinsic-ratio-stretch-001-ref.html">
|
||||
@ -15,6 +15,7 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
display: inline-grid;
|
||||
border: 1px solid;
|
||||
margin: 5px;
|
||||
place-items: stretch;
|
||||
}
|
||||
.grid > * {
|
||||
min-width: 0;
|
||||
|
@ -22,61 +22,61 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<body>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:48px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="height:1px; width:12px">
|
||||
<img src="support/lime-24x2.png" style="height:8px; width:12px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:72px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:100px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:10px; height:120px">
|
||||
<img src="support/lime-2x24.png" style="width:20px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:96px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:24px; height:2px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:120px; height:10px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 48px / 6px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:calc(2px * (80 / 24)); height:80px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:80px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:4px; height:72px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:98px; height:calc(2px * (98 / 24))">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:6px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:4px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
@ -84,61 +84,61 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<div class="vertical-tests">
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:48px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="height:1px; width:12px">
|
||||
<img src="support/lime-24x2.png" style="height:8px; width:12px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:72px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:100px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:10px; height:120px">
|
||||
<img src="support/lime-2x24.png" style="width:20px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:96px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:24px; height:2px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:120px; height:10px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 48px / 6px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:calc(2px * (80 / 24)); height:80px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:80px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:4px; height:72px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:98px; height:calc(2px * (98 / 24))">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:6px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:4px">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -16,6 +16,7 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
display: inline-grid;
|
||||
border: 1px solid;
|
||||
margin: 5px;
|
||||
place-items: stretch;
|
||||
}
|
||||
.grid > * {
|
||||
min-width: 0;
|
||||
|
@ -22,59 +22,59 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<body>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:8px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:calc(2px * (20 / 24))">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:8px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:120px; width:10px; margin-bottom:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:120px; width:10px; margin-top:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:24px; width:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:10px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:10px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:10px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 80px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:10px; height:4px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
@ -82,59 +82,59 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<div class="vertical-tests">
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:8px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="height:96px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:calc(2px * (20 / 24))">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:8px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:96px; height:8px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:120px; width:10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start safe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:120px; width:10px; margin-bottom:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end unsafe; height:24px; width:10px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 10px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:120px; width:10px; margin-top:-24px">
|
||||
<img src="support/lime-2x24.png" style="align-self:end safe; height:24px; width:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start unsafe; width:10px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start safe; width:10px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 40px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end unsafe; width:10px; height:4px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px; margin-left: 80px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:end safe; width:10px; height:4px">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -15,6 +15,7 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
display: inline-grid;
|
||||
border: 1px solid;
|
||||
margin: 5px;
|
||||
place-items: stretch stretch;
|
||||
}
|
||||
.vertical-tests img { writing-mode: vertical-rl; }
|
||||
.vertical-tests div { vertical-align:bottom }
|
||||
|
@ -23,61 +23,61 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<body>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:48px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="height:1px; width:12px">
|
||||
<img src="support/lime-24x2.png" style="height:8px; width:12px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:72px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:100px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:10px; height:120px">
|
||||
<img src="support/lime-2x24.png" style="width:20px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:96px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:24px; height:2px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:120px; height:10px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 48px / 6px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:calc(2px * (80 / 24)); height:80px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:80px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:4px; height:72px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:98px; height:calc(2px * (98 / 24))">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:6px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:4px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
@ -85,61 +85,61 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
<div class="vertical-tests">
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:48px">
|
||||
<img src="support/lime-2x24.png" style="width:4px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="height:1px; width:12px">
|
||||
<img src="support/lime-24x2.png" style="height:8px; width:12px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:72px">
|
||||
<img src="support/lime-24x2.png" style="height:6px; width:100px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:48px; width:4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:24px; width:20px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:1px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; height:12px; width:4px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:48px; height:4px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:24px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:1px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:10px; height:8px">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="grid" style="grid: 96px / 20px">
|
||||
<img src="support/lime-2x24.png" style="width:10px; height:120px">
|
||||
<img src="support/lime-2x24.png" style="width:20px; height:96px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="width:6px; height:96px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 20px">
|
||||
<img src="support/lime-24x2.png" style="width:24px; height:2px">
|
||||
<img src="support/lime-24x2.png" style="width:20px; height:8px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="width:120px; height:10px">
|
||||
<img src="support/lime-24x2.png" style="width:100px; height:10px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 48px / 6px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:calc(2px * (80 / 24)); height:80px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:80px">
|
||||
</div>
|
||||
<div class="grid" style="grid: 96px / 4px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:6px; height:72px">
|
||||
<img src="support/lime-2x24.png" style="align-self:start; width:4px; height:72px">
|
||||
</div>
|
||||
|
||||
<div class="grid" style="grid: 8px / 100px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:98px; height:calc(2px * (98 / 24))">
|
||||
</div>
|
||||
<div class="grid" style="grid: 4px / 10px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:6px">
|
||||
<img src="support/lime-24x2.png" style="justify-self:start; width:72px; height:4px">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -16,6 +16,7 @@ body,html { color:black; background:white; font:16px/1 monospace; padding:0; mar
|
||||
display: inline-grid;
|
||||
border: 1px solid;
|
||||
margin: 5px;
|
||||
place-items: stretch;
|
||||
}
|
||||
.vertical-tests img { writing-mode: vertical-rl; }
|
||||
.vertical-tests div { vertical-align:bottom }
|
||||
|
@ -147,79 +147,79 @@ button {
|
||||
var buttonSizes =
|
||||
[
|
||||
['32px', '4px'],
|
||||
['0px', '0px'],
|
||||
['0px', '4px'],
|
||||
['0px', '4px'],
|
||||
['0px', '4px'],
|
||||
['0px', '4px'],
|
||||
['2px', '2px'],
|
||||
['2px', '4px'],
|
||||
['2px', '4px'],
|
||||
['2px', '4px'],
|
||||
['2px', '4px'],
|
||||
['32px', '20px'],
|
||||
['10px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['32px', '4px'],
|
||||
['10px', '4px'],
|
||||
['0px', '0px'],
|
||||
['0px', '0px'],
|
||||
['0px', '4px'],
|
||||
['0px', '4px'],
|
||||
['0px', '4px'],
|
||||
['0px', '4px'],
|
||||
['2px', '2px'],
|
||||
['2px', '2px'],
|
||||
['2px', '4px'],
|
||||
['2px', '4px'],
|
||||
['2px', '4px'],
|
||||
['2px', '4px'],
|
||||
['4px', '32px'],
|
||||
['2px', '32px'],
|
||||
['0px', '0px'],
|
||||
['2px', '0px'],
|
||||
['0px', '32px'],
|
||||
['0px', '32px'],
|
||||
['0px', '32px'],
|
||||
['0px', '32px'],
|
||||
['2px', '2px'],
|
||||
['2px', '2px'],
|
||||
['2px', '32px'],
|
||||
['2px', '32px'],
|
||||
['2px', '32px'],
|
||||
['2px', '32px'],
|
||||
['20px', '32px'],
|
||||
['20px', '10px'],
|
||||
['20px', '0px'],
|
||||
['20px', '0px'],
|
||||
['20px', '2px'],
|
||||
['20px', '2px'],
|
||||
['20px', '32px'],
|
||||
['20px', '10px'],
|
||||
['20px', '32px'],
|
||||
['20px', '10px'],
|
||||
['4px', '32px'],
|
||||
['4px', '10px'],
|
||||
['0px', '0px'],
|
||||
['0px', '0px'],
|
||||
['0px', '32px'],
|
||||
['0px', '10px'],
|
||||
['0px', '32px'],
|
||||
['0px', '10px'],
|
||||
['2px', '2px'],
|
||||
['2px', '2px'],
|
||||
['2px', '32px'],
|
||||
['2px', '10px'],
|
||||
['2px', '32px'],
|
||||
['2px', '10px'],
|
||||
['20px', '4px'],
|
||||
['20px', '4px'],
|
||||
['20px', '0px'],
|
||||
['20px', '0px'],
|
||||
['20px', '2px'],
|
||||
['20px', '2px'],
|
||||
['20px', '4px'],
|
||||
['20px', '2px'],
|
||||
['20px', '4px'],
|
||||
['20px', '2px'],
|
||||
['20px', '0px'],
|
||||
['20px', '0px'],
|
||||
['20px', '0px'],
|
||||
['20px', '0px'],
|
||||
['20px', '2px'],
|
||||
['20px', '2px'],
|
||||
['20px', '2px'],
|
||||
['20px', '2px'],
|
||||
['20px', '32px'],
|
||||
['20px', '10px'],
|
||||
['20px', '32px'],
|
||||
['20px', '10px'],
|
||||
['32px', '20px'],
|
||||
['10px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['32px', '20px'],
|
||||
['10px', '20px'],
|
||||
['32px', '20px'],
|
||||
['10px', '20px'],
|
||||
['4px', '20px'],
|
||||
['2px', '20px'],
|
||||
['0px', '20px'],
|
||||
['0px', '20px'],
|
||||
['2px', '20px'],
|
||||
['2px', '20px'],
|
||||
['4px', '20px'],
|
||||
['2px', '20px'],
|
||||
['4px', '20px'],
|
||||
|
@ -5,7 +5,7 @@
|
||||
-->
|
||||
<html><head>
|
||||
<meta charset="utf-8">
|
||||
<title>Reference: stretching video items with auto-margins and/or orthogonal writing-mode</title>
|
||||
<title>Reference: video items with auto-margins and/or orthogonal writing-mode</title>
|
||||
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1316051">
|
||||
<style type="text/css">
|
||||
* { vertical-align: top; }
|
||||
@ -21,6 +21,8 @@ video {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: lightgrey;
|
||||
width: 16px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
.m { margin: 7px 3px 1px 5px; }
|
||||
@ -37,26 +39,24 @@ video {
|
||||
.ae { align-self: end; }
|
||||
.ac { align-self: center; }
|
||||
|
||||
.mxw, .mxh { width: 32px; height: 16px; }
|
||||
|
||||
.vr { writing-mode: vertical-rl; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="grid"><video class="m" src="support/colors-16x8.webm" style="width:80px; height:40px"></div>
|
||||
<div class="grid"><video class="hma10 je" src="support/colors-16x8.webm" style="width:80px; height:40px"></div>
|
||||
<div class="grid"><video class="hmaa jc" src="support/colors-16x8.webm" style="width:80px; height:40px"></div>
|
||||
<div class="grid"><video class="vr hma10 je" src="support/colors-16x8.webm" style="width:80px; height:40px"></div>
|
||||
<div class="grid"><video class="vr hmaa jc" src="support/colors-16x8.webm" style="width:80px; height:40px"></div>
|
||||
<div class="grid"><video class="vr" src="support/colors-16x8.webm" style="width:96px; height:48px"></div>
|
||||
<div class="grid"><video class="m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="vma10 ae" src="support/colors-16x8.webm" style="width:90px; height:45px"></div>
|
||||
<div class="grid"><video class="vmaa ac" src="support/colors-16x8.webm" style="width:90px; height:45px"></div>
|
||||
<div class="grid"><video class="vr vma10 ae" src="support/colors-16x8.webm" style="width:90px; height:45px"></div>
|
||||
<div class="grid"><video class="vr vmaa ac" src="support/colors-16x8.webm" style="width:90px; height:45px"></div>
|
||||
<div class="grid"><video class="vr p vma10 as" src="support/colors-16x8.webm" style="width:82px; height:41px"></div>
|
||||
<div class="grid"><video class="vr p vmaa ac" src="support/colors-16x8.webm" style="width:82px; height:41px"></div>
|
||||
<div class="grid"><video class="vma10 ae" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vmaa ac" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr vma10 ae" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr vmaa ac" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr p vma10 ae" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr p vmaa ac" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="mxw m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw hma10 je" src="support/colors-16x8.webm"></div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
-->
|
||||
<html><head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Grid Test: stretching video items with auto-margins and/or orthogonal writing-mode</title>
|
||||
<title>CSS Grid Test: video items with auto-margins and/or orthogonal writing-mode</title>
|
||||
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1316051">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-normal">
|
||||
<link rel="match" href="grid-item-video-stretch-001-ref.html">
|
||||
|
113
layout/reftests/css-grid/grid-item-video-stretch-002-ref.html
Normal file
113
layout/reftests/css-grid/grid-item-video-stretch-002-ref.html
Normal file
@ -0,0 +1,113 @@
|
||||
<!DOCTYPE HTML>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html><head>
|
||||
<meta charset="utf-8">
|
||||
<title>Reference: stretching video items with auto-margins and/or orthogonal writing-mode</title>
|
||||
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1316051">
|
||||
<style type="text/css">
|
||||
* { vertical-align: top; }
|
||||
.grid {
|
||||
display: inline-grid;
|
||||
border: 3px solid grey;
|
||||
grid: 50px / 100px;
|
||||
padding: 10px 4px 3px 6px;
|
||||
}
|
||||
|
||||
video {
|
||||
border: 1px solid;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: lightgrey;
|
||||
width: 16px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
.m { margin: 7px 3px 1px 5px; }
|
||||
.p { padding: 3px 1px 5px 7px; }
|
||||
.hma10 { margin: 7px 3px 1px 0; }
|
||||
.hmaa { margin: 7px 0 1px 0; }
|
||||
.vma10 { margin: 0 7px 3px 1px; }
|
||||
.vmaa { margin: 0 7px 0 1px; }
|
||||
|
||||
.js { justify-self: start; }
|
||||
.je { justify-self: end; }
|
||||
.jc { justify-self: center; }
|
||||
.as { align-self: start; }
|
||||
.ae { align-self: end; }
|
||||
.ac { align-self: center; }
|
||||
|
||||
.vr { writing-mode: vertical-rl; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="grid"><video class="m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="vma10 ae" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vmaa ac" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr vma10 ae" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr vmaa ac" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr p vma10 ae" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr p vmaa ac" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="mxw m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw vr hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw vr hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="mxh m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh vr hma10 je" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh vr hmaa jc" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<script>
|
||||
var sizes =
|
||||
[
|
||||
['90px', '40px'],
|
||||
['16px', '40px'],
|
||||
['16px', '40px'],
|
||||
['16px', '40px'],
|
||||
['16px', '40px'],
|
||||
['98px', '48px'],
|
||||
['90px', '8px'],
|
||||
['90px', '8px'],
|
||||
['90px', '8px'],
|
||||
['90px', '8px'],
|
||||
['82px', '8px'],
|
||||
['82px', '8px'],
|
||||
['32px', '40px'],
|
||||
['16px', '40px'],
|
||||
['16px', '40px'],
|
||||
['16px', '40px'],
|
||||
['16px', '40px'],
|
||||
['32px', '48px'],
|
||||
['90px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['16px', '16px'],
|
||||
['98px', '16px'],
|
||||
];
|
||||
var items = document.querySelectorAll('video')
|
||||
for (var i = 0; i < items.length; ++i) {
|
||||
let item = items[i];
|
||||
item.style.width = sizes[i][0];
|
||||
item.style.height = sizes[i][1];
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
91
layout/reftests/css-grid/grid-item-video-stretch-002.html
Normal file
91
layout/reftests/css-grid/grid-item-video-stretch-002.html
Normal file
@ -0,0 +1,91 @@
|
||||
<!DOCTYPE HTML>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<html><head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Grid Test: stretching video items with auto-margins and/or orthogonal writing-mode</title>
|
||||
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1316051">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-normal">
|
||||
<link rel="match" href="grid-item-video-stretch-002-ref.html">
|
||||
<style type="text/css">
|
||||
* { vertical-align: top; }
|
||||
.grid {
|
||||
display: inline-grid;
|
||||
border: 3px solid grey;
|
||||
grid: 10px 50px 3px / 6px 100px 4px;
|
||||
align-items: stretch;
|
||||
justify-items: stretch;
|
||||
}
|
||||
|
||||
video {
|
||||
border: 1px solid;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: lightgrey;
|
||||
grid-area: 2/2;
|
||||
}
|
||||
|
||||
.m { margin: 7px 3px 1px 5px; }
|
||||
.p { padding: 3px 1px 5px 7px; }
|
||||
.hma10 { margin: 7px 3px 1px auto; }
|
||||
.hmaa { margin: 7px auto 1px auto; }
|
||||
.vma10 { margin: auto 7px 3px 1px; }
|
||||
.vmaa { margin: auto 7px auto 1px; }
|
||||
.mxw { max-width: 32px; }
|
||||
.mxh { max-height: 16px; }
|
||||
|
||||
.vr { writing-mode: vertical-rl; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="grid"><video class="m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="hma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="hmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr hma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr hmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="vma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr vma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr vmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr p vma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="vr p vmaa" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="mxw m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw hma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw hmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw vr hma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw vr hmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxw vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<div class="grid"><video class="mxh m" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh hma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh hmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh vr hma10" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh vr hmaa" src="support/colors-16x8.webm"></div>
|
||||
<div class="grid"><video class="mxh vr" src="support/colors-16x8.webm"></div>
|
||||
|
||||
<!--
|
||||
<script>
|
||||
function test() {
|
||||
document.body.clientHeight;
|
||||
var videos = document.querySelectorAll('video');
|
||||
var s = ' [\n';
|
||||
for (var i = 0; i < videos.length; ++i) {
|
||||
let cs = window.getComputedStyle(videos[i])
|
||||
s += " ['"+ cs.width + "', '" + cs.height + "'],\n";
|
||||
}
|
||||
s += ']';
|
||||
console.log(s)
|
||||
}
|
||||
|
||||
setTimeout(test,2000)
|
||||
</script>
|
||||
-->
|
||||
|
||||
</body>
|
||||
</html>
|
@ -107,4 +107,28 @@
|
||||
<div class="item"></div>
|
||||
</div>
|
||||
|
||||
<pre>The first 6 grids should look the same:</pre>
|
||||
<div class="grid rows" style="grid: 1fr / 30px; height:83px">
|
||||
<div class="item"></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 10px 1fr / 30px; height:83px">
|
||||
<div class="item" style="grid-row:span 2"></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr / 30px; height:83px">
|
||||
<div class="item"></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr 1fr / 30px; height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:90px"></div></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr auto / 30px; height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:90px"></div></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 10px 1fr / 30px; height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:90px"></div></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr 1fr / 30px; grid-row-gap:10px; height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:40px"></div></div>
|
||||
<div class="item"><div style="height:40px"></div></div>
|
||||
</div>
|
||||
|
||||
</body></html>
|
||||
|
@ -105,4 +105,28 @@
|
||||
<div class="item"></div>
|
||||
</div>
|
||||
|
||||
<pre>The first 6 grids should look the same:</pre>
|
||||
<div class="grid rows" style="grid: 1fr / 30px; min-height:83px">
|
||||
<div class="item"></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 10px 1fr / 30px; min-height:83px">
|
||||
<div class="item" style="grid-row:span 2"></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr / 30px; max-height:30px; min-height:83px">
|
||||
<div class="item"></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr 1fr / 30px; max-height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:90px"></div></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr auto / 30px; max-height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:90px"></div></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 10px 1fr / 30px; max-height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:90px"></div></div>
|
||||
</div>
|
||||
<div class="grid rows" style="grid: 1fr 1fr / 30px; grid-row-gap:10px; max-height:83px">
|
||||
<div class="item" style="grid-row:span 2"><div style="height:40px"></div></div>
|
||||
<div class="item"><div style="height:40px"></div></div>
|
||||
</div>
|
||||
|
||||
</body></html>
|
||||
|
@ -124,6 +124,7 @@ skip-if(Android) == grid-item-button-001.html grid-item-button-001-ref.html
|
||||
== grid-item-table-stretch-004.html grid-item-table-stretch-004-ref.html
|
||||
== grid-item-fieldset-stretch-001.html grid-item-fieldset-stretch-001-ref.html
|
||||
skip-if(Android) == grid-item-video-stretch-001.html grid-item-video-stretch-001-ref.html # Huh, Android doesn't have webm support?
|
||||
skip-if(Android) == grid-item-video-stretch-002.html grid-item-video-stretch-002-ref.html # Huh, Android doesn't have webm support?
|
||||
== grid-item-input-stretch-001.html grid-item-input-stretch-001-ref.html
|
||||
== grid-item-self-baseline-001.html grid-item-self-baseline-001-ref.html
|
||||
random-if(http.oscpu!="Linux\u0020i686") == grid-item-content-baseline-001.html grid-item-content-baseline-001-ref.html # depends on exact Ahem baseline font metrics which seems to differ between platforms: bug 1310792
|
||||
|
@ -1 +1 @@
|
||||
NSPR_4_13_1_RTM
|
||||
NSPR_4_14_BETA2
|
||||
|
@ -10,4 +10,3 @@
|
||||
*/
|
||||
|
||||
#error "Do not include this header file."
|
||||
|
||||
|
4
nsprpub/configure
vendored
4
nsprpub/configure
vendored
@ -2488,8 +2488,8 @@ test -n "$target_alias" &&
|
||||
program_prefix=${target_alias}-
|
||||
|
||||
MOD_MAJOR_VERSION=4
|
||||
MOD_MINOR_VERSION=13
|
||||
MOD_PATCH_VERSION=1
|
||||
MOD_MINOR_VERSION=14
|
||||
MOD_PATCH_VERSION=0
|
||||
NSPR_MODNAME=nspr20
|
||||
_HAVE_PTHREADS=
|
||||
USE_PTHREADS=
|
||||
|
@ -15,8 +15,8 @@ dnl ========================================================
|
||||
dnl = Defaults
|
||||
dnl ========================================================
|
||||
MOD_MAJOR_VERSION=4
|
||||
MOD_MINOR_VERSION=13
|
||||
MOD_PATCH_VERSION=1
|
||||
MOD_MINOR_VERSION=14
|
||||
MOD_PATCH_VERSION=0
|
||||
NSPR_MODNAME=nspr20
|
||||
_HAVE_PTHREADS=
|
||||
USE_PTHREADS=
|
||||
|
@ -31,11 +31,11 @@ PR_BEGIN_EXTERN_C
|
||||
** The format of the version string is
|
||||
** "<major version>.<minor version>[.<patch level>] [<Beta>]"
|
||||
*/
|
||||
#define PR_VERSION "4.13.1"
|
||||
#define PR_VERSION "4.14 Beta"
|
||||
#define PR_VMAJOR 4
|
||||
#define PR_VMINOR 13
|
||||
#define PR_VPATCH 1
|
||||
#define PR_BETA PR_FALSE
|
||||
#define PR_VMINOR 14
|
||||
#define PR_VPATCH 0
|
||||
#define PR_BETA PR_TRUE
|
||||
|
||||
/*
|
||||
** PRVersionCheck
|
||||
|
@ -155,7 +155,7 @@ PRInt32 _PR_MD_PR_POLL(PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout)
|
||||
pd->out_flags = 0; /* pre-condition */
|
||||
/* make sure this is an NSPR supported stack */
|
||||
bottom = PR_GetIdentitiesLayer(pd->fd, PR_NSPR_IO_LAYER);
|
||||
// ignore a socket without PR_NSPR_IO_LAYER available.
|
||||
/* ignore a socket without PR_NSPR_IO_LAYER available */
|
||||
|
||||
if ((NULL != bottom)
|
||||
&& (_PR_FILEDESC_OPEN == bottom->secret->state))
|
||||
|
@ -3847,7 +3847,8 @@ static PRInt32 _pr_poll_with_poll(
|
||||
/* now locate the NSPR layer at the bottom of the stack */
|
||||
PRFileDesc *bottom = PR_GetIdentitiesLayer(
|
||||
pds[index].fd, PR_NSPR_IO_LAYER);
|
||||
PR_ASSERT(NULL != bottom); /* what to do about that? */
|
||||
/* ignore a socket without PR_NSPR_IO_LAYER available */
|
||||
|
||||
pds[index].out_flags = 0; /* pre-condition */
|
||||
if ((NULL != bottom)
|
||||
&& (_PR_FILEDESC_OPEN == bottom->secret->state))
|
||||
@ -4105,7 +4106,8 @@ static PRInt32 _pr_poll_with_select(
|
||||
/* now locate the NSPR layer at the bottom of the stack */
|
||||
PRFileDesc *bottom = PR_GetIdentitiesLayer(
|
||||
pds[index].fd, PR_NSPR_IO_LAYER);
|
||||
PR_ASSERT(NULL != bottom); /* what to do about that? */
|
||||
/* ignore a socket without PR_NSPR_IO_LAYER available */
|
||||
|
||||
pds[index].out_flags = 0; /* pre-condition */
|
||||
if ((NULL != bottom)
|
||||
&& (_PR_FILEDESC_OPEN == bottom->secret->state))
|
||||
|
@ -55,8 +55,8 @@ static char *incompatible_version[] = {
|
||||
"3.0", "3.0.1",
|
||||
"3.1", "3.1.1", "3.1.2", "3.1.3",
|
||||
"3.5", "3.5.1",
|
||||
"4.13.2",
|
||||
"4.14", "4.14.1",
|
||||
"4.14.1",
|
||||
"4.15", "4.15.1",
|
||||
"10.0", "11.1", "12.14.20"
|
||||
};
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
from distutils.version import LooseVersion
|
||||
import hashlib
|
||||
import logging
|
||||
from mozbuild.base import (
|
||||
BuildEnvironmentNotFoundException,
|
||||
@ -94,16 +95,16 @@ Please commit or stash these changes before vendoring, or re-run with `--ignore-
|
||||
self.log(logging.ERROR, 'openssl', {}, "OpenSSL not found!")
|
||||
return None
|
||||
|
||||
def vendor(self, ignore_modified=False,
|
||||
build_peers_said_large_imports_were_ok=False):
|
||||
self.populate_logger()
|
||||
self.log_manager.enable_unstructured()
|
||||
if not ignore_modified:
|
||||
self.check_modified_files()
|
||||
def _ensure_cargo(self):
|
||||
'''
|
||||
Ensures all the necessary cargo bits are installed.
|
||||
|
||||
Returns the path to cargo if successful, None otherwise.
|
||||
'''
|
||||
cargo = self.get_cargo_path()
|
||||
if not self.check_cargo_version(cargo):
|
||||
self.log(logging.ERROR, 'cargo_version', {}, 'Cargo >= 0.13 required (install Rust 1.12 or newer)')
|
||||
return
|
||||
return None
|
||||
else:
|
||||
self.log(logging.DEBUG, 'cargo_version', {}, 'cargo is new enough')
|
||||
have_vendor = any(l.strip() == 'vendor' for l in subprocess.check_output([cargo, '--list']).splitlines())
|
||||
@ -118,7 +119,145 @@ Please commit or stash these changes before vendoring, or re-run with `--ignore-
|
||||
self.run_process(args=[cargo, 'install', '--force', 'cargo-vendor'],
|
||||
append_env=env)
|
||||
else:
|
||||
self.log(logging.DEBUG, 'cargo_vendor', {}, 'sufficiently new cargo-vendor is already intalled')
|
||||
self.log(logging.DEBUG, 'cargo_vendor', {}, 'sufficiently new cargo-vendor is already installed')
|
||||
|
||||
return cargo
|
||||
|
||||
def _check_licenses(self, vendor_dir):
|
||||
# A whitelist of acceptable license identifiers for the
|
||||
# packages.license field from https://spdx.org/licenses/. Cargo
|
||||
# documentation claims that values are checked against the above
|
||||
# list and that multiple entries can be separated by '/'. We
|
||||
# choose to list all combinations instead for the sake of
|
||||
# completeness and because some entries below obviously do not
|
||||
# conform to the format prescribed in the documentation.
|
||||
#
|
||||
# It is insufficient to have additions to this whitelist reviewed
|
||||
# solely by a build peer; any additions must be checked by somebody
|
||||
# competent to review licensing minutiae.
|
||||
LICENSE_WHITELIST = [
|
||||
'Apache-2.0',
|
||||
'Apache-2.0 / MIT',
|
||||
'Apache-2.0/MIT',
|
||||
'Apache-2 / MIT',
|
||||
'BSD-3-Clause', # bindgen (only used at build time)
|
||||
'CC0-1.0',
|
||||
'ISC',
|
||||
'ISC/Apache-2.0',
|
||||
'MIT',
|
||||
'MIT / Apache-2.0',
|
||||
'MIT/Apache-2.0',
|
||||
'MIT OR Apache-2.0',
|
||||
'MPL-2.0',
|
||||
'Unlicense/MIT',
|
||||
]
|
||||
|
||||
# This whitelist should only be used for packages that use a
|
||||
# license-file and for which the license-file entry has been
|
||||
# reviewed. The table is keyed by package names and maps to the
|
||||
# sha256 hash of the license file that we reviewed.
|
||||
#
|
||||
# As above, it is insufficient to have additions to this whitelist
|
||||
# reviewed solely by a build peer; any additions must be checked by
|
||||
# somebody competent to review licensing minutiae.
|
||||
LICENSE_FILE_PACKAGE_WHITELIST = {
|
||||
# Google BSD-like license; some directories have separate licenses
|
||||
'gamma-lut': '1f04103e3a61b91343b3f9d2ed2cc8543062917e2cc7d52a739ffe6429ccaf61',
|
||||
# MIT
|
||||
'deque': '6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb',
|
||||
}
|
||||
|
||||
LICENSE_LINE_RE = re.compile(r'\s*license\s*=\s*"([^"]+)"')
|
||||
LICENSE_FILE_LINE_RE = re.compile(r'\s*license[-_]file\s*=\s*"([^"]+)"')
|
||||
|
||||
def check_package(package):
|
||||
self.log(logging.DEBUG, 'package_check', {},
|
||||
'Checking license for {}'.format(package))
|
||||
|
||||
toml_file = os.path.join(vendor_dir, package, 'Cargo.toml')
|
||||
|
||||
# pytoml is not sophisticated enough to parse Cargo.toml files
|
||||
# with [target.'cfg(...)'.dependencies sections, so we resort
|
||||
# to scanning individual lines.
|
||||
with open(toml_file, 'r') as f:
|
||||
license_lines = [l for l in f if l.strip().startswith(b'license')]
|
||||
license_matches = list(filter(lambda x: x, [LICENSE_LINE_RE.match(l) for l in license_lines]))
|
||||
license_file_matches = list(filter(lambda x: x, [LICENSE_FILE_LINE_RE.match(l) for l in license_lines]))
|
||||
|
||||
# License information is optional for crates to provide, but
|
||||
# we require it.
|
||||
if not license_matches and not license_file_matches:
|
||||
self.log(logging.ERROR, 'package_no_license', {},
|
||||
'package {} does not provide a license'.format(package))
|
||||
return False
|
||||
|
||||
# The Cargo.toml spec suggests that crates should either have
|
||||
# `license` or `license-file`, but not both. We might as well
|
||||
# be defensive about that, though.
|
||||
if len(license_matches) > 1 or len(license_file_matches) > 1 or \
|
||||
license_matches and license_file_matches:
|
||||
self.log(logging.ERROR, 'package_many_licenses', {},
|
||||
'package {} provides too many licenses'.format(package))
|
||||
return False
|
||||
|
||||
if license_matches:
|
||||
license = license_matches[0].group(1)
|
||||
self.log(logging.DEBUG, 'package_license', {},
|
||||
'has license {}'.format(license))
|
||||
|
||||
if license not in LICENSE_WHITELIST:
|
||||
self.log(logging.ERROR, 'package_license_error', {},
|
||||
'''Package {} has a non-approved license: {}.
|
||||
|
||||
Please request license review on the package's license. If the package's license
|
||||
is approved, please add it to the whitelist of suitable licenses.
|
||||
'''.format(package, license))
|
||||
return False
|
||||
else:
|
||||
license_file = license_file_matches[0].group(1)
|
||||
self.log(logging.DEBUG, 'package_license_file', {},
|
||||
'has license-file {}'.format(license_file))
|
||||
|
||||
if package not in LICENSE_FILE_PACKAGE_WHITELIST:
|
||||
self.log(logging.ERROR, 'package_license_file_unknown', {},
|
||||
'''Package {} has an unreviewed license file: {}.
|
||||
|
||||
Please request review on the provided license; if approved, the package can be added
|
||||
to the whitelist of packages whose licenses are suitable.
|
||||
'''.format(package, license_file))
|
||||
return False
|
||||
|
||||
approved_hash = LICENSE_FILE_PACKAGE_WHITELIST[package]
|
||||
license_contents = open(os.path.join(vendor_dir, package, license_file), 'r').read()
|
||||
current_hash = hashlib.sha256(license_contents).hexdigest()
|
||||
if current_hash != approved_hash:
|
||||
self.log(logging.ERROR, 'package_license_file_mismatch', {},
|
||||
'''Package {} has changed its license file: {} (hash {}).
|
||||
|
||||
Please request review on the provided license; if approved, please update the
|
||||
license file's hash.
|
||||
'''.format(package, license_file, current_hash))
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
# Force all of the packages to be checked for license information
|
||||
# before reducing via `all`, so all license issues are found in a
|
||||
# single `mach vendor rust` invocation.
|
||||
results = [check_package(p) for p in os.listdir(vendor_dir)]
|
||||
return all(results)
|
||||
|
||||
def vendor(self, ignore_modified=False,
|
||||
build_peers_said_large_imports_were_ok=False):
|
||||
self.populate_logger()
|
||||
self.log_manager.enable_unstructured()
|
||||
if not ignore_modified:
|
||||
self.check_modified_files()
|
||||
|
||||
cargo = self._ensure_cargo()
|
||||
if not cargo:
|
||||
return
|
||||
|
||||
relative_vendor_dir = 'third_party/rust'
|
||||
vendor_dir = mozpath.join(self.topsrcdir, relative_vendor_dir)
|
||||
self.log(logging.INFO, 'rm_vendor_dir', {}, 'rm -rf %s' % vendor_dir)
|
||||
@ -135,6 +274,12 @@ Please commit or stash these changes before vendoring, or re-run with `--ignore-
|
||||
# We do an |update -p| here to regenerate the Cargo.lock file with minimal changes. See bug 1324462
|
||||
self._run_command_in_srcdir(args=[cargo, 'update', '--manifest-path', mozpath.join(path, 'Cargo.toml'), '-p', lib])
|
||||
self._run_command_in_srcdir(args=[cargo, 'vendor', '--sync', mozpath.join(path, 'Cargo.lock'), vendor_dir])
|
||||
|
||||
if not self._check_licenses(vendor_dir):
|
||||
self.log(logging.ERROR, 'license_check_failed', {},
|
||||
'''The changes from `mach vendor rust` will NOT be added to version control.''')
|
||||
sys.exit(1)
|
||||
|
||||
self.repository.add_remove_files(vendor_dir)
|
||||
|
||||
# 100k is a reasonable upper bound on source file size.
|
||||
|
@ -1157,4 +1157,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
||||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1498057610195000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1498143261115000);
|
||||
|
@ -3,6 +3,7 @@
|
||||
020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
0g.org.uk: could not connect to host
|
||||
0p.no: did not receive HSTS header
|
||||
0x.cx: could not connect to host
|
||||
0x0a.net: could not connect to host
|
||||
0x1337.eu: could not connect to host
|
||||
0x44.net: did not receive HSTS header
|
||||
@ -28,7 +29,6 @@
|
||||
1xcess.com: did not receive HSTS header
|
||||
206rc.net: max-age too low: 2592000
|
||||
247loan.com: max-age too low: 0
|
||||
247quickbooks.com: did not receive HSTS header
|
||||
24hourpaint.com: could not connect to host
|
||||
25daysof.io: could not connect to host
|
||||
263.info: could not connect to host
|
||||
@ -38,7 +38,7 @@
|
||||
2or3.tk: could not connect to host
|
||||
2programmers.net: could not connect to host
|
||||
2smart4food.com: did not receive HSTS header
|
||||
2ss.jp: did not receive HSTS header
|
||||
2ss.jp: could not connect to host
|
||||
300651.ru: did not receive HSTS header
|
||||
300m.com: did not receive HSTS header
|
||||
301.website: could not connect to host
|
||||
@ -149,6 +149,7 @@ aether.pw: could not connect to host
|
||||
aevpn.net: could not connect to host
|
||||
aficotroceni.ro: did not receive HSTS header
|
||||
afp548.tk: could not connect to host
|
||||
afyou.co.kr: could not connect to host
|
||||
agalaxyfarfaraway.co.uk: could not connect to host
|
||||
agbremen.de: did not receive HSTS header
|
||||
agentseeker.ca: did not receive HSTS header
|
||||
@ -195,7 +196,7 @@ alittlebitcheeky.com: did not receive HSTS header
|
||||
aljaspod.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
alkami.com: did not receive HSTS header
|
||||
all-subtitles.com: did not receive HSTS header
|
||||
all.tf: did not receive HSTS header
|
||||
all.tf: could not connect to host
|
||||
alldaymonitoring.com: could not connect to host
|
||||
allforyou.at: could not connect to host
|
||||
allinnote.com: could not connect to host
|
||||
@ -397,7 +398,6 @@ axado.com.br: did not receive HSTS header
|
||||
axeny.com: did not receive HSTS header
|
||||
axg.io: could not connect to host
|
||||
az.search.yahoo.com: did not receive HSTS header
|
||||
azazy.net: max-age too low: 2592000
|
||||
azprep.us: could not connect to host
|
||||
azuxul.fr: could not connect to host
|
||||
b3orion.com: max-age too low: 0
|
||||
@ -411,7 +411,6 @@ babymasaze.cz: did not receive HSTS header
|
||||
babysaying.me: max-age too low: 6000
|
||||
bacchanallia.com: could not connect to host
|
||||
back-bone.nl: did not receive HSTS header
|
||||
bacon-monitoring.org: could not connect to host
|
||||
badcronjob.com: could not connect to host
|
||||
badenhard.eu: could not connect to host
|
||||
badkamergigant.com: could not connect to host
|
||||
@ -643,6 +642,7 @@ buildci.asia: could not connect to host
|
||||
buildify.co.za: could not connect to host
|
||||
buildsaver.co.za: did not receive HSTS header
|
||||
built.by: did not receive HSTS header
|
||||
bul3seas.eu: could not connect to host
|
||||
bullbits.com: could not connect to host
|
||||
bulletpoint.cz: could not connect to host
|
||||
bulmafox.com: could not connect to host
|
||||
@ -679,6 +679,7 @@ bysymphony.com: max-age too low: 0
|
||||
byte.wtf: did not receive HSTS header
|
||||
bytepark.de: did not receive HSTS header
|
||||
bytesund.biz: could not connect to host
|
||||
bzv-fr.eu: could not connect to host
|
||||
c1yd3i.me: could not connect to host
|
||||
c3b.info: could not connect to host
|
||||
cabarave.com: could not connect to host
|
||||
@ -706,7 +707,6 @@ cancelmyprofile.com: did not receive HSTS header
|
||||
candicontrols.com: did not receive HSTS header
|
||||
candratech.com: could not connect to host
|
||||
candylion.rocks: could not connect to host
|
||||
canfly.org: could not connect to host
|
||||
cannyfoxx.me: could not connect to host
|
||||
canyonshoa.com: did not receive HSTS header
|
||||
capecycles.co.za: did not receive HSTS header
|
||||
@ -737,7 +737,7 @@ casino-cashflow.ru: did not receive HSTS header
|
||||
casinostest.com: did not receive HSTS header
|
||||
casioshop.eu: could not connect to host
|
||||
casovi.cf: could not connect to host
|
||||
catarsisvr.com: did not receive HSTS header
|
||||
catarsisvr.com: could not connect to host
|
||||
catinmay.com: could not connect to host
|
||||
catnapstudios.com: could not connect to host
|
||||
caveclan.org: did not receive HSTS header
|
||||
@ -767,6 +767,7 @@ cesidianroot.eu: could not connect to host
|
||||
cevrimici.com: could not connect to host
|
||||
cfcproperties.com: did not receive HSTS header
|
||||
cfetengineering.com: could not connect to host
|
||||
cfoitplaybook.com: could not connect to host
|
||||
cg.search.yahoo.com: did not receive HSTS header
|
||||
chainmonitor.com: could not connect to host
|
||||
championsofregnum.com: did not receive HSTS header
|
||||
@ -780,6 +781,7 @@ charityclear.com: did not receive HSTS header
|
||||
charnleyhouse.co.uk: max-age too low: 604800
|
||||
chartpen.com: did not receive HSTS header
|
||||
chartstoffarm.de: did not receive HSTS header
|
||||
chat-porc.eu: could not connect to host
|
||||
chatbot.me: did not receive HSTS header
|
||||
chateauconstellation.ch: did not receive HSTS header
|
||||
chatme.im: did not receive HSTS header
|
||||
@ -819,7 +821,6 @@ chrisupjohn.com: could not connect to host
|
||||
chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
|
||||
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
chroniclesofgeorge.com: did not receive HSTS header
|
||||
chrst.ph: could not connect to host
|
||||
chua.cf: could not connect to host
|
||||
chulado.com: did not receive HSTS header
|
||||
cidr.ml: could not connect to host
|
||||
@ -837,7 +838,6 @@ clara-baumert.de: could not connect to host
|
||||
classicsandexotics.com: did not receive HSTS header
|
||||
classicspublishing.com: could not connect to host
|
||||
clcleaningco.com: could not connect to host
|
||||
cldly.com: could not connect to host
|
||||
cleanexperts.co.uk: could not connect to host
|
||||
cleaningsquad.ca: max-age too low: 0
|
||||
cleanmta.com: could not connect to host
|
||||
@ -852,7 +852,6 @@ clint.id.au: max-age too low: 0
|
||||
clintonbloodworth.com: did not receive HSTS header
|
||||
clintonbloodworth.io: could not connect to host
|
||||
clintwilson.technology: max-age too low: 2592000
|
||||
clipped4u.com: could not connect to host
|
||||
cloud.wtf: could not connect to host
|
||||
cloudapi.vc: could not connect to host
|
||||
cloudcert.org: did not receive HSTS header
|
||||
@ -860,14 +859,12 @@ cloudcy.net: could not connect to host
|
||||
clouddesktop.co.nz: could not connect to host
|
||||
cloudey.net: did not receive HSTS header
|
||||
cloudflare.com: did not receive HSTS header
|
||||
cloudia.org: could not connect to host
|
||||
cloudimag.es: could not connect to host
|
||||
cloudlink.club: could not connect to host
|
||||
cloudns.com.au: could not connect to host
|
||||
cloudspotterapp.com: did not receive HSTS header
|
||||
cloudstoragemaus.com: could not connect to host
|
||||
cloudstorm.me: could not connect to host
|
||||
cloudup.com: did not receive HSTS header
|
||||
cloudwalk.io: did not receive HSTS header
|
||||
cloverleaf.net: max-age too low: 0
|
||||
clubmate.rocks: could not connect to host
|
||||
@ -901,7 +898,6 @@ codelayer.ca: could not connect to host
|
||||
codelitmus.com: did not receive HSTS header
|
||||
codemonkeyrawks.net: could not connect to host
|
||||
codepoet.de: could not connect to host
|
||||
codepult.com: could not connect to host
|
||||
codepx.com: did not receive HSTS header
|
||||
codewild.de: could not connect to host
|
||||
codewiththepros.org: could not connect to host
|
||||
@ -922,7 +918,6 @@ coloradocomputernetworking.net: could not connect to host
|
||||
combron.nl: did not receive HSTS header
|
||||
comfortdom.ua: did not receive HSTS header
|
||||
comfortticket.de: did not receive HSTS header
|
||||
comfy.moe: did not receive HSTS header
|
||||
comicspines.com: could not connect to host
|
||||
comotalk.com: could not connect to host
|
||||
compalytics.com: could not connect to host
|
||||
@ -1000,10 +995,9 @@ crypt.guru: could not connect to host
|
||||
crypticshell.co.uk: could not connect to host
|
||||
cryptify.eu: could not connect to host
|
||||
cryptobin.org: could not connect to host
|
||||
cryptojar.io: could not connect to host
|
||||
cryptojar.io: did not receive HSTS header
|
||||
cryptolab.pro: could not connect to host
|
||||
cryptolab.tk: could not connect to host
|
||||
cryptoparty.at: could not connect to host
|
||||
cryptopartyatx.org: could not connect to host
|
||||
cryptopush.com: did not receive HSTS header
|
||||
crysadm.com: max-age too low: 1
|
||||
@ -1011,6 +1005,7 @@ crystalclassics.co.uk: did not receive HSTS header
|
||||
csapak.com: could not connect to host
|
||||
csawctf.poly.edu: could not connect to host
|
||||
csfs.org.uk: could not connect to host
|
||||
csgf.ru: did not receive HSTS header
|
||||
csgodicegame.com: did not receive HSTS header
|
||||
csgoelemental.com: could not connect to host
|
||||
csgokings.eu: could not connect to host
|
||||
@ -1052,7 +1047,7 @@ dah5.com: did not receive HSTS header
|
||||
dailystormerpodcasts.com: did not receive HSTS header
|
||||
daimadi.com: could not connect to host
|
||||
dakrib.net: could not connect to host
|
||||
daku.gdn: could not connect to host
|
||||
daku.gdn: did not receive HSTS header
|
||||
dalfiume.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
dalingk.co: could not connect to host
|
||||
damedrogy.cz: could not connect to host
|
||||
@ -1158,6 +1153,7 @@ detector.exposed: could not connect to host
|
||||
detest.org: could not connect to host
|
||||
dethemium.com: could not connect to host
|
||||
deuxvia.com: could not connect to host
|
||||
devafterdark.com: could not connect to host
|
||||
devcu.com: could not connect to host
|
||||
devcu.net: could not connect to host
|
||||
devincrow.me: could not connect to host
|
||||
@ -1170,6 +1166,7 @@ dhome.at: did not receive HSTS header
|
||||
dhpcs.com: did not receive HSTS header
|
||||
dhpiggott.net: did not receive HSTS header
|
||||
diablotine.rocks: could not connect to host
|
||||
diagnostix.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
diarbag.us: could not connect to host
|
||||
diasp.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
die-partei-reutlingen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
@ -1184,7 +1181,6 @@ digitalriver.tk: could not connect to host
|
||||
digitalskillswap.com: could not connect to host
|
||||
dim.lighting: could not connect to host
|
||||
dinamoelektrik.com: max-age too low: 0
|
||||
dingcc.com: did not receive HSTS header
|
||||
dinkum.online: could not connect to host
|
||||
discoveringdocker.com: did not receive HSTS header
|
||||
discovery.lookout.com: did not receive HSTS header
|
||||
@ -1213,6 +1209,7 @@ do-do.tk: could not connect to host
|
||||
do.gd: could not connect to host
|
||||
do.search.yahoo.com: did not receive HSTS header
|
||||
dobet.in: could not connect to host
|
||||
dobrev.family: could not connect to host
|
||||
docid.io: could not connect to host
|
||||
docket.news: could not connect to host
|
||||
docset.io: could not connect to host
|
||||
@ -1269,7 +1266,6 @@ ds-christiansen.de: did not receive HSTS header
|
||||
dshiv.io: could not connect to host
|
||||
dubrovskiy.net: could not connect to host
|
||||
dubrovskiy.pro: could not connect to host
|
||||
duelysthub.com: could not connect to host
|
||||
duesee.org: could not connect to host
|
||||
dullsir.com: did not receive HSTS header
|
||||
dutchessuganda.com: did not receive HSTS header
|
||||
@ -1321,7 +1317,6 @@ edk.com.tr: did not receive HSTS header
|
||||
edmodo.com: did not receive HSTS header
|
||||
edp-collaborative.com: max-age too low: 2500
|
||||
eduvance.in: did not receive HSTS header
|
||||
edwards.me.uk: could not connect to host
|
||||
effectiveosgi.com: could not connect to host
|
||||
efficienthealth.com: did not receive HSTS header
|
||||
effortlesshr.com: did not receive HSTS header
|
||||
@ -1333,7 +1328,6 @@ ehito.ovh: could not connect to host
|
||||
ehrenamt-skpfcw.de: could not connect to host
|
||||
eicfood.com: could not connect to host
|
||||
eidolonhost.com: did not receive HSTS header
|
||||
eisp.it: could not connect to host
|
||||
ekbanden.nl: could not connect to host
|
||||
elaintehtaat.fi: did not receive HSTS header
|
||||
elan-organics.com: did not receive HSTS header
|
||||
@ -1351,7 +1345,7 @@ elenoon.ir: did not receive HSTS header
|
||||
elgacien.de: could not connect to host
|
||||
elimdengelen.com: did not receive HSTS header
|
||||
elitefishtank.com: could not connect to host
|
||||
elnutricionista.es: did not receive HSTS header
|
||||
elnutricionista.es: could not connect to host
|
||||
eloanpersonal.com: max-age too low: 0
|
||||
elpo.xyz: could not connect to host
|
||||
elsamakhin.com: could not connect to host
|
||||
@ -1381,7 +1375,6 @@ enefan.jp: could not connect to host
|
||||
enersec.co.uk: could not connect to host
|
||||
engelwerbung.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
engg.ca: could not connect to host
|
||||
enginepit.com: could not connect to host
|
||||
enginsight.com: did not receive HSTS header
|
||||
enigmacpt.com: did not receive HSTS header
|
||||
enigmail.net: did not receive HSTS header
|
||||
@ -1445,7 +1438,6 @@ eulerpi.io: could not connect to host
|
||||
eupho.me: could not connect to host
|
||||
euroshop24.net: could not connect to host
|
||||
evafojtova.cz: did not receive HSTS header
|
||||
evalesc.com: could not connect to host
|
||||
evantage.org: could not connect to host
|
||||
evdenevenakliyatankara.pw: did not receive HSTS header
|
||||
everybooks.com: max-age too low: 60
|
||||
@ -1502,6 +1494,7 @@ familie-zimmermann.at: could not connect to host
|
||||
familjenm.se: could not connect to host
|
||||
fanyl.cn: could not connect to host
|
||||
farhadexchange.com: did not receive HSTS header
|
||||
farhood.org: did not receive HSTS header
|
||||
fashioncare.cz: did not receive HSTS header
|
||||
fasset.jp: could not connect to host
|
||||
fastograph.com: could not connect to host
|
||||
@ -1557,6 +1550,7 @@ fitiapp.com: could not connect to host
|
||||
fitnesswerk.de: could not connect to host
|
||||
five.vn: did not receive HSTS header
|
||||
fivestarsitters.com: did not receive HSTS header
|
||||
fivezerocreative.com: did not receive HSTS header
|
||||
fixatom.com: did not receive HSTS header
|
||||
fixingdns.com: did not receive HSTS header
|
||||
fj.search.yahoo.com: did not receive HSTS header
|
||||
@ -1630,7 +1624,7 @@ freesounding.ru: could not connect to host
|
||||
freethought.org.au: could not connect to host
|
||||
freeutopia.org: did not receive HSTS header
|
||||
frenzel.dk: could not connect to host
|
||||
freqlabs.com: could not connect to host
|
||||
freqlabs.com: did not receive HSTS header
|
||||
freshfind.xyz: could not connect to host
|
||||
freshlymind.com: did not receive HSTS header
|
||||
fretscha.com: could not connect to host
|
||||
@ -1658,7 +1652,6 @@ furiffic.com: did not receive HSTS header
|
||||
furnation.com: could not connect to host
|
||||
furry.be: max-age too low: 86400
|
||||
fusedrops.com: could not connect to host
|
||||
fushee.com: could not connect to host
|
||||
fusionmate.com: could not connect to host
|
||||
futbol11.com: did not receive HSTS header
|
||||
futurenda.com: could not connect to host
|
||||
@ -1678,7 +1671,6 @@ g5led.nl: could not connect to host
|
||||
gabber.scot: could not connect to host
|
||||
gaelleetarnaud.com: did not receive HSTS header
|
||||
gafachi.com: could not connect to host
|
||||
gaiserik.com: could not connect to host
|
||||
gakkainavi.jp: did not receive HSTS header
|
||||
gakkainavi4.com: could not connect to host
|
||||
gakkainavi4.net: did not receive HSTS header
|
||||
@ -1715,7 +1707,7 @@ geekcast.co.uk: did not receive HSTS header
|
||||
geeky.software: could not connect to host
|
||||
geli-graphics.com: did not receive HSTS header
|
||||
gem-indonesia.net: could not connect to host
|
||||
gendrin.com: could not connect to host
|
||||
gensonline.eu: could not connect to host
|
||||
genuu.com: could not connect to host
|
||||
genuxation.com: could not connect to host
|
||||
genyaa.com: could not connect to host
|
||||
@ -1751,7 +1743,6 @@ getremembrall.com: could not connect to host
|
||||
getsello.com: could not connect to host
|
||||
getwashdaddy.com: could not connect to host
|
||||
gfm.tech: could not connect to host
|
||||
gfournier.ca: could not connect to host
|
||||
gfwsb.ml: could not connect to host
|
||||
ggss.ml: could not connect to host
|
||||
gh16.com.ar: could not connect to host
|
||||
@ -1847,6 +1838,7 @@ gresb.com: did not receive HSTS header
|
||||
gribani.com: could not connect to host
|
||||
grigalanzsoftware.com: could not connect to host
|
||||
gripopgriep.net: could not connect to host
|
||||
groetzner.net: could not connect to host
|
||||
grossmann.gr: could not connect to host
|
||||
groups.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
grunex.com: did not receive HSTS header
|
||||
@ -1862,7 +1854,6 @@ gtlfsonlinepay.com: did not receive HSTS header
|
||||
gtraxapp.com: could not connect to host
|
||||
gts-schulsoftware.de: did not receive HSTS header
|
||||
guava.studio: did not receive HSTS header
|
||||
guge.gq: could not connect to host
|
||||
gugga.dk: did not receive HSTS header
|
||||
guilde-vindicta.fr: did not receive HSTS header
|
||||
gulenet.com: could not connect to host
|
||||
@ -1870,8 +1861,6 @@ gunnarhafdal.com: did not receive HSTS header
|
||||
gurom.lv: could not connect to host
|
||||
gurusupe.com: could not connect to host
|
||||
guso.gq: could not connect to host
|
||||
guso.ml: could not connect to host
|
||||
guso.tech: could not connect to host
|
||||
gussi.is: did not receive HSTS header
|
||||
gvt2.com: could not connect to host (error ignored - included regardless)
|
||||
gvt3.com: could not connect to host (error ignored - included regardless)
|
||||
@ -1897,6 +1886,7 @@ hackest.org: did not receive HSTS header
|
||||
hackit.im: could not connect to host
|
||||
hadzic.co: could not connect to host
|
||||
haeckdesign.com: did not receive HSTS header
|
||||
haeckl.eu: could not connect to host
|
||||
hahayidu.org: could not connect to host
|
||||
haitschi.com: could not connect to host
|
||||
haitschi.de: could not connect to host
|
||||
@ -1907,12 +1897,11 @@ haku.moe: could not connect to host
|
||||
hakugin.org: could not connect to host
|
||||
halo.red: could not connect to host
|
||||
hancc.net: could not connect to host
|
||||
handiworker.com: could not connect to host
|
||||
hanfu.la: could not connect to host
|
||||
hang333.pw: did not receive HSTS header
|
||||
hanimalis.fr: could not connect to host
|
||||
hansen.hn: could not connect to host
|
||||
hao2taiwan.com: max-age too low: 0
|
||||
hao2taiwan.com: could not connect to host
|
||||
haoyugao.com: could not connect to host
|
||||
hapijs.cn: could not connect to host
|
||||
hapissl.com: could not connect to host
|
||||
@ -1963,7 +1952,6 @@ hemdal.se: could not connect to host
|
||||
hencagon.com: could not connect to host
|
||||
henriknoerr.com: could not connect to host
|
||||
henry.gg: could not connect to host
|
||||
hermes-net.de: could not connect to host
|
||||
herrenfahrt.com: did not receive HSTS header
|
||||
herzbotschaft.de: did not receive HSTS header
|
||||
heutger.net: did not receive HSTS header
|
||||
@ -1985,6 +1973,7 @@ hilnu.tk: could not connect to host
|
||||
hipercultura.com: did not receive HSTS header
|
||||
hiphopconvention.nl: could not connect to host
|
||||
hirake55.com: could not connect to host
|
||||
historia-arte.com: did not receive HSTS header
|
||||
hitoy.org: did not receive HSTS header
|
||||
hittipps.com: did not receive HSTS header
|
||||
hlyue.com: did not receive HSTS header
|
||||
@ -2047,6 +2036,7 @@ hydra.ws: could not connect to host
|
||||
hydronium.cf: could not connect to host
|
||||
hydronium.ga: could not connect to host
|
||||
hydronium.me: could not connect to host
|
||||
hydronium.ml: could not connect to host
|
||||
hydronium.tk: could not connect to host
|
||||
hyper69.com: did not receive HSTS header
|
||||
i-jp.net: could not connect to host
|
||||
@ -2111,6 +2101,7 @@ immoprotect.ca: did not receive HSTS header
|
||||
immortals-co.com: did not receive HSTS header
|
||||
immoverkauf24.at: did not receive HSTS header
|
||||
immoverkauf24.de: did not receive HSTS header
|
||||
immunicity.eu: could not connect to host
|
||||
immunicity.info: could not connect to host
|
||||
immunicity.press: could not connect to host
|
||||
immunicity.today: did not receive HSTS header
|
||||
@ -2119,7 +2110,6 @@ immunicity.works: did not receive HSTS header
|
||||
immunicity.world: did not receive HSTS header
|
||||
imolug.org: did not receive HSTS header
|
||||
imouto.my: max-age too low: 5184000
|
||||
imouyang.com: did not receive HSTS header
|
||||
imperialwebsolutions.com: did not receive HSTS header
|
||||
imu.li: did not receive HSTS header
|
||||
imusic.dk: did not receive HSTS header
|
||||
@ -2137,6 +2127,7 @@ infinitusgaming.eu: could not connect to host
|
||||
inflation.ml: could not connect to host
|
||||
infogrfx.com: did not receive HSTS header
|
||||
infosec.rip: could not connect to host
|
||||
infosoph.org: did not receive HSTS header
|
||||
infotics.es: did not receive HSTS header
|
||||
injigo.com: did not receive HSTS header
|
||||
inkable.com.au: did not receive HSTS header
|
||||
@ -2160,14 +2151,12 @@ institutoflordelavida.com: could not connect to host
|
||||
intel.li: could not connect to host
|
||||
interference.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
interlun.com: could not connect to host
|
||||
internect.co.za: did not receive HSTS header
|
||||
internetcasinos.de: could not connect to host
|
||||
internetcensus.org: could not connect to host
|
||||
interserved.com: did not receive HSTS header
|
||||
intex.es: max-age too low: 0
|
||||
intim-uslugi-kazan.net: could not connect to host
|
||||
intimtoy.com.ua: could not connect to host
|
||||
intocities.de: could not connect to host
|
||||
intranetsec.fr: could not connect to host
|
||||
intrp.net: did not receive HSTS header
|
||||
inverselink-user-content.com: could not connect to host
|
||||
@ -2175,7 +2164,6 @@ inverselink.com: could not connect to host
|
||||
invictusmc.uk: did not receive HSTS header
|
||||
invite24.pro: could not connect to host
|
||||
inwesttitle.com: max-age too low: 0
|
||||
ioiart.eu: could not connect to host
|
||||
ionx.co.uk: did not receive HSTS header
|
||||
iop.intuit.com: max-age too low: 86400
|
||||
iora.fr: could not connect to host
|
||||
@ -2203,6 +2191,7 @@ iseek.biz: max-age too low: 0
|
||||
ishillaryclintoninprisonyet.com: could not connect to host
|
||||
isitamor.pm: could not connect to host
|
||||
iskaz.rs: did not receive HSTS header
|
||||
isntall.us: could not connect to host
|
||||
isogram.nl: could not connect to host
|
||||
israkurort.com: did not receive HSTS header
|
||||
isslshop.com: could not connect to host
|
||||
@ -2227,7 +2216,6 @@ ivi-fertility.com: max-age too low: 0
|
||||
ivi.es: max-age too low: 0
|
||||
ivk.website: could not connect to host
|
||||
ivo.co.za: could not connect to host
|
||||
ixec2.tk: could not connect to host
|
||||
izdiwho.com: could not connect to host
|
||||
izolight.ch: could not connect to host
|
||||
izoox.com: did not receive HSTS header
|
||||
@ -2265,6 +2253,7 @@ janus-engineering.de: did not receive HSTS header
|
||||
japlex.com: could not connect to host
|
||||
jaqen.ch: could not connect to host
|
||||
jardins-utopie.net: could not connect to host
|
||||
jaredfernandez.com: could not connect to host
|
||||
jaroslavtrsek.cz: did not receive HSTS header
|
||||
jarsater.com: could not connect to host
|
||||
jartza.org: could not connect to host
|
||||
@ -2327,15 +2316,18 @@ jollausers.de: could not connect to host
|
||||
jonas-keidel.de: did not receive HSTS header
|
||||
jonasgroth.se: did not receive HSTS header
|
||||
jonathan.ir: could not connect to host
|
||||
jondarby.com: did not receive HSTS header
|
||||
jonn.me: could not connect to host
|
||||
joostbovee.nl: did not receive HSTS header
|
||||
jordanhamilton.me: could not connect to host
|
||||
joretapo.fr: did not receive HSTS header
|
||||
jornane.me: could not connect to host
|
||||
josahrens.me: could not connect to host
|
||||
joshi.su: could not connect to host
|
||||
joshstroup.me: could not connect to host
|
||||
jottit.com: could not connect to host
|
||||
jpbike.cz: could not connect to host
|
||||
jpcdi.com: could not connect to host
|
||||
jrc9.ca: did not receive HSTS header
|
||||
jrgold.me: could not connect to host
|
||||
jrmd.io: could not connect to host
|
||||
@ -2365,6 +2357,7 @@ k-dev.de: could not connect to host
|
||||
ka-clan.com: could not connect to host
|
||||
kabinapp.com: could not connect to host
|
||||
kabuabc.com: did not receive HSTS header
|
||||
kabus.org: could not connect to host
|
||||
kadioglumakina.com.tr: did not receive HSTS header
|
||||
kaela.design: could not connect to host
|
||||
kahopoon.net: could not connect to host
|
||||
@ -2374,6 +2367,7 @@ kaneo-gmbh.de: did not receive HSTS header
|
||||
kaplatz.is: could not connect to host
|
||||
kapucini.si: max-age too low: 0
|
||||
karaoketonight.com: could not connect to host
|
||||
karhm.com: could not connect to host
|
||||
karhukamera.com: could not connect to host
|
||||
kasilag.me: did not receive HSTS header
|
||||
katiaetdavid.fr: could not connect to host
|
||||
@ -2469,6 +2463,7 @@ krayx.com: could not connect to host
|
||||
kreavis.com: did not receive HSTS header
|
||||
kredite.sale: could not connect to host
|
||||
kriegt.es: did not receive HSTS header
|
||||
kristikala.nl: could not connect to host
|
||||
krizevci.info: did not receive HSTS header
|
||||
kroetenfuchs.de: could not connect to host
|
||||
kropkait.pl: could not connect to host
|
||||
@ -2501,7 +2496,7 @@ kz.search.yahoo.com: did not receive HSTS header
|
||||
kzjnet.com: could not connect to host
|
||||
l2guru.ru: could not connect to host
|
||||
labaia.info: could not connect to host
|
||||
labina.com.tr: did not receive HSTS header
|
||||
labina.com.tr: could not connect to host
|
||||
laboiteapc.fr: did not receive HSTS header
|
||||
labordata.io: did not receive HSTS header
|
||||
laborie.io: could not connect to host
|
||||
@ -2542,7 +2537,6 @@ leadership9.com: could not connect to host
|
||||
leardev.de: did not receive HSTS header
|
||||
learnfrenchfluently.com: did not receive HSTS header
|
||||
learningorder.com: could not connect to host
|
||||
lebal.se: did not receive HSTS header
|
||||
lechiennoir.net: did not receive HSTS header
|
||||
ledgerscope.net: could not connect to host
|
||||
leermotorrijden.nl: max-age too low: 300
|
||||
@ -2671,7 +2665,7 @@ lt.search.yahoo.com: did not receive HSTS header
|
||||
ltbytes.com: could not connect to host
|
||||
lu.search.yahoo.com: did not receive HSTS header
|
||||
lucaterzini.com: could not connect to host
|
||||
ludwiggrill.de: could not connect to host
|
||||
ludwiggrill.de: did not receive HSTS header
|
||||
lufthansaexperts.com: max-age too low: 2592000
|
||||
luine.xyz: did not receive HSTS header
|
||||
luis-checa.com: could not connect to host
|
||||
@ -2746,7 +2740,6 @@ mansion-note.com: did not receive HSTS header
|
||||
maomaofuli.vip: could not connect to host
|
||||
maple5.com: did not receive HSTS header
|
||||
marchagen.nl: did not receive HSTS header
|
||||
marcoececilia.it: could not connect to host
|
||||
marcofinke.de: could not connect to host
|
||||
marcontrol.com: did not receive HSTS header
|
||||
marcosteixeira.tk: could not connect to host
|
||||
@ -3040,7 +3033,6 @@ mypension.ca: could not connect to host
|
||||
myphonebox.de: could not connect to host
|
||||
mysecretrewards.com: did not receive HSTS header
|
||||
mystery-science-theater-3000.de: did not receive HSTS header
|
||||
mythslegendscollection.com: did not receive HSTS header
|
||||
mytweeps.com: could not connect to host
|
||||
myvirtualserver.com: max-age too low: 2592000
|
||||
myzone.com: did not receive HSTS header
|
||||
@ -3090,6 +3082,7 @@ near.st: did not receive HSTS header
|
||||
nedzad.me: could not connect to host
|
||||
neels.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
neftaly.com: did not receive HSTS header
|
||||
negai.moe: could not connect to host
|
||||
neilgreen.net: did not receive HSTS header
|
||||
neko-life.com: did not receive HSTS header
|
||||
neko-system.com: did not receive HSTS header
|
||||
@ -3116,12 +3109,12 @@ neuronfactor.com: [Exception... "Component returned failure code: 0x80004005 (NS
|
||||
neutralox.com: did not receive HSTS header
|
||||
never-afk.de: did not receive HSTS header
|
||||
neveta.com: could not connect to host
|
||||
new.travel.pl: did not receive HSTS header
|
||||
newcitygas.ca: max-age too low: 0
|
||||
newgenerationplus.org: could not connect to host
|
||||
newhdmovies.io: did not receive HSTS header
|
||||
newkaliningrad.ru: did not receive HSTS header
|
||||
newlooknow.com: did not receive HSTS header
|
||||
newmelalife.com: did not receive HSTS header
|
||||
newportpropertygroup.com: could not connect to host
|
||||
newtonwarp.com: could not connect to host
|
||||
nextcloud.org: could not connect to host
|
||||
@ -3244,12 +3237,11 @@ ochaken.cf: could not connect to host
|
||||
odin.xxx: did not receive HSTS header
|
||||
odinoffice.no: did not receive HSTS header
|
||||
oe8.bet: could not connect to host
|
||||
oeko-bundesfreiwilligendienst-sh.de: did not receive HSTS header
|
||||
oeko-bundesfreiwilligendienst.de: did not receive HSTS header
|
||||
ofcourselanguages.com: could not connect to host
|
||||
offenedialoge.de: max-age too low: 2592000
|
||||
offshore-firma.org: could not connect to host
|
||||
ogogoshop.com: could not connect to host
|
||||
oguya.ch: could not connect to host
|
||||
oishioffice.com: did not receive HSTS header
|
||||
okane.love: could not connect to host
|
||||
okok-rent.com: could not connect to host
|
||||
@ -3260,6 +3252,7 @@ oldoakflorist.com: could not connect to host
|
||||
oliverdunk.com: did not receive HSTS header
|
||||
ollehbizev.co.kr: could not connect to host
|
||||
ollie.io: did not receive HSTS header
|
||||
ollies.cloud: could not connect to host
|
||||
omacostudio.com: could not connect to host
|
||||
omgaanmetidealen.com: could not connect to host
|
||||
ominto.com: max-age too low: 0
|
||||
@ -3361,7 +3354,6 @@ owncloud.help: could not connect to host
|
||||
ownmovies.fr: could not connect to host
|
||||
oxygenabsorbers.com: did not receive HSTS header
|
||||
oxynux.fr: could not connect to host
|
||||
oxynux.xyz: could not connect to host
|
||||
p.linode.com: could not connect to host
|
||||
p8r.de: could not connect to host
|
||||
pa.search.yahoo.com: did not receive HSTS header
|
||||
@ -3458,7 +3450,7 @@ pet-nsk.ru: could not connect to host
|
||||
petchart.net: could not connect to host
|
||||
petit.site: could not connect to host
|
||||
petplum.com: did not receive HSTS header
|
||||
petrachuk.ru: did not receive HSTS header
|
||||
petrachuk.ru: could not connect to host
|
||||
petravdbos.nl: did not receive HSTS header
|
||||
petrolplus.ru: did not receive HSTS header
|
||||
petrovsky.pro: could not connect to host
|
||||
@ -3466,7 +3458,6 @@ petsittersservices.com: could not connect to host
|
||||
pettsy.com: could not connect to host
|
||||
pewboards.com: could not connect to host
|
||||
pexieapp.com: did not receive HSTS header
|
||||
peytonfarrar.com: did not receive HSTS header
|
||||
pflege.de: did not receive HSTS header
|
||||
pgpm.io: could not connect to host
|
||||
pharmgkb.org: could not connect to host
|
||||
@ -3476,7 +3467,6 @@ phoebe.co.nz: did not receive HSTS header
|
||||
phonenumberinfo.co.uk: could not connect to host
|
||||
phongmay24h.com: could not connect to host
|
||||
photoblogverona.com: could not connect to host
|
||||
phoxmeh.com: could not connect to host
|
||||
php-bach.org: could not connect to host
|
||||
phpfashion.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
phryanjr.com: could not connect to host
|
||||
@ -3516,7 +3506,7 @@ planpharmacy.com: could not connect to host
|
||||
platform.lookout.com: could not connect to host
|
||||
play.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
playflick.com: did not receive HSTS header
|
||||
playkh.com: did not receive HSTS header
|
||||
playkh.com: could not connect to host
|
||||
playmaker.io: could not connect to host
|
||||
playmyplay.com: did not receive HSTS header
|
||||
playnation.io: could not connect to host
|
||||
@ -3551,12 +3541,12 @@ polypho.nyc: could not connect to host
|
||||
pompompoes.com: could not connect to host
|
||||
pontualcomp.com: max-age too low: 2592000
|
||||
poolsandstuff.com: did not receive HSTS header
|
||||
poolvilla-margarita.net: could not connect to host
|
||||
poon.tech: could not connect to host
|
||||
porno-gif.ru: did not receive HSTS header
|
||||
portalplatform.net: did not receive HSTS header
|
||||
poshpak.com: max-age too low: 86400
|
||||
postcodewise.co.uk: did not receive HSTS header
|
||||
posterspy.com: did not receive HSTS header
|
||||
postscheduler.org: could not connect to host
|
||||
posylka.de: did not receive HSTS header
|
||||
potatoheads.net: could not connect to host
|
||||
@ -3577,6 +3567,7 @@ prefontaine.name: could not connect to host
|
||||
prego-shop.de: did not receive HSTS header
|
||||
preissler.co.uk: could not connect to host
|
||||
prelist.org: did not receive HSTS header
|
||||
prescriptiondrugs.com: could not connect to host
|
||||
pressfreedomfoundation.org: did not receive HSTS header
|
||||
pretzlaff.info: did not receive HSTS header
|
||||
preworkout.me: could not connect to host
|
||||
@ -3592,6 +3583,7 @@ pro-zone.com: could not connect to host
|
||||
prodpad.com: did not receive HSTS header
|
||||
professionalboundaries.com: did not receive HSTS header
|
||||
profi-durchgangsmelder.de: did not receive HSTS header
|
||||
profpay.com: could not connect to host
|
||||
profundr.com: could not connect to host
|
||||
progblog.net: could not connect to host
|
||||
progg.no: could not connect to host
|
||||
@ -3699,6 +3691,7 @@ rbhighinc.org: could not connect to host
|
||||
rc-rp.com: did not receive HSTS header
|
||||
rc4.io: did not receive HSTS header
|
||||
rcafox.com: could not connect to host
|
||||
rcorporation.be: did not receive HSTS header
|
||||
rcpcbd.com: did not receive HSTS header
|
||||
rdns.im: did not receive HSTS header
|
||||
re-customer.net: did not receive HSTS header
|
||||
@ -3759,6 +3752,7 @@ restchart.com: did not receive HSTS header
|
||||
retrotracks.net: max-age too low: 0
|
||||
revealdata.com: did not receive HSTS header
|
||||
revello.org: did not receive HSTS header
|
||||
revensoftware.com: could not connect to host
|
||||
reverie.pw: could not connect to host
|
||||
reviews.anime.my: max-age too low: 5184000
|
||||
revtut.net: did not receive HSTS header
|
||||
@ -3806,6 +3800,7 @@ rodosto.com: could not connect to host
|
||||
roeper.party: could not connect to host
|
||||
roesemann.email: could not connect to host
|
||||
roguelikecenter.fr: did not receive HSTS header
|
||||
roguesignal.net: did not receive HSTS header
|
||||
rolemaster.net: did not receive HSTS header
|
||||
romans-place.me.uk: did not receive HSTS header
|
||||
romulusapp.com: could not connect to host
|
||||
@ -3981,7 +3976,6 @@ semenkovich.com: did not receive HSTS header
|
||||
semps-servers.de: could not connect to host
|
||||
semps.de: did not receive HSTS header
|
||||
senedirect.com: did not receive HSTS header
|
||||
sensepixel.com: could not connect to host
|
||||
sensiblemn.org: could not connect to host
|
||||
sensibus.com: did not receive HSTS header
|
||||
seo.consulting: did not receive HSTS header
|
||||
@ -3998,6 +3992,7 @@ servergno.me: did not receive HSTS header
|
||||
servermonkey.nl: could not connect to host
|
||||
seryo.moe: could not connect to host
|
||||
seryo.net: could not connect to host
|
||||
sesha.co.za: could not connect to host
|
||||
sethcaplan.com: could not connect to host
|
||||
setphaserstostun.org: could not connect to host
|
||||
setuid.de: could not connect to host
|
||||
@ -4063,7 +4058,6 @@ simbast.com: could not connect to host
|
||||
simod.org: could not connect to host
|
||||
simon.butcher.name: max-age too low: 2629743
|
||||
simongong.net: did not receive HSTS header
|
||||
simonhirscher.de: could not connect to host
|
||||
simpan.id: could not connect to host
|
||||
simpleai.net: max-age too low: 600
|
||||
simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
@ -4107,7 +4101,6 @@ slightfuture.click: could not connect to host
|
||||
slix.io: could not connect to host
|
||||
slope.haus: could not connect to host
|
||||
slovakiana.sk: did not receive HSTS header
|
||||
slowfood.es: could not connect to host
|
||||
sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
slycurity.de: could not connect to host
|
||||
smart-mirror.de: did not receive HSTS header
|
||||
@ -4150,6 +4143,7 @@ socialdevelop.biz: max-age too low: 604800
|
||||
socialhams.net: did not receive HSTS header
|
||||
socialhead.io: could not connect to host
|
||||
socialspirit.com.br: did not receive HSTS header
|
||||
societyhilldance.com: did not receive HSTS header
|
||||
sockeye.cc: could not connect to host
|
||||
socomponents.co.uk: did not receive HSTS header
|
||||
sodacore.com: could not connect to host
|
||||
@ -4163,12 +4157,13 @@ solsystems.ru: could not connect to host
|
||||
someshit.xyz: could not connect to host
|
||||
somethingnew.xyz: could not connect to host
|
||||
sonic.network: did not receive HSTS header
|
||||
sonicrainboom.rocks: could not connect to host
|
||||
sonicrainboom.rocks: did not receive HSTS header
|
||||
soobi.org: did not receive HSTS header
|
||||
soondy.com: did not receive HSTS header
|
||||
sotor.de: did not receive HSTS header
|
||||
soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
soulfulglamour.uk: could not connect to host
|
||||
soundeo.net: did not receive HSTS header
|
||||
sourcelair.com: did not receive HSTS header
|
||||
southgale.condos: could not connect to host
|
||||
southside-crew.club: could not connect to host
|
||||
@ -4206,6 +4201,7 @@ spilsbury.io: could not connect to host
|
||||
spititout.it: could not connect to host
|
||||
spittersberger.recipes: did not receive HSTS header
|
||||
sponsortobias.com: did not receive HSTS header
|
||||
sportchirp-internal.azurewebsites.net: did not receive HSTS header
|
||||
sportwette.eu: did not receive HSTS header
|
||||
spot-events.com: could not connect to host
|
||||
spotifyripper.tk: could not connect to host
|
||||
@ -4214,6 +4210,7 @@ spr.id.au: did not receive HSTS header
|
||||
spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
sproutconnections.com: did not receive HSTS header
|
||||
sprybear.com: did not receive HSTS header
|
||||
squaddraft.com: could not connect to host
|
||||
square.gs: could not connect to host
|
||||
squatldf.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
sqzryang.com: did not receive HSTS header
|
||||
@ -4226,17 +4223,17 @@ ssl.rip: could not connect to host
|
||||
ssmato.me: could not connect to host
|
||||
ssnc.org: max-age too low: 300
|
||||
sss3s.com: could not connect to host
|
||||
sstewartgallus.com: could not connect to host
|
||||
ssworld.ga: could not connect to host
|
||||
stabletoken.com: could not connect to host
|
||||
stadjerspasonline.nl: could not connect to host
|
||||
staffjoy.com: did not receive HSTS header
|
||||
stahl.xyz: could not connect to host
|
||||
stalschermer.nl: could not connect to host
|
||||
standardssuck.org: did not receive HSTS header
|
||||
standingmist.com: did not receive HSTS header
|
||||
stargatepartners.com: did not receive HSTS header
|
||||
starmusic.ga: did not receive HSTS header
|
||||
starsam80.net: could not connect to host
|
||||
starpeak.org: could not connect to host
|
||||
starttraffic.com: did not receive HSTS header
|
||||
startuponcloud.com: max-age too low: 2678400
|
||||
startuppeople.co.uk: did not receive HSTS header
|
||||
@ -4341,7 +4338,7 @@ sushifrick.de: could not connect to host
|
||||
suzukikenichi.com: did not receive HSTS header
|
||||
sv.search.yahoo.com: did not receive HSTS header
|
||||
svarovani.tk: could not connect to host
|
||||
svatba-frantovi.cz: did not receive HSTS header
|
||||
svatba-frantovi.cz: could not connect to host
|
||||
svenluijten.com: did not receive HSTS header
|
||||
sweetstreats.ca: could not connect to host
|
||||
swimbee.nl: did not receive HSTS header
|
||||
@ -4410,7 +4407,7 @@ teachforcanada.ca: did not receive HSTS header
|
||||
team-teasers.com: could not connect to host
|
||||
teamblueridge.org: could not connect to host
|
||||
teamsocial.co: did not receive HSTS header
|
||||
teamx-gaming.de: could not connect to host
|
||||
teamtouring.net: could not connect to host
|
||||
teamzeus.cz: could not connect to host
|
||||
tech55i.com: did not receive HSTS header
|
||||
techassist.io: did not receive HSTS header
|
||||
@ -4419,6 +4416,7 @@ techhipster.net: could not connect to host
|
||||
techhub.ml: could not connect to host
|
||||
techllage.com: could not connect to host
|
||||
techloaner.com: could not connect to host
|
||||
techmasters.andover.edu: could not connect to host
|
||||
techmatehq.com: could not connect to host
|
||||
technogroup.cz: did not receive HSTS header
|
||||
technosavvyport.com: did not receive HSTS header
|
||||
@ -4438,7 +4436,6 @@ tensei-slime.com: did not receive HSTS header
|
||||
tensionup.com: could not connect to host
|
||||
tentins.com: could not connect to host
|
||||
teos.online: could not connect to host
|
||||
tepid.org: could not connect to host
|
||||
teriiphotography.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
terra.by: did not receive HSTS header
|
||||
terrax.berlin: could not connect to host
|
||||
@ -4454,6 +4451,7 @@ textracer.dk: could not connect to host
|
||||
tezcam.tk: could not connect to host
|
||||
tf2stadium.com: did not receive HSTS header
|
||||
tfcoms-sp-tracker-client.azurewebsites.net: could not connect to host
|
||||
tffans.com: could not connect to host
|
||||
tfl.lu: did not receive HSTS header
|
||||
tgr.re: could not connect to host
|
||||
thagki9.com: could not connect to host
|
||||
@ -4621,6 +4619,7 @@ translate.googleapis.com: did not receive HSTS header (error ignored - included
|
||||
transportal.sk: did not receive HSTS header
|
||||
travelinsurance.co.nz: did not receive HSTS header
|
||||
treeby.net: could not connect to host
|
||||
tremoureux.fr: could not connect to host
|
||||
trendberry.ru: could not connect to host
|
||||
trinityaffirmations.com: max-age too low: 0
|
||||
trinitycore.org: max-age too low: 2592000
|
||||
@ -4630,7 +4629,7 @@ trollme.me: could not connect to host
|
||||
trondelan.no: did not receive HSTS header
|
||||
trunkjunk.co: could not connect to host
|
||||
trusitio.com: did not receive HSTS header
|
||||
trusteecar.com: did not receive HSTS header
|
||||
trusteecar.com: could not connect to host
|
||||
trustmeimfancy.com: could not connect to host
|
||||
trybind.com: could not connect to host
|
||||
tryoneday.co: did not receive HSTS header
|
||||
@ -4699,6 +4698,7 @@ ukrgadget.com: could not connect to host
|
||||
ulabox.cat: did not receive HSTS header
|
||||
ulabox.es: did not receive HSTS header
|
||||
ulmo.dk: could not connect to host
|
||||
ultimate-garcinia-plus.com: could not connect to host
|
||||
ultros.io: did not receive HSTS header
|
||||
umidev.com: did not receive HSTS header
|
||||
umie.cc: did not receive HSTS header
|
||||
@ -4741,6 +4741,7 @@ uprotect.it: could not connect to host
|
||||
upstats.eu: could not connect to host
|
||||
ur-lauber.de: did not receive HSTS header
|
||||
urandom.eu.org: did not receive HSTS header
|
||||
urbanstylestaging.com: did not receive HSTS header
|
||||
urphp.com: could not connect to host
|
||||
us-immigration.com: did not receive HSTS header
|
||||
usaa.com: did not receive HSTS header
|
||||
@ -4798,7 +4799,6 @@ venixplays-stream.ml: could not connect to host
|
||||
verifikatorindonesia.com: could not connect to host
|
||||
vermontcareergateway.org: could not connect to host
|
||||
versia.ru: did not receive HSTS header
|
||||
verspai.de: could not connect to host
|
||||
veryhax.de: could not connect to host
|
||||
vetmgmt.com: could not connect to host
|
||||
vfree.org: could not connect to host
|
||||
@ -4827,7 +4827,6 @@ vio.no: did not receive HSTS header
|
||||
viperdns.com: could not connect to host
|
||||
vipi.es: could not connect to host
|
||||
vipmusic.ga: could not connect to host
|
||||
vipnettikasinoklubi.com: did not receive HSTS header
|
||||
virginiacrimeanalysisnetwork.org: did not receive HSTS header
|
||||
virtualperez.com: could not connect to host
|
||||
visiontree-beta.eu: could not connect to host
|
||||
@ -4884,7 +4883,7 @@ wapjt.cn: could not connect to host
|
||||
warandpeace.xyz: could not connect to host
|
||||
warehost.de: did not receive HSTS header
|
||||
warhistoryonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
warlions.info: did not receive HSTS header
|
||||
warlions.info: could not connect to host
|
||||
warped.com: did not receive HSTS header
|
||||
warsentech.com: did not receive HSTS header
|
||||
washingtonviews.com: did not receive HSTS header
|
||||
@ -5001,7 +5000,6 @@ wodice.com: could not connect to host
|
||||
wohnungsbau-ludwigsburg.de: did not receive HSTS header
|
||||
woima.fi: max-age too low: 604800
|
||||
wolfesden.com: could not connect to host
|
||||
womb.city: could not connect to host
|
||||
womosale.de: could not connect to host
|
||||
wonderfall.xyz: could not connect to host
|
||||
wonderhost.info: could not connect to host
|
||||
@ -5015,7 +5013,6 @@ workpermit.com.vn: did not receive HSTS header
|
||||
workwithgo.com: could not connect to host
|
||||
worldsbeststory.com: did not receive HSTS header
|
||||
wowapi.org: could not connect to host
|
||||
wpcarer.pro: could not connect to host
|
||||
wpfortify.com: did not receive HSTS header
|
||||
wphostingspot.com: did not receive HSTS header
|
||||
wpmetadatastandardsproject.org: could not connect to host
|
||||
@ -5049,7 +5046,7 @@ www.surfeasy.com: did not receive HSTS header
|
||||
www.zenpayroll.com: did not receive HSTS header
|
||||
www3.info: did not receive HSTS header
|
||||
wxukang.cn: could not connect to host
|
||||
wyzphoto.nl: could not connect to host
|
||||
wyzphoto.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
|
||||
x2w.io: could not connect to host
|
||||
x3led.com: could not connect to host
|
||||
x509.pub: could not connect to host
|
||||
@ -5062,7 +5059,7 @@ xbt.co: could not connect to host
|
||||
xcoop.me: could not connect to host
|
||||
xellos.ga: could not connect to host
|
||||
xellos.ml: could not connect to host
|
||||
xendo.net: could not connect to host
|
||||
xendo.net: did not receive HSTS header
|
||||
xenesisziarovky.sk: could not connect to host
|
||||
xett.com: did not receive HSTS header
|
||||
xf-liam.com: did not receive HSTS header
|
||||
@ -5071,7 +5068,6 @@ xiaody.me: could not connect to host
|
||||
xiaolvmu.me: could not connect to host
|
||||
xiaoxiao.im: could not connect to host
|
||||
ximens.me: did not receive HSTS header
|
||||
xing.ml: could not connect to host
|
||||
xisa.it: could not connect to host
|
||||
xiyu.moe: could not connect to host
|
||||
xmppwocky.net: could not connect to host
|
||||
@ -5087,7 +5083,6 @@ xn--80aaihqncaejjobbu6v.xn--p1ai: max-age too low: 10000
|
||||
xn--9pr52k0p5a.com: did not receive HSTS header
|
||||
xn--datenrettung-mnchen-jbc.com: did not receive HSTS header
|
||||
xn--dmonenjger-q5ag.net: could not connect to host
|
||||
xn--knstler-n2a.tips: could not connect to host
|
||||
xn--lgb3a8bcpn.cf: could not connect to host
|
||||
xn--lgb3a8bcpn.ga: could not connect to host
|
||||
xn--lgb3a8bcpn.gq: could not connect to host
|
||||
@ -5113,7 +5108,7 @@ xuwei.de: could not connect to host
|
||||
xuyh0120.win: did not receive HSTS header
|
||||
xxbase.com: could not connect to host
|
||||
y-o-w.com: did not receive HSTS header
|
||||
y-s.pw: max-age too low: 0
|
||||
y-s.pw: could not connect to host
|
||||
yabrt.cn: could not connect to host
|
||||
yagi2.com: could not connect to host
|
||||
yalook.com: did not receive HSTS header
|
||||
@ -5156,7 +5151,6 @@ yu.gg: did not receive HSTS header
|
||||
yuan.ga: did not receive HSTS header
|
||||
yuhen.ru: did not receive HSTS header
|
||||
yuko.moe: could not connect to host
|
||||
yunpan.blue: could not connect to host
|
||||
yunzhu.li: did not receive HSTS header
|
||||
yunzhu.org: could not connect to host
|
||||
yutabon.com: could not connect to host
|
||||
@ -5189,6 +5183,7 @@ zerudi.com: did not receive HSTS header
|
||||
zett4.me: could not connect to host
|
||||
zeytin.pro: could not connect to host
|
||||
zh.search.yahoo.com: did not receive HSTS header
|
||||
zhangsir.net: could not connect to host
|
||||
zhaojin97.cn: did not receive HSTS header
|
||||
zhendingresources.com: max-age too low: 0
|
||||
zinc-x.com: did not receive HSTS header
|
||||
@ -5208,7 +5203,6 @@ zoo24.de: did not receive HSTS header
|
||||
zoomingin.net: max-age too low: 5184000
|
||||
zoommailing.com: did not receive HSTS header
|
||||
zorasvobodova.cz: did not receive HSTS header
|
||||
zorgclustertool.nl: could not connect to host
|
||||
zortium.report: could not connect to host
|
||||
zoznamrealit.sk: did not receive HSTS header
|
||||
zqhong.com: could not connect to host
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user