Merge mozilla-central to mozilla-inbound

This commit is contained in:
Carsten "Tomcat" Book 2016-12-08 16:28:42 +01:00
Родитель ef771ecf98 3e157ac240
Коммит 9c7529527f
69 изменённых файлов: 15385 добавлений и 13758 удалений

Просмотреть файл

@ -9,6 +9,10 @@ module.metadata = {
const { flatten } = require('./array');
// Create a shortcut for Array.prototype.slice.call().
const unbind = Function.call.bind(Function.bind, Function.call);
const slice = unbind(Array.prototype.slice);
/**
* Merges all the properties of all arguments into first argument. If two or
* more argument objects have own properties with the same name, the property
@ -34,7 +38,7 @@ function merge(source) {
// `Boolean` converts the first parameter to a boolean value. Any object is
// converted to `true` where `null` and `undefined` becames `false`. Therefore
// the `filter` method will keep only objects that are defined and not null.
Array.slice(arguments, 1).filter(Boolean).forEach(function onEach(properties) {
slice(arguments, 1).filter(Boolean).forEach(function onEach(properties) {
getOwnPropertyIdentifiers(properties).forEach(function(name) {
descriptor[name] = Object.getOwnPropertyDescriptor(properties, name);
});
@ -50,7 +54,7 @@ exports.merge = merge;
* `merge(Object.create(source1), source2, source3)`.
*/
function extend(source) {
let rest = Array.slice(arguments, 1);
let rest = slice(arguments, 1);
rest.unshift(Object.create(source));
return merge.apply(null, rest);
}
@ -72,7 +76,7 @@ exports.each = each;
* merging XPCOM objects
*/
function safeMerge(source) {
Array.slice(arguments, 1).forEach(function onEach (obj) {
slice(arguments, 1).forEach(function onEach (obj) {
for (let prop in obj) source[prop] = obj[prop];
});
return source;

Просмотреть файл

@ -1,6 +1,9 @@
MOZ_AUTOMATION_BUILD_SYMBOLS=0
MOZ_AUTOMATION_L10N_CHECK=0
# Needed to set SourceRepository in application.ini (used by Talos)
export MOZILLA_OFFICIAL=1
. "$topsrcdir/build/macosx/mozconfig.common"
. "$topsrcdir/build/mozconfig.common.override"

Просмотреть файл

@ -1,6 +1,9 @@
MOZ_AUTOMATION_BUILD_SYMBOLS=0
MOZ_AUTOMATION_L10N_CHECK=0
# Needed to set SourceRepository in application.ini (used by Talos)
export MOZILLA_OFFICIAL=1
. "$topsrcdir/browser/config/mozconfigs/common"
. "$topsrcdir/build/mozconfig.win-common"
. "$topsrcdir/build/win32/mozconfig.vs-latest"

Просмотреть файл

@ -1,6 +1,9 @@
MOZ_AUTOMATION_BUILD_SYMBOLS=0
MOZ_AUTOMATION_L10N_CHECK=0
# Needed to set SourceRepository in application.ini (used by Talos)
export MOZILLA_OFFICIAL=1
. "$topsrcdir/browser/config/mozconfigs/win64/common-win64"
. "$topsrcdir/browser/config/mozconfigs/common"
. "$topsrcdir/build/mozconfig.win-common"

Просмотреть файл

@ -513,7 +513,7 @@ description > html|a {
}
.fxaAccountBoxButtons > button:first-child {
margin-right: 14px !important;
margin-inline-end: 14px !important;
}
.fxaSyncIllustration {

Просмотреть файл

@ -28,7 +28,7 @@ const MAX_ORDINAL = 99;
* DevTools is a class that represents a set of developer tools, it holds a
* set of tools and keeps track of open toolboxes in the browser.
*/
this.DevTools = function DevTools() {
function DevTools() {
this._tools = new Map(); // Map<toolId, tool>
this._themes = new Map(); // Map<themeId, theme>
this._toolboxes = new Map(); // Map<target, toolbox>

Просмотреть файл

@ -240,7 +240,7 @@ exports.getHighlighterUtils = function (toolbox) {
yield toolbox.walker.highlight(nodeFront);
}
toolbox.emit("node-highlight", nodeFront, options.toSource());
toolbox.emit("node-highlight", nodeFront);
});
/**

Просмотреть файл

@ -0,0 +1,65 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
/* global __dirname */
"use strict";
const toolbox = require("../node_modules/devtools-local-toolbox/index");
const feature = require("devtools-config");
const envConfig = require("../configs/development.json");
const fs = require("fs");
const path = require("path");
feature.setConfig(envConfig);
const webpackConfig = require("../webpack.config")(envConfig);
let {app} = toolbox.startDevServer(envConfig, webpackConfig);
function sendFile(res, src, encoding) {
const filePath = path.join(__dirname, src);
const file = encoding ? fs.readFileSync(filePath, encoding) : fs.readFileSync(filePath);
res.send(file);
}
function addFileRoute(from, to) {
app.get(from, function (req, res) {
sendFile(res, to, "utf-8");
});
}
// Routes
addFileRoute("/", "../inspector.xhtml");
addFileRoute("/markup/markup.xhtml", "../markup/markup.xhtml");
app.get("/devtools/skin/images/:file.png", function (req, res) {
res.contentType("image/png");
sendFile(res, "../../themes/images/" + req.params.file + ".png");
});
app.get("/devtools/skin/images/:file.svg", function (req, res) {
res.contentType("image/svg+xml");
sendFile(res, "../../themes/images/" + req.params.file + ".svg", "utf-8");
});
app.get("/images/:file.svg", function (req, res) {
res.contentType("image/svg+xml");
sendFile(res, "../../themes/images/" + req.params.file + ".svg", "utf-8");
});
// Redirect chrome:devtools/skin/file.css to ../../themes/file.css
app.get("/devtools/skin/:file.css", function (req, res) {
res.contentType("text/css; charset=utf-8");
sendFile(res, "../../themes/" + req.params.file + ".css", "utf-8");
});
// Redirect chrome:devtools/client/path/to/file.css to ../../path/to/file.css
// and chrome:devtools/content/path/to/file.css to ../../path/to/file.css
app.get(/^\/devtools\/(?:client|content)\/(.*)\.css$/, function (req, res) {
res.contentType("text/css; charset=utf-8");
sendFile(res, "../../" + req.params[0] + ".css");
});

Просмотреть файл

@ -0,0 +1,22 @@
{
"title": "Inspector",
"environment": "development",
"baseWorkerURL": "public/build/",
"theme": "light",
"host": "",
"logging": {
"client": false,
"firefoxProxy": false
},
"features": {
},
"firefox": {
"proxyHost": "localhost:9000",
"webSocketConnection": false,
"webSocketHost": "localhost:6080"
},
"development": {
"serverPort": 8000,
"customIndex": true
}
}

Просмотреть файл

@ -4,12 +4,10 @@
* 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/. */
/* global window */
/* global window, BrowserLoader */
"use strict";
var Cu = Components.utils;
var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
var Services = require("Services");
var promise = require("promise");
var defer = require("devtools/shared/defer");
@ -1354,15 +1352,15 @@ Inspector.prototype = {
// create tool iframe
this._markupFrame = doc.createElement("iframe");
this._markupFrame.setAttribute("flex", "1");
// This is needed to enable tooltips inside the iframe document.
this._markupFrame.setAttribute("tooltip", "aHTMLTooltip");
this._markupFrame.addEventListener("contextmenu", this._onContextMenu);
// This is needed to enable tooltips inside the iframe document.
this._markupFrame.addEventListener("load", this._onMarkupFrameLoad, true);
this._markupBox.setAttribute("collapsed", true);
this._markupBox.appendChild(this._markupFrame);
this._markupFrame.setAttribute("src", "chrome://devtools/content/inspector/markup/markup.xhtml");
this._markupFrame.addEventListener("load", this._onMarkupFrameLoad, true);
this._markupFrame.setAttribute("src", "markup/markup.xhtml");
this._markupFrame.setAttribute("aria-label",
INSPECTOR_L10N.getStr("inspector.panelLabel.markupView"));
},
@ -1891,89 +1889,111 @@ Inspector.prototype = {
}
};
/**
* Create a fake toolbox when running the inspector standalone, either in a chrome tab or
* in a content tab.
*
* @param {Target} target to debug
* @param {Function} createThreadClient
* When supported the thread client needs a reference to the toolbox.
* This callback will be called right after the toolbox object is created.
* @param {Object} dependencies
* - react
* - reactDOM
* - browserRequire
*/
const buildFakeToolbox = Task.async(function* (
target, createThreadClient, {
React,
ReactDOM,
browserRequire
}) {
const { InspectorFront } = require("devtools/shared/fronts/inspector");
const { Selection } = require("devtools/client/framework/selection");
const { getHighlighterUtils } = require("devtools/client/framework/toolbox-highlighter-utils");
let notImplemented = function () {
throw new Error("Not implemented in a tab");
};
let fakeToolbox = {
target,
hostType: "bottom",
doc: window.document,
win: window,
on() {}, emit() {}, off() {},
initInspector() {},
browserRequire,
React,
ReactDOM,
isToolRegistered() {
return false;
},
currentToolId: "inspector",
getCurrentPanel() {
return "inspector";
},
get textboxContextMenuPopup() {
notImplemented();
},
getPanel: notImplemented,
openSplitConsole: notImplemented,
viewCssSourceInStyleEditor: notImplemented,
viewJsSourceInDebugger: notImplemented,
viewSource: notImplemented,
viewSourceInDebugger: notImplemented,
viewSourceInStyleEditor: notImplemented,
// For attachThread:
highlightTool() {},
unhighlightTool() {},
selectTool() {},
raise() {},
getNotificationBox() {}
};
fakeToolbox.threadClient = yield createThreadClient(fakeToolbox);
let inspector = InspectorFront(target.client, target.form);
let showAllAnonymousContent =
Services.prefs.getBoolPref("devtools.inspector.showAllAnonymousContent");
let walker = yield inspector.getWalker({ showAllAnonymousContent });
let selection = new Selection(walker);
let highlighter = yield inspector.getHighlighter(false);
fakeToolbox.highlighterUtils = getHighlighterUtils(fakeToolbox);
fakeToolbox.inspector = inspector;
fakeToolbox.walker = walker;
fakeToolbox.selection = selection;
fakeToolbox.highlighter = highlighter;
return fakeToolbox;
});
// URL constructor doesn't support chrome: scheme
let href = window.location.href.replace(/chrome:/, "http://");
let url = new window.URL(href);
// Only use this method to attach the toolbox if some query parameters are given
if (url.search.length > 1) {
// If query parameters are given in a chrome tab, the inspector is running in standalone.
if (window.location.protocol === "chrome:" && url.search.length > 1) {
const { targetFromURL } = require("devtools/client/framework/target-from-url");
const { attachThread } = require("devtools/client/framework/attach-thread");
const { BrowserLoader } =
Cu.import("resource://devtools/client/shared/browser-loader.js", {});
const { Selection } = require("devtools/client/framework/selection");
const { InspectorFront } = require("devtools/shared/fronts/inspector");
const { getHighlighterUtils } = require("devtools/client/framework/toolbox-highlighter-utils");
const browserRequire = BrowserLoader({ window, useOnlyShared: true }).require;
const React = browserRequire("devtools/client/shared/vendor/react");
const ReactDOM = browserRequire("devtools/client/shared/vendor/react-dom");
Task.spawn(function* () {
let target = yield targetFromURL(url);
let notImplemented = function () {
throw new Error("Not implemented in a tab");
};
let fakeToolbox = {
let fakeToolbox = yield buildFakeToolbox(
target,
hostType: "bottom",
doc: window.document,
win: window,
on() {}, emit() {}, off() {},
initInspector() {},
browserRequire: BrowserLoader({
window: window,
useOnlyShared: true
}).require,
get React() {
return this.browserRequire("devtools/client/shared/vendor/react");
},
get ReactDOM() {
return this.browserRequire("devtools/client/shared/vendor/react-dom");
},
isToolRegistered() {
return false;
},
currentToolId: "inspector",
getCurrentPanel() {
return "inspector";
},
get textboxContextMenuPopup() {
notImplemented();
},
getPanel: notImplemented,
openSplitConsole: notImplemented,
viewCssSourceInStyleEditor: notImplemented,
viewJsSourceInDebugger: notImplemented,
viewSource: notImplemented,
viewSourceInDebugger: notImplemented,
viewSourceInStyleEditor: notImplemented,
// For attachThread:
highlightTool() {},
unhighlightTool() {},
selectTool() {},
raise() {},
getNotificationBox() {}
};
// attachThread also expect a toolbox as argument
fakeToolbox.threadClient = yield attachThread(fakeToolbox);
let inspector = InspectorFront(target.client, target.form);
let showAllAnonymousContent =
Services.prefs.getBoolPref("devtools.inspector.showAllAnonymousContent");
let walker = yield inspector.getWalker({ showAllAnonymousContent });
let selection = new Selection(walker);
let highlighter = yield inspector.getHighlighter(false);
fakeToolbox.inspector = inspector;
fakeToolbox.walker = walker;
fakeToolbox.selection = selection;
fakeToolbox.highlighter = highlighter;
fakeToolbox.highlighterUtils = getHighlighterUtils(fakeToolbox);
(toolbox) => attachThread(toolbox),
{ React, ReactDOM, browserRequire }
);
let inspectorUI = new Inspector(fakeToolbox);
inspectorUI.init();
}).then(null, e => {
window.alert("Unable to start the inspector:" + e.message + "\n" + e.stack);
});
}
exports.Inspector = Inspector;
exports.buildFakeToolbox = buildFakeToolbox;

Просмотреть файл

@ -26,6 +26,18 @@
<script type="application/javascript;version=1.8"
src="chrome://devtools/content/shared/theme-switching.js"></script>
<script type="text/javascript">
/* eslint-disable */
var isInChrome = window.location.href.includes("chrome:");
if (isInChrome) {
var exports = {};
var Cu = Components.utils;
var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
var { BrowserLoader } = Cu.import("resource://devtools/client/shared/browser-loader.js", {});
}
</script>
<!-- in content, inspector.js is mapped to the dynamically generated webpack bundle -->
<script type="application/javascript;version=1.8" src="inspector.js" defer="true"></script>
</head>
<body class="theme-body" role="application">

Просмотреть файл

@ -0,0 +1,121 @@
/* 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/. */
/* global window, document */
"use strict";
const React = require("devtools/client/shared/vendor/react");
const ReactDOM = require("devtools/client/shared/vendor/react-dom");
const { appinfo } = require("Services");
const { buildFakeToolbox, Inspector } = require("./inspector");
function onConnect(arg) {
if (!arg || !arg.client) {
return;
}
let client = arg.client;
const tabTarget = client.getTabTarget();
let threadClient = { paused: false };
buildFakeToolbox(
tabTarget,
() => threadClient,
{ React, ReactDOM, browserRequire: () => {} }
).then(function (fakeToolbox) {
let inspector = new Inspector(fakeToolbox);
inspector.init();
});
}
/**
* Stylesheet links in devtools xhtml files are using chrome or resource URLs.
* Rewrite the href attribute to remove the protocol. web-server.js contains redirects
* to map CSS urls to the proper file. Supports urls using:
* - devtools/client/
* - devtools/content/
* - skin/
* The css for the light-theme will additionally be loaded.
* Will also add mandatory classnames and attributes to be compatible with devtools theme
* stylesheet.
*
*/
function fixStylesheets(doc) {
let links = doc.head.querySelectorAll("link");
for (let link of links) {
link.href = link.href.replace(/(resource|chrome)\:\/\//, "/");
}
// Add the light theme stylesheet to compensate for the missing theme-switching.js
let themeLink = doc.createElement("link");
themeLink.setAttribute("rel", "stylesheet");
themeLink.setAttribute("href", "/devtools/skin/light-theme.css");
doc.head.appendChild(themeLink);
doc.documentElement.classList.add("theme-light");
doc.body.classList.add("theme-light");
if (appinfo.OS === "Darwin") {
doc.documentElement.setAttribute("platform", "mac");
} else if (appinfo.OS === "Linux") {
doc.documentElement.setAttribute("platform", "linux");
} else {
doc.documentElement.setAttribute("platform", "win");
}
}
/**
* Called each time a childList mutation is received on the main document.
* Check the iframes currently loaded in the document and call fixStylesheets if needed.
*/
function fixStylesheetsOnMutation() {
let frames = document.body.querySelectorAll("iframe");
for (let frame of frames) {
let doc = frame.contentDocument || frame.contentWindow.document;
if (doc.__fixStylesheetsFlag) {
continue;
}
// Mark the document as processed to avoid extra changes.
doc.__fixStylesheetsFlag = true;
if (doc.readyState !== "complete") {
// If the document is not loaded yet, wait for DOMContentLoaded.
frame.contentWindow.addEventListener("DOMContentLoaded", () => {
fixStylesheets(doc);
}, { once: true });
} else {
fixStylesheets(doc);
}
}
}
window.addEventListener("DOMContentLoaded", function onInspectorDOMLoaded() {
window.removeEventListener("DOMContentLoaded", onInspectorDOMLoaded);
// Add styling for the main document.
fixStylesheets(document);
// Add a mutation observer to check if new iframes have been loaded and need to have
// their stylesheet links updated.
new window.MutationObserver(mutations => {
fixStylesheetsOnMutation();
}).observe(document.body, { childList: true, subtree: true });
const hasFirefoxTabParam = window.location.href.indexOf("firefox-tab") != -1;
if (!hasFirefoxTabParam) {
const inspectorRoot = document.querySelector(".inspector");
// Remove the inspector specific markup and add the landing page root element.
inspectorRoot.remove();
let mount = document.createElement("div");
mount.setAttribute("id", "mount");
document.body.appendChild(mount);
}
// Toolbox tries to add a theme classname on the documentElement and should only be
// required after DOMContentLoaded.
const { bootstrap } = require("devtools-local-toolbox");
bootstrap(React, ReactDOM).then(onConnect);
});

Просмотреть файл

@ -16,7 +16,6 @@
src="chrome://devtools/content/shared/theme-switching.js"></script>
<script type="application/javascript;version=1.8"
src="chrome://devtools/content/sourceeditor/codemirror/codemirror.bundle.js"></script>
</head>
<body class="theme-body devtools-monospace" role="application">

Просмотреть файл

@ -0,0 +1,17 @@
{
"name": "inspector.html",
"version": "0.0.1",
"description": "The Firefox Inspector",
"scripts": {
"start": "node bin/dev-server"
},
"author": "",
"dependencies": {
"devtools-local-toolbox": "0.0.10",
"devtools-modules": "0.0.9",
"devtools-sham-modules": "0.0.9",
"devtools-config": "0.0.9",
"raw-loader": "^0.5.1",
"json-loader": "^0.5.4"
}
}

Просмотреть файл

@ -0,0 +1,136 @@
/* 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/. */
/* global __dirname */
"use strict";
const {toolboxConfig} = require("devtools-local-toolbox/index");
const path = require("path");
const webpack = require("webpack");
module.exports = envConfig => {
let webpackConfig = {
bail: true,
entry: [
path.join(__dirname, "local-toolbox.js")
],
output: {
path: path.join(__dirname, "assets/build"),
filename: "inspector.js",
publicPath: "/"
},
module: {
// Disable handling of unknown requires
unknownContextRegExp: /$^/,
unknownContextCritical: false,
// Disable handling of requires with a single expression
exprContextRegExp: /$^/,
exprContextCritical: false,
// Warn for every expression in require
wrappedContextCritical: true,
loaders: [
{
test: /event-emitter/,
exclude: /node_modules/,
loaders: [path.join(__dirname, "./webpack/rewrite-event-emitter")],
}, {
// Replace all references to this.browserRequire() by require() in
// client/inspector/*.js files
test: /client\/inspector\/.*\.js$/,
loaders: [path.join(__dirname, "./webpack/rewrite-browser-require")],
}
]
},
resolveLoader: {
root: [
path.resolve("./node_modules"),
path.resolve("./webpack"),
]
},
resolve: {
alias: {
"acorn/util/walk": path.join(__dirname, "../../shared/acorn/walk"),
"acorn": path.join(__dirname, "../../shared/acorn"),
"devtools/client/framework/about-devtools-toolbox":
path.join(__dirname, "./webpack/about-devtools-sham.js"),
"devtools/client/framework/attach-thread":
path.join(__dirname, "./webpack/attach-thread-sham.js"),
"devtools/client/framework/target-from-url":
path.join(__dirname, "./webpack/target-from-url-sham.js"),
"devtools/client/jsonview/main":
path.join(__dirname, "./webpack/jsonview-sham.js"),
"devtools/client/sourceeditor/editor":
path.join(__dirname, "./webpack/editor-sham.js"),
"devtools/client/locales": path.join(__dirname, "../locales/en-US"),
"devtools/shared/DevToolsUtils":
path.join(__dirname, "./webpack/devtools-utils-sham.js"),
"devtools/shared/locales": path.join(__dirname, "../../shared/locales/en-US"),
"devtools/shared/platform": path.join(__dirname, "../../shared/platform/content"),
"devtools": path.join(__dirname, "../../"),
"gcli": path.join(__dirname, "../../shared/gcli/source/lib/gcli"),
"method": path.join(__dirname, "../../../addon-sdk/source/lib/method"),
"modules/libpref/init/all":
path.join(__dirname, "../../../modules/libpref/init/all.js"),
"sdk/system/unload": path.join(__dirname, "./webpack/system-unload-sham.js"),
"sdk": path.join(__dirname, "../../../addon-sdk/source/lib/sdk"),
"Services": path.join(__dirname, "../shared/shim/Services.js"),
"toolkit/locales":
path.join(__dirname, "../../../toolkit/locales/en-US/chrome/global"),
},
},
plugins: [
new webpack.DefinePlugin({
"isWorker": JSON.stringify(false),
"reportError": "console.error",
"AppConstants": "{ DEBUG: true, DEBUG_JS_MODULES: true }",
"loader": `{
lazyRequireGetter: () => {},
lazyGetter: () => {}
}`,
"dump": "console.log",
}),
]
};
webpackConfig.externals = [
/codemirror\//,
{
"promise": "var Promise",
"devtools/server/main": "{}",
// Just trying to get build to work. These should be removed eventually:
"chrome": "{}",
// In case you end up in chrome-land you can use this to help track down issues.
// SDK for instance does a bunch of this so if you somehow end up importing an SDK
// dependency this might help for debugging:
// "chrome": `{
// Cc: {
// "@mozilla.org/uuid-generator;1": { getService: () => { return {} } },
// "@mozilla.org/observer-service;1": { getService: () => { return {} } },
// },
// Ci: {},
// Cr: {},
// Cm: {},
// components: { classesByID: () => {} , ID: () => {} }
// }`,
"resource://gre/modules/XPCOMUtils.jsm": "{}",
"resource://devtools/client/styleeditor/StyleEditorUI.jsm": "{}",
"resource://devtools/client/styleeditor/StyleEditorUtil.jsm": "{}",
"devtools/client/shared/developer-toolbar": "{}",
},
];
// Exclude all files from devtools/ or addon-sdk/ or modules/ .
webpackConfig.babelExcludes = /(devtools\/|addon-sdk\/|modules\/)/;
return toolboxConfig(webpackConfig, envConfig);
};

Просмотреть файл

@ -0,0 +1,12 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
"use strict";
module.exports = {
register: () => {},
unregister: () => {},
};

Просмотреть файл

@ -0,0 +1,11 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
"use strict";
module.exports = {
attachThread: () => {},
};

Просмотреть файл

@ -0,0 +1,13 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
/* global setImmediate */
"use strict";
module.exports = {
executeSoon: setImmediate,
};

Просмотреть файл

@ -0,0 +1,13 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
"use strict";
function Editor() {}
Editor.modes = {};
Editor.prototype.appendToLocalElement = () => {};
module.exports = Editor;

Просмотреть файл

@ -0,0 +1,14 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
"use strict";
module.exports = {
JsonView: {
initialize: () => {},
destroy: () => {},
}
};

Просмотреть файл

@ -0,0 +1,71 @@
/* 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/. */
// Rewrite devtools.js or all.js, leaving just the relevant pref() calls.
"use strict";
const PREF_WHITELIST = [
"devtools",
"layout.css.grid.enabled"
];
const acceptLine = function (line) {
let matches = line.match(/^ *pref\("([^"]+)"/);
if (!matches || !matches[1]) {
return false;
}
let [, prefName] = matches;
return PREF_WHITELIST.some(filter => prefName.startsWith(filter));
};
module.exports = function (content) {
this.cacheable && this.cacheable();
// If we're reading devtools.js we have to do some preprocessing.
// If we're reading all.js we just assume we can dump all the
// conditionals.
let isDevtools = this.request.endsWith("/devtools.js");
// This maps the text of a "#if" to its truth value. This has to
// cover all uses of #if in devtools.js.
const ifMap = {
"#if MOZ_UPDATE_CHANNEL == beta": false,
"#if defined(NIGHTLY_BUILD)": false,
"#ifdef NIGHTLY_BUILD": false,
"#ifdef MOZ_DEV_EDITION": false,
"#ifdef RELEASE_OR_BETA": true,
"#ifdef RELEASE_BUILD": true,
};
let lines = content.split("\n");
let ignoring = false;
let newLines = [];
let continuation = false;
for (let line of lines) {
if (line.startsWith("sticky_pref")) {
line = line.slice(7);
}
if (isDevtools) {
if (line.startsWith("#if")) {
if (!(line in ifMap)) {
throw new Error("missing line in ifMap: " + line);
}
ignoring = !ifMap[line];
} else if (line.startsWith("#else")) {
ignoring = !ignoring;
}
}
if (continuation || (!ignoring && acceptLine(line))) {
newLines.push(line);
// The call to pref(...); might span more than one line.
continuation = !/\);/.test(line);
}
}
return newLines.join("\n");
};

Просмотреть файл

@ -0,0 +1,12 @@
/* 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/. */
// Replace all occurrences of "this.browserRequire(" by "require(".
"use strict";
module.exports = function (content) {
this.cacheable && this.cacheable();
return content.replace(/this\.browserRequire\(/g, "require(");
};

Просмотреть файл

@ -0,0 +1,26 @@
/* 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/. */
// Remove the header code from event-emitter.js. This code confuses
// webpack.
"use strict";
module.exports = function (content) {
this.cacheable && this.cacheable();
let lines = content.split("\n");
let ignoring = false;
let newLines = [];
for (let line of lines) {
if (/function \(factory\)/.test(line)) {
ignoring = true;
} else if (/call\(this, function /.test(line)) {
ignoring = false;
} else if (!ignoring && line !== "});") {
newLines.push(line);
}
}
return newLines.join("\n");
};

Просмотреть файл

@ -0,0 +1,11 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
"use strict";
module.exports = {
when: () => {},
};

Просмотреть файл

@ -0,0 +1,11 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ts=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/. */
"use strict";
module.exports = {
targetFromURL: () => {},
};

Просмотреть файл

@ -606,6 +606,14 @@ const Services = {
};
},
},
/**
* Shims for Services.obs.add/removeObserver.
*/
obs: {
addObserver: () => {},
removeObserver: () => {},
},
};
/**

Просмотреть файл

@ -153,8 +153,14 @@ UndoStack.prototype = {
* Install this object as a command controller.
*/
installController: function (controllerWindow) {
let controllers = controllerWindow.controllers;
// Only available when running in a Firefox panel.
if (!controllers || !controllers.appendController) {
return;
}
this._controllerWindow = controllerWindow;
controllerWindow.controllers.appendController(this);
controllers.appendController(this);
},
/**

Просмотреть файл

@ -1,5 +1,5 @@
{
"name": "devtools",
"name": "sourceeditor",
"version": "0.0.1",
"description": "",
"main": "",

Просмотреть файл

@ -0,0 +1,39 @@
/* 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/. */
"use strict";
module.exports = [{
bail: true,
entry: [
"./codemirror/addon/dialog/dialog.js",
"./codemirror/addon/search/searchcursor.js",
"./codemirror/addon/search/search.js",
"./codemirror/addon/edit/matchbrackets.js",
"./codemirror/addon/edit/closebrackets.js",
"./codemirror/addon/comment/comment.js",
"./codemirror/mode/javascript/javascript.js",
"./codemirror/mode/xml/xml.js",
"./codemirror/mode/css/css.js",
"./codemirror/mode/htmlmixed/htmlmixed.js",
"./codemirror/mode/clike/clike.js",
"./codemirror/mode/wasm/wasm.js",
"./codemirror/addon/selection/active-line.js",
"./codemirror/addon/edit/trailingspace.js",
"./codemirror/keymap/emacs.js",
"./codemirror/keymap/vim.js",
"./codemirror/keymap/sublime.js",
"./codemirror/addon/fold/foldcode.js",
"./codemirror/addon/fold/brace-fold.js",
"./codemirror/addon/fold/comment-fold.js",
"./codemirror/addon/fold/xml-fold.js",
"./codemirror/addon/fold/foldgutter.js",
"./codemirror/lib/codemirror.js",
],
output: {
filename: "./codemirror/codemirror.bundle.js",
libraryTarget: "var",
library: "CodeMirror",
},
}];

Просмотреть файл

@ -1,39 +0,0 @@
/* 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/. */
"use strict";
module.exports = [{
bail: true,
entry: [
"./sourceeditor/codemirror/addon/dialog/dialog.js",
"./sourceeditor/codemirror/addon/search/searchcursor.js",
"./sourceeditor/codemirror/addon/search/search.js",
"./sourceeditor/codemirror/addon/edit/matchbrackets.js",
"./sourceeditor/codemirror/addon/edit/closebrackets.js",
"./sourceeditor/codemirror/addon/comment/comment.js",
"./sourceeditor/codemirror/mode/javascript/javascript.js",
"./sourceeditor/codemirror/mode/xml/xml.js",
"./sourceeditor/codemirror/mode/css/css.js",
"./sourceeditor/codemirror/mode/htmlmixed/htmlmixed.js",
"./sourceeditor/codemirror/mode/clike/clike.js",
"./sourceeditor/codemirror/mode/wasm/wasm.js",
"./sourceeditor/codemirror/addon/selection/active-line.js",
"./sourceeditor/codemirror/addon/edit/trailingspace.js",
"./sourceeditor/codemirror/keymap/emacs.js",
"./sourceeditor/codemirror/keymap/vim.js",
"./sourceeditor/codemirror/keymap/sublime.js",
"./sourceeditor/codemirror/addon/fold/foldcode.js",
"./sourceeditor/codemirror/addon/fold/brace-fold.js",
"./sourceeditor/codemirror/addon/fold/comment-fold.js",
"./sourceeditor/codemirror/addon/fold/xml-fold.js",
"./sourceeditor/codemirror/addon/fold/foldgutter.js",
"./sourceeditor/codemirror/lib/codemirror.js",
],
output: {
filename: "./sourceeditor/codemirror/codemirror.bundle.js",
libraryTarget: "var",
library: "CodeMirror",
},
}];

Просмотреть файл

@ -792,7 +792,7 @@ private:
void
Resume()
{
if (!IsSuspended() && mOwner->Paused()) {
if (!IsSuspended()) {
MOZ_LOG(AudioChannelService::GetAudioChannelLog(), LogLevel::Debug,
("HTMLMediaElement::AudioChannelAgentCallback, ResumeFromAudioChannel, "
"this = %p, Error : resume without suspended!\n", this));

Просмотреть файл

@ -139,6 +139,28 @@ VideoData::~VideoData()
{
}
void
VideoData::SetListener(UniquePtr<Listener> aListener)
{
MOZ_ASSERT(!mSentToCompositor, "Listener should be registered before sending data");
mListener = Move(aListener);
}
void
VideoData::MarkSentToCompositor()
{
if (mSentToCompositor) {
return;
}
mSentToCompositor = true;
if (mListener != nullptr) {
mListener->OnSentToCompositor();
mListener = nullptr;
}
}
size_t
VideoData::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
{

Просмотреть файл

@ -447,6 +447,12 @@ public:
YUVColorSpace mYUVColorSpace = YUVColorSpace::BT601;
};
class Listener {
public:
virtual void OnSentToCompositor() = 0;
virtual ~Listener() {}
};
// Constructs a VideoData object. If aImage is nullptr, creates a new Image
// holding a copy of the YCbCr data passed in aBuffer. If aImage is not
// nullptr, it's stored as the underlying video image and aBuffer is assumed
@ -530,8 +536,6 @@ public:
int32_t mFrameID;
bool mSentToCompositor;
VideoData(int64_t aOffset,
int64_t aTime,
int64_t aDuration,
@ -540,8 +544,15 @@ public:
IntSize aDisplay,
uint32_t aFrameID);
void SetListener(UniquePtr<Listener> aListener);
void MarkSentToCompositor();
bool IsSentToCompositor() { return mSentToCompositor; }
protected:
~VideoData();
bool mSentToCompositor;
UniquePtr<Listener> mListener;
};
class CryptoTrack

Просмотреть файл

@ -259,7 +259,7 @@ VideoSink::OnVideoQueuePushed(RefPtr<MediaData>&& aSample)
// Listen to push event, VideoSink should try rendering ASAP if first frame
// arrives but update scheduler is not triggered yet.
VideoData* v = aSample->As<VideoData>();
if (!v->mSentToCompositor) {
if (!v->IsSentToCompositor()) {
// Since we push rendered frames back to the queue, we will receive
// push events for them. We only need to trigger render loop
// when this frame is not rendered yet.
@ -359,7 +359,7 @@ VideoSink::RenderVideoFrames(int32_t aMaxFrames,
for (uint32_t i = 0; i < frames.Length(); ++i) {
VideoData* frame = frames[i]->As<VideoData>();
frame->mSentToCompositor = true;
frame->MarkSentToCompositor();
if (!frame->mImage || !frame->mImage->IsValid() ||
!frame->mImage->GetSize().width || !frame->mImage->GetSize().height) {
@ -417,7 +417,7 @@ VideoSink::UpdateRenderedVideoFrames()
clockTime >= VideoQueue().PeekFront()->GetEndTime()) {
RefPtr<MediaData> frame = VideoQueue().PopFront();
lastFrameEndTime = frame->GetEndTime();
if (frame->As<VideoData>()->mSentToCompositor) {
if (frame->As<VideoData>()->IsSentToCompositor()) {
mFrameStats.NotifyPresentedFrame();
} else {
mFrameStats.NotifyDecodedFrames({ 0, 0, 1 });

Просмотреть файл

@ -114,6 +114,40 @@ struct SampleTime final
class RemoteVideoDecoder final : public RemoteDataDecoder
{
public:
// Hold an output buffer and render it to the surface when the frame is sent to compositor, or
// release it if not presented.
class RenderOrReleaseOutput : public VideoData::Listener
{
public:
RenderOrReleaseOutput(java::CodecProxy::Param aCodec, java::Sample::Param aSample)
: mCodec(aCodec),
mSample(aSample)
{}
~RenderOrReleaseOutput()
{
ReleaseOutput(false);
}
void OnSentToCompositor() override
{
ReleaseOutput(true);
mCodec = nullptr;
mSample = nullptr;
}
private:
void ReleaseOutput(bool aToRender)
{
if (mCodec && mSample) {
mCodec->ReleaseOutput(mSample, aToRender);
}
}
java::CodecProxy::GlobalRef mCodec;
java::Sample::GlobalRef mSample;
};
class CallbacksSupport final : public JavaCallbacksSupport
{
public:
@ -168,6 +202,9 @@ public:
mDecoder->mConfig.mDisplay.width,
mDecoder->mConfig.mDisplay.height));
UniquePtr<VideoData::Listener> listener(new RenderOrReleaseOutput(mDecoder->mJavaDecoder, aSample));
v->SetListener(Move(listener));
mDecoderCallback->Output(v);
}

Просмотреть файл

@ -3958,7 +3958,7 @@ STATIC_ASSERT_FIELD_OFFSET_MATCHES(nsSize, nsSize_Simple, width);
STATIC_ASSERT_FIELD_OFFSET_MATCHES(nsSize, nsSize_Simple, height);
/**
* <div rustbindgen="true" replaces="mozilla_UniquePtr">
* <div rustbindgen="true" replaces="mozilla::UniquePtr">
*
* TODO(Emilio): This is a workaround and we should be able to get rid of this
* one.

Просмотреть файл

@ -683,6 +683,24 @@ nsSVGEffects::EffectProperties::GetMaskFrames()
return result;
}
bool
nsSVGEffects::EffectProperties::MightHaveNoneSVGMask() const
{
if (!mMask) {
return false;
}
const nsTArray<RefPtr<nsSVGPaintingProperty>>& props = mMask->GetProps();
for (size_t i = 0; i < props.Length(); i++) {
if (!props[i] ||
!props[i]->GetReferencedFrame(nsGkAtoms::svgMaskFrame, nullptr)) {
return true;
}
}
return false;
}
void
nsSVGEffects::UpdateEffects(nsIFrame* aFrame)
{

Просмотреть файл

@ -493,6 +493,7 @@ public:
*/
nsTArray<nsSVGMaskFrame*> GetMaskFrames();
bool MightHaveNoneSVGMask() const;
bool HasValidFilter() {
return mFilter && mFilter->ReferencesValidResources();
}

Просмотреть файл

@ -110,9 +110,18 @@ private:
// property set, that would be bad, since then our GetVisualOverflowRect()
// call would give us the post-effects, and post-transform, overflow rect.
//
NS_ASSERTION(aFrame->GetParent()->StyleContext()->GetPseudo() ==
// With image masks, there is one more exception.
//
// In nsStyleImageLayers::Layer::CalcDifference, we do not add
// nsChangeHint_UpdateOverflow hint when image mask(not SVG mask) property
// value changed, since replace image mask does not cause layout change.
// So even if we apply a new mask image to this frame,
// PreEffectsBBoxProperty might still left empty.
NS_ASSERTION(nsSVGEffects::GetEffectProperties(aFrame).MightHaveNoneSVGMask() ||
aFrame->GetParent()->StyleContext()->GetPseudo() ==
nsCSSAnonBoxes::mozAnonymousBlock,
"How did we getting here, then?");
NS_ASSERTION(!aFrame->Properties().Get(
aFrame->PreTransformOverflowAreasProperty()),
"GetVisualOverflowRect() won't return the pre-effects rect!");

Просмотреть файл

@ -333,6 +333,47 @@ AnnexB::HasSPS(const mozilla::MediaByteBuffer* aExtraData)
return numSps > 0;
}
bool
AnnexB::HasPPS(const mozilla::MediaRawData* aSample)
{
return HasPPS(aSample->mExtraData);
}
bool
AnnexB::HasPPS(const mozilla::MediaByteBuffer* aExtraData)
{
if (!aExtraData) {
return false;
}
ByteReader reader(aExtraData);
const uint8_t* ptr = reader.Read(5);
if (!ptr || !reader.CanRead8()) {
return false;
}
uint8_t numSps = reader.ReadU8() & 0x1f;
// Skip over the included SPS.
for (uint8_t i = 0; i < numSps; i++) {
if (reader.Remaining() < 3) {
return false;
}
uint16_t length = reader.ReadU16();
if ((reader.PeekU8() & 0x1f) != 7) {
// Not an SPS NAL type.
return false;
}
if (!reader.Read(length)) {
return false;
}
}
if (!reader.CanRead8()) {
return false;
}
uint8_t numPps = reader.ReadU8();
return numPps > 0;
}
bool
AnnexB::ConvertSampleTo4BytesAVCC(mozilla::MediaRawData* aSample)
{

Просмотреть файл

@ -101,4 +101,10 @@ BitReader::BitCount() const
return mSize * 8 - mBitReader->numBitsLeft();
}
size_t
BitReader::BitsLeft() const
{
return mBitReader->numBitsLeft();
}
} // namespace mp4_demuxer

Просмотреть файл

@ -11,11 +11,98 @@
#include "mp4_demuxer/H264.h"
#include <media/stagefright/foundation/ABitReader.h>
#include <limits>
#include <cmath>
using namespace mozilla;
namespace mp4_demuxer
namespace mp4_demuxer {
// Default scaling lists (per spec).
// ITU H264:
// Table 7-2 – Assignment of mnemonic names to scaling list indices and
// specification of fall-back rule
static const uint8_t Default_4x4_Intra[16] = {
6, 13, 13, 20,
20, 20, 28, 28,
28, 28, 32, 32,
32, 37, 37, 42
};
static const uint8_t Default_4x4_Inter[16] = {
10, 14, 14, 20,
20, 20, 24, 24,
24, 24, 27, 27,
27, 30, 30, 34
};
static const uint8_t Default_8x8_Intra[64] = {
6, 10, 10, 13, 11, 13, 16, 16,
16, 16, 18, 18, 18, 18, 18, 23,
23, 23, 23, 23, 23, 25, 25, 25,
25, 25, 25, 25, 27, 27, 27, 27,
27, 27, 27, 27, 29, 29, 29, 29,
29, 29, 29, 31, 31, 31, 31, 31,
31, 33, 33, 33, 33, 33, 36, 36,
36, 36, 38, 38, 38, 40, 40, 42
};
static const uint8_t Default_8x8_Inter[64] = {
9, 13, 13, 15, 13, 15, 17, 17,
17, 17, 19, 19, 19, 19, 19, 21,
21, 21, 21, 21, 21, 22, 22, 22,
22, 22, 22, 22, 24, 24, 24, 24,
24, 24, 24, 24, 25, 25, 25, 25,
25, 25, 25, 27, 27, 27, 27, 27,
27, 28, 28, 28, 28, 28, 30, 30,
30, 30, 32, 32, 32, 33, 33, 35
};
namespace detail {
static void
scaling_list(BitReader& aBr, uint8_t* aScalingList, int aSizeOfScalingList,
const uint8_t* aDefaultList, const uint8_t* aFallbackList)
{
int32_t lastScale = 8;
int32_t nextScale = 8;
int32_t deltaScale;
// (pic|seq)_scaling_list_present_flag[i]
if (!aBr.ReadBit()) {
if (aFallbackList) {
memcpy(aScalingList, aFallbackList, aSizeOfScalingList);
}
return;
}
for (int i = 0; i < aSizeOfScalingList; i++) {
if (nextScale != 0) {
deltaScale = aBr.ReadSE();
nextScale = (lastScale + deltaScale + 256) % 256;
if (!i && !nextScale) {
memcpy(aScalingList, aDefaultList, aSizeOfScalingList);
return;
}
}
aScalingList[i] = (nextScale == 0) ? lastScale : nextScale;
lastScale = aScalingList[i];
}
}
} // namespace detail.
template <size_t N>
static void
scaling_list(BitReader& aBr, uint8_t (&aScalingList)[N],
const uint8_t (&aDefaultList)[N], const uint8_t (&aFallbackList)[N])
{
detail::scaling_list(aBr, aScalingList, N, aDefaultList, aFallbackList);
}
template <size_t N>
static void
scaling_list(BitReader& aBr, uint8_t (&aScalingList)[N], const uint8_t (&aDefaultList)[N])
{
detail::scaling_list(aBr, aScalingList, N, aDefaultList, nullptr);
}
SPSData::SPSData()
{
@ -26,8 +113,31 @@ SPSData::SPSData()
colour_primaries = 2;
transfer_characteristics = 2;
sample_ratio = 1.0;
memset(scaling_matrix4x4, 16, sizeof(scaling_matrix4x4));
memset(scaling_matrix8x8, 16, sizeof(scaling_matrix8x8));
}
PPSData::PPSData()
{
PodZero(this);
memset(scaling_matrix4x4, 16, sizeof(scaling_matrix4x4));
memset(scaling_matrix8x8, 16, sizeof(scaling_matrix8x8));
}
const uint8_t H264::ZZ_SCAN[16] = { 0, 1, 4, 8,
5, 2, 3, 6,
9, 12, 13, 10,
7, 11, 14, 15 };
const uint8_t H264::ZZ_SCAN8[64] = { 0, 1, 8, 16, 9, 2, 3, 10,
17, 24, 32, 25, 18, 11, 4, 5,
12, 19, 26, 33, 40, 48, 41, 34,
27, 20, 13, 6, 7, 14, 21, 28,
35, 42, 49, 56, 57, 50, 43, 36,
29, 22, 15, 23, 30, 37, 44, 51,
58, 59, 52, 45, 38, 31, 39, 46,
53, 60, 61, 54, 47, 55, 62, 63 };
/* static */ already_AddRefed<mozilla::MediaByteBuffer>
H264::DecodeNALUnit(const mozilla::MediaByteBuffer* aNAL)
{
@ -91,10 +201,6 @@ H264::DecodeSPS(const mozilla::MediaByteBuffer* aSPS, SPSData& aDest)
}
BitReader br(aSPS);
int32_t lastScale;
int32_t nextScale;
int32_t deltaScale;
aDest.profile_idc = br.ReadBits(8);
aDest.constraint_set0_flag = br.ReadBit();
aDest.constraint_set1_flag = br.ReadBit();
@ -108,32 +214,47 @@ H264::DecodeSPS(const mozilla::MediaByteBuffer* aSPS, SPSData& aDest)
if (aDest.profile_idc == 100 || aDest.profile_idc == 110 ||
aDest.profile_idc == 122 || aDest.profile_idc == 244 ||
aDest.profile_idc == 44 || aDest.profile_idc == 83 ||
aDest.profile_idc == 86 || aDest.profile_idc == 118 ||
aDest.profile_idc == 86 || aDest.profile_idc == 118 ||
aDest.profile_idc == 128 || aDest.profile_idc == 138 ||
aDest.profile_idc == 139 || aDest.profile_idc == 134) {
if ((aDest.chroma_format_idc = br.ReadUE()) == 3) {
aDest.separate_colour_plane_flag = br.ReadBit();
}
br.ReadUE(); // bit_depth_luma_minus8
br.ReadUE(); // bit_depth_chroma_minus8
br.ReadBit(); // qpprime_y_zero_transform_bypass_flag
if (br.ReadBit()) { // seq_scaling_matrix_present_flag
for (int idx = 0; idx < ((aDest.chroma_format_idc != 3) ? 8 : 12); ++idx) {
if (br.ReadBit()) { // Scaling list present
lastScale = nextScale = 8;
int sl_n = (idx < 6) ? 16 : 64;
for (int sl_i = 0; sl_i < sl_n; sl_i++) {
if (nextScale) {
deltaScale = br.ReadSE();
nextScale = (lastScale + deltaScale + 256) % 256;
}
lastScale = (nextScale == 0) ? lastScale : nextScale;
}
}
aDest.bit_depth_luma_minus8 = br.ReadUE();
aDest.bit_depth_chroma_minus8 = br.ReadUE();
br.ReadBit(); // qpprime_y_zero_transform_bypass_flag
aDest.seq_scaling_matrix_present_flag = br.ReadBit();
if (aDest.seq_scaling_matrix_present_flag) {
scaling_list(br, aDest.scaling_matrix4x4[0], Default_4x4_Intra,
Default_4x4_Intra);
scaling_list(br, aDest.scaling_matrix4x4[1], Default_4x4_Intra,
aDest.scaling_matrix4x4[0]);
scaling_list(br, aDest.scaling_matrix4x4[2], Default_4x4_Intra,
aDest.scaling_matrix4x4[1]);
scaling_list(br, aDest.scaling_matrix4x4[3], Default_4x4_Inter,
Default_4x4_Inter);
scaling_list(br, aDest.scaling_matrix4x4[4], Default_4x4_Inter,
aDest.scaling_matrix4x4[3]);
scaling_list(br, aDest.scaling_matrix4x4[5], Default_4x4_Inter,
aDest.scaling_matrix4x4[4]);
scaling_list(br, aDest.scaling_matrix8x8[0], Default_8x8_Intra,
Default_8x8_Intra);
scaling_list(br, aDest.scaling_matrix8x8[1], Default_8x8_Inter,
Default_8x8_Inter);
if (aDest.chroma_format_idc == 3) {
scaling_list(br, aDest.scaling_matrix8x8[2], Default_8x8_Intra,
aDest.scaling_matrix8x8[0]);
scaling_list(br, aDest.scaling_matrix8x8[3], Default_8x8_Inter,
aDest.scaling_matrix8x8[1]);
scaling_list(br, aDest.scaling_matrix8x8[4], Default_8x8_Intra,
aDest.scaling_matrix8x8[2]);
scaling_list(br, aDest.scaling_matrix8x8[5], Default_8x8_Inter,
aDest.scaling_matrix8x8[3]);
}
}
} else if (aDest.profile_idc == 183) {
aDest.chroma_format_idc = 0;
aDest.chroma_format_idc = 0;
} else {
// default value if chroma_format_idc isn't set.
aDest.chroma_format_idc = 1;
@ -160,7 +281,7 @@ H264::DecodeSPS(const mozilla::MediaByteBuffer* aSPS, SPSData& aDest)
aDest.pic_height_in_map_units *= 2;
aDest.mb_adaptive_frame_field_flag = br.ReadBit();
}
br.ReadBit(); // direct_8x8_inference_flag
aDest.direct_8x8_inference_flag = br.ReadBit();
aDest.frame_cropping_flag = br.ReadBit();
if (aDest.frame_cropping_flag) {
aDest.frame_crop_left_offset = br.ReadUE();
@ -240,7 +361,7 @@ H264::vui_parameters(BitReader& aBr, SPSData& aDest)
aDest.sar_width = aDest.sar_height = 0;
// From E.2.1 VUI parameters semantics (ITU-T H.264 02/2014)
switch (aDest.aspect_ratio_idc) {
switch (aDest.aspect_ratio_idc) {
case 0:
// Unspecified
break;
@ -368,7 +489,7 @@ H264::vui_parameters(BitReader& aBr, SPSData& aDest)
break;
case 255:
/* Extended_SAR */
aDest.sar_width = aBr.ReadBits(16);
aDest.sar_width = aBr.ReadBits(16);
aDest.sar_height = aBr.ReadBits(16);
if (aDest.sar_width && aDest.sar_height) {
aDest.sample_ratio = float(aDest.sar_width) / float(aDest.sar_height);
@ -401,7 +522,7 @@ H264::vui_parameters(BitReader& aBr, SPSData& aDest)
}
aDest.timing_info_present_flag = aBr.ReadBit();
if (aDest.timing_info_present_flag ) {
if (aDest.timing_info_present_flag) {
aDest.num_units_in_tick = aBr.ReadBits(32);
aDest.time_scale = aBr.ReadBits(32);
aDest.fixed_frame_rate_flag = aBr.ReadBit();
@ -409,7 +530,8 @@ H264::vui_parameters(BitReader& aBr, SPSData& aDest)
}
/* static */ bool
H264::DecodeSPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData, SPSData& aDest)
H264::DecodeSPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData,
SPSData& aDest)
{
if (!AnnexB::HasSPS(aExtraData)) {
return false;
@ -420,17 +542,19 @@ H264::DecodeSPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData, SPSData
return false;
}
if (!(reader.ReadU8() & 0x1f)) {
uint8_t numSps = reader.ReadU8() & 0x1f;
if (!numSps) {
// No SPS.
return false;
}
NS_ASSERTION(numSps == 1, "More than one SPS in extradata");
uint16_t length = reader.ReadU16();
if ((reader.PeekU8() & 0x1f) != 7) {
// Not a SPS NAL type.
return false;
}
const uint8_t* ptr = reader.Read(length);
if (!ptr) {
return false;
@ -455,8 +579,7 @@ H264::EnsureSPSIsSane(SPSData& aSPS)
static const float default_aspect = 4.0f / 3.0f;
if (aSPS.sample_ratio <= 0.0f || aSPS.sample_ratio > 6.0f) {
if (aSPS.pic_width && aSPS.pic_height) {
aSPS.sample_ratio =
(float) aSPS.pic_width / (float) aSPS.pic_height;
aSPS.sample_ratio = (float)aSPS.pic_width / (float)aSPS.pic_height;
} else {
aSPS.sample_ratio = default_aspect;
}
@ -471,6 +594,189 @@ H264::EnsureSPSIsSane(SPSData& aSPS)
return valid;
}
/* static */ bool
H264::DecodePPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData,
const SPSData& aSPS, PPSData& aDest)
{
if (!AnnexB::HasPPS(aExtraData)) {
return false;
}
ByteReader reader(aExtraData);
if (!reader.Read(5)) {
return false;
}
uint8_t numSps = reader.ReadU8() & 0x1f;
if (!numSps) {
// No SPS.
return false;
}
NS_ASSERTION(numSps == 1, "More than one SPS in extradata");
for (uint8_t i = 0; i < numSps; i++) {
uint16_t length = reader.ReadU16();
if ((reader.PeekU8() & 0x1f) != 7) {
// Not a SPS NAL type.
return false;
}
const uint8_t* ptr = reader.Read(length);
if (!ptr) {
return false;
}
}
uint8_t numPps = reader.ReadU8();
if (!numPps) {
// No PPs.
return false;
}
NS_ASSERTION(numPps == 1, "More than one PPS in extradata");
uint16_t length = reader.ReadU16();
if ((reader.PeekU8() & 0x1f) != 8) {
// Not a PPS NAL type.
return false;
}
const uint8_t* ptr = reader.Read(length);
if (!ptr) {
return false;
}
RefPtr<mozilla::MediaByteBuffer> rawNAL = new mozilla::MediaByteBuffer;
rawNAL->AppendElements(ptr, length);
RefPtr<mozilla::MediaByteBuffer> pps = DecodeNALUnit(rawNAL);
if (!pps) {
return false;
}
return DecodePPS(pps, aSPS, aDest);
}
/* static */ bool
H264::DecodePPS(const mozilla::MediaByteBuffer* aPPS,const SPSData& aSPS,
PPSData& aDest)
{
if (!aPPS) {
return false;
}
memcpy(aDest.scaling_matrix4x4, aSPS.scaling_matrix4x4,
sizeof(aDest.scaling_matrix4x4));
memcpy(aDest.scaling_matrix8x8, aSPS.scaling_matrix8x8,
sizeof(aDest.scaling_matrix8x8));
BitReader br(aPPS);
aDest.pic_parameter_set_id = br.ReadUE();
aDest.seq_parameter_set_id = br.ReadUE();
aDest.entropy_coding_mode_flag = br.ReadBit();
aDest.bottom_field_pic_order_in_frame_present_flag = br.ReadBit();
aDest.num_slice_groups_minus1 = br.ReadUE();
if (aDest.num_slice_groups_minus1 > 0) {
aDest.slice_group_map_type = br.ReadUE();
switch (aDest.slice_group_map_type) {
case 0:
for (uint8_t iGroup = 0; iGroup <= aDest.num_slice_groups_minus1;
iGroup++) {
aDest.run_length_minus1[iGroup] = br.ReadUE();
}
break;
case 2:
for (uint8_t iGroup = 0; iGroup < aDest.num_slice_groups_minus1;
iGroup++) {
aDest.top_left[iGroup] = br.ReadUE();
aDest.bottom_right[iGroup] = br.ReadUE();
}
break;
case 3:
case 4:
case 5:
aDest.slice_group_change_direction_flag = br.ReadBit();
aDest.slice_group_change_rate_minus1 = br.ReadUE();
break;
case 6:
aDest.pic_size_in_map_units_minus1 = br.ReadUE();
for (uint32_t i = 0; i <= aDest.pic_size_in_map_units_minus1; i++) {
/* slice_group_id[ i ] identifies a slice group of the i-th slice group map
unit in raster scan order. The length of the slice_group_id[i] syntax
element is Ceil(Log2(num_slice_groups_minus1+1)) bits. The value of
slice_group_id[i] shall be in the range of 0 to num_slice_groups_minus1,
inclusive. */
br.ReadBits(std::ceil(std::log2(aDest.num_slice_groups_minus1 + 1)));
}
break;
default:
return false;
}
}
aDest.num_ref_idx_l0_default_active_minus1 = br.ReadUE();
aDest.num_ref_idx_l1_default_active_minus1 = br.ReadUE();
if (aDest.num_ref_idx_l0_default_active_minus1 > 32 ||
aDest.num_ref_idx_l1_default_active_minus1 > 32) {
// reference overflow.
return false;
}
aDest.weighted_pred_flag = br.ReadBit();
aDest.weighted_bipred_idc = br.ReadBits(2);
aDest.pic_init_qp_minus26 = br.ReadSE();
aDest.pic_init_qs_minus26 = br.ReadSE();
aDest.chroma_qp_index_offset = br.ReadSE();
aDest.deblocking_filter_control_present_flag = br.ReadBit();
aDest.constrained_intra_pred_flag = br.ReadBit();
aDest.redundant_pic_cnt_present_flag = br.ReadBit();
if (br.BitsLeft()) {
aDest.transform_8x8_mode_flag = br.ReadBit();
if (br.ReadBit()) { // pic_scaling_matrix_present_flag
if (aSPS.seq_scaling_matrix_present_flag) {
scaling_list(br, aDest.scaling_matrix4x4[0], Default_4x4_Intra);
scaling_list(br, aDest.scaling_matrix4x4[1], Default_4x4_Intra,
aDest.scaling_matrix4x4[0]);
scaling_list(br, aDest.scaling_matrix4x4[2], Default_4x4_Intra,
aDest.scaling_matrix4x4[1]);
scaling_list(br, aDest.scaling_matrix4x4[3], Default_4x4_Inter);
} else {
scaling_list(br, aDest.scaling_matrix4x4[0], Default_4x4_Intra,
Default_4x4_Intra);
scaling_list(br, aDest.scaling_matrix4x4[1], Default_4x4_Intra,
aDest.scaling_matrix4x4[0]);
scaling_list(br, aDest.scaling_matrix4x4[2], Default_4x4_Intra,
aDest.scaling_matrix4x4[1]);
scaling_list(br, aDest.scaling_matrix4x4[3], Default_4x4_Inter,
Default_4x4_Inter);
}
scaling_list(br, aDest.scaling_matrix4x4[4], Default_4x4_Inter,
aDest.scaling_matrix4x4[3]);
scaling_list(br, aDest.scaling_matrix4x4[5], Default_4x4_Inter,
aDest.scaling_matrix4x4[4]);
if (aDest.transform_8x8_mode_flag) {
if (aSPS.seq_scaling_matrix_present_flag) {
scaling_list(br, aDest.scaling_matrix8x8[0], Default_8x8_Intra);
scaling_list(br, aDest.scaling_matrix8x8[1], Default_8x8_Inter);
} else {
scaling_list(br, aDest.scaling_matrix8x8[0], Default_8x8_Intra,
Default_8x8_Intra);
scaling_list(br, aDest.scaling_matrix8x8[1], Default_8x8_Inter,
Default_8x8_Inter);
}
if (aSPS.chroma_format_idc == 3) {
scaling_list(br, aDest.scaling_matrix8x8[2], Default_8x8_Intra,
aDest.scaling_matrix8x8[0]);
scaling_list(br, aDest.scaling_matrix8x8[3], Default_8x8_Inter,
aDest.scaling_matrix8x8[1]);
scaling_list(br, aDest.scaling_matrix8x8[4], Default_8x8_Intra,
aDest.scaling_matrix8x8[2]);
scaling_list(br, aDest.scaling_matrix8x8[5], Default_8x8_Inter,
aDest.scaling_matrix8x8[3]);
}
}
}
aDest.second_chroma_qp_index_offset = br.ReadSE();
}
return true;
}
/* static */ uint32_t
H264::ComputeMaxRefFrames(const mozilla::MediaByteBuffer* aExtraData)
{

Просмотреть файл

@ -36,6 +36,8 @@ public:
const mozilla::MediaRawData* aSample);
static bool HasSPS(const mozilla::MediaRawData* aSample);
static bool HasSPS(const mozilla::MediaByteBuffer* aExtraData);
static bool HasPPS(const mozilla::MediaRawData* aSample);
static bool HasPPS(const mozilla::MediaByteBuffer* aExtraData);
// Returns true if format is AVCC and sample has valid extradata.
static bool IsAVCC(const mozilla::MediaRawData* aSample);
// Returns true if format is AnnexB.

Просмотреть файл

@ -34,6 +34,8 @@ public:
// Return the number of bits parsed so far;
size_t BitCount() const;
// Return the number of bits left.
size_t BitsLeft() const;
private:
nsAutoPtr<stagefright::ABitReader> mBitReader;

Просмотреть файл

@ -7,8 +7,7 @@
#include "mp4_demuxer/DecoderData.h"
namespace mp4_demuxer
{
namespace mp4_demuxer {
class BitReader;
@ -82,6 +81,28 @@ struct SPSData
*/
uint8_t chroma_format_idc;
/*
bit_depth_luma_minus8 specifies the bit depth of the samples of the luma
array and the value of the luma quantisation parameter range offset
QpBdOffset Y , as specified by
BitDepth Y = 8 + bit_depth_luma_minus8 (7-3)
QpBdOffset Y = 6 * bit_depth_luma_minus8 (7-4)
When bit_depth_luma_minus8 is not present, it shall be inferred to be equal
to 0. bit_depth_luma_minus8 shall be in the range of 0 to 6, inclusive.
*/
uint8_t bit_depth_luma_minus8;
/*
bit_depth_chroma_minus8 specifies the bit depth of the samples of the chroma
arrays and the value of the chroma quantisation parameter range offset
QpBdOffset C , as specified by
BitDepth C = 8 + bit_depth_chroma_minus8 (7-5)
QpBdOffset C = 6 * bit_depth_chroma_minus8 (7-6)
When bit_depth_chroma_minus8 is not present, it shall be inferred to be
equal to 0. bit_depth_chroma_minus8 shall be in the range of 0 to 6, inclusive.
*/
uint8_t bit_depth_chroma_minus8;
/*
separate_colour_plane_flag equal to 1 specifies that the three colour
components of the 4:4:4 chroma format are coded separately.
@ -95,6 +116,18 @@ struct SPSData
*/
bool separate_colour_plane_flag;
/*
seq_scaling_matrix_present_flag equal to 1 specifies that the flags
seq_scaling_list_present_flag[ i ] for i = 0..7 or
i = 0..11 are present. seq_scaling_matrix_present_flag equal to 0 specifies
that these flags are not present and the sequence-level scaling list
specified by Flat_4x4_16 shall be inferred for i = 0..5 and the
sequence-level scaling list specified by Flat_8x8_16 shall be inferred for
i = 6..11. When seq_scaling_matrix_present_flag is not present, it shall be
inferred to be equal to 0.
*/
bool seq_scaling_matrix_present_flag;
/*
log2_max_frame_num_minus4 specifies the value of the variable
MaxFrameNum that is used in frame_num related derivations as
@ -201,6 +234,14 @@ struct SPSData
*/
bool mb_adaptive_frame_field_flag;
/*
direct_8x8_inference_flag specifies the method used in the derivation
process for luma motion vectors for B_Skip, B_Direct_16x16 and B_Direct_8x8
as specified in clause 8.4.1.2. When frame_mbs_only_flag is equal to 0,
direct_8x8_inference_flag shall be equal to 1.
*/
bool direct_8x8_inference_flag;
/*
frame_cropping_flag equal to 1 specifies that the frame cropping
offset parameters follow next in the sequence parameter
@ -208,7 +249,7 @@ struct SPSData
cropping offset parameters are not present.
*/
bool frame_cropping_flag;
uint32_t frame_crop_left_offset;;
uint32_t frame_crop_left_offset;
uint32_t frame_crop_right_offset;
uint32_t frame_crop_top_offset;
uint32_t frame_crop_bottom_offset;
@ -325,30 +366,224 @@ struct SPSData
uint32_t time_scale;
bool fixed_frame_rate_flag;
bool scaling_matrix_present;
uint8_t scaling_matrix4x4[6][16];
uint8_t scaling_matrix8x8[6][64];
SPSData();
};
struct PPSData
{
/*
H264 decoding parameters according to ITU-T H.264 (T-REC-H.264-201402-I/en)
http://www.itu.int/rec/T-REC-H.264-201402-I/en
7.3.2.2 Picture parameter set RBSP syntax
*/
/* pic_parameter_set_id identifies the picture parameter set that is referred
to in the slice header. The value of pic_parameter_set_id shall be in the
range of 0 to 255, inclusive. */
uint8_t pic_parameter_set_id;
/* seq_parameter_set_id refers to the active sequence parameter set. The value
of seq_parameter_set_id shall be in the range of 0 to 31, inclusive. */
uint8_t seq_parameter_set_id;
/* entropy_coding_mode_flag selects the entropy decoding method to be applied
for the syntax elements for which two descriptors appear in the syntax tables
as follows:
If entropy_coding_mode_flag is equal to 0, the method specified by the
left descriptor in the syntax table is applied (Exp-Golomb coded, see
clause 9.1 or CAVLC, see clause 9.2).
Otherwise (entropy_coding_mode_flag is equal to 1), the method specified
by the right descriptor in the syntax table is applied (CABAC, see clause
9.3) */
bool entropy_coding_mode_flag;
/* bottom_field_pic_order_in_frame_present_flag equal to 1 specifies that the
syntax elements delta_pic_order_cnt_bottom (when pic_order_cnt_type is
equal to 0) or delta_pic_order_cnt[ 1 ] (when pic_order_cnt_type is equal to
1), which are related to picture order counts for the bottom field of a
coded frame, are present in the slice headers for coded frames as specified
in clause 7.3.3. bottom_field_pic_order_in_frame_present_flag equal to 0
specifies that the syntax elements delta_pic_order_cnt_bottom and
delta_pic_order_cnt[ 1 ] are not present in the slice headers.
Also known has pic_order_present_flag. */
bool bottom_field_pic_order_in_frame_present_flag;
/* num_slice_groups_minus1 plus 1 specifies the number of slice groups for a
picture. When num_slice_groups_minus1 is equal to 0, all slices of the
picture belong to the same slice group. The allowed range of
num_slice_groups_minus1 is specified in Annex A. */
uint8_t num_slice_groups_minus1;
/* slice_group_map_type specifies how the mapping of slice group map units to
slice groups is coded. The value of slice_group_map_type shall be in the
range of 0 to 6, inclusive. */
uint8_t slice_group_map_type;
/* run_length_minus1[i] is used to specify the number of consecutive slice
group map units to be assigned to the i-th slice group in raster scan order
of slice group map units. The value of run_length_minus1[ i ] shall be in
the range of 0 to PicSizeInMapUnits 1, inclusive. */
uint32_t run_length_minus1[8];
/* top_left[i] and bottom_right[i] specify the top-left and bottom-right
corners of a rectangle, respectively. top_left[i] and bottom_right[i] are
slice group map unit positions in a raster scan of the picture for the slice
group map units. For each rectangle i, all of the following constraints
shall be obeyed by the values of the syntax elements top_left[i] and
bottom_right[i]:
top_left[ i ] shall be less than or equal to bottom_right[i] and
bottom_right[i] shall be less than PicSizeInMapUnits.
(top_left[i] % PicWidthInMbs) shall be less than or equal to the value
of (bottom_right[i] % PicWidthInMbs). */
uint32_t top_left[8];
uint32_t bottom_right[8];
/* slice_group_change_direction_flag is used with slice_group_map_type to
specify the refined map type when slice_group_map_type is 3, 4, or 5. */
bool slice_group_change_direction_flag;
/* slice_group_change_rate_minus1 is used to specify the variable
SliceGroupChangeRate. SliceGroupChangeRate specifies the multiple in number
of slice group map units by which the size of a slice group can change from
one picture to the next. The value of slice_group_change_rate_minus1 shall
be in the range of 0 to PicSizeInMapUnits 1, inclusive.
The SliceGroupChangeRate variable is specified as follows:
SliceGroupChangeRate = slice_group_change_rate_minus1 + 1 */
uint32_t slice_group_change_rate_minus1;
/* pic_size_in_map_units_minus1 is used to specify the number of slice group
map units in the picture. pic_size_in_map_units_minus1 shall be equal to
PicSizeInMapUnits 1. */
uint32_t pic_size_in_map_units_minus1;
/* num_ref_idx_l0_default_active_minus1 specifies how
num_ref_idx_l0_active_minus1 is inferred for P, SP, and B slices
with num_ref_idx_active_override_flag equal to 0. The value of
num_ref_idx_l0_default_active_minus1 shall be in the
range of 0 to 31, inclusive. */
uint8_t num_ref_idx_l0_default_active_minus1;
/* num_ref_idx_l1_default_active_minus1 specifies how
num_ref_idx_l1_active_minus1 is inferred for B slices with
num_ref_idx_active_override_flag equal to 0. The value of
num_ref_idx_l1_default_active_minus1 shall be in the range
of 0 to 31, inclusive. */
uint8_t num_ref_idx_l1_default_active_minus1;
/* weighted_pred_flag equal to 0 specifies that the default weighted
prediction shall be applied to P and SP slices.
weighted_pred_flag equal to 1 specifies that explicit weighted prediction
shall be applied to P and SP slices.weighted_pred_flag 1 */
bool weighted_pred_flag;
/* weighted_bipred_idc equal to 0 specifies that the default weighted
prediction shall be applied to B slices.
weighted_bipred_idc equal to 1 specifies that explicit weighted prediction
shall be applied to B slices. weighted_bipred_idc equal to 2 specifies that
implicit weighted prediction shall be applied to B slices. The value of
weighted_bipred_idc shall be in the range of 0 to 2, inclusive. */
uint8_t weighted_bipred_idc;
/* pic_init_qp_minus26 specifies the initial value minus 26 of SliceQP Y for
each slice. The initial value is modified at the slice layer when a
non-zero value of slice_qp_delta is decoded, and is modified further when a
non-zero value of mb_qp_delta is decoded at the macroblock layer.
The value of pic_init_qp_minus26 shall be in the range of
(26 + QpBdOffset Y ) to +25, inclusive. */
int8_t pic_init_qp_minus26;
/* pic_init_qs_minus26 specifies the initial value minus 26 of SliceQS Y for
all macroblocks in SP or SI slices. The initial value is modified at the
slice layer when a non-zero value of slice_qs_delta is decoded.
The value of pic_init_qs_minus26 shall be in the range of 26 to +25,
inclusive. */
int8_t pic_init_qs_minus26;
/* chroma_qp_index_offset specifies the offset that shall be added to QP Y and
QS Y for addressing the table of QP C values for the Cb chroma component.
The value of chroma_qp_index_offset shall be in the range of 12 to +12,
inclusive. */
int8_t chroma_qp_index_offset;
/* deblocking_filter_control_present_flag equal to 1 specifies that a set of
syntax elements controlling the characteristics of the deblocking filter is
present in the slice header. deblocking_filter_control_present_flag equal to
0 specifies that the set of syntax elements controlling the characteristics
of the deblocking filter is not present in the slice headers and their
inferred values are in effect. */
bool deblocking_filter_control_present_flag;
/* constrained_intra_pred_flag equal to 0 specifies that intra prediction
allows usage of residual data and decoded samples of neighbouring
macroblocks coded using Inter macroblock prediction modes for the prediction
of macroblocks coded using Intra macroblock prediction modes.
constrained_intra_pred_flag equal to 1 specifies constrained intra
prediction, in which case prediction of macroblocks coded using Intra
macroblock prediction modes only uses residual data and decoded samples from
I or SI macroblock types. */
bool constrained_intra_pred_flag;
/* redundant_pic_cnt_present_flag equal to 0 specifies that the
redundant_pic_cnt syntax element is not present in slice headers, coded
slice data partition B NAL units, and coded slice data partition C NAL units
that refer (either directly or by association with a corresponding coded
slice data partition A NAL unit) to the picture parameter set.
redundant_pic_cnt_present_flag equal to 1 specifies that the
redundant_pic_cnt syntax element is present in all slice headers, coded
slice data partition B NAL units, and coded slice data partition C NAL units
that refer (either directly or by association with a corresponding coded
slice data partition A NAL unit) to the picture parameter set. */
bool redundant_pic_cnt_present_flag;
/* transform_8x8_mode_flag equal to 1 specifies that the 8x8 transform
decoding process may be in use (see clause 8.5).
transform_8x8_mode_flag equal to 0 specifies that the 8x8 transform decoding
process is not in use. When transform_8x8_mode_flag is not present, it shall
be inferred to be 0. */
bool transform_8x8_mode_flag;
/* second_chroma_qp_index_offset specifies the offset that shall be added to
QP Y and QS Y for addressing the table of QP C values for the Cr chroma
component.
The value of second_chroma_qp_index_offset shall be in the range of
12 to +12, inclusive.
When second_chroma_qp_index_offset is not present, it shall be inferred to
be equal to chroma_qp_index_offset. */
int8_t second_chroma_qp_index_offset;
uint8_t scaling_matrix4x4[6][16];
uint8_t scaling_matrix8x8[6][64];
PPSData();
};
class H264
{
public:
static bool DecodeSPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData, SPSData& aDest);
static bool DecodeSPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData,
SPSData& aDest);
/* Extract RAW BYTE SEQUENCE PAYLOAD from NAL content.
Returns nullptr if invalid content.
This is compliant to ITU H.264 7.3.1 Syntax in tabular form NAL unit syntax
*/
static already_AddRefed<mozilla::MediaByteBuffer> DecodeNALUnit(const mozilla::MediaByteBuffer* aNAL);
/* Decode SPS NAL RBSP and fill SPSData structure */
static bool DecodeSPS(const mozilla::MediaByteBuffer* aSPS, SPSData& aDest);
static already_AddRefed<mozilla::MediaByteBuffer> DecodeNALUnit(
const mozilla::MediaByteBuffer* aNAL);
// Ensure that SPS data makes sense, Return true if SPS data was, and false
// otherwise. If false, then content will be adjusted accordingly.
static bool EnsureSPSIsSane(SPSData& aSPS);
static bool DecodePPSFromExtraData(const mozilla::MediaByteBuffer* aExtraData,
const SPSData& aSPS, PPSData& aDest);
// If the given aExtraData is valid, return the aExtraData.max_num_ref_frames
// clamped to be in the range of [4, 16]; otherwise return 4.
static uint32_t ComputeMaxRefFrames(const mozilla::MediaByteBuffer* aExtraData);
static uint32_t ComputeMaxRefFrames(
const mozilla::MediaByteBuffer* aExtraData);
enum class FrameType
{
@ -361,7 +596,20 @@ public:
// (Instantaneous Decoding Refresh) Picture.
static FrameType GetFrameType(const mozilla::MediaRawData* aSample);
// ZigZag index taBles.
// Some hardware requires the tables to be in zigzag order.
// Use ZZ_SCAN table for the scaling_matrix4x4.
// Use ZZ_SCAN8 table for the scaling_matrix8x8.
// e.g. dest_scaling_matrix4x4[i,j] = scaling_matrix4x4[ZZ_SCAN(i,j)]
static const uint8_t ZZ_SCAN[16];
static const uint8_t ZZ_SCAN8[64];
private:
/* Decode SPS NAL RBSP and fill SPSData structure */
static bool DecodeSPS(const mozilla::MediaByteBuffer* aSPS, SPSData& aDest);
/* Decode PPS NAL RBSP and fill PPSData structure */
static bool DecodePPS(const mozilla::MediaByteBuffer* aPPS, const SPSData& aSPS,
PPSData& aDest);
static void vui_parameters(BitReader& aBr, SPSData& aDest);
// Read HRD parameters, all data is ignored.
static void hrd_parameters(BitReader& aBr);

Просмотреть файл

@ -614,6 +614,10 @@ pref("media.cache_readahead_limit", 30);
// chronically starved of video frames. All decoders seen so far have a value
// of at least 4.
pref("media.video-queue.default-size", 3);
// The maximum number of queued frames to send to the compositor.
// On Android, it needs to be throttled because SurfaceTexture contains only one
// (the most recent) image data.
pref("media.video-queue.send-to-compositor-size", 1);
#ifdef NIGHTLY_BUILD
// Allow to check if the decoder supports recycling only on Fennec nightly build.

Просмотреть файл

@ -23,5 +23,5 @@ interface ICodec {
Sample dequeueInput(int size);
oneway void queueInput(in Sample sample);
oneway void releaseOutput(in Sample sample);
oneway void releaseOutput(in Sample sample, in boolean render);
}

Просмотреть файл

@ -18,7 +18,6 @@ import android.view.Surface;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
@ -28,33 +27,17 @@ import java.util.concurrent.ConcurrentLinkedQueue;
public enum Error {
DECODE, FATAL
};
}
private final class Callbacks implements AsyncCodec.Callbacks {
private ICodecCallbacks mRemote;
private boolean mHasInputCapacitySet;
private boolean mHasOutputCapacitySet;
public Callbacks(ICodecCallbacks remote) {
mRemote = remote;
}
@Override
public void onInputBufferAvailable(AsyncCodec codec, int index) {
if (mFlushing) {
// Flush invalidates all buffers.
return;
}
if (!mHasInputCapacitySet) {
int capacity = codec.getInputBuffer(index).capacity();
if (capacity > 0) {
mSamplePool.setInputBufferSize(capacity);
mHasInputCapacitySet = true;
}
}
if (!mInputProcessor.onBuffer(index)) {
reportError(Error.FATAL, new Exception("FAIL: input buffer queue is full"));
}
mInputProcessor.onBuffer(index);
}
@Override
@ -63,47 +46,8 @@ import java.util.concurrent.ConcurrentLinkedQueue;
// Flush invalidates all buffers.
return;
}
ByteBuffer output = codec.getOutputBuffer(index);
if (!mHasOutputCapacitySet) {
int capacity = output.capacity();
if (capacity > 0) {
mSamplePool.setOutputBufferSize(capacity);
mHasOutputCapacitySet = true;
}
}
Sample copy = mSamplePool.obtainOutput(info);
try {
if (info.size > 0) {
copy.buffer.readFromByteBuffer(output, info.offset, info.size);
}
mSentOutputs.add(copy);
mRemote.onOutput(copy);
} catch (IOException e) {
Log.e(LOGTAG, "Fail to read output buffer:" + e.getMessage());
outputDummy(info);
} catch (TransactionTooLargeException ttle) {
Log.e(LOGTAG, "Output is too large:" + ttle.getMessage());
outputDummy(info);
} catch (RemoteException e) {
// Dead recipient.
e.printStackTrace();
}
mCodec.releaseOutputBuffer(index, true);
boolean eos = (info.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0;
if (DEBUG && eos) {
Log.d(LOGTAG, "output EOS");
}
}
private void outputDummy(MediaCodec.BufferInfo info) {
try {
if (DEBUG) Log.d(LOGTAG, "return dummy sample");
mRemote.onOutput(Sample.create(null, info, null));
} catch (RemoteException e) {
// Dead recipient.
e.printStackTrace();
}
mOutputProcessor.onBuffer(index, info);
}
@Override
@ -113,19 +57,15 @@ import java.util.concurrent.ConcurrentLinkedQueue;
@Override
public void onOutputFormatChanged(AsyncCodec codec, MediaFormat format) {
try {
mRemote.onOutputFormatChanged(new FormatParam(format));
} catch (RemoteException re) {
// Dead recipient.
re.printStackTrace();
}
mOutputProcessor.onFormatChanged(format);
}
}
private final class InputProcessor {
private Queue<Sample> mInputSamples = new LinkedList<>();
private boolean mHasInputCapacitySet;
private Queue<Integer> mAvailableInputBuffers = new LinkedList<>();
private Queue<Sample> mDequeuedSamples = new LinkedList<>();
private Queue<Sample> mInputSamples = new LinkedList<>();
private synchronized Sample onAllocate(int size) {
Sample sample = mSamplePool.obtainInput(size);
@ -133,9 +73,10 @@ import java.util.concurrent.ConcurrentLinkedQueue;
return sample;
}
private synchronized boolean onSample(Sample sample) {
private synchronized void onSample(Sample sample) {
if (sample == null) {
return false;
Log.w(LOGTAG, "WARN: null input sample");
return;
}
if (!sample.isEOS()) {
@ -146,19 +87,28 @@ import java.util.concurrent.ConcurrentLinkedQueue;
temp.dispose();
}
if (!mInputSamples.offer(sample)) {
return false;
if (mInputSamples.offer(sample)) {
feedSampleToBuffer();
} else {
reportError(Error.FATAL, new Exception("FAIL: input sample queue is full"));
}
feedSampleToBuffer();
return true;
}
private synchronized boolean onBuffer(int index) {
if (!mAvailableInputBuffers.offer(index)) {
return false;
private synchronized void onBuffer(int index) {
if (!mHasInputCapacitySet) {
int capacity = mCodec.getInputBuffer(index).capacity();
if (capacity > 0) {
mSamplePool.setInputBufferSize(capacity);
mHasInputCapacitySet = true;
}
}
feedSampleToBuffer();
return true;
if (mAvailableInputBuffers.offer(index)) {
feedSampleToBuffer();
} else {
reportError(Error.FATAL, new Exception("FAIL: input buffer queue is full"));
}
}
private void feedSampleToBuffer() {
@ -192,14 +142,108 @@ import java.util.concurrent.ConcurrentLinkedQueue;
}
private synchronized void reset() {
for (Sample s : mInputSamples) {
mSamplePool.recycleInput(s);
}
mInputSamples.clear();
for (Sample s : mDequeuedSamples) {
mSamplePool.recycleInput(s);
}
mDequeuedSamples.clear();
mAvailableInputBuffers.clear();
}
}
}
private class OutputProcessor {
private boolean mHasOutputCapacitySet;
private Queue<Integer> mSentIndices = new LinkedList<>();
private Queue<Sample> mSentOutputs = new LinkedList<>();
private synchronized void onBuffer(int index, MediaCodec.BufferInfo info) {
ByteBuffer output = mCodec.getOutputBuffer(index);
if (!mHasOutputCapacitySet) {
int capacity = output.capacity();
if (capacity > 0) {
mSamplePool.setOutputBufferSize(capacity);
mHasOutputCapacitySet = true;
}
}
Sample copy = mSamplePool.obtainOutput(info);
try {
if (info.size > 0) {
copy.buffer.readFromByteBuffer(output, info.offset, info.size);
}
mSentIndices.add(index);
mSentOutputs.add(copy);
mCallbacks.onOutput(copy);
} catch (IOException e) {
Log.e(LOGTAG, "Fail to read output buffer:" + e.getMessage());
outputDummy(info);
} catch (TransactionTooLargeException ttle) {
Log.e(LOGTAG, "Output is too large:" + ttle.getMessage());
outputDummy(info);
} catch (RemoteException e) {
// Dead recipient.
e.printStackTrace();
}
boolean eos = (info.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0;
if (DEBUG && eos) {
Log.d(LOGTAG, "output EOS");
}
}
private void outputDummy(MediaCodec.BufferInfo info) {
try {
if (DEBUG) Log.d(LOGTAG, "return dummy sample");
mCallbacks.onOutput(Sample.create(null, info, null));
} catch (RemoteException e) {
// Dead recipient.
e.printStackTrace();
}
}
private synchronized void onRelease(Sample sample, boolean render) {
Integer i = mSentIndices.poll();
Sample output = mSentOutputs.poll();
if (i == null || output == null) {
Log.d(LOGTAG, "output buffer#" + i + "(" + output + ")" + ": " + sample + " already released");
return;
}
mCodec.releaseOutputBuffer(i, render);
mSamplePool.recycleOutput(output);
sample.dispose();
}
private void onFormatChanged(MediaFormat format) {
try {
mCallbacks.onOutputFormatChanged(new FormatParam(format));
} catch (RemoteException re) {
// Dead recipient.
re.printStackTrace();
}
}
private synchronized void reset() {
for (int i : mSentIndices) {
mCodec.releaseOutputBuffer(i, false);
}
mSentIndices.clear();
for (Sample s : mSentOutputs) {
mSamplePool.recycleOutput(s);
}
mSentOutputs.clear();
}
}
private volatile ICodecCallbacks mCallbacks;
private AsyncCodec mCodec;
private InputProcessor mInputProcessor;
private OutputProcessor mOutputProcessor;
private volatile boolean mFlushing = false;
private SamplePool mSamplePool;
private Queue<Sample> mSentOutputs = new ConcurrentLinkedQueue<>();
@ -255,7 +299,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
Log.d(LOGTAG, "configure mediacodec with crypto(" + hasCrypto + ") / Id :" + drmStubId);
}
codec.setCallbacks(new Callbacks(mCallbacks), null);
codec.setCallbacks(new Callbacks(), null);
// Video decoder should config with adaptive playback capability.
if (surface != null) {
@ -272,6 +316,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
codec.configure(fmt, surface, crypto, flags);
mCodec = codec;
mInputProcessor = new InputProcessor();
mOutputProcessor = new OutputProcessor();
mSamplePool = new SamplePool(codecName);
if (DEBUG) Log.d(LOGTAG, codec.toString() + " created");
return true;
@ -289,6 +334,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
private void releaseCodec() {
mInputProcessor.reset();
mOutputProcessor.reset();
try {
mCodec.release();
} catch (Exception e) {
@ -358,6 +404,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
mFlushing = true;
if (DEBUG) Log.d(LOGTAG, "flush " + this);
mInputProcessor.reset();
mOutputProcessor.reset();
try {
mCodec.flush();
} catch (Exception e) {
@ -375,20 +422,12 @@ import java.util.concurrent.ConcurrentLinkedQueue;
@Override
public synchronized void queueInput(Sample sample) throws RemoteException {
if (!mInputProcessor.onSample(sample)) {
reportError(Error.FATAL, new Exception("FAIL: input sample queue is full"));
}
mInputProcessor.onSample(sample);
}
@Override
public synchronized void releaseOutput(Sample sample) {
try {
mSamplePool.recycleOutput(mSentOutputs.remove());
} catch (Exception e) {
Log.e(LOGTAG, "failed to release output:" + sample);
e.printStackTrace();
}
sample.dispose();
public synchronized void releaseOutput(Sample sample, boolean render) {
mOutputProcessor.onRelease(sample, render);
}
@Override

Просмотреть файл

@ -18,6 +18,8 @@ import org.mozilla.gecko.mozglue.JNIObject;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
// Proxy class of ICodec binder.
public final class CodecProxy {
@ -29,6 +31,7 @@ public final class CodecProxy {
private Surface mOutputSurface;
private CallbacksForwarder mCallbacks;
private String mRemoteDrmStubId;
private Queue<Sample> mSurfaceOutputs = new ConcurrentLinkedQueue<>();
public interface Callbacks {
void onInputExhausted();
@ -67,9 +70,18 @@ public final class CodecProxy {
@Override
public void onOutput(Sample sample) throws RemoteException {
mCallbacks.onOutput(sample);
mRemote.releaseOutput(sample);
sample.dispose();
if (mOutputSurface != null) {
// Don't render to surface just yet. Callback will make that happen when it's time.
if (!sample.isEOS() || sample.info.size > 0) {
mSurfaceOutputs.offer(sample);
}
mCallbacks.onOutput(sample);
} else {
// Non-surface output needs no rendering.
mCallbacks.onOutput(sample);
mRemote.releaseOutput(sample, false);
sample.dispose();
}
}
@Override
@ -77,7 +89,7 @@ public final class CodecProxy {
reportError(fatal);
}
public void reportError(boolean fatal) {
private void reportError(boolean fatal) {
mCallbacks.onError(fatal);
}
}
@ -196,6 +208,21 @@ public final class CodecProxy {
return true;
}
if (DEBUG) Log.d(LOGTAG, "release " + this);
if (!mSurfaceOutputs.isEmpty()) {
// Flushing output buffers to surface may cause some frames to be skipped and
// should not happen unless caller release codec before processing all buffers.
Log.w(LOGTAG, "release codec when " + mSurfaceOutputs.size() + " output buffers unhandled");
try {
for (Sample s : mSurfaceOutputs) {
mRemote.releaseOutput(s, true);
}
} catch (RemoteException e) {
e.printStackTrace();
}
mSurfaceOutputs.clear();
}
try {
RemoteManager.getInstance().releaseCodec(this);
} catch (DeadObjectException e) {
@ -207,7 +234,32 @@ public final class CodecProxy {
return true;
}
public synchronized void reportError(boolean fatal) {
@WrapForJNI
public synchronized boolean releaseOutput(Sample sample, boolean render) {
if (!mSurfaceOutputs.remove(sample)) {
if (mRemote != null) Log.w(LOGTAG, "already released: " + sample);
return true;
}
if (mRemote == null) {
Log.w(LOGTAG, "codec already ended");
sample.dispose();
return true;
}
if (DEBUG && !render) Log.d(LOGTAG, "drop output:" + sample.info.presentationTimeUs);
try {
mRemote.releaseOutput(sample, render);
} catch (RemoteException e) {
e.printStackTrace();
}
sample.dispose();
return true;
}
/* package */ synchronized void reportError(boolean fatal) {
mCallbacks.reportError(fatal);
}
}

Просмотреть файл

@ -20,7 +20,7 @@ from ..frontend.data import (
FinalTargetPreprocessedFiles,
GeneratedFile,
HostDefines,
ObjdirPreprocessedFiles,
ObjdirFiles,
)
from ..util import (
FileAvoidWrite,
@ -187,8 +187,6 @@ class TupOnly(CommonBackend, PartialBackend):
self._process_final_target_files(obj)
elif isinstance(obj, FinalTargetPreprocessedFiles):
self._process_final_target_pp_files(obj, backend_file)
elif isinstance(obj, ObjdirPreprocessedFiles):
self._process_final_target_pp_files(obj, backend_file)
return True
@ -245,6 +243,7 @@ class TupOnly(CommonBackend, PartialBackend):
])
full_inputs = [f.full_path for f in obj.inputs]
cmd.extend(full_inputs)
cmd.extend(shell_quote(f) for f in obj.flags)
outputs = []
outputs.extend(obj.outputs)
@ -267,24 +266,22 @@ class TupOnly(CommonBackend, PartialBackend):
def _process_final_target_files(self, obj):
target = obj.install_target
path = mozpath.basedir(target, (
'dist/bin',
'dist/xpi-stage',
'_tests',
'dist/include',
'dist/branding',
'dist/sdk',
))
if not path:
raise Exception("Cannot install to " + target)
reltarget = mozpath.relpath(target, path)
if not isinstance(obj, ObjdirFiles):
path = mozpath.basedir(target, (
'dist/bin',
'dist/xpi-stage',
'_tests',
'dist/include',
'dist/branding',
'dist/sdk',
))
if not path:
raise Exception("Cannot install to " + target)
for path, files in obj.files.walk():
backend_file = self._get_backend_file(mozpath.join(target, path))
for f in files:
assert not isinstance(f, RenamedSourcePath)
dest = mozpath.join(reltarget, path, f.target_basename)
if not isinstance(f, ObjDirPath):
if '*' in f:
if f.startswith('/') or isinstance(f, AbsolutePath):

Просмотреть файл

@ -1149,4 +1149,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1489505883092000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1489674148138000);

Просмотреть файл

@ -25,6 +25,7 @@
360gradus.com: did not receive HSTS header
365.or.jp: did not receive HSTS header
3chit.cf: could not connect to host
404.sh: max-age too low: 0
420dongstorm.com: could not connect to host
42ms.org: could not connect to host
4455software.com: did not receive HSTS header
@ -53,7 +54,6 @@ aaeblog.org: did not receive HSTS header
aapp.space: could not connect to host
abearofsoap.com: did not receive HSTS header
abecodes.net: did not receive HSTS header
abeestrada.com: did not receive HSTS header
abilitylist.org: did not receive HSTS header
abioniere.de: could not connect to host
about.ge: could not connect to host
@ -179,6 +179,7 @@ ancientkarma.com: could not connect to host
andere-gedanken.net: max-age too low: 10
andreasbreitenlohner.de: did not receive HSTS header
andreasolsson.se: could not connect to host
andreastoneman.com: could not connect to host
andreigec.net: did not receive HSTS header
andrewmichaud.beer: could not connect to host
andreypopp.com: could not connect to host
@ -215,7 +216,6 @@ aojiao.org: did not receive HSTS header
aosc.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 121" data: no]
apachelounge.com: did not receive HSTS header
apeasternpower.com: max-age too low: 0
apervita.net: could not connect to host
api.lookout.com: could not connect to host
api.mega.co.nz: could not connect to host
apibot.de: could not connect to host
@ -251,6 +251,7 @@ ars.toscana.it: max-age too low: 0
artegusto.ru: could not connect to host
artistnetwork.nl: did not receive HSTS header
arturkohut.com: could not connect to host
arvamus.eu: could not connect to host
as.se: could not connect to host
as9178.net: could not connect to host
asandu.eu: could not connect to host
@ -275,7 +276,6 @@ atbeckett.com: did not receive HSTS header
athaliasoft.com: did not receive HSTS header
athenelive.com: could not connect to host
athul.xyz: did not receive HSTS header
atlantischild.hu: could not connect to host
atlex.nl: did not receive HSTS header
atomik.pro: could not connect to host
atop.io: could not connect to host
@ -298,8 +298,8 @@ autokovrik-diskont.ru: did not receive HSTS header
autotsum.com: could not connect to host
autumnwindsagility.com: could not connect to host
auverbox.ovh: did not receive HSTS header
auxiliumincrementum.co.uk: did not receive HSTS header
av.de: did not receive HSTS header
avantmfg.com: could not connect to host
avec-ou-sans-ordonnance.fr: could not connect to host
avinet.com: max-age too low: 0
awg-mode.de: did not receive HSTS header
@ -307,6 +307,7 @@ axado.com.br: did not receive HSTS header
axeny.com: did not receive HSTS header
az.search.yahoo.com: did not receive HSTS header
azprep.us: could not connect to host
azuxul.fr: could not connect to host
b3orion.com: max-age too low: 0
babak.de: did not receive HSTS header
baby-click.de: did not receive HSTS header
@ -372,6 +373,7 @@ betnet.fr: could not connect to host
betplanning.it: did not receive HSTS header
bets.de: did not receive HSTS header
bettercrypto.org: could not connect to host
bettertest.it: could not connect to host
bettween.com: could not connect to host
betz.ro: did not receive HSTS header
beulahtabernacle.com: could not connect to host
@ -449,7 +451,6 @@ bodyweightsolution.com: did not receive HSTS header
boensou.com: did not receive HSTS header
bogosity.se: could not connect to host
bohan.life: did not receive HSTS header
boltdata.io: did not receive HSTS header
bonapp.restaurant: could not connect to host
bonfi.net: did not receive HSTS header
bonigo.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 121" data: no]
@ -478,7 +479,6 @@ brandnewdays.nl: could not connect to host
brandon.so: could not connect to host
brandred.net: did not receive HSTS header
brandspray.com: did not receive HSTS header
brewtrackr.com: could not connect to host
brianmwaters.net: could not connect to host
brickoo.com: could not connect to host
brideandgroomdirect.ie: did not receive HSTS header
@ -523,7 +523,6 @@ bypro.xyz: could not connect to host
bysymphony.com: max-age too low: 0
byte.wtf: could not connect to host
bytepark.de: did not receive HSTS header
bytesystems.com: 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
@ -667,11 +666,11 @@ clouddesktop.co.nz: could not connect to host
cloudey.net: did not receive HSTS header
cloudflare.com: did not receive HSTS header
cloudimag.es: could not connect to host
cloudlink.club: could not connect to host
cloudns.com.au: could not connect to host
cloudstoragemaus.com: could not connect to host
cloudwalk.io: did not receive HSTS header
cloverleaf.net: max-age too low: 0
clubmate.rocks: could not connect to host
clywedogmaths.co.uk: could not connect to host
cmacacias.ch: did not receive HSTS header
cmc-versand.de: did not receive HSTS header
@ -691,7 +690,6 @@ codabix.net: could not connect to host
code.google.com: did not receive HSTS header (error ignored - included regardless)
codeco.pw: could not connect to host
codeforce.io: did not receive HSTS header
codepult.com: could not connect to host
codepx.com: did not receive HSTS header
codiva.io: max-age too low: 2592000
coffeeetc.co.uk: did not receive HSTS header
@ -728,7 +726,6 @@ continuumgaming.com: could not connect to host
controlcenter.gigahost.dk: did not receive HSTS header
coolchevy.org.ua: could not connect to host
coralproject.net: did not receive HSTS header
coralrosado.com.br: could not connect to host
cordial-restaurant.com: did not receive HSTS header
core.mx: could not connect to host
core4system.de: did not receive HSTS header
@ -758,7 +755,6 @@ crazyhotseeds.com: did not receive HSTS header
create-test-publish.co.uk: could not connect to host
creativephysics.ml: could not connect to host
creativeplayuk.com: did not receive HSTS header
creep.im: could not connect to host
crendontech.com: could not connect to host
crestoncottage.com: could not connect to host
criena.net: could not connect to host
@ -806,7 +802,6 @@ cydia-search.io: could not connect to host
cyphertite.com: could not connect to host
czechamlp.com: could not connect to host
d3xt3r01.tk: could not connect to host
d42.no: could not connect to host
dad256.tk: could not connect to host
dah5.com: did not receive HSTS header
dailystormerpodcasts.com: did not receive HSTS header
@ -827,6 +822,7 @@ darkengine.io: could not connect to host
darkhole.cn: could not connect to host
darknebula.space: could not connect to host
darkpony.ru: could not connect to host
darksideof.it: could not connect to host
dashburst.com: did not receive HSTS header
dashnimorad.com: did not receive HSTS header
data-abundance.com: could not connect to host
@ -847,6 +843,7 @@ datewon.net: did not receive HSTS header
davidglidden.eu: could not connect to host
davidhunter.scot: did not receive HSTS header
davidmessenger.co.uk: could not connect to host
davidnoren.com: did not receive HSTS header
davidreinhardt.de: could not connect to host
davidscherzer.at: could not connect to host
daylightcompany.com: did not receive HSTS header
@ -854,7 +851,7 @@ db.gy: did not receive HSTS header
dbx.ovh: did not receive HSTS header
dccode.gov: could not connect to host
dcurt.is: did not receive HSTS header
ddatsh.com: did not receive HSTS header
ddatsh.com: could not connect to host
dden.ca: could not connect to host
debank.tv: did not receive HSTS header
debatch.se: could not connect to host
@ -873,7 +870,6 @@ delayrefunds.co.uk: could not connect to host
deliverance.co.uk: could not connect to host
deltaconcepts.de: did not receive HSTS header
deltanet-production.de: did not receive HSTS header
demdis.org: could not connect to host
demilitarized.ninja: could not connect to host
democracychronicles.com: did not receive HSTS header
denh.am: did not receive HSTS header
@ -919,6 +915,8 @@ dizorg.net: could not connect to host
dj4et.de: did not receive HSTS header
dl.google.com: did not receive HSTS header (error ignored - included regardless)
dlouwrink.nl: could not connect to host
dmarc.dk: did not receive HSTS header
dmi.es: could not connect to host
dmxledlights.com: could not connect to host
dn42.eu: could not connect to host
dns.google.com: did not receive HSTS header (error ignored - included regardless)
@ -946,7 +944,6 @@ doridian.de: could not connect to host
doridian.net: did not receive HSTS header
doridian.org: could not connect to host
dossplumbing.co.za: did not receive HSTS header
dot42.no: could not connect to host
dotadata.me: could not connect to host
dougferris.id.au: could not connect to host
download.jitsi.org: did not receive HSTS header
@ -958,6 +955,7 @@ dragonisles.net: could not connect to host
dragons-of-highlands.cz: could not connect to host
dragontrainingmobilezoo.com.au: max-age too low: 0
draw.uy: could not connect to host
drawingcode.net: could not connect to host
drbethanybarnes.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 121" data: no]
drdevil.ru: could not connect to host
drdim.ru: could not connect to host
@ -978,6 +976,7 @@ duesee.org: could not connect to host
dullsir.com: did not receive HSTS header
duria.de: max-age too low: 3600
dwhd.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 121" data: no]
dworzak.ch: could not connect to host
dxa.io: could not connect to host
dycontrol.de: could not connect to host
dylanscott.com.au: did not receive HSTS header
@ -1013,7 +1012,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
eeqj.com: could not connect to host
efficienthealth.com: did not receive HSTS header
effortlesshr.com: did not receive HSTS header
@ -1114,7 +1112,6 @@ evasion-energie.com: could not connect to host
evdenevenakliyatankara.pw: did not receive HSTS header
everybooks.com: max-age too low: 60
everylab.org: could not connect to host
evilsay.com: did not receive HSTS header
evin.ml: could not connect to host
evomon.com: could not connect to host
evossd.tk: could not connect to host
@ -1171,6 +1168,7 @@ fedux.com.ar: could not connect to host
feezmodo.com: max-age too low: 0
felisslovakia.sk: [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 121" data: no]
feliwyn.fr: did not receive HSTS header
felixsanz.com: could not connect to host
feminists.co: could not connect to host
fenteo.com: could not connect to host
feragon.net: max-age too low: 84600
@ -1185,6 +1183,7 @@ fiftyshadesofluca.ml: could not connect to host
fig.co: did not receive HSTS header
fightr.co: could not connect to host
fikt.space: could not connect to host
filestar.io: did not receive HSTS header
filmipop.com: max-age too low: 0
finalgear.com: did not receive HSTS header
financieringsportaal.nl: did not receive HSTS header
@ -1205,7 +1204,6 @@ fitnesswerk.de: could not connect to host
fivestarsitters.com: did not receive HSTS header
fixatom.com: did not receive HSTS header
fixingdns.com: did not receive HSTS header
fizz.buzz: could not connect to host
fj.search.yahoo.com: did not receive HSTS header
fjruiz.es: could not connect to host
flags.ninja: could not connect to host
@ -1229,7 +1227,6 @@ fndout.com: did not receive HSTS header
fnvsecurity.com: could not connect to host
fonetiq.io: could not connect to host
food4health.guide: could not connect to host
foodblogger.club: did not receive HSTS header
footballmapped.com: could not connect to host
foraje-profesionale.ro: did not receive HSTS header
forbook.net: could not connect to host
@ -1272,7 +1269,6 @@ frontmin.com: did not receive HSTS header
frost-ci.xyz: could not connect to host
fruitusers.com: could not connect to host
frusky.net: could not connect to host
fs-gamenet.de: could not connect to host
ftctele.com: did not receive HSTS header
fuckgfw233.org: could not connect to host
fugle.de: could not connect to host
@ -1330,13 +1326,13 @@ genuu.com: could not connect to host
genuxation.com: could not connect to host
genyaa.com: could not connect to host
gerencianet.com.br: did not receive HSTS header
gesiwista.net: could not connect to host
get.zenpayroll.com: did not receive HSTS header
getable.com: did not receive HSTS header
getblys.com.au: did not receive HSTS header
getbooks.co.il: did not receive HSTS header
getcarefirst.com: did not receive HSTS header
getcolor.com: did not receive HSTS header
getfirepress.com: could not connect to host
getinternet.de: max-age too low: 0
getlantern.org: did not receive HSTS header
getlifti.com: did not receive HSTS header
@ -1364,7 +1360,6 @@ gistfy.com: could not connect to host
github.party: could not connect to host
givemyanswer.com: did not receive HSTS header
gizzo.sk: could not connect to host
gjspunk.de: did not receive HSTS header
gl.search.yahoo.com: did not receive HSTS header
glass.google.com: did not receive HSTS header (error ignored - included regardless)
glentakahashi.com: max-age too low: 0
@ -1390,6 +1385,7 @@ goerner.me: did not receive HSTS header
goge.site: could not connect to host
gogenenglish.com: could not connect to host
gogetssl.com: did not receive HSTS header
goggs.eu: could not connect to host
gogold-g.com: could not connect to host
gold24.in: did not receive HSTS header
goldendata.io: could not connect to host
@ -1411,7 +1407,6 @@ gparent.org: did not receive HSTS header
gpsfix.cz: could not connect to host
gpstuner.com: did not receive HSTS header
gracesofgrief.com: max-age too low: 86400
graffen.dk: did not receive HSTS header
grandmascookieblog.com: did not receive HSTS header
graph.no: did not receive HSTS header
gravity-net.de: could not connect to host
@ -1458,7 +1453,7 @@ hackerforever.com: did not receive HSTS header
hackerone-ext-adroll.com: could not connect to host
hackit.im: could not connect to host
hadzic.co: could not connect to host
haeckdesign.com: could not connect to host
haeckdesign.com: did not receive HSTS header
hahayidu.org: could not connect to host
haitschi.com: could not connect to host
haitschi.de: could not connect to host
@ -1472,7 +1467,7 @@ hancc.net: did not receive HSTS header
hanfu.la: could not connect to host
hannover-banditen.de: did not receive HSTS header
hao2taiwan.com: max-age too low: 0
haozi.me: could not connect to host
haozi.me: did not receive HSTS header
happycoder.net: could not connect to host
happyfabric.me: did not receive HSTS header
happygadget.me: could not connect to host
@ -1500,6 +1495,7 @@ haydenhill.us: could not connect to host
hazcod.com: could not connect to host
hcie.pl: could not connect to host
hdm.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 121" data: no]
hdsmigrationtool.com: could not connect to host
hduin.xyz: did not receive HSTS header
hdwallpapers.net: did not receive HSTS header
healtious.com: did not receive HSTS header
@ -1516,7 +1512,6 @@ henriknoerr.com: could not connect to host
hermes-net.de: did not receive HSTS header
herpaderp.net: did not receive HSTS header
herzbotschaft.de: did not receive HSTS header
heutger.net: did not receive HSTS header
heyguevara.com: could not connect to host
hibilog.com: could not connect to host
hicn.gq: could not connect to host
@ -1527,6 +1522,7 @@ highsurf-miyazaki.com: did not receive HSTS header
hiitcentre.com: did not receive HSTS header
hikariempire.com: could not connect to host
hillcity.org.nz: did not receive HSTS header
hilnu.tk: could not connect to host
hiphopconvention.nl: could not connect to host
hitoy.org: did not receive HSTS header
hittipps.com: did not receive HSTS header
@ -1549,7 +1545,6 @@ horosho.in: could not connect to host
horseboners.xxx: did not receive HSTS header
hortifarm.ro: did not receive HSTS header
hosmussynergie.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 121" data: no]
hostam.link: could not connect to host
hosted-service.com: did not receive HSTS header
hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
hostgarou.com: did not receive HSTS header
@ -1613,7 +1608,6 @@ ihrlotto.de: could not connect to host
ihrnationalrat.ch: could not connect to host
ihsbsd.me: could not connect to host
ihuanmeng.com: did not receive HSTS header
ikk.me: did not receive HSTS header
ikujii.com: max-age too low: 0
ikwilguidobellen.nl: did not receive HSTS header
ilbuongiorno.it: did not receive HSTS header
@ -1622,10 +1616,10 @@ ilikerainbows.co.uk: could not connect to host
ilmconpm.de: did not receive HSTS header
ilona.graphics: max-age too low: 3600
iluvscotland.co.uk: did not receive HSTS header
imakepoems.net: could not connect to host
ime.moe: could not connect to host
imguoguo.com: did not receive HSTS header
imim.pw: did not receive HSTS header
imjiangtao.com: could not connect to host
immoprotect.ca: did not receive HSTS header
immortals-co.com: did not receive HSTS header
immoverkauf24.at: did not receive HSTS header
@ -1717,7 +1711,6 @@ itshost.ru: could not connect to host
ivi-fertility.com: max-age too low: 0
ivi.es: max-age too low: 0
ivk.website: could not connect to host
iwannarefill.com: could not connect to host
iww.mx: could not connect to host
izdiwho.com: could not connect to host
izoox.com: did not receive HSTS header
@ -1796,12 +1789,12 @@ jmdekker.it: could not connect to host
joakimalgroy.com: could not connect to host
jobmedic.com: did not receive HSTS header
joedavison.me: could not connect to host
joepitt.co.uk: could not connect to host
jogi-server.de: did not receive HSTS header
johners.me: could not connect to host
johners.tech: did not receive HSTS header
johnhgaunt.com: did not receive HSTS header
johnrom.com: did not receive HSTS header
jokewignand.nl: did not receive HSTS header
jonas-keidel.de: did not receive HSTS header
jonasgroth.se: max-age too low: 2592000
jonathan.ir: could not connect to host
@ -1858,7 +1851,6 @@ kausch.at: could not connect to host
kawaii.io: could not connect to host
kawaiiku.com: could not connect to host
kawaiiku.de: could not connect to host
kaylyn.ink: could not connect to host
kayon.cf: could not connect to host
kdata.it: did not receive HSTS header
kdm-online.de: did not receive HSTS header
@ -1866,11 +1858,13 @@ keeley.gq: could not connect to host
keeley.ml: could not connect to host
keeleysam.me: could not connect to host
keepclean.me: could not connect to host
ken.fm: did not receive HSTS header
kerangalam.com: did not receive HSTS header
kerksanders.nl: did not receive HSTS header
kermadec.net: could not connect to host
kernl.us: did not receive HSTS header
kevinapease.com: could not connect to host
kevinmeijer.nl: could not connect to host
keymaster.lookout.com: did not receive HSTS header
kg-rating.com: did not receive HSTS header
kgxtech.com: max-age too low: 2592000
@ -1925,7 +1919,6 @@ korsanparti.org: could not connect to host
kotonehoko.net: could not connect to host
kotovstyle.ru: could not connect to host
kr.search.yahoo.com: did not receive HSTS header
kraynik.com: could not connect to host
kredite.sale: could not connect to host
kriegt.es: could not connect to host
krmela.com: could not connect to host
@ -1982,6 +1975,7 @@ lbrt.xyz: could not connect to host
ldarby.me.uk: could not connect to host
leadership9.com: could not connect to host
leardev.de: did not receive HSTS header
learnedovo.com: could not connect to host
learnfrenchfluently.com: did not receive HSTS header
learningorder.com: could not connect to host
ledgerscope.net: could not connect to host
@ -2026,7 +2020,6 @@ libertyrp.org: could not connect to host
library.linode.com: did not receive HSTS header
librechan.net: could not connect to host
libscode.com: did not receive HSTS header
liceserv.com: could not connect to host
lifeguard.aecom.com: did not receive HSTS header
lifeinitsownway.com: did not receive HSTS header
lifeskillsdirect.com: did not receive HSTS header
@ -2065,7 +2058,6 @@ loginseite.com: could not connect to host
loli.bz: could not connect to host
lonal.com: could not connect to host
londonlanguageexchange.com: could not connect to host
longboarding-ulm.de: could not connect to host
look-at-my.site: could not connect to host
lookastic.co.uk: [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 121" data: no]
lookastic.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 121" data: no]
@ -2104,6 +2096,7 @@ lukeng.net: could not connect to host
lukonet.com: did not receive HSTS header
lumi.do: did not receive HSTS header
lunix.io: did not receive HSTS header
luody.info: did not receive HSTS header
luoe.ml: could not connect to host
luoxiao.im: could not connect to host
lusis.fr: did not receive HSTS header
@ -2125,6 +2118,7 @@ macchaberrycream.com: could not connect to host
macchedil.com: did not receive HSTS header
macgeneral.de: did not receive HSTS header
machon.biz: could not connect to host
macker.io: could not connect to host
maclemon.at: could not connect to host
macosxfilerecovery.com: did not receive HSTS header
madars.org: did not receive HSTS header
@ -2190,10 +2184,8 @@ maya.mg: did not receive HSTS header
mbinformatik.de: could not connect to host
mca2017.org: did not receive HSTS header
mcc.re: could not connect to host
mccarty.io: could not connect to host
mcdonalds.ru: did not receive HSTS header
mclab.su: could not connect to host
mcpart.land: could not connect to host
mdewendt.de: could not connect to host
mdfnet.se: did not receive HSTS header
mdscomp.net: did not receive HSTS header
@ -2237,6 +2229,7 @@ mexbt.com: could not connect to host
mfcatalin.com: could not connect to host
mfiles.pl: [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 121" data: no]
mhealthdemocamp.com: could not connect to host
mhertel.com: did not receive HSTS header
mhict.nl: max-age too low: 0
mia.to: could not connect to host
michaelfitzpatrickruth.com: could not connect to host
@ -2262,7 +2255,6 @@ mikonmaa.fi: could not connect to host
miku.be: could not connect to host
miku.hatsune.my: max-age too low: 5184000
milesgeek.com: did not receive HSTS header
millenniumweb.com: did not receive HSTS header
mindoktor.se: did not receive HSTS header
minecraftserverz.com: could not connect to host
minecraftvoter.com: could not connect to host
@ -2283,6 +2275,7 @@ miyoshi-kikaku.co.jp: did not receive HSTS header
miyoshi-kikaku.com: did not receive HSTS header
mizd.at: could not connect to host
mizi.name: did not receive HSTS header
mjcaffarattilaw.com: could not connect to host
mlpepilepsy.org: could not connect to host
mmgazhomeloans.com: did not receive HSTS header
mnemotiv.com: could not connect to host
@ -2296,7 +2289,6 @@ mobilpass.no: could not connect to host
mocloud.eu: could not connect to host
moddedark.com: could not connect to host
modemagazines.co.uk: could not connect to host
modydev.club: could not connect to host
moebel-nagel.de: did not receive HSTS header
moelord.org: could not connect to host
moen.io: did not receive HSTS header
@ -2308,7 +2300,6 @@ mondar.io: could not connect to host
mondopoint.com: could not connect to host
moneycrownmedia.com: did not receive HSTS header
monitman.com: could not connect to host
monpc-pro.fr: did not receive HSTS header
moon.lc: could not connect to host
moparisthebest.biz: could not connect to host
moparisthebest.info: could not connect to host
@ -2336,6 +2327,7 @@ mqas.net: could not connect to host
mrnonz.com: max-age too low: 0
mrpopat.in: did not receive HSTS header
mrs-shop.com: did not receive HSTS header
ms-alternativ.de: could not connect to host
msc-seereisen.net: could not connect to host
mszaki.com: did not receive HSTS header
mt.me.uk: could not connect to host
@ -2417,7 +2409,6 @@ neel.ch: could not connect to host
neftaly.com: did not receive HSTS header
negai.moe: could not connect to host
negativecurvature.net: 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
nella-project.org: could not connect to host
@ -2430,7 +2421,6 @@ neonisi.com: could not connect to host
nepustil.net: did not receive HSTS header
neris.io: could not connect to host
nerven.se: could not connect to host
nestedquotes.ca: could not connect to host
netbox.cc: could not connect to host
netherwind.eu: did not receive HSTS header
netlilo.com: did not receive HSTS header
@ -2442,7 +2432,7 @@ netztest.at: did not receive HSTS header
neueonlinecasino2016.com: could not connect to host
neuralgic.net: could not connect to host
neutralox.com: max-age too low: 3600
never-afk.de: could not connect to host
never-afk.de: did not receive HSTS header
neveta.com: could not connect to host
newcitygas.ca: max-age too low: 0
newlooknow.com: did not receive HSTS header
@ -2462,26 +2452,25 @@ nicky.io: did not receive HSTS header
nicoborghuis.nl: could not connect to host
nicolasbettag.me: could not connect to host
niconiconi.xyz: could not connect to host
niconode.com: could not connect to host
niconode.com: did not receive HSTS header
nien.chat: could not connect to host
niho.jp: [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 121" data: no]
nikcub.com: could not connect to host
nikksno.io: did not receive HSTS header
nikomo.fi: could not connect to host
nilrem.org: did not receive HSTS header
ninchisho-online.com: did not receive HSTS header
ninhs.org: could not connect to host
nippler.org: did not receive HSTS header
nippombashi.net: did not receive HSTS header
nipponcareers.com: did not receive HSTS header
nixien.fr: could not connect to host
nixmag.net: could not connect to host
nkinka.de: did not receive HSTS header
nmctest.net: could not connect to host
nnya.cat: did not receive HSTS header
no17sifangjie.cc: could not connect to host
nocallaghan.com: could not connect to host
nocs.cn: did not receive HSTS header
noctinus.tk: could not connect to host
nodebrewery.com: could not connect to host
nodecompat.com: did not receive HSTS header
nodetemple.com: could not connect to host
@ -2507,7 +2496,6 @@ novatrucking.de: could not connect to host
nowak.ninja: did not receive HSTS header
noworrywp.com: could not connect to host
np.search.yahoo.com: did not receive HSTS header
npm.li: could not connect to host
npol.de: did not receive HSTS header
ntbs.pro: could not connect to host
nu3.at: did not receive HSTS header
@ -2521,7 +2509,6 @@ nu3.fr: did not receive HSTS header
nu3.no: did not receive HSTS header
nu3.se: did not receive HSTS header
nufla.de: could not connect to host
nukenet.se: could not connect to host
null-sec.ru: could not connect to host
null.cat: could not connect to host
null.tips: could not connect to host
@ -2562,8 +2549,6 @@ oliver-pietsch.de: did not receive HSTS header
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
olliespage.net: could not connect to host
omgaanmetidealen.com: could not connect to host
ominto.com: max-age too low: 0
omniti.com: max-age too low: 1
@ -2588,6 +2573,7 @@ onlyshopstation.com: did not receive HSTS header
ononpay.com: did not receive HSTS header
onovlena.dn.ua: could not connect to host
ontras.com: could not connect to host
onyxwall.com: could not connect to host
onyxwall.net: could not connect to host
ookjesprookje.nl: could not connect to host
ooonja.de: could not connect to host
@ -2623,7 +2609,6 @@ ossan-kobe-gourmet.com: did not receive HSTS header
ossbinaries.com: could not connect to host
osteammate.com: did not receive HSTS header
osticketawesome.com: did not receive HSTS header
ostr.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 121" data: no]
otakuworld.de: could not connect to host
othercode.nl: could not connect to host
othermedia.cc: [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 121" data: no]
@ -2647,9 +2632,9 @@ ownmovies.fr: could not connect to host
oxygenabsorbers.com: did not receive HSTS header
oxynux.fr: could not connect to host
p.linode.com: could not connect to host
p3in.com: could not connect to host
p8r.de: did not receive HSTS header
pa.search.yahoo.com: did not receive HSTS header
pacelink.de: could not connect to host
packlane.com: did not receive HSTS header
pader-deko.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 121" data: no]
paestbin.com: could not connect to host
@ -2699,6 +2684,7 @@ pbprint.ru: max-age too low: 0
pc-nf.de: did not receive HSTS header
pcfun.net: did not receive HSTS header
pchax.net: could not connect to host
pebbles.net.in: could not connect to host
pebblesdemo.com: could not connect to host
peissen.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 121" data: no]
pekkapikkarainen.fi: could not connect to host
@ -2726,6 +2712,7 @@ petrolplus.ru: did not receive HSTS header
pettsy.com: could not connect to host
pewboards.com: could not connect to host
pgpm.io: could not connect to host
pharmgkb.org: could not connect to host
phillprice.com: could not connect to host
phonenumberinfo.co.uk: could not connect to host
phongmay24h.com: could not connect to host
@ -2741,7 +2728,7 @@ pippen.io: could not connect to host
pir9.com: max-age too low: 2592000
piratedb.com: could not connect to host
piratedot.com: could not connect to host
piratelist.online: could not connect to host
piratelist.online: did not receive HSTS header
piratenlogin.de: could not connect to host
pirati.cz: max-age too low: 604800
pirlitu.com: did not receive HSTS header
@ -2752,6 +2739,7 @@ piwko.co: could not connect to host
pixel.google.com: did not receive HSTS header (error ignored - included regardless)
pixelcode.com.au: max-age too low: 0
pixelhero.co.uk: did not receive HSTS header
pixelminers.net: could not connect to host
pixi.me: could not connect to host
pj83.duckdns.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 121" data: no]
pk.search.yahoo.com: did not receive HSTS header
@ -2774,6 +2762,7 @@ ploup.net: could not connect to host
pmnts.io: could not connect to host
po.gl: did not receive HSTS header
poiema.com.sg: did not receive HSTS header
poinsot.info: could not connect to host
pol.in.th: could not connect to host
pole.net.nz: did not receive HSTS header
poleartschool.com: could not connect to host
@ -2831,7 +2820,6 @@ prontomovers.co.uk: could not connect to host
prosocialmachines.com: could not connect to host
prosoft.sk: did not receive HSTS header
prosperident.com: did not receive HSTS header
protoyou.de: did not receive HSTS header
prowhisky.de: did not receive HSTS header
proximato.com: could not connect to host
proxybay.al: could not connect to host
@ -2871,8 +2859,8 @@ quantacloud.ch: could not connect to host
quantenteranik.eu: could not connect to host
quantumcourse.org: did not receive HSTS header
queercoders.com: did not receive HSTS header
quemmeliga.com: could not connect to host
questsandrewards.com: could not connect to host
quotehex.com: could not connect to host
quranserver.net: could not connect to host
qvi.st: did not receive HSTS header
qwaser.fr: could not connect to host
@ -2914,6 +2902,7 @@ reddiseals.com: [Exception... "Component returned failure code: 0x80004005 (NS_E
reddit.com: did not receive HSTS header
rede.ca: did not receive HSTS header
redicabo.de: could not connect to host
redirectman.com: did not receive HSTS header
redlatam.org: did not receive HSTS header
redmbk.com: did not receive HSTS header
regaloaks.com: did not receive HSTS header
@ -2928,6 +2917,7 @@ rem.pe: could not connect to host
remitatm.com: could not connect to host
remodela.com.ve: could not connect to host
renem.net: did not receive HSTS header
renkhosting.com: did not receive HSTS header
renlong.org: could not connect to host
renrenss.com: did not receive HSTS header
rent-a-coder.de: did not receive HSTS header
@ -2975,6 +2965,7 @@ rme.li: did not receive HSTS header
roan24.pl: did not receive HSTS header
robertglastra.com: could not connect to host
robigalia.org: did not receive HSTS header
robtex.com: did not receive HSTS header
robtex.net: did not receive HSTS header
robtex.org: did not receive HSTS header
rochman.id: could not connect to host
@ -2983,6 +2974,7 @@ roddis.net: did not receive HSTS header
rodney.id.au: did not receive HSTS header
rodosto.com: did not receive HSTS header
roeper.party: could not connect to host
rointe.online: could not connect to host
romans-place.me.uk: did not receive HSTS header
ronvandordt.info: did not receive HSTS header
ronwo.de: max-age too low: 1
@ -3009,10 +3001,10 @@ rubecodeberg.com: could not connect to host
rubenschulz.nl: did not receive HSTS header
ruborr.se: did not receive HSTS header
rubyshop.nl: max-age too low: 604800
rudeotter.com: did not receive HSTS header
rudeotter.com: could not connect to host
rudloff.pro: did not receive HSTS header
rugirlfriend.com: could not connect to host
ruiming.me: did not receive HSTS header
ruiming.me: max-age too low: 86400
runawebinar.nl: could not connect to host
runementors.com: could not connect to host
runtondev.com: did not receive HSTS header
@ -3043,7 +3035,6 @@ saml2.com: could not connect to host
sampoznay.ru: did not receive HSTS header
samraskauskas.com: could not connect to host
samsen.club: did not receive HSTS header
sanatfilan.com: could not connect to host
sandviks.com: did not receive HSTS header
sansemea.com: could not connect to host
sapk.fr: could not connect to host
@ -3060,7 +3051,6 @@ saunasandstuff.com: did not receive HSTS header
save.gov: could not connect to host
saveaward.gov: could not connect to host
saveyour.biz: did not receive HSTS header
savingrecipe.com: did not receive HSTS header
sawamura-rental.com: did not receive HSTS header
sb-group.dk: did not receive HSTS header
sbox-archives.com: could not connect to host
@ -3071,7 +3061,7 @@ schnell-gold.com: could not connect to host
schoop.me: [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 121" data: no]
schreiber-netzwerk.eu: did not receive HSTS header
schrodinger.io: could not connect to host
schwarzkopfforyou.de: could not connect to host
schwarzkopfforyou.de: did not receive HSTS header
scienceathome.org: did not receive HSTS header
scooshonline.co.uk: did not receive HSTS header
scotbirchfield.com: did not receive HSTS header
@ -3079,11 +3069,11 @@ scrambl.is: could not connect to host
scrambler.in: could not connect to host
scrapings.net: could not connect to host
screencaster.io: did not receive HSTS header
screenlight.tv: did not receive HSTS header
screenresolution.space: could not connect to host
scribe.systems: could not connect to host
script.google.com: did not receive HSTS header (error ignored - included regardless)
scriptict.nl: could not connect to host
scriptjunkie.us: could not connect to host
sdmoscow.ru: could not connect to host
sdrobs.com: did not receive HSTS header
sdsl-speedtest.de: could not connect to host
@ -3092,7 +3082,7 @@ sebastian-lutsch.de: could not connect to host
secandtech.com: could not connect to host
secondpay.nl: did not receive HSTS header
sectia22.ro: could not connect to host
sectun.com: could not connect to host
sectun.com: did not receive HSTS header
secure-games.us: could not connect to host
secureradio.net: could not connect to host
security-carpet.com: could not connect to host
@ -3137,7 +3127,6 @@ setphaserstostun.org: could not connect to host
setuid.de: could not connect to host
setuid.io: did not receive HSTS header
seyahatsagliksigortalari.com: could not connect to host
sgtcodfish.com: did not receive HSTS header
shadoom.com: did not receive HSTS header
shadowmorph.info: did not receive HSTS header
shadowsocks.net: could not connect to host
@ -3150,7 +3139,6 @@ sharescope.co.uk: max-age too low: 14400
shauncrowley.co.uk: could not connect to host
shaunwheelhou.se: could not connect to host
shawnh.net: could not connect to host
sheilasdrivingschool.com: could not connect to host
shellsec.pw: did not receive HSTS header
shibe.club: could not connect to host
shiftins.com: did not receive HSTS header
@ -3165,12 +3153,12 @@ shoprose.ru: could not connect to host
shops.neonisi.com: could not connect to host
shortr.li: could not connect to host
showkeeper.tv: did not receive HSTS header
shtorku.com: could not connect to host
shukatsu-note.com: could not connect to host
shv25.se: could not connect to host
shwongacc.com: could not connect to host
siammedia.co: could not connect to host
siddhant.me: could not connect to host
siebens.net: could not connect to host
sifls.com: could not connect to host
silentcircle.org: could not connect to host
silicagelpackets.ca: did not receive HSTS header
@ -3200,6 +3188,7 @@ skoda-im-dialog.de: could not connect to host
skullhouse.nyc: did not receive HSTS header
skyflix.me: did not receive HSTS header
skyoy.com: did not receive HSTS header
slainvet.net: could not connect to host
slash-dev.de: did not receive HSTS header
slashem.me: did not receive HSTS header
slattery.co: could not connect to host
@ -3256,6 +3245,7 @@ somethingnew.xyz: did not receive HSTS header
songzhuolun.com: did not receive HSTS header
sonic.sk: max-age too low: 0
sonicrainboom.rocks: did not receive HSTS header
soondy.com: could not connect to host
sotar.us: [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 121" data: no]
sotor.de: did not receive HSTS header
soulboy.io: did not receive HSTS header
@ -3270,6 +3260,7 @@ souyar.us: could not connect to host
sovereignshare.com: could not connect to host
sown.dyndns.org: could not connect to host
spacehq.org: max-age too low: 0
sparelib.com: could not connect to host
spark.team: could not connect to host
sparklingsparklers.com: did not receive HSTS header
sparsa.army: could not connect to host
@ -3280,6 +3271,7 @@ speculor.net: could not connect to host
speed-mailer.com: could not connect to host
speedcounter.net: did not receive HSTS header
speedmann.de: could not connect to host
speeds.vip: could not connect to host
speedtest-russia.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 121" data: no]
speidel.com.tr: did not receive HSTS header
spencerbaer.com: could not connect to host
@ -3289,7 +3281,6 @@ spideroak.com: did not receive HSTS header
spiegels.nl: could not connect to host
spikeykc.me: did not receive HSTS header
spilsbury.io: could not connect to host
spitefultowel.com: could not connect to host
sportwette.eu: did not receive HSTS header
spot-events.com: could not connect to host
spotlightsrule.ddns.net: could not connect to host
@ -3313,8 +3304,6 @@ sss3s.com: did not receive HSTS header
stabletoken.com: could not connect to host
stadjerspasonline.nl: could not connect to host
stahl.xyz: could not connect to host
starsam80.net: could not connect to host
starttraffic.com: did not receive HSTS header
stateofexception.io: could not connect to host
static.or.at: did not receive HSTS header
staticanime.net: could not connect to host
@ -3364,7 +3353,7 @@ studydrive.net: did not receive HSTS header
stugb.de: did not receive HSTS header
stw-group.at: could not connect to host
subbing.work: could not connect to host
subdimension.org: did not receive HSTS header
subdimension.org: could not connect to host
subrosa.io: could not connect to host
subtitle.rip: could not connect to host
sudo.li: did not receive HSTS header
@ -3374,7 +3363,6 @@ suksit.com: could not connect to host
sumoatm.com: did not receive HSTS header
sumoscout.de: did not receive HSTS header
suncountrymarine.com: did not receive HSTS header
sunflyer.cn: did not receive HSTS header
sunnyfruit.ru: did not receive HSTS header
sunshinepress.org: could not connect to host
superbabysitting.ch: could not connect to host
@ -3386,7 +3374,7 @@ superwally.org: could not connect to host
suprlink.net: could not connect to host
supweb.ovh: did not receive HSTS header
surfeasy.com: did not receive HSTS header
sushi101tempe.com: could not connect to host
sushi101tempe.com: did not receive HSTS header
suzukikenichi.com: did not receive HSTS header
sv.search.yahoo.com: did not receive HSTS header
svatba-frantovi.cz: did not receive HSTS header
@ -3411,6 +3399,7 @@ szaszm.tk: max-age too low: 0
t.facebook.com: did not receive HSTS header
taabe.xyz: could not connect to host
tablet.facebook.com: did not receive HSTS header
taboragroup.com: could not connect to host
tacomafia.net: did not receive HSTS header
tadigitalstore.com: could not connect to host
tafoma.com: did not receive HSTS header
@ -3426,6 +3415,7 @@ tangibilizing.com: could not connect to host
tanzhijun.com: did not receive HSTS header
tapfinder.ca: could not connect to host
tapka.cz: did not receive HSTS header
tappublisher.com: did not receive HSTS header
taravancil.com: did not receive HSTS header
tarhauskielto.fi: did not receive HSTS header
tartaros.fi: could not connect to host
@ -3443,6 +3433,7 @@ tcby45.xyz: did not receive HSTS header
tcdw.net: did not receive HSTS header
tcl.ath.cx: did not receive HSTS header
tcomms.org: max-age too low: 0
tcp.expert: max-age too low: 0
teachforcanada.ca: did not receive HSTS header
team-pancake.eu: could not connect to host
teamblueridge.org: could not connect to host
@ -3491,6 +3482,7 @@ theclementinebutchers.com: could not connect to host
thecoffeehouse.xyz: could not connect to host
thediaryofadam.com: did not receive HSTS header
theendofzion.com: did not receive HSTS header
theeyeopener.com: did not receive HSTS header
thefootballanalyst.com: could not connect to host
thehiddenbay.me: could not connect to host
thehiddenbay.net: could not connect to host
@ -3519,6 +3511,7 @@ thinkcoding.de: could not connect to host
thinlyveiledcontempt.com: could not connect to host
thirdpartytrade.com: did not receive HSTS header
thirty5.net: did not receive HSTS header
thisisacompletetest.ga: could not connect to host
thiswebhost.com: did not receive HSTS header
thomaswoo.com: could not connect to host
thorncreek.net: did not receive HSTS header
@ -3550,16 +3543,17 @@ tlo.hosting: could not connect to host
tlo.network: could not connect to host
tls.li: could not connect to host
tm-solutions.eu: did not receive HSTS header
tmaward.net: could not connect to host
tmitchell.io: could not connect to host
tmprod.com: did not receive HSTS header
tncnanet.com.br: could not connect to host
tnrsca.jp: did not receive HSTS header
tobias-bielefeld.de: could not connect to host
tobiasmathes.com: could not connect to host
tobiasmathes.name: could not connect to host
tobiasofficial.at: could not connect to host
todo.is: did not receive HSTS header
todobazar.es: could not connect to host
tokke.dk: could not connect to host
tokyopopline.com: did not receive HSTS header
tollmanz.com: did not receive HSTS header
tomberek.info: could not connect to host
@ -3569,6 +3563,7 @@ tomharling.uk: max-age too low: 86400
tomharris.tech: could not connect to host
tomlankhorst.nl: did not receive HSTS header
tommsy.com: did not receive HSTS header
tonage.de: could not connect to host
tonburi.jp: [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 121" data: no]
tonyfantjr.com: could not connect to host
toomanypillows.com: could not connect to host
@ -3589,7 +3584,6 @@ tpbcdn.com: could not connect to host
tpe-edu.com: could not connect to host
track.plus: could not connect to host
tracktivity.com.au: did not receive HSTS header
tradeinvent.co.uk: could not connect to host
tradingcentre.com.au: did not receive HSTS header
tradinghope.com: could not connect to host
traeningsprojekt.dk: did not receive HSTS header
@ -3603,8 +3597,10 @@ trinityaffirmations.com: max-age too low: 0
trinitycore.org: max-age too low: 2592000
tripdelta.com: did not receive HSTS header
trixies-wish.nz: could not connect to host
trollme.me: could not connect to host
trusitio.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 121" data: no]
trustmeimfancy.com: could not connect to host
truthmessages.pw: could not connect to host
trybind.com: could not connect to host
ts2.se: did not receive HSTS header
tsecy.com: did not receive HSTS header
@ -3643,6 +3639,7 @@ tyroproducts.eu: did not receive HSTS header
tzappa.net: could not connect to host
u-blox.com: did not receive HSTS header
ua.search.yahoo.com: did not receive HSTS header
uangteman.com: did not receive HSTS header
ubicloud.de: could not connect to host
ublox.com: did not receive HSTS header
ubtce.com: could not connect to host
@ -3677,10 +3674,10 @@ unknownphenomena.net: could not connect to host
unplugg3r.dk: could not connect to host
unravel.ie: could not connect to host
unterschicht.tv: could not connect to host
unun.fi: could not connect to host
unwiredbrain.com: could not connect to host
uonstaffhub.com: could not connect to host
uow.ninja: could not connect to host
up1.ca: could not connect to host
upaknship.com: did not receive HSTS header
upani.net: did not receive HSTS header
upldr.pw: could not connect to host
@ -3713,7 +3710,6 @@ valis.sx: could not connect to host
valkyrja.xyz: did not receive HSTS header
valleyridgepta.org: could not connect to host
vallis.net: could not connect to host
valshamar.is: could not connect to host
vanderkley.it: could not connect to host
vanestack.com: could not connect to host
vanetv.com: could not connect to host
@ -3728,10 +3724,12 @@ vbulletinrussia.com: could not connect to host
vcdove.com: did not receive HSTS header
vcr.re: could not connect to host
veblen.com: could not connect to host
veblr.com: did not receive HSTS header
vechkasov.ru: did not receive HSTS header
vemokin.net: could not connect to host
venixplays-stream.ml: could not connect to host
verifikatorindonesia.com: could not connect to host
veriny.tf: did not receive HSTS header
vermontcareergateway.org: could not connect to host
versia.ru: did not receive HSTS header
veryhax.de: could not connect to host
@ -3796,8 +3794,9 @@ warhistoryonline.com: [Exception... "Component returned failure code: 0x80004005
warmlyyours.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 121" data: no]
warped.com: did not receive HSTS header
warsentech.com: could not connect to host
warsh.moe: could not connect to host
wassim.is: could not connect to host
watchium.com: did not receive HSTS header
watertrails.io: could not connect to host
watsonhall.uk: could not connect to host
wave.is: could not connect to host
wavefrontsystemstech.com: could not connect to host
@ -3943,6 +3942,7 @@ xfive.de: did not receive HSTS header
xiaody.me: could not connect to host
xiaolvmu.me: could not connect to host
xiaoxiao.im: could not connect to host
xichtsbuch.de: could not connect to host
ximens.me: did not receive HSTS header
xisa.it: could not connect to host
xiyu.moe: could not connect to host
@ -3984,6 +3984,7 @@ yabrt.cn: could not connect to host
yahvehyireh.com: did not receive HSTS header
yamaken.jp: did not receive HSTS header
yamamo10.com: could not connect to host
yaoidreams.com: could not connect to host
yaporn.tv: did not receive HSTS header
yard-fu.com: did not receive HSTS header
yasinaydin.net: max-age too low: 2592000
@ -4012,7 +4013,7 @@ yourstrongbox.com: could not connect to host
yout.com: max-age too low: 60000
yu.gg: did not receive HSTS header
yuan.ga: did not receive HSTS header
yuhen.ru: could not connect to host
yuhen.ru: did not receive HSTS header
yuko.moe: could not connect to host
yukontec.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 121" data: no]
yunzhu.li: did not receive HSTS header

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -140,9 +140,14 @@ SandboxBrokerPolicyFactory::SandboxBrokerPolicyFactory()
// Bug 1308851: NVIDIA proprietary driver when using WebGL
policy->AddPrefix(rdwr, "/dev", "nvidia");
// Bug 1312678: radeonsi/Intel with DRI when using WebGL
// Bug 1312678: radeonsi/Intel with DRI when using WebGL
policy->AddDir(rdwr, "/dev/dri");
#ifdef MOZ_ALSA
// Bug 1309098: ALSA support
policy->AddDir(rdwr, "/dev/snd");
#endif
mCommonContentPolicy.reset(policy);
#endif
}

Просмотреть файл

@ -20,6 +20,9 @@ if CONFIG['OS_TARGET'] == 'Android':
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
DEFINES['HAVE_ANDROID_OS'] = True
if CONFIG['MOZ_ALSA']:
DEFINES['MOZ_ALSA'] = True
LOCAL_INCLUDES += [
'/security/sandbox/linux', # SandboxLogging.h, SandboxInfo.h
]

Просмотреть файл

@ -65,6 +65,15 @@ all-tests-opt:
- web-platform-tests-wdspec
- xpcshell
- mochitest-valgrind
- talos-chrome
- talos-dromaeojs
- talos-g1
- talos-g2
- talos-g3
- talos-g4
- talos-other
- talos-svgr
- talos-tp5o
stylo-tests:
- cppunit

Просмотреть файл

@ -642,6 +642,195 @@ reftest-stylo:
extra-options:
- --reftest-suite=reftest-stylo
talos-chrome:
description: "Talos chrome"
suite: talos
talos-try-name: chromez
treeherder-symbol: tc-T(c)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=chromez
talos-dromaeojs:
description: "Talos dromaeojs"
suite: talos
talos-try-name: dromaeojs
treeherder-symbol: tc-T(d)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=dromaeojs
talos-g1:
description: "Talos g1"
suite: talos
talos-try-name: g1
treeherder-symbol: tc-T(g1)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=g1
talos-g2:
description: "Talos g2"
suite: talos
talos-try-name: g2
treeherder-symbol: tc-T(g2)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=g2
talos-g3:
description: "Talos g3"
suite: talos
talos-try-name: g3
treeherder-symbol: tc-T(g3)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=g3
talos-g4:
description: "Talos g4"
suite: talos
talos-try-name: g4
treeherder-symbol: tc-T(g4)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=g4
talos-other:
description: "Talos other"
suite: talos
talos-try-name: other
treeherder-symbol: tc-T(o)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=other
talos-svgr:
description: "Talos svgr"
suite: talos
talos-try-name: svgr
treeherder-symbol: tc-T(s)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=svgr
talos-tp5o:
description: "Talos tp5o"
suite: talos
talos-try-name: tp5o
treeherder-symbol: tc-T(tp)
run-on-projects:
by-test-platform:
linux64/opt: ['all']
default: []
max-run-time: 3600
mozharness:
script: talos_script.py
no-read-buildbot-config: true
config:
by-test-platform:
default:
- talos/linux_config.py
- remove_executables.py
extra-options:
- --suite=tp5o
web-platform-tests:
description: "Web platform test run"
suite: web-platform-tests

Просмотреть файл

@ -289,6 +289,8 @@ GROUP_NAMES = {
'tc-M-V': 'Mochitests on Valgrind executed by TaskCluster',
'tc-R': 'Reftests executed by TaskCluster',
'tc-R-e10s': 'Reftests executed by TaskCluster with e10s',
'tc-T': 'Talos performance tests executed by TaskCluster',
'tc-T-e10s': 'Talos performance tests executed by TaskCluster with e10s',
'tc-VP': 'VideoPuppeteer tests executed by TaskCluster',
'tc-W': 'Web platform tests executed by TaskCluster',
'tc-W-e10s': 'Web platform tests executed by TaskCluster with e10s',

Просмотреть файл

@ -338,10 +338,11 @@ class FennecInstance(GeckoInstance):
else:
logcat_args["logfile"] = self.gecko_log
self.runner.device.start_logcat(**logcat_args)
self.runner.device.setup_port_forwarding(
local_port=self.marionette_port,
remote_port=self.marionette_port,
)
# forward marionette port (localhost:2828)
self.runner.device.dm.forward(
local="tcp:{}".format(self.marionette_port),
remote="tcp:{}".format(self.marionette_port))
def _get_runner_args(self):
process_args = {
@ -369,8 +370,7 @@ class FennecInstance(GeckoInstance):
super(FennecInstance, self).close(restart)
if self.runner and self.runner.device.connected:
self.runner.device.dm.remove_forward(
"tcp:{}".format(int(self.marionette_port))
)
"tcp:{}".format(self.marionette_port))
class DesktopInstance(GeckoInstance):

Просмотреть файл

@ -15,6 +15,7 @@ from argparse import ArgumentParser
from copy import deepcopy
import mozinfo
import moznetwork
import mozprofile
from marionette_driver.marionette import Marionette
@ -900,7 +901,10 @@ class BaseMarionetteTestRunner(object):
def start_fixture_servers(self):
root = self.server_root or os.path.join(os.path.dirname(here), "www")
return serve.start(root)
if self.appName == "fennec":
return serve.start(root, host=moznetwork.get_ip())
else:
return serve.start(root)
def add_test(self, test, expected='pass'):
filepath = os.path.abspath(test)

Просмотреть файл

@ -15,8 +15,6 @@ import os
import sys
from collections import defaultdict
import moznetwork
import httpd
__all__ = ["default_doc_root",
@ -137,15 +135,16 @@ class ServerProc(BlockingChannel):
return False
def http_server(doc_root, ssl_config, **kwargs):
return httpd.FixtureServer(doc_root, url="http://%s:0/" % moznetwork.get_ip())
def http_server(doc_root, ssl_config, host="127.0.0.1", **kwargs):
return httpd.FixtureServer(doc_root, url="http://{}:0/".format(host), **kwargs)
def https_server(doc_root, ssl_config, **kwargs):
def https_server(doc_root, ssl_config, host="127.0.0.1", **kwargs):
return httpd.FixtureServer(doc_root,
url="https://%s:0/" % moznetwork.get_ip(),
url="https://{}:0/".format(host),
ssl_key=ssl_config["key_path"],
ssl_cert=ssl_config["cert_path"])
ssl_cert=ssl_config["cert_path"],
**kwargs)
def start_servers(doc_root, ssl_config, **kwargs):
@ -173,7 +172,6 @@ def start(doc_root=None, **kwargs):
global servers
servers = start_servers(doc_root, ssl_config, **kwargs)
return servers
@ -212,7 +210,7 @@ def main(args):
servers = start(args.doc_root)
for url in iter_url(servers):
print >>sys.stderr, "%s: listening on %s" % (sys.argv[0], url)
print >>sys.stderr, "{}: listening on {}".format(sys.argv[0], url)
try:
while any(proc.is_alive for proc in iter_proc(servers)):

Просмотреть файл

@ -186,25 +186,6 @@ class Device(object):
adb.wait()
self.dm._verifyZip()
def setup_port_forwarding(self, local_port=None, remote_port=2828):
"""
Set up TCP port forwarding to the specified port on the device,
using any availble local port (if none specified), and return the local port.
:param local_port: The local port to forward from, if unspecified a
random port is chosen.
:param remote_port: The remote port to forward to, defaults to 2828.
:returns: The local_port being forwarded.
"""
if not local_port:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 0))
local_port = s.getsockname()[1]
s.close()
self.dm.forward('tcp:%d' % int(local_port), 'tcp:%d' % int(remote_port))
return local_port
def wait_for_net(self):
active = False
time_out = 0

Просмотреть файл

@ -30,9 +30,9 @@ config = {
'tooltool_script': ["/builds/tooltool.py"],
'tooltool_bootstrap': "setup.sh",
'enable_count_ctors': True,
'enable_talos_sendchange': False,
# allows triggering of test jobs when --artifact try syntax is detected on buildbot
# allows triggering of dependent jobs when --artifact try syntax is detected on buildbot
'enable_unittest_sendchange': True,
'enable_talos_sendchange': True,
'perfherder_extra_options': ['artifact'],
#########################################################################

Просмотреть файл

@ -24,9 +24,9 @@ config = {
'tooltool_script': ["/builds/tooltool.py"],
'tooltool_bootstrap': "setup.sh",
'enable_count_ctors': True,
'enable_talos_sendchange': False,
# allows triggering of test jobs when --artifact try syntax is detected on buildbot
# allows triggering of dependent jobs when --artifact try syntax is detected on buildbot
'enable_unittest_sendchange': True,
'enable_talos_sendchange': True,
'perfherder_extra_options': ['artifact'],
#########################################################################

Просмотреть файл

@ -27,9 +27,9 @@ config = {
'tooltool_script': ["/builds/tooltool.py"],
'tooltool_bootstrap': "setup.sh",
'enable_count_ctors': False,
'enable_talos_sendchange': False,
# allows triggering of test jobs when --artifact try syntax is detected on buildbot
# allows triggering of dependent jobs when --artifact try syntax is detected on buildbot
'enable_unittest_sendchange': True,
'enable_talos_sendchange': True,
'perfherder_extra_options': ['artifact'],
#########################################################################

Просмотреть файл

@ -134,7 +134,7 @@
border-radius: 4px;
border: 1px solid #b5b5b5;
border-bottom-width: 0;
box-shadow: 0 1px 12px #666;
box-shadow: 0 1px 3px #c1c1c1;
}
.keep-open .dropdown-popup {
@ -153,7 +153,7 @@
position: absolute;
top: 30px; /* offset arrow from top of popup */
left: -16px;
width: 24px;
width: 16px;
height: 24px;
background-image: url("chrome://global/skin/reader/RM-Type-Controls-Arrow.svg");
display: block;

Просмотреть файл

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<polygon opacity="0.15" points="16.583,0.015 16.569,0 4.583,12 16.569,24 16.583,23.985"/>
<polygon fill="#fbfbfb" points="16.575,1.021 16.561,1.008 5.583,12 16.577,23.008 16.591,22.994 "/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 24">
<polygon points="16.58 0.01 16.57 0 4.58 12 16.57 24 16.58 23.98 16.58 0.01" fill="#b5b5b5"/>
<polyline points="16.63 1.51 6.08 12.01 16.63 22.5" fill="#fbfbfb"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 521 B

После

Ширина:  |  Высота:  |  Размер: 486 B

Просмотреть файл

@ -221,6 +221,14 @@ auto CodecProxy::Release() const -> bool
return mozilla::jni::Method<Release_t>::Call(CodecProxy::mCtx, nullptr);
}
constexpr char CodecProxy::ReleaseOutput_t::name[];
constexpr char CodecProxy::ReleaseOutput_t::signature[];
auto CodecProxy::ReleaseOutput(mozilla::jni::Object::Param a0, bool a1) const -> bool
{
return mozilla::jni::Method<ReleaseOutput_t>::Call(CodecProxy::mCtx, nullptr, a0, a1);
}
const char CodecProxy::NativeCallbacks::name[] =
"org/mozilla/gecko/media/CodecProxy$NativeCallbacks";

Просмотреть файл

@ -765,6 +765,27 @@ public:
auto Release() const -> bool;
struct ReleaseOutput_t {
typedef CodecProxy Owner;
typedef bool ReturnType;
typedef bool SetterType;
typedef mozilla::jni::Args<
mozilla::jni::Object::Param,
bool> Args;
static constexpr char name[] = "releaseOutput";
static constexpr char signature[] =
"(Lorg/mozilla/gecko/media/Sample;Z)Z";
static const bool isStatic = false;
static const mozilla::jni::ExceptionMode exceptionMode =
mozilla::jni::ExceptionMode::ABORT;
static const mozilla::jni::CallingThread callingThread =
mozilla::jni::CallingThread::ANY;
static const mozilla::jni::DispatchTarget dispatchTarget =
mozilla::jni::DispatchTarget::CURRENT;
};
auto ReleaseOutput(mozilla::jni::Object::Param, bool) const -> bool;
static const mozilla::jni::CallingThread callingThread =
mozilla::jni::CallingThread::ANY;