Merge mozilla-central to mozilla-inbound

This commit is contained in:
Carsten "Tomcat" Book 2016-10-19 17:03:49 +02:00
Родитель 67a81d563f 036a7c4324
Коммит 4730023cdb
52 изменённых файлов: 13529 добавлений и 13327 удалений

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

@ -184,7 +184,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
}
// Set the actiontype only if the user is not overriding actions.
if (action && this._noActionsKeys.size == 0) {
if (action && this._pressedNoActionKeys.size == 0) {
this.setAttribute("actiontype", action.type);
} else {
this.removeAttribute("actiontype");
@ -1000,14 +1000,22 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
]]></body>
</method>
<field name="_noActionsKeys"><![CDATA[
new Set();
<field name="_noActionKeys"><![CDATA[
[
KeyEvent.DOM_VK_ALT,
KeyEvent.DOM_VK_SHIFT,
KeyEvent.DOM_VK_META,
]
]]></field>
<field name="_pressedNoActionKeys"><![CDATA[
new Set()
]]></field>
<method name="_clearNoActions">
<parameter name="aURL"/>
<body><![CDATA[
this._noActionsKeys.clear();
this._pressedNoActionKeys.clear();
this.popup.removeAttribute("noactions");
let action = this._parseActionUrl(this._value);
if (action)
@ -1114,24 +1122,22 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<handlers>
<handler event="keydown"><![CDATA[
if ((event.keyCode === KeyEvent.DOM_VK_ALT ||
event.keyCode === KeyEvent.DOM_VK_SHIFT) &&
if (this._noActionKeys.includes(event.keyCode) &&
this.popup.selectedIndex >= 0 &&
!this._noActionsKeys.has(event.keyCode)) {
if (this._noActionsKeys.size == 0) {
!this._pressedNoActionKeys.has(event.keyCode)) {
if (this._pressedNoActionKeys.size == 0) {
this.popup.setAttribute("noactions", "true");
this.removeAttribute("actiontype");
}
this._noActionsKeys.add(event.keyCode);
this._pressedNoActionKeys.add(event.keyCode);
}
]]></handler>
<handler event="keyup"><![CDATA[
if ((event.keyCode === KeyEvent.DOM_VK_ALT ||
event.keyCode === KeyEvent.DOM_VK_SHIFT) &&
this._noActionsKeys.has(event.keyCode)) {
this._noActionsKeys.delete(event.keyCode);
if (this._noActionsKeys.size == 0)
if (this._noActionKeys.includes(event.keyCode) &&
this._pressedNoActionKeys.has(event.keyCode)) {
this._pressedNoActionKeys.delete(event.keyCode);
if (this._pressedNoActionKeys.size == 0)
this._clearNoActions();
}
]]></handler>

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

@ -478,7 +478,7 @@ BrowserGlue.prototype = {
this._flashHangCount = 0;
this._firstWindowReady = new Promise(resolve => this._firstWindowLoaded = resolve);
if (AppConstants.platform == "win" ||
if (AppConstants.isPlatformAndVersionAtMost("win", "5.2") ||
AppConstants.platform == "macosx") {
// Handles prompting to inform about incompatibilites when accessibility
// and e10s are active together.

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

@ -5,5 +5,6 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common.override"
ac_add_options --enable-artifact-builds
ac_add_options --enable-artifact-build-symbols
unset CC
unset CXX

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

@ -5,5 +5,6 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common.override"
ac_add_options --enable-artifact-builds
ac_add_options --enable-artifact-build-symbols
unset CC
unset CXX

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

@ -5,3 +5,4 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common.override"
ac_add_options --enable-artifact-builds
ac_add_options --enable-artifact-build-symbols

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

@ -7,3 +7,4 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common.override"
ac_add_options --enable-artifact-builds
ac_add_options --enable-artifact-build-symbols

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

@ -8,3 +8,4 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common.override"
ac_add_options --enable-artifact-builds
ac_add_options --enable-artifact-build-symbols

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

@ -32,6 +32,7 @@ function EvaluationResult(props) {
type,
level,
id: messageId,
exceptionDocURL,
} = message;
let messageBody;
@ -53,6 +54,7 @@ function EvaluationResult(props) {
messageId,
scrollToMessage: props.autoscroll,
serviceContainer,
exceptionDocURL,
};
return Message(childProps);
}

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

@ -42,7 +42,8 @@ function PageError(props) {
messageText: messageBody,
repeat,
stacktrace,
frame
frame,
exceptionDocURL,
} = message;
const childProps = {
@ -60,6 +61,7 @@ function PageError(props) {
frame,
stacktrace,
serviceContainer,
exceptionDocURL,
};
return Message(childProps);
}

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

@ -13,6 +13,7 @@ const {
DOM: dom,
PropTypes
} = require("devtools/client/shared/vendor/react");
const { l10n } = require("devtools/client/webconsole/new-console-output/utils/messages");
const actions = require("devtools/client/webconsole/new-console-output/actions/index");
const CollapseButton = createFactory(require("devtools/client/webconsole/new-console-output/components/collapse-button"));
const MessageIndent = createFactory(require("devtools/client/webconsole/new-console-output/components/message-indent").MessageIndent);
@ -40,6 +41,7 @@ const Message = createClass({
stacktrace: PropTypes.any,
messageId: PropTypes.string,
scrollToMessage: PropTypes.bool,
exceptionDocURL: PropTypes.string,
serviceContainer: PropTypes.shape({
emitNewMessage: PropTypes.func.isRequired,
onViewSourceInDebugger: PropTypes.func.isRequired,
@ -66,6 +68,11 @@ const Message = createClass({
}
},
onLearnMoreClick: function () {
let {exceptionDocURL} = this.props;
this.props.serviceContainer.openLink(exceptionDocURL);
},
render() {
const {
messageId,
@ -82,6 +89,7 @@ const Message = createClass({
stacktrace,
serviceContainer,
dispatch,
exceptionDocURL,
} = this.props;
topLevelClasses.push("message", source, type, level);
@ -132,6 +140,15 @@ const Message = createClass({
}) : null
);
let learnMore;
if (exceptionDocURL) {
learnMore = dom.a({
className: "learn-more-link webconsole-learn-more-link",
title: exceptionDocURL.split("?")[0],
onClick: this.onLearnMoreClick,
}, `[${l10n.getStr("webConsoleMoreInfoLabel")}]`);
}
return dom.div({
className: topLevelClasses.join(" "),
ref: node => {
@ -145,7 +162,8 @@ const Message = createClass({
dom.span({ className: "message-body-wrapper" },
dom.span({ className: "message-flex-body" },
dom.span({ className: "message-body devtools-monospace" },
messageBody
messageBody,
learnMore
),
repeat,
location

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

@ -54,6 +54,7 @@ NewConsoleOutputWrapper.prototype = {
});
},
sourceMapService: this.toolbox ? this.toolbox._sourceMapService : null,
openLink: url => this.jsterm.hud.owner.openLink.call(this.jsterm.hud.owner, url)
}
});
let filterBar = FilterBar({

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

@ -4,10 +4,13 @@
// Test utils.
const expect = require("expect");
const { render } = require("enzyme");
const { render, mount } = require("enzyme");
const sinon = require("sinon");
// React
const { createFactory } = require("devtools/client/shared/vendor/react");
const Provider = createFactory(require("react-redux").Provider);
const { setupStore } = require("devtools/client/webconsole/new-console-output/test/helpers");
// Components under test.
const EvaluationResult = createFactory(require("devtools/client/webconsole/new-console-output/components/message-types/evaluation-result"));
@ -15,6 +18,7 @@ const { INDENT_WIDTH } = require("devtools/client/webconsole/new-console-output/
// Test fakes.
const { stubPreparedMessages } = require("devtools/client/webconsole/new-console-output/test/fixtures/stubs/index");
const serviceContainer = require("devtools/client/webconsole/new-console-output/test/fixtures/serviceContainer");
describe("EvaluationResult component:", () => {
it("renders a grip result", () => {
@ -31,11 +35,32 @@ describe("EvaluationResult component:", () => {
const wrapper = render(EvaluationResult({ message }));
expect(wrapper.find(".message-body").text())
.toBe("ReferenceError: asdf is not defined");
.toBe("ReferenceError: asdf is not defined[Learn More]");
expect(wrapper.find(".message.error").length).toBe(1);
});
it("displays a [Learn more] link", () => {
const store = setupStore([]);
const message = stubPreparedMessages.get("asdf()");
serviceContainer.openLink = sinon.spy();
const wrapper = mount(Provider({store},
EvaluationResult({message, serviceContainer})
));
const url =
"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined";
const learnMore = wrapper.find(".learn-more-link");
expect(learnMore.length).toBe(1);
expect(learnMore.prop("title")).toBe(url);
learnMore.simulate("click");
let call = serviceContainer.openLink.getCall(0);
expect(call.args[0]).toEqual(message.exceptionDocURL);
});
it("has the expected indent", () => {
const message = stubPreparedMessages.get("new Date(0)");

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

@ -30,19 +30,41 @@ describe("PageError component:", () => {
const wrapper = render(PageError({ message, serviceContainer }));
expect(wrapper.find(".message-body").text())
.toBe("ReferenceError: asdf is not defined");
.toBe("ReferenceError: asdf is not defined[Learn More]");
// The stacktrace should be closed by default.
const frameLinks = wrapper.find(`.stack-trace`);
expect(frameLinks.length).toBe(0);
// There should be the location
// There should be the location.
const locationLink = wrapper.find(`.message-location`);
expect(locationLink.length).toBe(1);
// @TODO Will likely change. See https://github.com/devtools-html/gecko-dev/issues/285
expect(locationLink.text()).toBe("test-tempfile.js:3:5");
});
it("displays a [Learn more] link", () => {
const store = setupStore([]);
const message = stubPreparedMessages.get("ReferenceError: asdf is not defined");
serviceContainer.openLink = sinon.spy();
const wrapper = mount(Provider({store},
PageError({message, serviceContainer})
));
// There should be a [Learn more] link.
const url =
"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined";
const learnMore = wrapper.find(".learn-more-link");
expect(learnMore.length).toBe(1);
expect(learnMore.prop("title")).toBe(url);
learnMore.simulate("click");
let call = serviceContainer.openLink.getCall(0);
expect(call.args[0]).toEqual(message.exceptionDocURL);
});
it("has a stacktrace which can be openned", () => {
const message = stubPreparedMessages.get("ReferenceError: asdf is not defined");
const wrapper = render(PageError({ message, serviceContainer, open: true }));

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

@ -13,6 +13,8 @@ class L10n {
return "Console was cleared.";
case "webConsoleXhrIndicator":
return "XHR";
case "webConsoleMoreInfoLabel":
return "Learn More";
}
return str;
}

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

@ -12,4 +12,5 @@ module.exports = {
sourceMapService: {
subscribe: () => {},
},
};
openLink: () => {},
};

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

@ -25,14 +25,15 @@ stubPreparedMessages.set("console.log('foobar', 'test')", new ConsoleMessage({
"test"
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"foobar\",\"test\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27foobar%27%2C%20%27test%27)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"foobar\",\"test\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27foobar%27%2C%20%27test%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27foobar%27%2C%20%27test%27)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.log(undefined)", new ConsoleMessage({
@ -48,14 +49,15 @@ stubPreparedMessages.set("console.log(undefined)", new ConsoleMessage({
}
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"undefined\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(undefined)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"undefined\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(undefined)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(undefined)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.warn('danger, will robinson!')", new ConsoleMessage({
@ -69,14 +71,15 @@ stubPreparedMessages.set("console.warn('danger, will robinson!')", new ConsoleMe
"danger, will robinson!"
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"warn\",\"level\":\"warn\",\"messageText\":null,\"parameters\":[\"danger, will robinson!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.warn(%27danger%2C%20will%20robinson!%27)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"warn\",\"level\":\"warn\",\"messageText\":null,\"parameters\":[\"danger, will robinson!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.warn(%27danger%2C%20will%20robinson!%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.warn(%27danger%2C%20will%20robinson!%27)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.log(NaN)", new ConsoleMessage({
@ -92,14 +95,15 @@ stubPreparedMessages.set("console.log(NaN)", new ConsoleMessage({
}
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"NaN\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(NaN)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"NaN\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(NaN)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(NaN)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.log(null)", new ConsoleMessage({
@ -115,14 +119,15 @@ stubPreparedMessages.set("console.log(null)", new ConsoleMessage({
}
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"null\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(null)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"null\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(null)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(null)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.log('鼬')", new ConsoleMessage({
@ -136,14 +141,15 @@ stubPreparedMessages.set("console.log('鼬')", new ConsoleMessage({
"鼬"
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"鼬\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%E9%BC%AC%27)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"鼬\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%E9%BC%AC%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%E9%BC%AC%27)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.clear()", new ConsoleMessage({
@ -157,14 +163,15 @@ stubPreparedMessages.set("console.clear()", new ConsoleMessage({
"Console was cleared."
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"clear\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"Console was cleared.\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.clear()\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"clear\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"Console was cleared.\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.clear()\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.clear()",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.count('bar')", new ConsoleMessage({
@ -176,14 +183,15 @@ stubPreparedMessages.set("console.count('bar')", new ConsoleMessage({
"messageText": "bar: 1",
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"debug\",\"messageText\":\"bar: 1\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.count(%27bar%27)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"debug\",\"messageText\":\"bar: 1\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.count(%27bar%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.count(%27bar%27)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.assert(false, {message: 'foobar'})", new ConsoleMessage({
@ -218,7 +226,7 @@ stubPreparedMessages.set("console.assert(false, {message: 'foobar'})", new Conso
}
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"assert\",\"level\":\"error\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn8.child1/obj31\",\"class\":\"Object\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":1,\"preview\":{\"kind\":\"Object\",\"ownProperties\":{\"message\":{\"configurable\":true,\"enumerable\":true,\"writable\":true,\"value\":\"foobar\"}},\"ownPropertiesLength\":1,\"safeGetterValues\":{}}}],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":27,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":1}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"assert\",\"level\":\"error\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn8.child1/obj31\",\"class\":\"Object\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":1,\"preview\":{\"kind\":\"Object\",\"ownProperties\":{\"message\":{\"configurable\":true,\"enumerable\":true,\"writable\":true,\"value\":\"foobar\"}},\"ownPropertiesLength\":1,\"safeGetterValues\":{}}}],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":27,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":1}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": [
{
"columnNumber": 27,
@ -233,7 +241,8 @@ stubPreparedMessages.set("console.assert(false, {message: 'foobar'})", new Conso
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.log('hello \nfrom \rthe \"string world!')", new ConsoleMessage({
@ -247,14 +256,15 @@ stubPreparedMessages.set("console.log('hello \nfrom \rthe \"string world!')", ne
"hello \nfrom \rthe \"string world!"
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"hello \\nfrom \\rthe \\\"string world!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27hello%20%5Cnfrom%20%5Crthe%20%5C%22string%20world!%27)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"hello \\nfrom \\rthe \\\"string world!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27hello%20%5Cnfrom%20%5Crthe%20%5C%22string%20world!%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27hello%20%5Cnfrom%20%5Crthe%20%5C%22string%20world!%27)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.log('úṇĩçödê țĕșť')", new ConsoleMessage({
@ -268,14 +278,15 @@ stubPreparedMessages.set("console.log('úṇĩçödê țĕșť')", new ConsoleMe
"úṇĩçödê țĕșť"
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"úṇĩçödê țĕșť\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%C3%BA%E1%B9%87%C4%A9%C3%A7%C3%B6d%C3%AA%20%C8%9B%C4%95%C8%99%C5%A5%27)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"úṇĩçödê țĕșť\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%C3%BA%E1%B9%87%C4%A9%C3%A7%C3%B6d%C3%AA%20%C8%9B%C4%95%C8%99%C5%A5%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%C3%BA%E1%B9%87%C4%A9%C3%A7%C3%B6d%C3%AA%20%C8%9B%C4%95%C8%99%C5%A5%27)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
@ -293,7 +304,7 @@ stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
"extensible": true,
"frozen": false,
"sealed": false,
"ownPropertyLength": 805,
"ownPropertyLength": 806,
"preview": {
"kind": "ObjectWithURL",
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html"
@ -301,14 +312,15 @@ stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
}
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn11.child1/obj31\",\"class\":\"Window\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":805,\"preview\":{\"kind\":\"ObjectWithURL\",\"url\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\"}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.dirxml(window)\",\"line\":1,\"column\":27},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn11.child1/obj31\",\"class\":\"Window\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":806,\"preview\":{\"kind\":\"ObjectWithURL\",\"url\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\"}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.dirxml(window)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.dirxml(window)",
"line": 1,
"column": 27
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.trace()", new ConsoleMessage({
@ -320,7 +332,7 @@ stubPreparedMessages.set("console.trace()", new ConsoleMessage({
"messageText": null,
"parameters": [],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"trace\",\"level\":\"log\",\"messageText\":null,\"parameters\":[],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"testStacktraceFiltering\",\"language\":2,\"lineNumber\":3},{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"foo\",\"language\":2,\"lineNumber\":6},{\"columnNumber\":1,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":9}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"line\":3,\"column\":3},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"trace\",\"level\":\"log\",\"messageText\":null,\"parameters\":[],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"testStacktraceFiltering\",\"language\":2,\"lineNumber\":3},{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"foo\",\"language\":2,\"lineNumber\":6},{\"columnNumber\":1,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":9}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"line\":3,\"column\":3},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": [
{
"columnNumber": 3,
@ -349,7 +361,8 @@ stubPreparedMessages.set("console.trace()", new ConsoleMessage({
"line": 3,
"column": 3
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.time('bar')", new ConsoleMessage({
@ -361,14 +374,15 @@ stubPreparedMessages.set("console.time('bar')", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"nullMessage\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"nullMessage\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)",
"line": 2,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.timeEnd('bar')", new ConsoleMessage({
@ -377,17 +391,18 @@ stubPreparedMessages.set("console.timeEnd('bar')", new ConsoleMessage({
"source": "console-api",
"type": "timeEnd",
"level": "log",
"messageText": "bar: 2ms",
"messageText": "bar: 1.8ms",
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"timeEnd\",\"level\":\"log\",\"messageText\":\"bar: 2ms\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"timeEnd\",\"level\":\"log\",\"messageText\":\"bar: 1.8ms\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)",
"line": 3,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.table('bar')", new ConsoleMessage({
@ -401,14 +416,15 @@ stubPreparedMessages.set("console.table('bar')", new ConsoleMessage({
"bar"
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"bar\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"bar\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%27bar%27)",
"line": 2,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.table(['a', 'b', 'c'])", new ConsoleMessage({
@ -439,14 +455,15 @@ stubPreparedMessages.set("console.table(['a', 'b', 'c'])", new ConsoleMessage({
}
],
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"table\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn15.child1/obj31\",\"class\":\"Array\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":4,\"preview\":{\"kind\":\"ArrayLike\",\"length\":3,\"items\":[\"a\",\"b\",\"c\"]}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%5B%27a%27%2C%20%27b%27%2C%20%27c%27%5D)\",\"line\":2,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"table\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn15.child1/obj31\",\"class\":\"Array\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":4,\"preview\":{\"kind\":\"ArrayLike\",\"length\":3,\"items\":[\"a\",\"b\",\"c\"]}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%5B%27a%27%2C%20%27b%27%2C%20%27c%27%5D)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%5B%27a%27%2C%20%27b%27%2C%20%27c%27%5D)",
"line": 2,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.group('bar')", new ConsoleMessage({
@ -458,14 +475,15 @@ stubPreparedMessages.set("console.group('bar')", new ConsoleMessage({
"messageText": "bar",
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"bar\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"bar\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)",
"line": 2,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.groupEnd('bar')", new ConsoleMessage({
@ -477,14 +495,15 @@ stubPreparedMessages.set("console.groupEnd('bar')", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)",
"line": 3,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.groupCollapsed('foo')", new ConsoleMessage({
@ -496,14 +515,15 @@ stubPreparedMessages.set("console.groupCollapsed('foo')", new ConsoleMessage({
"messageText": "foo",
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroupCollapsed\",\"level\":\"log\",\"messageText\":\"foo\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":2,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroupCollapsed\",\"level\":\"log\",\"messageText\":\"foo\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)",
"line": 2,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.groupEnd('foo')", new ConsoleMessage({
@ -515,14 +535,15 @@ stubPreparedMessages.set("console.groupEnd('foo')", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":3,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)",
"line": 3,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.group()", new ConsoleMessage({
@ -534,14 +555,15 @@ stubPreparedMessages.set("console.group()", new ConsoleMessage({
"messageText": "<no group label>",
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"<no group label>\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":2,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"<no group label>\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()",
"line": 2,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
stubPreparedMessages.set("console.groupEnd()", new ConsoleMessage({
@ -553,14 +575,15 @@ stubPreparedMessages.set("console.groupEnd()", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":3,\"column\":1},\"groupId\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()",
"line": 3,
"column": 1
},
"groupId": null
"groupId": null,
"exceptionDocURL": null
}));
@ -590,7 +613,7 @@ stubPackets.set("console.log('foobar', 'test')", {
},
"private": false,
"styles": [],
"timeStamp": 1475932482736,
"timeStamp": 1476572494539,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -624,7 +647,7 @@ stubPackets.set("console.log(undefined)", {
},
"private": false,
"styles": [],
"timeStamp": 1475932485201,
"timeStamp": 1476572496789,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -656,7 +679,7 @@ stubPackets.set("console.warn('danger, will robinson!')", {
},
"private": false,
"styles": [],
"timeStamp": 1475932487905,
"timeStamp": 1476572499458,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -690,7 +713,7 @@ stubPackets.set("console.log(NaN)", {
},
"private": false,
"styles": [],
"timeStamp": 1475932490983,
"timeStamp": 1476572501339,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -724,7 +747,7 @@ stubPackets.set("console.log(null)", {
},
"private": false,
"styles": [],
"timeStamp": 1475932493685,
"timeStamp": 1476572504208,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -756,7 +779,7 @@ stubPackets.set("console.log('鼬')", {
},
"private": false,
"styles": [],
"timeStamp": 1475932496157,
"timeStamp": 1476572507048,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -785,7 +808,7 @@ stubPackets.set("console.clear()", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932498831,
"timeStamp": 1476572509784,
"timer": null,
"workerType": "none",
"styles": [],
@ -820,7 +843,7 @@ stubPackets.set("console.count('bar')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932502090,
"timeStamp": 1476572512209,
"timer": null,
"workerType": "none",
"styles": [],
@ -874,7 +897,7 @@ stubPackets.set("console.assert(false, {message: 'foobar'})", {
},
"private": false,
"styles": [],
"timeStamp": 1475932504985,
"timeStamp": 1476572514941,
"timer": null,
"stacktrace": [
{
@ -915,7 +938,7 @@ stubPackets.set("console.log('hello \nfrom \rthe \"string world!')", {
},
"private": false,
"styles": [],
"timeStamp": 1475932507548,
"timeStamp": 1476572517131,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -947,7 +970,7 @@ stubPackets.set("console.log('úṇĩçödê țĕșť')", {
},
"private": false,
"styles": [],
"timeStamp": 1475932510208,
"timeStamp": 1476572519136,
"timer": null,
"workerType": "none",
"category": "webdev"
@ -966,7 +989,7 @@ stubPackets.set("console.dirxml(window)", {
"extensible": true,
"frozen": false,
"sealed": false,
"ownPropertyLength": 805,
"ownPropertyLength": 806,
"preview": {
"kind": "ObjectWithURL",
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html"
@ -990,7 +1013,7 @@ stubPackets.set("console.dirxml(window)", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932512694,
"timeStamp": 1476572521656,
"timer": null,
"workerType": "none",
"styles": [],
@ -1020,7 +1043,7 @@ stubPackets.set("console.trace()", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932515089,
"timeStamp": 1476572524381,
"timer": null,
"stacktrace": [
{
@ -1075,10 +1098,10 @@ stubPackets.set("console.time('bar')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932517857,
"timeStamp": 1476572526421,
"timer": {
"name": "bar",
"started": 1855.08
"started": 1214.4750000000001
},
"workerType": "none",
"styles": [],
@ -1110,9 +1133,9 @@ stubPackets.set("console.timeEnd('bar')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932517859,
"timeStamp": 1476572526423,
"timer": {
"duration": 2,
"duration": 1.8049999999998363,
"name": "bar"
},
"workerType": "none",
@ -1145,7 +1168,7 @@ stubPackets.set("console.table('bar')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932520567,
"timeStamp": 1476572528374,
"timer": null,
"workerType": "none",
"styles": [],
@ -1194,7 +1217,7 @@ stubPackets.set("console.table(['a', 'b', 'c'])", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932523995,
"timeStamp": 1476572530339,
"timer": null,
"workerType": "none",
"styles": [],
@ -1226,7 +1249,7 @@ stubPackets.set("console.group('bar')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932526918,
"timeStamp": 1476572532126,
"timer": null,
"workerType": "none",
"styles": [],
@ -1258,7 +1281,7 @@ stubPackets.set("console.groupEnd('bar')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932526919,
"timeStamp": 1476572532127,
"timer": null,
"workerType": "none",
"styles": [],
@ -1290,7 +1313,7 @@ stubPackets.set("console.groupCollapsed('foo')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932529277,
"timeStamp": 1476572533893,
"timer": null,
"workerType": "none",
"styles": [],
@ -1322,7 +1345,7 @@ stubPackets.set("console.groupEnd('foo')", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932529279,
"timeStamp": 1476572533897,
"timer": null,
"workerType": "none",
"styles": [],
@ -1352,7 +1375,7 @@ stubPackets.set("console.group()", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932531706,
"timeStamp": 1476572535552,
"timer": null,
"workerType": "none",
"styles": [],
@ -1382,7 +1405,7 @@ stubPackets.set("console.groupEnd()", {
"userContextId": 0
},
"private": false,
"timeStamp": 1475932531707,
"timeStamp": 1476572535554,
"timer": null,
"workerType": "none",
"styles": [],

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

@ -32,9 +32,10 @@ stubPreparedMessages.set("new Date(0)", new ConsoleMessage({
}
},
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"log\",\"parameters\":{\"type\":\"object\",\"actor\":\"server1.conn0.child1/obj30\",\"class\":\"Date\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":0,\"preview\":{\"timestamp\":0}},\"repeatId\":null,\"stacktrace\":null,\"frame\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"log\",\"parameters\":{\"type\":\"object\",\"actor\":\"server1.conn0.child1/obj30\",\"class\":\"Date\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":0,\"preview\":{\"timestamp\":0}},\"repeatId\":null,\"stacktrace\":null,\"frame\":null,\"groupId\":null}",
"stacktrace": null,
"frame": null
"frame": null,
"groupId": null
}));
stubPreparedMessages.set("asdf()", new ConsoleMessage({
@ -48,9 +49,11 @@ stubPreparedMessages.set("asdf()", new ConsoleMessage({
"type": "undefined"
},
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":{\"type\":\"undefined\"},\"repeatId\":null,\"stacktrace\":null,\"frame\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":{\"type\":\"undefined\"},\"repeatId\":null,\"stacktrace\":null,\"frame\":null,\"groupId\":null,\"exceptionDocURL\":\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default\"}",
"stacktrace": null,
"frame": null
"frame": null,
"groupId": null,
"exceptionDocURL": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default"
}));
@ -69,7 +72,7 @@ stubPackets.set("new Date(0)", {
"timestamp": 0
}
},
"timestamp": 1474405330863,
"timestamp": 1476573073424,
"exception": null,
"helperResult": null
});
@ -80,7 +83,7 @@ stubPackets.set("asdf()", {
"result": {
"type": "undefined"
},
"timestamp": 1474405330881,
"timestamp": 1476573073442,
"exception": {
"type": "object",
"actor": "server1.conn0.child1/obj32",

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

@ -24,7 +24,8 @@ stubPreparedMessages.set("GET request", new NetworkEventMessage({
},
"response": {},
"source": "network",
"type": "log"
"type": "log",
"groupId": null
}));
stubPreparedMessages.set("XHR GET request", new NetworkEventMessage({
@ -38,7 +39,8 @@ stubPreparedMessages.set("XHR GET request", new NetworkEventMessage({
},
"response": {},
"source": "network",
"type": "log"
"type": "log",
"groupId": null
}));
stubPreparedMessages.set("XHR POST request", new NetworkEventMessage({
@ -52,7 +54,8 @@ stubPreparedMessages.set("XHR POST request", new NetworkEventMessage({
},
"response": {},
"source": "network",
"type": "log"
"type": "log",
"groupId": null
}));
@ -61,8 +64,8 @@ stubPackets.set("GET request", {
"type": "networkEvent",
"eventActor": {
"actor": "server1.conn0.child1/netEvent29",
"startedDateTime": "2016-09-14T02:38:18.046Z",
"timeStamp": 1473820698046,
"startedDateTime": "2016-10-15T23:12:04.196Z",
"timeStamp": 1476573124196,
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/inexistent.html",
"method": "GET",
"isXHR": false,
@ -102,8 +105,8 @@ stubPackets.set("XHR GET request", {
"type": "networkEvent",
"eventActor": {
"actor": "server1.conn1.child1/netEvent29",
"startedDateTime": "2016-09-14T02:38:18.812Z",
"timeStamp": 1473820698812,
"startedDateTime": "2016-10-15T23:12:05.690Z",
"timeStamp": 1476573125690,
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/inexistent.html",
"method": "GET",
"isXHR": true,
@ -143,8 +146,8 @@ stubPackets.set("XHR POST request", {
"type": "networkEvent",
"eventActor": {
"actor": "server1.conn2.child1/netEvent29",
"startedDateTime": "2016-09-14T02:38:19.483Z",
"timeStamp": 1473820699483,
"startedDateTime": "2016-10-15T23:12:07.158Z",
"timeStamp": 1476573127158,
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/inexistent.html",
"method": "POST",
"isXHR": true,

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

@ -22,7 +22,7 @@ stubPreparedMessages.set("ReferenceError: asdf is not defined", new ConsoleMessa
"messageText": "ReferenceError: asdf is not defined",
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"log\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":[{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":3,\"columnNumber\":5,\"functionName\":\"bar\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":6,\"columnNumber\":5,\"functionName\":\"foo\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":9,\"columnNumber\":3,\"functionName\":null}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"line\":3,\"column\":5}}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"log\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":[{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":3,\"columnNumber\":5,\"functionName\":\"bar\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":6,\"columnNumber\":5,\"functionName\":\"foo\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":9,\"columnNumber\":3,\"functionName\":null}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"line\":3,\"column\":5},\"groupId\":null,\"exceptionDocURL\":\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default\"}",
"stacktrace": [
{
"filename": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error",
@ -47,7 +47,9 @@ stubPreparedMessages.set("ReferenceError: asdf is not defined", new ConsoleMessa
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error",
"line": 3,
"column": 5
}
},
"groupId": null,
"exceptionDocURL": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default"
}));
@ -63,7 +65,7 @@ stubPackets.set("ReferenceError: asdf is not defined", {
"lineNumber": 3,
"columnNumber": 5,
"category": "content javascript",
"timeStamp": 1473960366996,
"timeStamp": 1476573167137,
"warning": false,
"error": false,
"exception": true,

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

@ -36,6 +36,7 @@ exports.ConsoleMessage = Immutable.Record({
stacktrace: null,
frame: null,
groupId: null,
exceptionDocURL: null,
});
exports.NetworkEventMessage = Immutable.Record({

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

@ -163,6 +163,7 @@ function transformPacket(packet) {
messageText: pageError.errorMessage,
stacktrace: pageError.stacktrace ? pageError.stacktrace : null,
frame,
exceptionDocURL: pageError.exceptionDocURL,
});
}
@ -181,6 +182,7 @@ function transformPacket(packet) {
default: {
let {
exceptionMessage: messageText,
exceptionDocURL,
result: parameters
} = packet;
@ -191,6 +193,7 @@ function transformPacket(packet) {
level,
messageText,
parameters,
exceptionDocURL,
});
}
}

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

@ -36,6 +36,7 @@
#include "mozIApplication.h"
#if defined(XP_WIN) && defined(ACCESSIBILITY)
#include "mozilla/a11y/AccessibleWrap.h"
#include "mozilla/WindowsVersion.h"
#endif
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/StyleSheetInlines.h"
@ -1358,14 +1359,12 @@ ContentParent::Init()
// If accessibility is running in chrome process then start it in content
// process.
if (nsIPresShell::IsAccessibilityActive()) {
#if !defined(XP_WIN)
Unused << SendActivateA11y();
#else
// On Windows we currently only enable a11y in the content process
// for testing purposes.
if (Preferences::GetBool(kForceEnableE10sPref, false)) {
#if defined(XP_WIN)
if (IsVistaOrLater()) {
Unused << SendActivateA11y();
}
#else
Unused << SendActivateA11y();
#endif
}
#endif
@ -2789,14 +2788,12 @@ ContentParent::Observe(nsISupports* aSubject,
if (*aData == '1') {
// Make sure accessibility is running in content process when
// accessibility gets initiated in chrome process.
#if !defined(XP_WIN)
Unused << SendActivateA11y();
#else
// On Windows we currently only enable a11y in the content process
// for testing purposes.
if (Preferences::GetBool(kForceEnableE10sPref, false)) {
#if defined(XP_WIN)
if (IsVistaOrLater()) {
Unused << SendActivateA11y();
}
#else
Unused << SendActivateA11y();
#endif
} else {
// If possible, shut down accessibility in content process when

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

@ -215,6 +215,10 @@ public:
virtual RefPtr<ShutdownPromise> HandleShutdown();
virtual void HandleVideoSuspendTimeout() = 0;
virtual void HandleResumeVideoDecoding();
virtual void DumpDebugInfo() {}
protected:
@ -272,6 +276,7 @@ public:
void Enter()
{
MOZ_ASSERT(!mMaster->mVideoDecodeSuspended);
MOZ_ASSERT(!mMetadataRequest.Exists());
SLOG("Dispatching AsyncReadMetadata");
@ -312,6 +317,17 @@ public:
return MediaDecoder::SeekPromise::CreateAndReject(true, __func__);
}
void HandleVideoSuspendTimeout() override
{
// Do nothing since no decoders are created yet.
}
void HandleResumeVideoDecoding() override
{
// We never suspend video decoding in this state.
MOZ_ASSERT(false, "Shouldn't have suspended video decoding.");
}
private:
void OnMetadataRead(MetadataHolder* aMetadata);
@ -336,7 +352,11 @@ class MediaDecoderStateMachine::WaitForCDMState
public:
explicit WaitForCDMState(Master* aPtr) : StateObject(aPtr) {}
void Enter(bool aPendingDormant) { mPendingDormant = aPendingDormant; }
void Enter(bool aPendingDormant)
{
MOZ_ASSERT(!mMaster->mVideoDecodeSuspended);
mPendingDormant = aPendingDormant;
}
State GetState() const override
{
@ -355,6 +375,17 @@ public:
return mMaster->mQueuedSeek.mPromise.Ensure(__func__);
}
void HandleVideoSuspendTimeout() override
{
// Do nothing since no decoders are created yet.
}
void HandleResumeVideoDecoding() override
{
// We never suspend video decoding in this state.
MOZ_ASSERT(false, "Shouldn't have suspended video decoding.");
}
private:
bool mPendingDormant = false;
};
@ -388,6 +419,16 @@ public:
mMaster->mQueuedSeek.mTarget = aTarget;
return mMaster->mQueuedSeek.mPromise.Ensure(__func__);
}
void HandleVideoSuspendTimeout() override
{
// Do nothing since we've released decoders in Enter().
}
void HandleResumeVideoDecoding() override
{
// Do nothing since we won't resume decoding until exiting dormant.
}
};
class MediaDecoderStateMachine::DecodingFirstFrameState
@ -425,6 +466,17 @@ public:
RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget) override;
void HandleVideoSuspendTimeout() override
{
// Do nothing for we need to decode the 1st video frame to get the dimensions.
}
void HandleResumeVideoDecoding() override
{
// We never suspend video decoding in this state.
MOZ_ASSERT(false, "Shouldn't have suspended video decoding.");
}
private:
// Notify FirstFrameLoaded if having decoded first frames and
// transition to SEEKING if there is any pending seek, or DECODING otherwise.
@ -508,6 +560,15 @@ public:
return true;
}
void HandleVideoSuspendTimeout() override
{
if (mMaster->HasVideo()) {
mMaster->mVideoDecodeSuspended = true;
mMaster->mOnPlaybackEvent.Notify(MediaEventType::EnterVideoSuspend);
Reader()->SetVideoBlankDecode(true);
}
}
void DumpDebugInfo() override
{
SDUMP("mIsPrerolling=%d", mIsPrerolling);
@ -595,6 +656,15 @@ public:
{
mSeekJob = Move(aSeekJob);
// Always switch off the blank decoder otherwise we might become visible
// in the middle of seeking and won't have a valid video frame to show
// when seek is done.
if (mMaster->mVideoDecodeSuspended) {
mMaster->mVideoDecodeSuspended = false;
mMaster->mOnPlaybackEvent.Notify(MediaEventType::ExitVideoSuspend);
Reader()->SetVideoBlankDecode(false);
}
// SeekTask will register its callbacks to MediaDecoderReaderWrapper.
mMaster->CancelMediaDecoderReaderWrapperCallback();
@ -684,6 +754,17 @@ public:
RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget) override;
void HandleVideoSuspendTimeout() override
{
// Do nothing since we want a valid video frame to show when seek is done.
}
void HandleResumeVideoDecoding() override
{
// We set mVideoDecodeSuspended to false in Enter().
MOZ_ASSERT(false, "Shouldn't have suspended video decoding.");
}
private:
void OnSeekTaskResolved(const SeekTaskResolveValue& aValue)
{
@ -785,6 +866,15 @@ public:
RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget) override;
void HandleVideoSuspendTimeout() override
{
if (mMaster->HasVideo()) {
mMaster->mVideoDecodeSuspended = true;
mMaster->mOnPlaybackEvent.Notify(MediaEventType::EnterVideoSuspend);
Reader()->SetVideoBlankDecode(true);
}
}
private:
TimeStamp mBufferingStart;
@ -866,6 +956,11 @@ public:
return true;
}
void HandleVideoSuspendTimeout() override
{
// Do nothing since no decoding is going on.
}
private:
bool mSentPlaybackEndedEvent = false;
};
@ -904,6 +999,16 @@ public:
MOZ_DIAGNOSTIC_ASSERT(false, "Already shutting down.");
return nullptr;
}
void HandleVideoSuspendTimeout() override
{
MOZ_DIAGNOSTIC_ASSERT(false, "Already shutting down.");
}
void HandleResumeVideoDecoding() override
{
MOZ_DIAGNOSTIC_ASSERT(false, "Already shutting down.");
}
};
bool
@ -932,6 +1037,78 @@ StateObject::HandleShutdown()
return SetState<ShutdownState>();
}
static void
ReportRecoveryTelemetry(const TimeStamp& aRecoveryStart,
const MediaInfo& aMediaInfo,
bool aIsHardwareAccelerated)
{
MOZ_ASSERT(NS_IsMainThread());
if (!aMediaInfo.HasVideo()) {
return;
}
// Keyed by audio+video or video alone, hardware acceleration,
// and by a resolution range.
nsCString key(aMediaInfo.HasAudio() ? "AV" : "V");
key.AppendASCII(aIsHardwareAccelerated ? "(hw)," : ",");
static const struct { int32_t mH; const char* mRes; } sResolutions[] = {
{ 240, "0-240" },
{ 480, "241-480" },
{ 720, "481-720" },
{ 1080, "721-1080" },
{ 2160, "1081-2160" }
};
const char* resolution = "2161+";
int32_t height = aMediaInfo.mVideo.mImage.height;
for (const auto& res : sResolutions) {
if (height <= res.mH) {
resolution = res.mRes;
break;
}
}
key.AppendASCII(resolution);
TimeDuration duration = TimeStamp::Now() - aRecoveryStart;
double duration_ms = duration.ToMilliseconds();
Telemetry::Accumulate(Telemetry::VIDEO_SUSPEND_RECOVERY_TIME_MS,
key,
uint32_t(duration_ms + 0.5));
Telemetry::Accumulate(Telemetry::VIDEO_SUSPEND_RECOVERY_TIME_MS,
NS_LITERAL_CSTRING("All"),
uint32_t(duration_ms + 0.5));
}
void
MediaDecoderStateMachine::
StateObject::HandleResumeVideoDecoding()
{
MOZ_ASSERT(mMaster->mVideoDecodeSuspended);
// Start counting recovery time from right now.
TimeStamp start = TimeStamp::Now();
// Local reference to mInfo, so that it will be copied in the lambda below.
auto& info = Info();
bool hw = Reader()->VideoIsHardwareAccelerated();
// Start video-only seek to the current time.
SeekJob seekJob;
const SeekTarget::Type type = mMaster->HasAudio()
? SeekTarget::Type::Accurate
: SeekTarget::Type::PrevSyncPoint;
seekJob.mTarget = SeekTarget(mMaster->GetMediaTime(),
type,
MediaDecoderEventVisibility::Suppressed,
true /* aVideoOnly */);
SetState<SeekingState>(Move(seekJob))->Then(
AbstractThread::MainThread(), __func__,
[start, info, hw](){ ReportRecoveryTelemetry(start, info, hw); },
[](){});
}
void
MediaDecoderStateMachine::
DecodeMetadataState::OnMetadataRead(MetadataHolder* aMetadata)
@ -1044,6 +1221,8 @@ DecodingFirstFrameState::Enter()
return;
}
MOZ_ASSERT(!mMaster->mVideoDecodeSuspended);
// Dispatch tasks to decode first frames.
mMaster->DispatchDecodeTasksIfNeeded();
}
@ -1102,6 +1281,14 @@ DecodingState::Enter()
// transitioning to DECODING.
MOZ_ASSERT(!mMaster->mQueuedSeek.Exists());
if (!mMaster->mIsVisible &&
!mMaster->mVideoDecodeSuspendTimer.IsScheduled() &&
!mMaster->mVideoDecodeSuspended) {
// If we are not visible and the timer is not schedule, it means the timer
// has timed out and we should suspend video decoding now if necessary.
HandleVideoSuspendTimeout();
}
if (mMaster->CheckIfDecodeComplete()) {
SetState<CompletedState>();
return;
@ -2200,47 +2387,6 @@ void MediaDecoderStateMachine::PlayStateChanged()
ScheduleStateMachine();
}
static void
ReportRecoveryTelemetry(const TimeStamp& aRecoveryStart,
const MediaInfo& aMediaInfo,
bool aIsHardwareAccelerated)
{
MOZ_ASSERT(NS_IsMainThread());
if (!aMediaInfo.HasVideo()) {
return;
}
// Keyed by audio+video or video alone, hardware acceleration,
// and by a resolution range.
nsCString key(aMediaInfo.HasAudio() ? "AV" : "V");
key.AppendASCII(aIsHardwareAccelerated ? "(hw)," : ",");
static const struct { int32_t mH; const char* mRes; } sResolutions[] = {
{ 240, "0-240" },
{ 480, "241-480" },
{ 720, "481-720" },
{ 1080, "721-1080" },
{ 2160, "1081-2160" }
};
const char* resolution = "2161+";
int32_t height = aMediaInfo.mVideo.mImage.height;
for (const auto& res : sResolutions) {
if (height <= res.mH) {
resolution = res.mRes;
break;
}
}
key.AppendASCII(resolution);
TimeDuration duration = TimeStamp::Now() - aRecoveryStart;
double duration_ms = duration.ToMilliseconds();
Telemetry::Accumulate(Telemetry::VIDEO_SUSPEND_RECOVERY_TIME_MS,
key,
uint32_t(duration_ms + 0.5));
Telemetry::Accumulate(Telemetry::VIDEO_SUSPEND_RECOVERY_TIME_MS,
NS_LITERAL_CSTRING("All"),
uint32_t(duration_ms + 0.5));
}
void MediaDecoderStateMachine::VisibilityChanged()
{
MOZ_ASSERT(OnTaskQueue());
@ -2248,10 +2394,6 @@ void MediaDecoderStateMachine::VisibilityChanged()
"mVideoDecodeSuspended=%c, mIsReaderSuspended=%d",
mIsVisible.Ref(), mVideoDecodeSuspended ? 'T' : 'F', mIsReaderSuspended.Ref());
if (mInfo.isNothing() || !HasVideo()) {
return;
}
// Start timer to trigger suspended decoding state when going invisible.
if (!mIsVisible) {
TimeStamp target = TimeStamp::Now() + SuspendBackgroundVideoDelay();
@ -2269,42 +2411,7 @@ void MediaDecoderStateMachine::VisibilityChanged()
mVideoDecodeSuspendTimer.Reset();
if (mVideoDecodeSuspended) {
mVideoDecodeSuspended = false;
mOnPlaybackEvent.Notify(MediaEventType::ExitVideoSuspend);
mReader->SetVideoBlankDecode(false);
if (mIsReaderSuspended) {
return;
}
// If an existing seek is in flight don't bother creating a new
// one to catch up.
if (mState == DECODER_STATE_SEEKING || mQueuedSeek.Exists()) {
return;
}
// Start counting recovery time from right now.
TimeStamp start = TimeStamp::Now();
// Local reference to mInfo, so that it will be copied in the lambda below.
auto& info = Info();
bool hw = mReader->VideoIsHardwareAccelerated();
// Start video-only seek to the current time.
SeekJob seekJob;
const SeekTarget::Type type = HasAudio()
? SeekTarget::Type::Accurate
: SeekTarget::Type::PrevSyncPoint;
seekJob.mTarget = SeekTarget(GetMediaTime(),
type,
MediaDecoderEventVisibility::Suppressed,
true /* aVideoOnly */);
mStateObj->SetState<SeekingState>(Move(seekJob))->Then(
AbstractThread::MainThread(), __func__,
[start, info, hw](){ ReportRecoveryTelemetry(start, info, hw); },
[](){});
mStateObj->HandleResumeVideoDecoding();
}
}
@ -3233,9 +3340,7 @@ MediaDecoderStateMachine::OnSuspendTimerResolved()
{
DECODER_LOG("OnSuspendTimerResolved");
mVideoDecodeSuspendTimer.CompleteRequest();
mVideoDecodeSuspended = true;
mOnPlaybackEvent.Notify(MediaEventType::EnterVideoSuspend);
mReader->SetVideoBlankDecode(true);
mStateObj->HandleVideoSuspendTimeout();
}
void

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

@ -307,9 +307,8 @@ TimeIntervals
TrackBuffersManager::Buffered() const
{
MSE_DEBUG("");
// http://w3c.github.io/media-source/index.html#widl-SourceBuffer-buffered
// 2. Let highest end time be the largest track buffer ranges end time across all the track buffers managed by this SourceBuffer object.
TimeUnit highestEndTime = HighestEndTime();
MonitorAutoLock mon(mMonitor);
nsTArray<const TimeIntervals*> tracks;
@ -320,6 +319,9 @@ TrackBuffersManager::Buffered() const
tracks.AppendElement(&mAudioBufferedRanges);
}
// 2. Let highest end time be the largest track buffer ranges end time across all the track buffers managed by this SourceBuffer object.
TimeUnit highestEndTime = HighestEndTime(tracks);
// 3. Let intersection ranges equal a TimeRange object containing a single range from 0 to highest end time.
TimeIntervals intersection{TimeInterval(TimeUnit::FromSeconds(0), highestEndTime)};
@ -1979,7 +1981,6 @@ TimeUnit
TrackBuffersManager::HighestEndTime() const
{
MonitorAutoLock mon(mMonitor);
TimeUnit highestEndTime;
nsTArray<const TimeIntervals*> tracks;
if (HasVideo()) {
@ -1988,7 +1989,18 @@ TrackBuffersManager::HighestEndTime() const
if (HasAudio()) {
tracks.AppendElement(&mAudioBufferedRanges);
}
for (const auto& trackRanges : tracks) {
return HighestEndTime(tracks);
}
TimeUnit
TrackBuffersManager::HighestEndTime(
nsTArray<const TimeIntervals*>& aTracks) const
{
mMonitor.AssertCurrentThreadOwns();
TimeUnit highestEndTime;
for (const auto& trackRanges : aTracks) {
highestEndTime = std::max(trackRanges->GetEnd(), highestEndTime);
}
return highestEndTime;

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

@ -467,6 +467,10 @@ private:
// Strong references to external objects.
nsMainThreadPtrHandle<MediaSourceDecoder> mParentDecoder;
// Return public highest end time across all aTracks.
// Monitor must be held.
media::TimeUnit HighestEndTime(nsTArray<const media::TimeIntervals*>& aTracks) const;
// Set to true if mediasource state changed to ended.
Atomic<bool> mEnded;

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

@ -686,17 +686,12 @@ PluginModuleParent::PluginModuleParent(bool aIsChrome, bool aAllowAsyncInit)
, mIsNPShutdownPending(false)
, mAsyncNewRv(NS_ERROR_NOT_INITIALIZED)
{
#if defined(XP_WIN) || defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
mIsStartingAsync = aAllowAsyncInit &&
Preferences::GetBool(kAsyncInitPref, false) &&
!BrowserTabsRemoteAutostart();
#if defined(MOZ_CRASHREPORTER)
CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("AsyncPluginInit"),
mIsStartingAsync ?
NS_LITERAL_CSTRING("1") :
NS_LITERAL_CSTRING("0"));
#endif
#endif
}
PluginModuleParent::~PluginModuleParent()

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

@ -14,7 +14,6 @@
#include "nsServiceManagerUtils.h"
#include "nsString.h"
#include "nsIXULAppInfo.h"
#include "nsWindowsDllInterceptor.h"
#include "WinUtils.h"
#include "mozilla/ArrayUtils.h"
@ -437,95 +436,6 @@ ProcessOrDeferMessage(HWND hwnd,
return res;
}
/*
* It is bad to subclass a window when neutering is active because you'll end
* up subclassing the *neutered* window procedure instead of the real window
* procedure. Since CreateWindow* fires WM_CREATE (and could thus trigger
* neutering), we intercept these calls and suppress neutering for the duration
* of the call. This ensures that any subsequent subclassing replaces the
* correct window procedure.
*/
WindowsDllInterceptor sUser32Interceptor;
typedef HWND (WINAPI *CreateWindowExWPtr)(DWORD,LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID);
typedef HWND (WINAPI *CreateWindowExAPtr)(DWORD,LPCSTR,LPCSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID);
typedef HWND (WINAPI *CreateWindowWPtr)(LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID);
typedef HWND (WINAPI *CreateWindowAPtr)(LPCSTR,LPCSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID);
CreateWindowExWPtr sCreateWindowExWStub = nullptr;
CreateWindowExAPtr sCreateWindowExAStub = nullptr;
CreateWindowWPtr sCreateWindowWStub = nullptr;
CreateWindowAPtr sCreateWindowAStub = nullptr;
HWND WINAPI
CreateWindowExWHook(DWORD aExStyle, LPCWSTR aClassName, LPCWSTR aWindowName,
DWORD aStyle, int aX, int aY, int aWidth, int aHeight,
HWND aParent, HMENU aMenu, HINSTANCE aInstance,
LPVOID aParam)
{
SuppressedNeuteringRegion doNotNeuterThisWindowYet;
return sCreateWindowExWStub(aExStyle, aClassName, aWindowName, aStyle, aX, aY,
aWidth, aHeight, aParent, aMenu, aInstance, aParam);
}
HWND WINAPI
CreateWindowExAHook(DWORD aExStyle, LPCSTR aClassName, LPCSTR aWindowName,
DWORD aStyle, int aX, int aY, int aWidth, int aHeight,
HWND aParent, HMENU aMenu, HINSTANCE aInstance,
LPVOID aParam)
{
SuppressedNeuteringRegion doNotNeuterThisWindowYet;
return sCreateWindowExAStub(aExStyle, aClassName, aWindowName, aStyle, aX, aY,
aWidth, aHeight, aParent, aMenu, aInstance, aParam);
}
HWND WINAPI
CreateWindowWHook(LPCWSTR aClassName, LPCWSTR aWindowName, DWORD aStyle, int aX,
int aY, int aWidth, int aHeight, HWND aParent, HMENU aMenu,
HINSTANCE aInstance, LPVOID aParam)
{
SuppressedNeuteringRegion doNotNeuterThisWindowYet;
return sCreateWindowWStub(aClassName, aWindowName, aStyle, aX, aY, aWidth,
aHeight, aParent, aMenu, aInstance, aParam);
}
HWND WINAPI
CreateWindowAHook(LPCSTR aClassName, LPCSTR aWindowName, DWORD aStyle, int aX,
int aY, int aWidth, int aHeight, HWND aParent, HMENU aMenu,
HINSTANCE aInstance, LPVOID aParam)
{
SuppressedNeuteringRegion doNotNeuterThisWindowYet;
return sCreateWindowAStub(aClassName, aWindowName, aStyle, aX, aY, aWidth,
aHeight, aParent, aMenu, aInstance, aParam);
}
void
InitCreateWindowHook()
{
// Forcing these interceptions to be detours due to conflicts with
// NVIDIA Optimus DLLs that are injected into our process.
sUser32Interceptor.Init("user32.dll");
if (!sCreateWindowExWStub) {
sUser32Interceptor.AddDetour("CreateWindowExW",
reinterpret_cast<intptr_t>(CreateWindowExWHook),
(void**) &sCreateWindowExWStub);
}
if (!sCreateWindowExAStub) {
sUser32Interceptor.AddDetour("CreateWindowExA",
reinterpret_cast<intptr_t>(CreateWindowExAHook),
(void**) &sCreateWindowExAStub);
}
if (!sCreateWindowWStub) {
sUser32Interceptor.AddDetour("CreateWindowW",
reinterpret_cast<intptr_t>(CreateWindowWHook),
(void**) &sCreateWindowWStub);
}
if (!sCreateWindowAStub) {
sUser32Interceptor.AddDetour("CreateWindowA",
reinterpret_cast<intptr_t>(CreateWindowAHook),
(void**) &sCreateWindowAStub);
}
}
} // namespace
// We need the pointer value of this in PluginInstanceChild.
@ -802,8 +712,6 @@ InitUIThread()
gCOMWindow = FindCOMWindow();
}
MOZ_ASSERT(gWinEventHook);
InitCreateWindowHook();
}
} // namespace windows

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

@ -1022,7 +1022,7 @@ fails-if(Android) fails-if(usesRepeatResampling) == 421885-1.xml 421885-1-ref.xm
== 422678-1.html 422678-1-ref.html
== 423130-1.html 423130-1-ref.html
== 423385-1.html 423385-1-ref.html
== 423599-1.html 423599-1-ref.html
random-if(gtkWidget) == 423599-1.html 423599-1-ref.html # bug 1309095
== 423676-1.html 423676-1-ref.html
fails == 423823-1.html 423823-1-ref.html # scrolling rowgroups were removed in bug 28800
== 424074-1.xul 424074-1-ref.xul

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

@ -81,11 +81,11 @@ skip-if(Android) == grid-auto-min-sizing-percent-001.html grid-auto-min-sizing-p
== grid-item-justify-002.html grid-item-justify-002-ref.html
== grid-item-stretch-001.html grid-item-stretch-001-ref.html
== grid-item-self-baseline-001.html grid-item-self-baseline-001-ref.html
skip-if(!gtkWidget) == grid-item-content-baseline-001.html grid-item-content-baseline-001-ref.html # depends on exact Ahem baseline font metrics which seems to differ between platforms
skip-if(!gtkWidget) == grid-item-content-baseline-002.html grid-item-content-baseline-002-ref.html # ditto
skip-if(!gtkWidget) == grid-item-mixed-baseline-001.html grid-item-mixed-baseline-001-ref.html # ditto
skip-if(!gtkWidget) == grid-item-mixed-baseline-002.html grid-item-mixed-baseline-002-ref.html # ditto
skip-if(!gtkWidget) == grid-item-mixed-baseline-003.html grid-item-mixed-baseline-003-ref.html # ditto
random-if(http.oscpu!="Linux\u0020i686") == grid-item-content-baseline-001.html grid-item-content-baseline-001-ref.html # depends on exact Ahem baseline font metrics which seems to differ between platforms: bug 1310792
random-if(http.oscpu!="Linux\u0020i686") == grid-item-content-baseline-002.html grid-item-content-baseline-002-ref.html # ditto
random-if(http.oscpu!="Linux\u0020i686") == grid-item-mixed-baseline-001.html grid-item-mixed-baseline-001-ref.html # ditto
random-if(http.oscpu!="Linux\u0020i686") == grid-item-mixed-baseline-002.html grid-item-mixed-baseline-002-ref.html # ditto
random-if(http.oscpu!="Linux\u0020i686") == grid-item-mixed-baseline-003.html grid-item-mixed-baseline-003-ref.html # ditto
skip-if(!gtkWidget) == grid-item-mixed-baseline-004.html grid-item-mixed-baseline-004-ref.html # ditto
== grid-align-content-001.html grid-align-content-001-ref.html
== grid-justify-content-001.html grid-justify-content-001-ref.html

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

@ -64,7 +64,7 @@ fails-if(winWidget||cocoaWidget) == 617869-1.html 617869-1-ref.html
== 922550-1.html 922550-1-ref.html
== 958249.html 958249-ref.html
== font-text-styles.html font-text-styles-ref.html
fails-if(gtkWidget) random-if(winWidget&&!d2d) == font-text-styles-floater.html font-text-styles-floater-ref.html # bug 992846
random-if(gtkWidget) random-if(winWidget&&!d2d) == font-text-styles-floater.html font-text-styles-floater-ref.html # bug 992846
== inline-height-empty.html inline-height-empty-ref.html
HTTP(..) == indic-clusters-1.html indic-clusters-1-ref.html
== overflow-float-nooverflow.html overflow-float-nooverflow-ref.html

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

@ -14,9 +14,10 @@ include pagination/reftest.list
# Tests for cross-axis alignment (align-self / align-items properties)
fails == flexbox-align-self-baseline-horiz-2.xhtml flexbox-align-self-baseline-horiz-2-ref.xhtml # bug 793456, and possibly others
# This one fails on windows R (but not Ru, strangely). On Windows R, the
# single-line <label> flex item has a different background size in test vs. ref
fuzzy-if(cocoaWidget,1,2) random-if(winWidget) == flexbox-align-self-baseline-horiz-3.xhtml flexbox-align-self-baseline-horiz-3-ref.xhtml # XXXdholbert investigate
# This one fails on windows R (but not Ru, strangely) and GTK.
# On Windows R and GTK, the single-line <label> flex item has a different
# background size in test vs. ref
fuzzy-if(cocoaWidget,1,2) random-if(winWidget||gtkWidget) == flexbox-align-self-baseline-horiz-3.xhtml flexbox-align-self-baseline-horiz-3-ref.xhtml # XXXdholbert investigate
== flexbox-align-self-baseline-horiz-4.xhtml flexbox-align-self-baseline-horiz-4-ref.xhtml
# Tests for box-sizing on flex containers and flex items.

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

@ -5,7 +5,7 @@
HTTP(..) != download-1.html download-1-notref.html
HTTP(..) == download-2.html download-2-ref.html
HTTP(..) != download-2.html about:blank
random-if(winWidget) HTTP(..) == download-2-big.html download-2-big-otf.html # bug 470713
random-if(winWidget||gtkWidget) HTTP(..) == download-2-big.html download-2-big-otf.html # bug 470713
HTTP(..) != download-2-big-otf.html about:blank
asserts-if(Android&&!asyncPan,1-8) HTTP(..) != download-3-notref.html download-3.html # bug 1019192
asserts-if(Android,0-8) HTTP(..) == download-3-ref.html download-3.html # same bugs as above
@ -17,7 +17,7 @@ HTTP(..) == multiple-descriptor-1.html multiple-descriptor-1-ref.html
HTTP(..) != multiple-descriptor-1.html multiple-descriptor-1-notref.html
HTTP(..) == src-list-1.html src-list-1-ref.html
HTTP(..) == src-list-2.html src-list-2-ref.html
random-if(winWidget) HTTP(..) == src-list-2-big-otf.html src-list-2-big-ref.html # bug 470713
random-if(winWidget||gtkWidget) HTTP(..) == src-list-2-big-otf.html src-list-2-big-ref.html # bug 470713
HTTP(..) == src-list-format-1.html src-list-format-1-ref.html
HTTP(..) == src-list-format-2.html src-list-format-2-ref.html
HTTP(..) == src-list-format-3.html src-list-format-3-ref.html

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

@ -50,7 +50,7 @@ random-if(cocoaWidget) != impact-bold.html impact.html # bug 539418
== localized-family-names-004.html localized-family-names-004-ref.html
# family names with escaped spaces shouldn't match the names without the spaces
== familyname-escapedidents.html familyname-escapedidents-ref.html
fails-if(http.oscpu=="Linux\u0020x86_64") == familyname-escapedidents.html familyname-escapedidents-ref.html # bug 1309425
# weight mapping tests
HTTP(..) == normalmedium.html normalmedium-ref.html

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

@ -1,6 +1,6 @@
== dir-1.html dir-1-ref.html
== dir-2.html dir-2-ref.html
== dir-3.html dir-3-ref.html
random-if(gtkWidget) == dir-3.html dir-3-ref.html # bug 1309426
== dir-4.html dir-4-ref.html
== dir-5.html dir-5-ref.html
== dir-6.html dir-6-ref.html
@ -42,8 +42,8 @@ random-if(smallScreen&&Android) fuzzy(255,200) == mirror-op-1.html mirror-op-1-r
!= mfenced-8.html mfenced-8-ref.html
== mfenced-9.html mfenced-9-ref.html
fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == mfenced-10.html mfenced-10-ref.html # Windows versions without Cambria Math, see bug 670592
== mfenced-11.html mfenced-11-ref.html
== mfenced-12.html mfenced-12-ref.html
fails-if(http.oscpu=="Linux\u0020x86_64") == mfenced-11.html mfenced-11-ref.html # bug 670592
fails-if(http.oscpu=="Linux\u0020x86_64") == mfenced-12.html mfenced-12-ref.html # bug 670592
== mi-mathvariant-1.xhtml mi-mathvariant-1-ref.xhtml
== mi-mathvariant-2.xhtml mi-mathvariant-2-ref.xhtml
!= mi-mathvariant-3.html mi-mathvariant-3-ref.html
@ -113,7 +113,7 @@ fails == stretchy-mover-2a.html stretchy-mover-2-ref.html
== embellished-op-4-3.html embellished-op-4-3-ref.html
== embellished-op-5-1.html embellished-op-5-ref.html
== embellished-op-5-2.html embellished-op-5-ref.html
random-if(winWidget&&!/^Windows\x20NT\x205\.1/.test(http.oscpu)) == semantics-1.xhtml semantics-1-ref.xhtml # Windows versions with Cambria Math
fails-if(http.oscpu=="Linux\u0020x86_64") random-if(winWidget&&!/^Windows\x20NT\x205\.1/.test(http.oscpu)) == semantics-1.xhtml semantics-1-ref.xhtml # Windows versions with Cambria Math, Linux x86_64:bug 1309429
== semantics-2.html semantics-2-ref.html
== semantics-3.html semantics-3-ref.html
== semantics-4.html semantics-4-ref.html
@ -144,9 +144,9 @@ fails-if(skiaContent&&OSX>=1010) == scale-stretchy-3.xhtml scale-stretchy-3-ref.
== mpadded-5.html mpadded-5-ref.html
== mpadded-1-2.html mpadded-1-2-ref.html
== mpadded-6.html mpadded-6-ref.html
== mpadded-7.html mpadded-7-ref.html
== mpadded-8.html mpadded-8-ref.html
== mpadded-9.html mpadded-9-ref.html
random-if(gtkWidget) == mpadded-7.html mpadded-7-ref.html # bug 1309430
random-if(gtkWidget) == mpadded-8.html mpadded-8-ref.html # bug 1309430
random-if(gtkWidget) == mpadded-9.html mpadded-9-ref.html # bug 1309430
== math-display.html math-display-ref.html
== scriptlevel-1.html scriptlevel-1-ref.html
== scriptlevel-movablelimits-1.html scriptlevel-movablelimits-1-ref.html
@ -192,7 +192,7 @@ fails-if(skiaContent&&OSX>=1010) == scale-stretchy-3.xhtml scale-stretchy-3-ref.
== mo-lspace-rspace-4.html mo-lspace-rspace-4-ref.html
== mo-invisibleoperators.html mo-invisibleoperators-ref.html
== mo-invisibleoperators-2.html mo-invisibleoperators-2-ref.html
== mo-glyph-size.html mo-glyph-size-ref.html
random-if(gtkWidget) == mo-glyph-size.html mo-glyph-size-ref.html # bug 1309426
== maction-dynamic-3.html maction-dynamic-3-ref.html # bug 773482
== whitespace-trim-1.html whitespace-trim-1-ref.html
== whitespace-trim-2.html whitespace-trim-2-ref.html
@ -224,21 +224,21 @@ fuzzy-if(skiaContent,1,80) fails-if(winWidget&&/^Windows\x20NT\x205\.1/.test(htt
!= menclose-1o.html menclose-1-ref.html
!= menclose-1p.html menclose-1-ref.html
!= menclose-1q.html menclose-1-ref.html
== menclose-2-actuarial.html menclose-2-actuarial-ref.html
== menclose-2-bottom.html menclose-2-bottom-ref.html
== menclose-2-box.html menclose-2-box-ref.html
random-if(gtkWidget) == menclose-2-actuarial.html menclose-2-actuarial-ref.html # bug 1309426
random-if(gtkWidget) == menclose-2-bottom.html menclose-2-bottom-ref.html # bug 1309426
random-if(gtkWidget) == menclose-2-box.html menclose-2-box-ref.html # bug 1309426
== menclose-2-circle.html menclose-2-circle-ref.html
== menclose-2-downdiagonalstrike.html menclose-2-downdiagonalstrike-ref.html
== menclose-2-horizontalstrike.html menclose-2-horizontalstrike-ref.html
== menclose-2-left.html menclose-2-left-ref.html
fuzzy-if(skiaContent,80,5) == menclose-2-longdiv.html menclose-2-longdiv-ref.html
== menclose-2-right.html menclose-2-right-ref.html
== menclose-2-roundedbox.html menclose-2-roundedbox-ref.html
random-if(gtkWidget) == menclose-2-right.html menclose-2-right-ref.html # bug 1309426
random-if(gtkWidget) == menclose-2-roundedbox.html menclose-2-roundedbox-ref.html # bug 1309426
== menclose-2-top.html menclose-2-top-ref.html
== menclose-2-updiagonalarrow.html menclose-2-updiagonalarrow-ref.html
random-if(gtkWidget) == menclose-2-updiagonalarrow.html menclose-2-updiagonalarrow-ref.html # bug 1309426
== menclose-2-updiagonalstrike.html menclose-2-updiagonalstrike-ref.html
== menclose-2-verticalstrike.html menclose-2-verticalstrike-ref.html
== menclose-2-roundedbox.html menclose-2-roundedbox-ref.html
random-if(gtkWidget) == menclose-2-roundedbox.html menclose-2-roundedbox-ref.html # bug 1309426
== menclose-2-phasorangle.html menclose-2-phasorangle-ref.html
== menclose-3-box.html menclose-3-box-ref.html
== menclose-3-madruwb.html menclose-3-madruwb-ref.html
@ -318,7 +318,7 @@ fails-if(Android||/^Windows\x20NT\x205\.1/.test(http.oscpu)||OSX) == mathvariant
== rowlines-2a.html rowlines-2-ref.html
== rowlines-2b.html rowlines-2-ref.html
!= rowlines-3-1.html rowlines-3-1-ref.html
== rowlines-3-2.html rowlines-3-2-ref.html
random-if(gtkWidget) == rowlines-3-2.html rowlines-3-2-ref.html # bug 1309426
== tablespacing-1.html tablespacing-1-ref.html
== tablespacing-2.html tablespacing-2-ref.html
== tablespacing-3.html tablespacing-3-ref.html

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

@ -5,7 +5,7 @@ HTTP(..) == marker-string.html marker-string-ref.html
skip-if(Android) HTTP(..) == bidi-simple.html bidi-simple-ref.html # Fails on Android due to anti-aliasing
skip-if(!gtkWidget) fuzzy-if(gtkWidget,2,289) HTTP(..) == bidi-simple-scrolled.html bidi-simple-scrolled-ref.html # Fails on Windows and OSX due to anti-aliasing
fuzzy-if(Android,24,4000) fuzzy-if(cocoaWidget,1,40) fuzzy-if(asyncPan&&!layersGPUAccelerated,121,1836) HTTP(..) == scroll-rounding.html scroll-rounding-ref.html # bug 760264
fuzzy(2,453) fuzzy-if(skiaContent,9,2100) HTTP(..) == anonymous-block.html anonymous-block-ref.html
fuzzy(2,453) fuzzy-if(skiaContent,9,2100) fails-if(gtkWidget) HTTP(..) == anonymous-block.html anonymous-block-ref.html # gtkWidget:bug 1309103
HTTP(..) == false-marker-overlap.html false-marker-overlap-ref.html
HTTP(..) == visibility-hidden.html visibility-hidden-ref.html
fuzzy-if(asyncPan&&!layersGPUAccelerated,102,1724) fuzzy-if(gtkWidget,10,8) HTTP(..) == block-padding.html block-padding-ref.html
@ -22,7 +22,7 @@ HTTP(..) == table-cell.html table-cell-ref.html
fuzzy-if(gtkWidget,10,32) HTTP(..) == two-value-syntax.html two-value-syntax-ref.html
HTTP(..) == single-value.html single-value-ref.html
fuzzy-if(gtkWidget,10,2) HTTP(..) == atomic-under-marker.html atomic-under-marker-ref.html
fuzzy(1,2616) skip-if(Android) fuzzy-if(asyncPan&&!layersGPUAccelerated,102,12352) HTTP(..) == xulscroll.html xulscroll-ref.html
fuzzy(1,2616) skip-if(Android) fuzzy-if(asyncPan&&!layersGPUAccelerated,102,12352) fails-if(http.oscpu=="Linux\u0020x86_64") HTTP(..) == xulscroll.html xulscroll-ref.html # Linux x86_64:bug 1309107
HTTP(..) == combobox-zoom.html combobox-zoom-ref.html
# The vertical-text pref setting can be removed after bug 1138384 lands

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

@ -144,7 +144,7 @@ fuzzy-if(gtkWidget,1,177) fuzzy-if(skiaContent,1,50) HTTP(..) == wordwrap-03.htm
== word-spacing-01.html word-spacing-01-ref.html
# the following will fail when rendering with Core Text (see bug 389074) due to what appears to be
# an Apple bug: the presence of ZWNJ disturbs the positioning of an adjacent glyph. rdar://6427865
random-if(cocoaWidget) HTTP(..) == zwnj-01.xhtml zwnj-01-ref.xhtml
random-if(cocoaWidget) random-if(gtkWidget) HTTP(..) == zwnj-01.xhtml zwnj-01-ref.xhtml # gtkWidget:bug 1309113
HTTP(..) == zwnj-02.xhtml zwnj-02-ref.xhtml # HTTP(..) for ../filters.svg
!= zwnj-01.html zwnj-01-notref.html
== initial-zwj-1.html initial-zwj-1-ref.html

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

@ -869,6 +869,19 @@ Gecko_NewBasicShape(mozilla::StyleBasicShapeType aType)
return ptr.forget().take();
}
void
Gecko_ResetFilters(nsStyleEffects* effects, size_t new_len)
{
effects->mFilters.Clear();
effects->mFilters.SetLength(new_len);
}
void
Gecko_CopyFiltersFrom(nsStyleEffects* aSrc, nsStyleEffects* aDest)
{
aDest->mFilters = aSrc->mFilters;
}
NS_IMPL_THREADSAFE_FFI_REFCOUNTING(nsStyleCoord::Calc, Calc);
nsCSSShadowArray*

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

@ -318,6 +318,9 @@ void Gecko_CopyClipPathValueFrom(mozilla::StyleClipPath* dst, const mozilla::Sty
void Gecko_DestroyClipPath(mozilla::StyleClipPath* clip);
mozilla::StyleBasicShape* Gecko_NewBasicShape(mozilla::StyleBasicShapeType type);
void Gecko_ResetFilters(nsStyleEffects* effects, size_t new_len);
void Gecko_CopyFiltersFrom(nsStyleEffects* aSrc, nsStyleEffects* aDest);
void Gecko_FillAllBackgroundLists(nsStyleImageLayers* layers, uint32_t max_len);
void Gecko_FillAllMaskLists(nsStyleImageLayers* layers, uint32_t max_len);
NS_DECL_THREADSAFE_FFI_REFCOUNTING(nsStyleCoord::Calc, Calc);

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

@ -3605,7 +3605,7 @@ struct nsStyleFilter
return !(*this == aOther);
}
int32_t GetType() const {
uint32_t GetType() const {
return mType;
}
@ -3634,7 +3634,7 @@ struct nsStyleFilter
private:
void ReleaseRef();
int32_t mType; // see NS_STYLE_FILTER_* constants in nsStyleConsts.h
uint32_t mType; // see NS_STYLE_FILTER_* constants in nsStyleConsts.h
nsStyleCoord mFilterParameter; // coord, percent, factor, angle
union {
mozilla::css::URLValue* mURL;

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

@ -1164,4 +1164,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1485263056982000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1485350356111000);

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

@ -1,10 +1,11 @@
0.me.uk: could not connect to host
020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
0i0.nl: could not connect to host
0p.no: did not receive HSTS header
0x.sk: could not connect to host
0x1337.eu: could not connect to host
0x44.net: did not receive HSTS header
0xAA55.me: could not connect to host
0xaa55.me: could not connect to host
0xb612.org: could not connect to host
1018hosting.nl: did not receive HSTS header
1022996493.rsc.cdn77.org: could not connect to host
@ -34,6 +35,7 @@
4elements.com: max-age too low: 0
4mm.org: did not receive HSTS header
4sqsu.eu: could not connect to host
4vf.de: could not connect to host
50millionablaze.org: did not receive HSTS header
56ct.com: could not connect to host
60ych.net: did not receive HSTS header
@ -72,6 +74,7 @@ adams.net: max-age too low: 0
adamwk.com: did not receive HSTS header
adboos.com: did not receive HSTS header
addvocate.com: could not connect to host
aderal.io: could not connect to host
adevel.eu: could not connect to host
adhs-chaoten.net: did not receive HSTS header
admin.google.com: did not receive HSTS header (error ignored - included regardless)
@ -93,7 +96,6 @@ affinitysync.com: could not connect to host
aficionados.com.br: did not receive HSTS header
afp548.tk: could not connect to host
agbremen.de: did not receive HSTS header
ageg.ca: could not connect to host
agevio.com: could not connect to host
agilebits.net: could not connect to host
agonswim.com: did not receive HSTS header
@ -107,7 +109,6 @@ aircomms.com: did not receive HSTS header
aishnair.com: could not connect to host
aiticon.de: did not receive HSTS header
aiw-thkoeln.online: could not connect to host
ajmahal.com: could not connect to host
akclinics.org: did not receive HSTS header
akselimedia.fi: did not receive HSTS header
akutun.cl: did not receive HSTS header
@ -132,7 +133,6 @@ alkami.com: did not receive HSTS header
alkamitech.com: did not receive HSTS header
all-subtitles.com: did not receive HSTS header
allinnote.com: could not connect to host
allmbw.com: could not connect to host
allstarswithus.com: could not connect to host
alpha.irccloud.com: could not connect to host
alphabit-secure.com: could not connect to host
@ -157,6 +157,7 @@ andreasbreitenlohner.de: did not receive HSTS header
andreasolsson.se: could not connect to host
andrewmichaud.beer: could not connect to host
andrewmichaud.me: did not receive HSTS header
andreypopp.com: could not connect to host
androoz.se: did not receive HSTS header
andymartin.cc: did not receive HSTS header
anfsanchezo.me: could not connect to host
@ -206,6 +207,7 @@ arabdigitalexpression.org: did not receive HSTS header
aradulconteaza.ro: could not connect to host
aran.me.uk: could not connect to host
arbu.eu: max-age too low: 2419200
arksan.com.tr: could not connect to host
arlen.se: could not connect to host
armory.consulting: could not connect to host
armory.supplies: could not connect to host
@ -280,6 +282,7 @@ basicsolutionsus.com: did not receive HSTS header
bassh.net: did not receive HSTS header
baumstark.ca: did not receive HSTS header
bazarstupava.sk: did not receive HSTS header
bazdell.com: could not connect to host
bcbsmagentprofile.com: could not connect to host
bccx.com: could not connect to host
bckp.de: could not connect to host
@ -375,7 +378,7 @@ bngsecure.com: [Exception... "Component returned failure code: 0x80004005 (NS_ER
bobiji.com: did not receive HSTS header
bockenauer.at: max-age too low: 0
bodo-wolff.de: could not connect to host
bodyblog.nl: could not connect to host
bodyblog.nl: did not receive HSTS header
bodybuilding-legends.com: could not connect to host
bodyweightsolution.com: could not connect to host
boensou.com: did not receive HSTS header
@ -392,7 +395,6 @@ boomerang.com: could not connect to host
bootjp.me: did not receive HSTS header
boringsecurity.net: could not connect to host
boris.one: did not receive HSTS header
bosun.io: could not connect to host
botox.bz: did not receive HSTS header
bouwbedrijfpurmerend.nl: did not receive HSTS header
bowlroll.net: max-age too low: 0
@ -408,7 +410,9 @@ bran.cc: could not connect to host
branchtrack.com: did not receive HSTS header
brandon.so: could not connect to host
bregnedalsystems.dk: did not receive HSTS header
brideandgroomdirect.ie: did not receive HSTS header
brks.xyz: could not connect to host
brockmeyer.org: could not connect to host
broken-oak.com: could not connect to host
brokenhands.io: could not connect to host
brookechase.com: did not receive HSTS header
@ -499,6 +503,7 @@ cejhon.cz: could not connect to host
ceml.ch: did not receive HSTS header
centralvacsunlimited.net: did not receive HSTS header
centrepoint-community.com: could not connect to host
centricweb.com: could not connect to host
cerize.love: could not connect to host
cert.se: max-age too low: 2628001
certmgr.org: could not connect to host
@ -512,6 +517,7 @@ championsofregnum.com: did not receive HSTS header
changelab.cc: max-age too low: 0
chaos.fail: did not receive HSTS header
chargejuice.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]
charl.eu: could not connect to host
charmyadesara.com: could not connect to host
charnleyhouse.co.uk: max-age too low: 604800
chartpen.com: did not receive HSTS header
@ -555,6 +561,7 @@ citiagent.cz: could not connect to host
cityoflaurel.org: did not receive HSTS header
clara-baumert.de: could not connect to host
classicspublishing.com: could not connect to host
claudio4.com: did not receive HSTS header
clcleaningco.com: could not connect to host
cleaningsquad.ca: max-age too low: 0
clemovementlaw.com: could not connect to host
@ -566,6 +573,7 @@ clintonbloodworth.io: could not connect to host
clintwilson.technology: max-age too low: 2592000
cloud.wtf: could not connect to host
cloudapi.vc: could not connect to host
cloudapps.digital: could not connect to host
cloudcert.org: did not receive HSTS header
cloudcy.net: could not connect to host
clouddesktop.co.nz: did not receive HSTS header
@ -750,7 +758,6 @@ debank.tv: did not receive HSTS header
debtkit.co.uk: did not receive HSTS header
decafu.co: could not connect to host
decibelios.li: could not connect to host
decomplify.com: could not connect to host
dedicatutiempo.es: could not connect to host
deepcovelabs.net: could not connect to host
degroetenvanrosaline.nl: did not receive HSTS header
@ -852,7 +859,6 @@ dullsir.com: did not receive HSTS header
duria.de: max-age too low: 3600
dutch1.nl: did not receive HSTS header
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
dycontrol.de: could not connect to host
dylanscott.com.au: did not receive HSTS header
dynamize.solutions: could not connect to host
@ -901,13 +907,14 @@ elimdengelen.com: did not receive HSTS header
elitefishtank.com: could not connect to host
elnutricionista.es: did not receive HSTS header
elpo.xyz: could not connect to host
elsamakhin.com: could not connect to host
elsitar.com: could not connect to host
email.lookout.com: could not connect to host
emeldi-commerce.com: max-age too low: 0
emilyhorsman.com: could not connect to host
emmable.com: could not connect to host
emnitech.com: could not connect to host
empleostampico.com: could not connect to host
empleostampico.com: did not receive HSTS header
enargia.jp: max-age too low: 0
encode.space: did not receive HSTS header
encoder.pw: could not connect to host
@ -929,12 +936,11 @@ epanurse.com: could not connect to host
ephry.com: could not connect to host
epoxate.com: did not receive HSTS header
eq8.net.au: could not connect to host
equate.net.au: could not connect to host
equatetechnologies.com.au: could not connect to host
equate.net.au: max-age too low: 3600
equatetechnologies.com.au: max-age too low: 3600
equilibre-yoga-jennifer-will.com: could not connect to host
eressea.xyz: could not connect to host
ericyl.com: could not connect to host
eriix.org: could not connect to host
eromixx.com: did not receive HSTS header
erotalia.es: could not connect to host
eroticen.com: did not receive HSTS header
@ -943,6 +949,7 @@ errlytics.com: [Exception... "Component returned failure code: 0x80004005 (NS_ER
errolz.com: could not connect to host
errors.zenpayroll.com: could not connect to host
esclear.de: did not receive HSTS header
escotour.com: did not receive HSTS header
esec.rs: did not receive HSTS header
espra.com: could not connect to host
essexcosmeticdentists.co.uk: did not receive HSTS header
@ -992,8 +999,6 @@ factorable.net: did not receive HSTS header
factorygw.com: did not receive HSTS header
fadilus.com: did not receive HSTS header
faesser.com: did not receive HSTS header
fahrenwal.de: could not connect to host
fahrenwalde.de: could not connect to host
fail4free.de: did not receive HSTS header
faizan.net: did not receive HSTS header
faizan.xyz: could not connect to host
@ -1001,7 +1006,6 @@ fakeletters.org: could not connect to host
falkena.net: max-age too low: 5184000
falkp.no: did not receive HSTS header
fanyl.cn: did not receive HSTS header
fasdoutreach.ca: could not connect to host
fashioncare.cz: did not receive HSTS header
fasset.jp: could not connect to host
fastopen.ml: could not connect to host
@ -1037,7 +1041,7 @@ fingent.com: did not receive HSTS header
finiteheap.com: could not connect to host
firebaseio-demo.com: could not connect to host
firebaseio.com: could not connect to host (error ignored - included regardless)
firefall.rocks: did not receive HSTS header
firefall.rocks: could not connect to host
firemail.io: could not connect to host
firstforex.co.uk: did not receive HSTS header
fish2.me: did not receive HSTS header
@ -1086,6 +1090,7 @@ foxtrot.pw: could not connect to host
fr33d0m.link: could not connect to host
francevpn.xyz: could not connect to host
frangor.info: did not receive HSTS header
frank.fyi: could not connect to host
fransallen.com: did not receive HSTS header
frasys.io: did not receive HSTS header
freeflow.tv: could not connect to host
@ -1137,7 +1142,7 @@ gamingmedia.eu: could not connect to host
gampenhof.de: did not receive HSTS header
gaptek.id: did not receive HSTS header
gatilagata.com.br: did not receive HSTS header
gaussorgues.me: could not connect to host
gcsepod.com: did not receive HSTS header
gdpventure.com: max-age too low: 0
gedankenbude.info: did not receive HSTS header
geekcast.co.uk: could not connect to host
@ -1165,19 +1170,20 @@ gfournier.ca: could not connect to host
gfwsb.ml: could not connect to host
gheorghesarcov.ga: could not connect to host
gheorghesarcov.tk: could not connect to host
gigacloud.org: could not connect to host
gigacloud.org: did not receive HSTS header
gilgaz.com: did not receive HSTS header
gilly.berlin: did not receive HSTS header
gingali.de: did not receive HSTS header
gipsamsfashion.com: could not connect to host
gistfy.com: could not connect to host
github.party: could not connect to host
givemyanswer.com: 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
glitzmirror.com: could not connect to host
globalexpert.co.nz: could not connect to host
globalittech.com: could not connect to host
globalmusic.ga: could not connect to host
@ -1320,6 +1326,7 @@ highseer.com: did not receive HSTS header
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
hiphopconvention.nl: could not connect to host
hitoy.org: did not receive HSTS header
hittipps.com: did not receive HSTS header
@ -1365,6 +1372,7 @@ hydra.ws: could not connect to host
i-jp.net: could not connect to host
i-partners.sk: did not receive HSTS header
i1314.gdn: did not receive HSTS header
i95.me: did not receive HSTS header
iamokay.nl: did not receive HSTS header
iamveto.com: could not connect to host
iapws.com: did not receive HSTS header
@ -1387,6 +1395,7 @@ ies-italia.it: did not receive HSTS header
ies.id.lv: could not connect to host
ifleurs.com: could not connect to host
ifoss.me: could not connect to host
igk.de: could not connect to host
ignatisd.gr: did not receive HSTS header
igule.net: could not connect to host
ihrlotto.de: could not connect to host
@ -1442,6 +1451,7 @@ insite-feedback.com: did not receive HSTS header
inspiroinc.com: could not connect to host
instacart.com: did not receive HSTS header
instantdev.io: could not connect to host
intarweb.ca: could not connect to host
intel.li: could not connect to host
intercom.io: did not receive HSTS header
interference.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
@ -1459,7 +1469,7 @@ ionx.co.uk: did not receive HSTS header
iop.intuit.com: max-age too low: 86400
iosmods.com: could not connect to host
iostips.ru: could not connect to host
ip6.im: could not connect to host
ip6.im: did not receive HSTS header
ipmimagazine.com: did not receive HSTS header
iptel.by: max-age too low: 0
iptel.ro: could not connect to host
@ -1470,7 +1480,7 @@ iranianlawschool.com: could not connect to host
iraqidinar.org: did not receive HSTS header
irazimina.ru: did not receive HSTS header
irccloud.com: did not receive HSTS header
ircmett.de: did not receive HSTS header
ircmett.de: could not connect to host
iready.ro: could not connect to host
irukandjilabs.com: could not connect to host
ischool.co.jp: did not receive HSTS header
@ -1492,11 +1502,13 @@ 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
iww.mx: could not connect to host
izdiwho.com: could not connect to host
izzzorgconcerten.nl: could not connect to host
ja-publications.com: did not receive HSTS header
jaba.hosting: did not receive HSTS header
jabbari.io: did not receive HSTS header
jackalworks.com: could not connect to host
jacobparry.ca: did not receive HSTS header
jagido.de: did not receive HSTS header
jahliveradio.com: could not connect to host
@ -1532,6 +1544,7 @@ jbbd.fr: could not connect to host
jbn.mx: could not connect to host
jcch.de: could not connect to host
jcor.me: could not connect to host
jctf.io: could not connect to host
jeff393.com: could not connect to host
jenjoit.de: could not connect to host
jensenbanden.no: could not connect to host
@ -1539,6 +1552,7 @@ jeremye77.com: could not connect to host
jesorsenville.com: did not receive HSTS header
jessicabenedictus.nl: could not connect to host
jetaprices.com: max-age too low: 0
jetsetpay.com: could not connect to host
jettshome.org: could not connect to host
jeugdkans.nl: did not receive HSTS header
jf.duckdns.org: could not connect to host
@ -1550,7 +1564,6 @@ jikken.de: could not connect to host
jimas.eu: did not receive HSTS header
jimmycai.org: max-age too low: 10368000
jinbo123.com: did not receive HSTS header
jiyuu-ni.net: could not connect to host
jkb.pics: could not connect to host
jkbuster.com: could not connect to host
jmdekker.it: could not connect to host
@ -1568,6 +1581,7 @@ jonathancarter.org: [Exception... "Component returned failure code: 0x80004005 (
jonathandowning.uk: could not connect to host
jonn.me: could not connect to host
joostbovee.nl: did not receive HSTS header
joran.org: could not connect to host
joretapo.fr: could not connect to host
jornane.nl: could not connect to host
josahrens.me: could not connect to host
@ -1581,7 +1595,7 @@ jsanders.us: did not receive HSTS header
jualssh.com: could not connect to host
juchit.at: did not receive HSTS header
juliamweber.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]
julian-kipka.de: did not receive HSTS header
julian-kipka.de: could not connect to host
jumbox.xyz: could not connect to host
junaos.xyz: did not receive HSTS header
junge-selbsthilfe.info: could not connect to host
@ -1600,14 +1614,11 @@ kabus.org: could not connect to host
kadioglumakina.com.tr: did not receive HSTS header
kahopoon.net: could not connect to host
kaisers.de: did not receive HSTS header
kalami.nl: could not connect to host
kalian.cz: could not connect to host
kalami.nl: did not receive HSTS header
kamikano.com: could not connect to host
kantanmt.com: did not receive HSTS header
kaplatz.is: could not connect to host
kapucini.si: max-age too low: 0
karaoketonight.com: could not connect to host
kashmirobserver.net: could not connect to host
katiaetdavid.fr: could not connect to host
katproxy.online: could not connect to host
katproxy.site: could not connect to host
@ -1692,7 +1703,6 @@ kurehun.org: could not connect to host
kurz.pw: did not receive HSTS header
kusaka-abacus.jp: max-age too low: 0
kweddingplanning.com: did not receive HSTS header
kwidz.fr: did not receive HSTS header
kwok.tv: could not connect to host
kyanite.co: could not connect to host
kylinj.com: could not connect to host
@ -1816,6 +1826,7 @@ lotsencafe.de: did not receive HSTS header
lovelifelovelive.com: could not connect to host
lovelycorral.com: did not receive HSTS header
loveto.at: could not connect to host
lovizaim.ru: did not receive HSTS header
lpak.nl: could not connect to host
lrhsclubs.com: could not connect to host
lrhstsa.com: could not connect to host
@ -1850,7 +1861,6 @@ maarten.nyc: did not receive HSTS header
maartenvandekamp.nl: did not receive HSTS header
macchaberrycream.com: could not connect to host
macchedil.com: did not receive HSTS header
macgeneral.de: could not connect to host
madars.org: did not receive HSTS header
maddin.ga: could not connect to host
madebymagnitude.com: did not receive HSTS header
@ -1889,6 +1899,7 @@ marleyresort.com: did not receive HSTS header
marsble.com: did not receive HSTS header
marshut.net: could not connect to host
martijnvhoof.nl: could not connect to host
martinreed.net: could not connect to host
martinsfamilyappliance.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]
masjidtawheed.net: did not receive HSTS header
massotherapeutique.com: did not receive HSTS header
@ -1962,7 +1973,6 @@ micro-dv.ru: could not connect to host
microme.ga: could not connect to host
micropple.net: could not connect to host
midwestwomenworkers.org: did not receive HSTS header
migeeks.de: did not receive HSTS header
mightydicks.io: could not connect to host
mightydicks.tech: could not connect to host
mightysounds.cz: max-age too low: 0
@ -1996,6 +2006,8 @@ mivcon.net: could not connect to host
mizd.at: could not connect to host
mizi.name: did not receive HSTS header
mlpepilepsy.org: could not connect to host
mm13.at: could not connect to host
mmgazhomeloans.com: did not receive HSTS header
mnemotiv.com: could not connect to host
mnetworkingsolutions.co.uk: did not receive HSTS header
mobilekey.co: could not connect to host
@ -2023,10 +2035,10 @@ morningcalculation.com: could not connect to host
morotech.com.br: max-age too low: 2592000
morpork.xyz: could not connect to host
mortgagecentersmo.com: did not receive HSTS header
morz.org: could not connect to host
mostwuat.com: could not connect to host
motherbase.io: could not connect to host
motionpicturesolutions.com: could not connect to host
motocyklovedily.cz: did not receive HSTS header
mottvd.com: could not connect to host
moula.com.au: did not receive HSTS header
mountainadventureseminars.com: did not receive HSTS header
@ -2046,6 +2058,7 @@ mtcgf.com: did not receive HSTS header
mtg-esport.de: did not receive HSTS header
mu.search.yahoo.com: did not receive HSTS header
munich-rage.de: did not receive HSTS header
munuc.org: did not receive HSTS header
munzee.com: did not receive HSTS header
muriburi.land: could not connect to host
muriburiland.com: could not connect to host
@ -2063,7 +2076,6 @@ mycollab.net: could not connect to host
mycoted.com: did not receive HSTS header
mydeos.com: could not connect to host
mydigipass.com: did not receive HSTS header
mygallery.homelinux.net: did not receive HSTS header
mygov.scot: did not receive HSTS header
myiocc.org: could not connect to host
mykolab.com: did not receive HSTS header
@ -2075,6 +2087,7 @@ mypagella.it: could not connect to host
myplaceonline.com: did not receive HSTS header
mysecretrewards.com: did not receive HSTS header
mystudy.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]
mythslegendscollection.com: did not receive HSTS header
myvirtualserver.com: max-age too low: 2592000
myzone.com: did not receive HSTS header
mziulu.me: could not connect to host
@ -2088,6 +2101,7 @@ nalifornia.com: did not receive HSTS header
nametaken-cloud.duckdns.org: could not connect to host
nanogeneinc.com: could not connect to host
nansay.cn: could not connect to host
naphex.rocks: could not connect to host
natalia.io: could not connect to host
natalt.org: did not receive HSTS header
naturesystems.cz: max-age too low: 0
@ -2102,10 +2116,9 @@ nbg-ha.de: could not connect to host
ncc60205.info: could not connect to host
nct.org.uk: max-age too low: 1
nctx.co.uk: did not receive HSTS header
neap.io: did not receive HSTS header
neel.ch: could not connect to host
neftaly.com: did not receive HSTS header
neilgreen.net: did not receive HSTS header
neilgreen.net: could not connect to host
neko-system.com: did not receive HSTS header
nemno.de: could not connect to host
nemovement.org: did not receive HSTS header
@ -2116,6 +2129,7 @@ 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
nethruster.com: could not connect to host
netlilo.com: could not connect to host
netsight.org: could not connect to host
netzbit.de: could not connect to host
@ -2160,7 +2174,6 @@ nocallaghan.com: could not connect to host
nodebrewery.com: could not connect to host
nodetemple.com: could not connect to host
noexpect.org: could not connect to host
nohats.ca: could not connect to host
nolatepayments.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]
nolte.work: could not connect to host
nomorebytes.de: did not receive HSTS header
@ -2281,6 +2294,7 @@ otichi.com: did not receive HSTS header
ottospora.nl: could not connect to host
ourbank.com: did not receive HSTS header
outetc.com: could not connect to host
outreachbuddy.com: could not connect to host
outsider.im: could not connect to host
ouvirmusica.com.br: did not receive HSTS header
ovenapp.io: did not receive HSTS header
@ -2305,6 +2319,7 @@ pantsu.cat: did not receive HSTS header
papeda.net: did not receive HSTS header
papercard.co.uk: did not receive HSTS header
papierniak.net: could not connect to host
paragonie.com: could not connect to host
parentmail.co.uk: did not receive HSTS header
particonpsplus.it: could not connect to host
partijtjevoordevrijheid.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]
@ -2376,7 +2391,6 @@ piratenlogin.de: could not connect to host
pirati.cz: max-age too low: 604800
pirlitu.com: did not receive HSTS header
pisidia.de: could not connect to host
pitfire.io: did not receive HSTS header
pittonpreschool.com: did not receive HSTS header
pixel.google.com: did not receive HSTS header (error ignored - included regardless)
pixelhero.co.uk: did not receive HSTS header
@ -2388,12 +2402,11 @@ platform.lookout.com: could not connect to host
play.google.com: did not receive HSTS header (error ignored - included regardless)
playmaker.io: could not connect to host
playnation.io: did not receive HSTS header
plogable.co: did not receive HSTS header
plogable.co: could not connect to host
plothost.com: did not receive HSTS header
ploup.net: could not connect to host
pmnts.io: could not connect to host
po.gl: could not connect to host
pocketsix.com: did not receive HSTS header
poiema.com.sg: did not receive HSTS header
pol.in.th: could not connect to host
poleartschool.com: could not connect to host
@ -2419,7 +2432,6 @@ powerplannerapp.com: did not receive HSTS header
powerxequality.com: could not connect to host
ppr-truby.ru: could not connect to host
pr.search.yahoo.com: did not receive HSTS header
practicallabs.com: could not connect to host
prefontaine.name: could not connect to host
prego-shop.de: did not receive HSTS header
preissler.co.uk: could not connect to host
@ -2443,7 +2455,6 @@ progg.no: could not connect to host
prohostonline.fi: could not connect to host
promecon-gmbh.de: did not receive HSTS header
prontolight.com: did not receive HSTS header
propertygroup.pl: max-age too low: 3600
prosoft.sk: did not receive HSTS header
prosperident.com: did not receive HSTS header
prowhisky.de: did not receive HSTS header
@ -2451,7 +2462,6 @@ proximato.com: could not connect to host
proxybay.al: could not connect to host
proxybay.club: could not connect to host
proxybay.info: did not receive HSTS header
prxio.date: could not connect to host
prxio.site: could not connect to host
prytkov.com: did not receive HSTS header
psncardplus.be: did not receive HSTS header
@ -2478,7 +2488,6 @@ pypi-status.org: could not connect to host
pyplo.org: did not receive HSTS header
pypt.lt: did not receive HSTS header
q2.si: could not connect to host
qctravelschool.com: could not connect to host
qingxuan.info: max-age too low: 864000
qinxi1992.com: did not receive HSTS header
qiwi.be: did not receive HSTS header
@ -2518,10 +2527,10 @@ realmic.net: could not connect to host
realmofespionage.com: could not connect to host
reardenporn.com: could not connect to host
recommended.reviews: could not connect to host
recyclingpromotions.us: could not connect to host
reddiseals.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]
reddit.com: did not receive HSTS header
redicabo.de: could not connect to host
rediske.me: could not connect to host
redlatam.org: did not receive HSTS header
redmbk.com: could not connect to host
regaloaks.com: did not receive HSTS header
@ -2590,7 +2599,6 @@ rootservice.org: did not receive HSTS header
rootwpn.com: could not connect to host
rop.io: could not connect to host
rotterdamjazz.info: [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]
rotzonline.com: did not receive HSTS header
roundtheme.com: did not receive HSTS header
rout0r.org: did not receive HSTS header
rouvray.org: could not connect to host
@ -2641,12 +2649,13 @@ samraskauskas.com: could not connect to host
samsen.club: did not receive HSTS header
sandviks.com: did not receive HSTS header
sansemea.com: could not connect to host
sapk.fr: could not connect to host
sarah-beckett-harpist.com: did not receive HSTS header
sarahsweetlife.com: could not connect to host
sarisonproductions.com: could not connect to host
saruwebshop.co.za: did not receive HSTS header
satmep.com: did not receive HSTS header
satriyowibowo.my.id: could not connect to host
satriyowibowo.my.id: did not receive HSTS header
satsukii.moe: did not receive HSTS header
saturngames.co.uk: did not receive HSTS header
saunasandstuff.ca: did not receive HSTS header
@ -2688,7 +2697,6 @@ security.google.com: did not receive HSTS header (error ignored - included regar
securityinet.biz: did not receive HSTS header
securityinet.net: did not receive HSTS header
securityinet.org.il: did not receive HSTS header
securityprimes.in: could not connect to host
securitysoapbox.com: could not connect to host
securiviera.ch: did not receive HSTS header
seedbox.fr: did not receive HSTS header
@ -2768,16 +2776,16 @@ simon.butcher.name: max-age too low: 2629743
simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
simplelearner.com: could not connect to host
simplepractice.com: did not receive HSTS header
simplixos.org: could not connect to host
simply-premium.com: did not receive HSTS header
sincron.org: could not connect to host
sinful.pw: could not connect to host
siriad.com: did not receive HSTS header
sirius-lee.net: could not connect to host
sistem-maklumat.com: did not receive HSTS header
sistemy48.ru: [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]
sites.google.com: did not receive HSTS header (error ignored - included regardless)
sitesten.com: did not receive HSTS header
sitsy.ru: did not receive HSTS header
sizingservers.be: could not connect to host
skhosting.eu: did not receive HSTS header
skile.ru: could not connect to host
skk.io: could not connect to host
@ -2794,7 +2802,7 @@ slix.io: could not connect to host
slope.haus: could not connect to host
slovakiana.sk: did not receive HSTS header
sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
slycurity.de: could not connect to host
slycurity.de: did not receive HSTS header
smart-ov.nl: could not connect to host
smartcoin.com.br: could not connect to host
smartofficesandsmarthomes.com: did not receive HSTS header
@ -2873,6 +2881,7 @@ spreadsheets.google.com: did not receive HSTS header (error ignored - included r
spreed.me: did not receive HSTS header
sproutconnections.com: did not receive HSTS header
sprybear.com: did not receive HSTS header
spyprofit.ru: could not connect to host
square.gs: could not connect to host
squatldf.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
sqzryang.com: max-age too low: 604800
@ -2887,7 +2896,7 @@ ssnc.org: max-age too low: 300
stabletoken.com: could not connect to host
stadjerspasonline.nl: could not connect to host
stateofexception.io: could not connect to host
static.or.at: could not connect to host
static.or.at: did not receive HSTS header
staticanime.net: could not connect to host
stationaryjourney.com: did not receive HSTS header
stationnementdenuit.ca: did not receive HSTS header
@ -3015,7 +3024,6 @@ tensionup.com: could not connect to host
teodio.cl: did not receive HSTS header
terrax.berlin: could not connect to host
terrax.info: could not connect to host
terrax.net: could not connect to host
testandroid.xyz: could not connect to host
testbawks.com: did not receive HSTS header
testnode.xyz: could not connect to host
@ -3050,9 +3058,11 @@ theodorejones.info: could not connect to host
thepartywarehouse.co.uk: did not receive HSTS header
thepiratebay.al: could not connect to host
therapyportal.com: did not receive HSTS header
therewill.be: could not connect to host
thestack.xyz: could not connect to host
thestagchorleywood.co.uk: did not receive HSTS header
thetomharling.com: max-age too low: 86400
thetradinghall.com: could not connect to host
theurbanyoga.com: did not receive HSTS header
thevintagenews.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]
thewhitneypaige.com: could not connect to host
@ -3067,6 +3077,7 @@ thirty5.net: did not receive HSTS header
thomasschweizer.net: could not connect to host
thorncreek.net: did not receive HSTS header
thumbtack.com: did not receive HSTS header
ticfleet.com: could not connect to host
tickopa.co.uk: could not connect to host
tickreport.com: did not receive HSTS header
tictactux.de: could not connect to host
@ -3108,7 +3119,7 @@ toomanypillows.com: could not connect to host
topbargains.com.au: did not receive HSTS header
topmarine.se: could not connect to host
topnewstoday.org: could not connect to host
topodin.com: could not connect to host
topodin.com: did not receive HSTS header
topshelfguild.com: could not connect to host
topyx.com: did not receive HSTS header
torahanytime.com: did not receive HSTS header
@ -3146,7 +3157,6 @@ tuningblog.eu: did not receive HSTS header
turtlementors.com: did not receive HSTS header
tuturulianda.com: could not connect to host
tuvalie.com: could not connect to host
tuxcloud.net: did not receive HSTS header
tv.search.yahoo.com: could not connect to host
tvtubeflix.com: did not receive HSTS header
tvz-materijali.com: could not connect to host
@ -3171,7 +3181,6 @@ 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
ubuntuhot.com: did not receive HSTS header
@ -3190,16 +3199,19 @@ unbanthe.net: could not connect to host
unblocked.host: could not connect to host
unccdesign.club: could not connect to host
undernet.uy: did not receive HSTS header
underskatten.tk: could not connect to host
unfiltered.nyc: did not receive HSTS header
uni-games.com: could not connect to host
unicooo.com: could not connect to host
unison.com: could not connect to host
unitedcyberdevelopment.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]
university4industry.com: did not receive HSTS header
universogay.com: did not receive HSTS header
univz.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]
unknownphenomena.net: could not connect to host
unplugg3r.dk: could not connect to host
unravel.ie: did not receive HSTS header
unterschicht.tv: did not receive HSTS header
unwiredbrain.com: could not connect to host
uonstaffhub.com: could not connect to host
uow.ninja: could not connect to host
@ -3256,6 +3268,7 @@ videomuz.com: did not receive HSTS header
vidz.ga: could not connect to host
vieaw.com: could not connect to host
viktorsvantesson.net: did not receive HSTS header
vinasec.se: did not receive HSTS header
vintageheartcoffee.com: did not receive HSTS header
vio.no: did not receive HSTS header
viperdns.com: could not connect to host
@ -3306,6 +3319,7 @@ watchium.com: did not receive HSTS header
watchweasel.com: did not receive HSTS header
watsonhall.uk: could not connect to host
wave.is: could not connect to host
wavefrontsystemstech.com: could not connect to host
wdbgroup.co.uk: could not connect to host
wealthfactory.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]
wear2work.nl: did not receive HSTS header
@ -3357,7 +3371,6 @@ whyworldhot.com: could not connect to host
wienholding.at: max-age too low: 0
wieninternational.at: could not connect to host
wiire.me: could not connect to host
wikiclash.info: could not connect to host
wikidsystems.com: could not connect to host
wilf1rst.com: could not connect to host
william.si: did not receive HSTS header
@ -3431,7 +3444,7 @@ xcoop.me: could not connect to host
xellos.ga: could not connect to host
xellos.ml: could not connect to host
xenesisziarovky.sk: could not connect to host
xett.com: could not connect to host
xett.com: did not receive HSTS header
xfive.de: did not receive HSTS header
xiaody.me: could not connect to host
xiaolvmu.me: could not connect to host
@ -3456,6 +3469,7 @@ xtream-hosting.com: could not connect to host
xtream-hosting.de: could not connect to host
xtream-hosting.eu: could not connect to host
xtreamhosting.eu: could not connect to host
xtremegaming.it: could not connect to host
xuri.me: max-age too low: 2592000
xxbase.com: could not connect to host
y-o-w.com: did not receive HSTS header
@ -3487,8 +3501,8 @@ yoloseo.com: could not connect to host
youcontrol.ru: could not connect to host
yourstrongbox.com: could not connect to host
yout.com: max-age too low: 60000
ypiresia.fr: could not connect to host
yu.gg: did not receive HSTS header
yuan.ga: did not receive HSTS header
yuhen.ru: could not connect to host
yunity.org: did not receive HSTS header
yunzhu.li: did not receive HSTS header

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

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

@ -1110,7 +1110,8 @@ BookmarksTracker.prototype = {
// *each change*.
onItemChanged: function BMT_onItemChanged(itemId, property, isAnno, value,
lastModified, itemType, parentId,
guid, parentGuid, source) {
guid, parentGuid, oldValue,
source) {
if (IGNORED_SOURCES.includes(source)) {
return;
}

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

@ -5,6 +5,7 @@ Cu.import("resource://gre/modules/PlacesUtils.jsm");
Cu.import("resource://gre/modules/PlacesSyncUtils.jsm");
Cu.import("resource://gre/modules/BookmarkJSONUtils.jsm");
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://services-sync/constants.js");
Cu.import("resource://services-sync/engines.js");
Cu.import("resource://services-sync/engines/bookmarks.js");
Cu.import("resource://services-sync/service.js");
@ -19,13 +20,20 @@ Service.engineManager.register(BookmarksEngine);
add_task(function* test_change_during_sync() {
_("Ensure that we track changes made during a sync.");
let engine = new BookmarksEngine(Service);
let store = engine._store;
let engine = new BookmarksEngine(Service);
let store = engine._store;
let tracker = engine._tracker;
let server = serverForFoo(engine);
new SyncTestingInfrastructure(server.server);
let collection = server.user("foo").collection("bookmarks");
let bz_id = PlacesUtils.bookmarks.insertBookmark(
PlacesUtils.bookmarksMenuFolderId, Utils.makeURI("https://bugzilla.mozilla.org/"),
PlacesUtils.bookmarks.DEFAULT_INDEX, "Bugzilla");
let bz_guid = yield PlacesUtils.promiseItemGuid(bz_id);
_(`Bugzilla GUID: ${bz_guid}`);
Svc.Obs.notify("weave:engine:start-tracking");
try {
@ -45,6 +53,17 @@ add_task(function* test_change_during_sync() {
let bmk2_guid = "get-firefox1";
let bmk3_id = -1;
{
// An existing record changed on the server that should not trigger
// another sync when applied.
let changedRecord = new Bookmark("bookmarks", bz_guid);
changedRecord.bmkUri = "https://bugzilla.mozilla.org/";
changedRecord.description = "New description";
changedRecord.title = "Bugzilla";
changedRecord.tags = ["new", "tags"];
changedRecord.parentName = "Bookmarks Toolbar";
changedRecord.parentid = PlacesUtils.bookmarks.toolbarGuid;
collection.insert(bz_guid, encryptPayload(changedRecord.cleartext));
let localRecord = new Bookmark("bookmarks", bmk2_guid);
localRecord.bmkUri = "http://getfirefox.com/";
localRecord.description = "Firefox is awesome.";
@ -73,7 +92,12 @@ add_task(function* test_change_during_sync() {
}
_("Perform first sync");
yield sync_engine_and_validate_telem(engine, false);
{
let changes = engine.pullNewChanges();
deepEqual(changes.ids().sort(), [folder1_guid, bmk1_guid, "toolbar"].sort(),
"Should track bookmark and folder created before first sync");
yield sync_engine_and_validate_telem(engine, false);
}
let bmk2_id = store.idForGUID(bmk2_guid);
let bmk3_guid = store.GUIDForId(bmk3_id);
@ -93,9 +117,12 @@ add_task(function* test_change_during_sync() {
}
_("Perform second sync");
yield sync_engine_and_validate_telem(engine, false);
{
let changes = engine.pullNewChanges();
deepEqual(changes.ids().sort(), [bmk3_guid, folder1_guid].sort(),
"Should track bookmark added during last sync and its parent");
yield sync_engine_and_validate_telem(engine, false);
ok(collection.wbo(bmk3_guid),
"Bookmark created during first sync should be uploaded during second sync");

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

@ -30,6 +30,7 @@ crashtest:
description: "Crashtest run"
suite: reftest/crashtest
treeherder-symbol: tc-R(C)
docker-image: {"in-tree": "desktop1604-test"}
mozharness:
script: desktop_unittest.py
chunked: true
@ -388,6 +389,7 @@ reftest:
suite: reftest/reftest
treeherder-symbol: tc-R(R)
chunks: 8
docker-image: {"in-tree": "desktop1604-test"}
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
@ -404,6 +406,7 @@ reftest-no-accel:
suite: reftest/reftest-no-accel
treeherder-symbol: tc-R(Ru)
chunks: 8
docker-image: {"in-tree": "desktop1604-test"}
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true

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

@ -974,6 +974,7 @@ GeckoDriver.prototype.get = function*(cmd, resp) {
// send errors.
this.curBrowser.pendingCommands.push(() => {
cmd.parameters.command_id = id;
cmd.parameters.pageTimeout = this.pageTimeout;
this.mm.broadcastAsyncMessage(
"Marionette:pollForReadyState" + this.curBrowser.curFrameId,
cmd.parameters);

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

@ -67,6 +67,12 @@ ifdef MOZ_PACKAGE_JSSHELL
$(RM) $(PKG_JSSHELL)
$(MAKE_JSSHELL)
endif # MOZ_PACKAGE_JSSHELL
ifdef MOZ_ARTIFACT_BUILD_SYMBOLS
@echo 'Packaging existing crashreporter symbols from artifact build...'
$(NSINSTALL) -D $(DIST)/$(PKG_PATH)
cd $(DIST)/crashreporter-symbols && \
zip -r5D '../$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip' . -i '*.sym' -i '*.txt'
endif # MOZ_ARTIFACT_BUILD_SYMBOLS
ifdef MOZ_CODE_COVERAGE
# Package code coverage gcno tree
@echo 'Packaging code coverage data...'

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

@ -92,7 +92,6 @@
#buttonDeck {
margin-top: 25px;
-moz-box-align: stretch;
-moz-box-pack: stretch;
}
#continuePanel {

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

@ -4867,11 +4867,14 @@ MultiprocessBlockPolicy() {
}
}
// For linux nightly and aurora builds skip accessibility
// checks.
bool doAccessibilityCheck = true;
#if defined(MOZ_WIDGET_GTK) && !defined(RELEASE_OR_BETA)
// For linux nightly and aurora builds skip accessibility
// checks.
doAccessibilityCheck = false;
#elif defined(XP_WIN)
// For Windows Vista and up, skip accessibility checks.
doAccessibilityCheck = !IsVistaOrLater();
#endif
if (doAccessibilityCheck && disabledForA11y) {

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

@ -210,6 +210,235 @@ CreateEntryWidget()
return widget;
}
static GtkWidget*
CreateComboBoxWidget()
{
GtkWidget* widget = gtk_combo_box_new();
AddToWindowContainer(widget);
return widget;
}
typedef struct
{
GType type;
GtkWidget** widget;
} GtkInnerWidgetInfo;
static void
GetInnerWidget(GtkWidget* widget, gpointer client_data)
{
auto info = static_cast<GtkInnerWidgetInfo*>(client_data);
if (G_TYPE_CHECK_INSTANCE_TYPE(widget, info->type)) {
*info->widget = widget;
}
gtk_widget_realize(widget);
}
static GtkWidget*
CreateComboBoxButtonWidget()
{
GtkWidget* comboBox = GetWidget(MOZ_GTK_COMBOBOX);
GtkWidget* comboBoxButton = nullptr;
/* Get its inner Button */
GtkInnerWidgetInfo info = { GTK_TYPE_TOGGLE_BUTTON,
&comboBoxButton };
gtk_container_forall(GTK_CONTAINER(comboBox),
GetInnerWidget, &info);
if (!comboBoxButton) {
/* Shouldn't be reached with current internal gtk implementation; we
* use a generic toggle button as last resort fallback to avoid
* crashing. */
comboBoxButton = GetWidget(MOZ_GTK_TOGGLE_BUTTON);
} else {
/* We need to have pointers to the inner widgets (button, separator, arrow)
* of the ComboBox to get the correct rendering from theme engines which
* special cases their look. Since the inner layout can change, we ask GTK
* to NULL our pointers when they are about to become invalid because the
* corresponding widgets don't exist anymore. It's the role of
* g_object_add_weak_pointer().
* Note that if we don't find the inner widgets (which shouldn't happen), we
* fallback to use generic "non-inner" widgets, and they don't need that kind
* of weak pointer since they are explicit children of gProtoLayout and as
* such GTK holds a strong reference to them. */
g_object_add_weak_pointer(G_OBJECT(comboBoxButton),
reinterpret_cast<gpointer *>(sWidgetStorage) +
MOZ_GTK_COMBOBOX_BUTTON);
}
return comboBoxButton;
}
static GtkWidget*
CreateComboBoxArrowWidget()
{
GtkWidget* comboBoxButton = GetWidget(MOZ_GTK_COMBOBOX_BUTTON);
GtkWidget* comboBoxArrow = nullptr;
/* Get the widgets inside the Button */
GtkWidget* buttonChild = gtk_bin_get_child(GTK_BIN(comboBoxButton));
if (GTK_IS_BOX(buttonChild)) {
/* appears-as-list = FALSE, cell-view = TRUE; the button
* contains an hbox. This hbox is there because the ComboBox
* needs to place a cell renderer, a separator, and an arrow in
* the button when appears-as-list is FALSE. */
GtkInnerWidgetInfo info = { GTK_TYPE_ARROW,
&comboBoxArrow };
gtk_container_forall(GTK_CONTAINER(buttonChild),
GetInnerWidget, &info);
} else if (GTK_IS_ARROW(buttonChild)) {
/* appears-as-list = TRUE, or cell-view = FALSE;
* the button only contains an arrow */
comboBoxArrow = buttonChild;
gtk_widget_realize(comboBoxArrow);
}
if (!comboBoxArrow) {
/* Shouldn't be reached with current internal gtk implementation;
* we gButtonArrowWidget as last resort fallback to avoid
* crashing. */
comboBoxArrow = GetWidget(MOZ_GTK_BUTTON_ARROW);
} else {
g_object_add_weak_pointer(G_OBJECT(comboBoxArrow),
reinterpret_cast<gpointer *>(sWidgetStorage) +
MOZ_GTK_COMBOBOX_ARROW);
}
return comboBoxArrow;
}
static GtkWidget*
CreateComboBoxSeparatorWidget()
{
// Ensure to search for separator only once as it can fail
// TODO - it won't initialize after ResetWidgetCache() call
static bool isMissingSeparator = false;
if (isMissingSeparator)
return nullptr;
/* Get the widgets inside the Button */
GtkWidget* comboBoxSeparator = nullptr;
GtkWidget* buttonChild =
gtk_bin_get_child(GTK_BIN(GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
if (GTK_IS_BOX(buttonChild)) {
/* appears-as-list = FALSE, cell-view = TRUE; the button
* contains an hbox. This hbox is there because the ComboBox
* needs to place a cell renderer, a separator, and an arrow in
* the button when appears-as-list is FALSE. */
GtkInnerWidgetInfo info = { GTK_TYPE_SEPARATOR,
&comboBoxSeparator };
gtk_container_forall(GTK_CONTAINER(buttonChild),
GetInnerWidget, &info);
}
if (comboBoxSeparator) {
g_object_add_weak_pointer(G_OBJECT(comboBoxSeparator),
reinterpret_cast<gpointer *>(sWidgetStorage) +
MOZ_GTK_COMBOBOX_SEPARATOR);
} else {
/* comboBoxSeparator may be NULL
* when "appears-as-list" = TRUE or "cell-view" = FALSE;
* if there is no separator, then we just won't paint it. */
isMissingSeparator = true;
}
return comboBoxSeparator;
}
static GtkWidget*
CreateComboBoxEntryWidget()
{
GtkWidget* widget = gtk_combo_box_new_with_entry();
AddToWindowContainer(widget);
return widget;
}
static GtkWidget*
CreateComboBoxEntryTextareaWidget()
{
GtkWidget* comboBoxTextarea = nullptr;
/* Get its inner Entry and Button */
GtkInnerWidgetInfo info = { GTK_TYPE_ENTRY,
&comboBoxTextarea };
gtk_container_forall(GTK_CONTAINER(GetWidget(MOZ_GTK_COMBOBOX_ENTRY)),
GetInnerWidget, &info);
if (!comboBoxTextarea) {
comboBoxTextarea = GetWidget(MOZ_GTK_ENTRY);
} else {
g_object_add_weak_pointer(G_OBJECT(comboBoxTextarea),
reinterpret_cast<gpointer *>(sWidgetStorage) +
MOZ_GTK_COMBOBOX_ENTRY);
}
return comboBoxTextarea;
}
static GtkWidget*
CreateComboBoxEntryButtonWidget()
{
GtkWidget* comboBoxButton = nullptr;
/* Get its inner Entry and Button */
GtkInnerWidgetInfo info = { GTK_TYPE_TOGGLE_BUTTON,
&comboBoxButton };
gtk_container_forall(GTK_CONTAINER(GetWidget(MOZ_GTK_COMBOBOX_ENTRY)),
GetInnerWidget, &info);
if (!comboBoxButton) {
comboBoxButton = GetWidget(MOZ_GTK_TOGGLE_BUTTON);
} else {
g_object_add_weak_pointer(G_OBJECT(comboBoxButton),
reinterpret_cast<gpointer *>(sWidgetStorage) +
MOZ_GTK_COMBOBOX_ENTRY_BUTTON);
}
return comboBoxButton;
}
static GtkWidget*
CreateComboBoxEntryArrowWidget()
{
GtkWidget* comboBoxArrow = nullptr;
/* Get the Arrow inside the Button */
GtkWidget* buttonChild =
gtk_bin_get_child(GTK_BIN(GetWidget(MOZ_GTK_COMBOBOX_ENTRY_BUTTON)));
if (GTK_IS_BOX(buttonChild)) {
/* appears-as-list = FALSE, cell-view = TRUE; the button
* contains an hbox. This hbox is there because the ComboBox
* needs to place a cell renderer, a separator, and an arrow in
* the button when appears-as-list is FALSE. */
GtkInnerWidgetInfo info = { GTK_TYPE_ARROW,
&comboBoxArrow };
gtk_container_forall(GTK_CONTAINER(buttonChild),
GetInnerWidget, &info);
} else if (GTK_IS_ARROW(buttonChild)) {
/* appears-as-list = TRUE, or cell-view = FALSE;
* the button only contains an arrow */
comboBoxArrow = buttonChild;
gtk_widget_realize(comboBoxArrow);
}
if (!comboBoxArrow) {
/* Shouldn't be reached with current internal gtk implementation;
* we gButtonArrowWidget as last resort fallback to avoid
* crashing. */
comboBoxArrow = GetWidget(MOZ_GTK_BUTTON_ARROW);
} else {
g_object_add_weak_pointer(G_OBJECT(comboBoxArrow),
reinterpret_cast<gpointer *>(sWidgetStorage) +
MOZ_GTK_COMBOBOX_ENTRY_ARROW);
}
return comboBoxArrow;
}
static GtkWidget*
CreateScrolledWindowWidget()
{
@ -432,6 +661,22 @@ CreateWidget(WidgetNodeType aWidgetType)
return CreateScaleWidget(GTK_ORIENTATION_VERTICAL);
case MOZ_GTK_NOTEBOOK:
return CreateNotebookWidget();
case MOZ_GTK_COMBOBOX:
return CreateComboBoxWidget();
case MOZ_GTK_COMBOBOX_BUTTON:
return CreateComboBoxButtonWidget();
case MOZ_GTK_COMBOBOX_ARROW:
return CreateComboBoxArrowWidget();
case MOZ_GTK_COMBOBOX_SEPARATOR:
return CreateComboBoxSeparatorWidget();
case MOZ_GTK_COMBOBOX_ENTRY:
return CreateComboBoxEntryWidget();
case MOZ_GTK_COMBOBOX_ENTRY_TEXTAREA:
return CreateComboBoxEntryTextareaWidget();
case MOZ_GTK_COMBOBOX_ENTRY_BUTTON:
return CreateComboBoxEntryButtonWidget();
case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
return CreateComboBoxEntryArrowWidget();
default:
/* Not implemented */
return nullptr;

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

@ -18,16 +18,6 @@
#include <math.h>
static GtkWidget* gProtoLayout;
static GtkWidget* gComboBoxWidget;
static GtkWidget* gComboBoxButtonWidget;
static GtkWidget* gComboBoxArrowWidget;
static GtkWidget* gComboBoxSeparatorWidget;
static GtkWidget* gComboBoxEntryWidget;
static GtkWidget* gComboBoxEntryTextareaWidget;
static GtkWidget* gComboBoxEntryButtonWidget;
static GtkWidget* gComboBoxEntryArrowWidget;
static style_prop_t style_prop_func;
static gboolean have_arrow_scaling;
static gboolean checkbox_check_state;
@ -79,212 +69,6 @@ moz_gtk_enable_style_props(style_prop_t styleGetProp)
return MOZ_GTK_SUCCESS;
}
static gint
setup_widget_prototype(GtkWidget* widget)
{
if (!gProtoLayout) {
gProtoLayout = GetWidget(MOZ_GTK_WINDOW_CONTAINER);
}
gtk_container_add(GTK_CONTAINER(gProtoLayout), widget);
return MOZ_GTK_SUCCESS;
}
/* We need to have pointers to the inner widgets (button, separator, arrow)
* of the ComboBox to get the correct rendering from theme engines which
* special cases their look. Since the inner layout can change, we ask GTK
* to NULL our pointers when they are about to become invalid because the
* corresponding widgets don't exist anymore. It's the role of
* g_object_add_weak_pointer().
* Note that if we don't find the inner widgets (which shouldn't happen), we
* fallback to use generic "non-inner" widgets, and they don't need that kind
* of weak pointer since they are explicit children of gProtoLayout and as
* such GTK holds a strong reference to them. */
static void
moz_gtk_get_combo_box_inner_button(GtkWidget *widget, gpointer client_data)
{
if (GTK_IS_TOGGLE_BUTTON(widget)) {
gComboBoxButtonWidget = widget;
g_object_add_weak_pointer(G_OBJECT(widget),
(gpointer *) &gComboBoxButtonWidget);
gtk_widget_realize(widget);
}
}
static void
moz_gtk_get_combo_box_button_inner_widgets(GtkWidget *widget,
gpointer client_data)
{
if (GTK_IS_SEPARATOR(widget)) {
gComboBoxSeparatorWidget = widget;
g_object_add_weak_pointer(G_OBJECT(widget),
(gpointer *) &gComboBoxSeparatorWidget);
} else if (GTK_IS_ARROW(widget)) {
gComboBoxArrowWidget = widget;
g_object_add_weak_pointer(G_OBJECT(widget),
(gpointer *) &gComboBoxArrowWidget);
} else
return;
gtk_widget_realize(widget);
}
static gint
ensure_combo_box_widgets()
{
GtkWidget* buttonChild;
if (gComboBoxButtonWidget && gComboBoxArrowWidget)
return MOZ_GTK_SUCCESS;
/* Create a ComboBox if needed */
if (!gComboBoxWidget) {
gComboBoxWidget = gtk_combo_box_new();
setup_widget_prototype(gComboBoxWidget);
}
/* Get its inner Button */
gtk_container_forall(GTK_CONTAINER(gComboBoxWidget),
moz_gtk_get_combo_box_inner_button,
NULL);
if (gComboBoxButtonWidget) {
/* Get the widgets inside the Button */
buttonChild = gtk_bin_get_child(GTK_BIN(gComboBoxButtonWidget));
if (GTK_IS_BOX(buttonChild)) {
/* appears-as-list = FALSE, cell-view = TRUE; the button
* contains an hbox. This hbox is there because the ComboBox
* needs to place a cell renderer, a separator, and an arrow in
* the button when appears-as-list is FALSE. */
gtk_container_forall(GTK_CONTAINER(buttonChild),
moz_gtk_get_combo_box_button_inner_widgets,
NULL);
} else if(GTK_IS_ARROW(buttonChild)) {
/* appears-as-list = TRUE, or cell-view = FALSE;
* the button only contains an arrow */
gComboBoxArrowWidget = buttonChild;
g_object_add_weak_pointer(G_OBJECT(buttonChild), (gpointer *)
&gComboBoxArrowWidget);
gtk_widget_realize(gComboBoxArrowWidget);
}
} else {
/* Shouldn't be reached with current internal gtk implementation; we
* use a generic toggle button as last resort fallback to avoid
* crashing. */
gComboBoxButtonWidget = GetWidget(MOZ_GTK_TOGGLE_BUTTON);
}
if (!gComboBoxArrowWidget) {
/* Shouldn't be reached with current internal gtk implementation;
* we gButtonArrowWidget as last resort fallback to avoid
* crashing. */
gComboBoxArrowWidget = GetWidget(MOZ_GTK_BUTTON_ARROW);
}
/* We don't test the validity of gComboBoxSeparatorWidget since there
* is none when "appears-as-list" = TRUE or "cell-view" = FALSE; if it
* is invalid we just won't paint it. */
return MOZ_GTK_SUCCESS;
}
/* We need to have pointers to the inner widgets (entry, button, arrow) of
* the ComboBoxEntry to get the correct rendering from theme engines which
* special cases their look. Since the inner layout can change, we ask GTK
* to NULL our pointers when they are about to become invalid because the
* corresponding widgets don't exist anymore. It's the role of
* g_object_add_weak_pointer().
* Note that if we don't find the inner widgets (which shouldn't happen), we
* fallback to use generic "non-inner" widgets, and they don't need that kind
* of weak pointer since they are explicit children of gProtoLayout and as
* such GTK holds a strong reference to them. */
static void
moz_gtk_get_combo_box_entry_inner_widgets(GtkWidget *widget,
gpointer client_data)
{
if (GTK_IS_TOGGLE_BUTTON(widget)) {
gComboBoxEntryButtonWidget = widget;
g_object_add_weak_pointer(G_OBJECT(widget),
(gpointer *) &gComboBoxEntryButtonWidget);
} else if (GTK_IS_ENTRY(widget)) {
gComboBoxEntryTextareaWidget = widget;
g_object_add_weak_pointer(G_OBJECT(widget),
(gpointer *) &gComboBoxEntryTextareaWidget);
} else
return;
gtk_widget_realize(widget);
}
static void
moz_gtk_get_combo_box_entry_arrow(GtkWidget *widget, gpointer client_data)
{
if (GTK_IS_ARROW(widget)) {
gComboBoxEntryArrowWidget = widget;
g_object_add_weak_pointer(G_OBJECT(widget),
(gpointer *) &gComboBoxEntryArrowWidget);
gtk_widget_realize(widget);
}
}
static gint
ensure_combo_box_entry_widgets()
{
GtkWidget* buttonChild;
if (gComboBoxEntryTextareaWidget &&
gComboBoxEntryButtonWidget &&
gComboBoxEntryArrowWidget)
return MOZ_GTK_SUCCESS;
/* Create a ComboBoxEntry if needed */
if (!gComboBoxEntryWidget) {
gComboBoxEntryWidget = gtk_combo_box_new_with_entry();
setup_widget_prototype(gComboBoxEntryWidget);
}
/* Get its inner Entry and Button */
gtk_container_forall(GTK_CONTAINER(gComboBoxEntryWidget),
moz_gtk_get_combo_box_entry_inner_widgets,
NULL);
if (!gComboBoxEntryTextareaWidget) {
gComboBoxEntryTextareaWidget = GetWidget(MOZ_GTK_ENTRY);
}
if (gComboBoxEntryButtonWidget) {
/* Get the Arrow inside the Button */
buttonChild = gtk_bin_get_child(GTK_BIN(gComboBoxEntryButtonWidget));
if (GTK_IS_BOX(buttonChild)) {
/* appears-as-list = FALSE, cell-view = TRUE; the button
* contains an hbox. This hbox is there because the ComboBox
* needs to place a cell renderer, a separator, and an arrow in
* the button when appears-as-list is FALSE. */
gtk_container_forall(GTK_CONTAINER(buttonChild),
moz_gtk_get_combo_box_entry_arrow,
NULL);
} else if(GTK_IS_ARROW(buttonChild)) {
/* appears-as-list = TRUE, or cell-view = FALSE;
* the button only contains an arrow */
gComboBoxEntryArrowWidget = buttonChild;
g_object_add_weak_pointer(G_OBJECT(buttonChild), (gpointer *)
&gComboBoxEntryArrowWidget);
gtk_widget_realize(gComboBoxEntryArrowWidget);
}
} else {
/* Shouldn't be reached with current internal gtk implementation;
* we use a generic toggle button as last resort fallback to avoid
* crashing. */
gComboBoxEntryButtonWidget = GetWidget(MOZ_GTK_TOGGLE_BUTTON);
}
if (!gComboBoxEntryArrowWidget) {
/* Shouldn't be reached with current internal gtk implementation;
* we gButtonArrowWidget as last resort fallback to avoid
* crashing. */
gComboBoxEntryArrowWidget = GetWidget(MOZ_GTK_BUTTON_ARROW);
}
return MOZ_GTK_SUCCESS;
}
gint
moz_gtk_init()
{
@ -336,16 +120,24 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing)
return MOZ_GTK_SUCCESS;
}
gint
moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
static gint
moz_gtk_get_focus_outline_size(GtkStyleContext* style,
gint* focus_h_width, gint* focus_v_width)
{
GtkBorder border;
GtkBorder padding;
GtkStyleContext *style = ClaimStyleContext(MOZ_GTK_ENTRY);
gtk_style_context_get_border(style, GTK_STATE_FLAG_NORMAL, &border);
gtk_style_context_get_padding(style, GTK_STATE_FLAG_NORMAL, &padding);
*focus_h_width = border.left + padding.left;
*focus_v_width = border.top + padding.top;
return MOZ_GTK_SUCCESS;
}
gint
moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
{
GtkStyleContext *style = ClaimStyleContext(MOZ_GTK_ENTRY);
moz_gtk_get_focus_outline_size(style, focus_h_width, focus_v_width);
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
@ -1030,60 +822,26 @@ moz_gtk_vpaned_paint(cairo_t *cr, GdkRectangle* rect,
static gint
moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state,
GtkWidget* widget, GtkTextDirection direction)
GtkStyleContext* style)
{
gint x = rect->x, y = rect->y, width = rect->width, height = rect->height;
GtkStyleContext* style;
int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE
gtk_widget_set_direction(widget, direction);
style = gtk_widget_get_style_context(widget);
if (draw_focus_outline_only) {
// Inflate the given 'rect' with the focus outline size.
gint h, v;
moz_gtk_get_focus_outline_size(&h, &v);
moz_gtk_get_focus_outline_size(style, &h, &v);
rect->x -= h;
rect->width += 2 * h;
rect->y -= v;
rect->height += 2 * v;
width = rect->width;
height = rect->height;
}
/* gtkentry.c uses two windows, one for the entire widget and one for the
* text area inside it. The background of both windows is set to the "base"
* color of the new state in gtk_entry_state_changed, but only the inner
* textarea window uses gtk_paint_flat_box when exposed */
/* This gets us a lovely greyish disabledish look */
gtk_widget_set_sensitive(widget, !state->disabled);
gtk_style_context_save(style);
gtk_style_context_add_class(style, GTK_STYLE_CLASS_ENTRY);
/* Now paint the shadow and focus border.
* We do like in gtk_entry_draw_frame, we first draw the shadow, a tad
* smaller when focused if the focus is not interior, then the focus. */
if (state->focused && !state->disabled) {
/* This will get us the lit borders that focused textboxes enjoy on
* some themes. */
gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED);
}
if (state->disabled) {
gtk_style_context_set_state(style, GTK_STATE_FLAG_INSENSITIVE);
}
if (!draw_focus_outline_only) {
} else {
gtk_render_background(style, cr, x, y, width, height);
}
gtk_render_frame(style, cr, x, y, width, height);
gtk_style_context_restore(style);
return MOZ_GTK_SUCCESS;
}
@ -1248,34 +1006,37 @@ moz_gtk_combo_box_paint(cairo_t *cr, GdkRectangle* rect,
GtkStyleContext* style;
GtkRequisition arrow_req;
ensure_combo_box_widgets();
GtkWidget* comboBoxButton = GetWidget(MOZ_GTK_COMBOBOX_BUTTON);
GtkWidget* comboBoxArrow = GetWidget(MOZ_GTK_COMBOBOX_ARROW);
/* Also sets the direction on gComboBoxButtonWidget, which is then
* inherited by the separator and arrow */
moz_gtk_button_paint(cr, rect, state, GTK_RELIEF_NORMAL,
gComboBoxButtonWidget, direction);
comboBoxButton, direction);
calculate_button_inner_rect(gComboBoxButtonWidget,
rect, &arrow_rect, direction);
calculate_button_inner_rect(comboBoxButton, rect, &arrow_rect, direction);
/* Now arrow_rect contains the inner rect ; we want to correct the width
* to what the arrow needs (see gtk_combo_box_size_allocate) */
gtk_widget_get_preferred_size(gComboBoxArrowWidget, NULL, &arrow_req);
gtk_widget_get_preferred_size(comboBoxArrow, NULL, &arrow_req);
if (direction == GTK_TEXT_DIR_LTR)
arrow_rect.x += arrow_rect.width - arrow_req.width;
arrow_rect.width = arrow_req.width;
calculate_arrow_rect(gComboBoxArrowWidget,
calculate_arrow_rect(comboBoxArrow,
&arrow_rect, &real_arrow_rect, direction);
style = gtk_widget_get_style_context(gComboBoxArrowWidget);
style = ClaimStyleContext(MOZ_GTK_COMBOBOX_ARROW);
gtk_render_arrow(style, cr, ARROW_DOWN,
real_arrow_rect.x, real_arrow_rect.y,
real_arrow_rect.width);
ReleaseStyleContext(style);
/* If there is no separator in the theme, there's nothing left to do. */
if (!gComboBoxSeparatorWidget)
GtkWidget* widget = GetWidget(MOZ_GTK_COMBOBOX_SEPARATOR);
if (!widget)
return MOZ_GTK_SUCCESS;
style = gtk_widget_get_style_context(gComboBoxSeparatorWidget);
style = gtk_widget_get_style_context(widget);
gtk_style_context_get_style(style,
"wide-separators", &wide_separators,
"separator-width", &separator_width,
@ -1359,15 +1120,14 @@ moz_gtk_combo_box_entry_button_paint(cairo_t *cr, GdkRectangle* rect,
GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
GtkStyleContext* style;
ensure_combo_box_entry_widgets();
GtkWidget* comboBoxEntry = GetWidget(MOZ_GTK_COMBOBOX_ENTRY_BUTTON);
moz_gtk_button_paint(cr, rect, state, GTK_RELIEF_NORMAL,
gComboBoxEntryButtonWidget, direction);
comboBoxEntry, direction);
calculate_button_inner_rect(comboBoxEntry, rect, &arrow_rect, direction);
calculate_button_inner_rect(gComboBoxEntryButtonWidget,
rect, &arrow_rect, direction);
if (state_flags & GTK_STATE_FLAG_ACTIVE) {
gtk_style_context_get_style(gtk_widget_get_style_context(gComboBoxEntryButtonWidget),
style = gtk_widget_get_style_context(comboBoxEntry);
gtk_style_context_get_style(style,
"child-displacement-x", &x_displacement,
"child-displacement-y", &y_displacement,
NULL);
@ -1375,15 +1135,14 @@ moz_gtk_combo_box_entry_button_paint(cairo_t *cr, GdkRectangle* rect,
arrow_rect.y += y_displacement;
}
calculate_arrow_rect(gComboBoxEntryArrowWidget,
calculate_arrow_rect(GetWidget(MOZ_GTK_COMBOBOX_ENTRY_ARROW),
&arrow_rect, &real_arrow_rect, direction);
style = gtk_widget_get_style_context(gComboBoxEntryArrowWidget);
style = ClaimStyleContext(MOZ_GTK_COMBOBOX_ENTRY_ARROW);
gtk_render_arrow(style, cr, ARROW_DOWN,
real_arrow_rect.x, real_arrow_rect.y,
real_arrow_rect.width);
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
@ -1403,7 +1162,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
}
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
@ -2261,12 +2019,10 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
w = GetWidget(MOZ_GTK_TREE_HEADER_SORTARROW);
break;
case MOZ_GTK_DROPDOWN_ENTRY:
ensure_combo_box_entry_widgets();
w = gComboBoxEntryTextareaWidget;
w = GetWidget(MOZ_GTK_COMBOBOX_ENTRY_TEXTAREA);
break;
case MOZ_GTK_DROPDOWN_ARROW:
ensure_combo_box_entry_widgets();
w = gComboBoxEntryButtonWidget;
w = GetWidget(MOZ_GTK_COMBOBOX_ENTRY_BUTTON);
break;
case MOZ_GTK_DROPDOWN:
{
@ -2278,32 +2034,33 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
GtkRequisition arrow_req;
GtkBorder border;
ensure_combo_box_widgets();
*left = *top = *right = *bottom =
gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
style = gtk_widget_get_style_context(gComboBoxButtonWidget);
*left = *top = *right = *bottom =
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
style = ClaimStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
moz_gtk_add_style_padding(style, left, top, right, bottom);
moz_gtk_add_style_border(style, left, top, right, bottom);
ReleaseStyleContext(style);
/* If there is no separator, don't try to count its width. */
separator_width = 0;
if (gComboBoxSeparatorWidget) {
style = gtk_widget_get_style_context(gComboBoxSeparatorWidget);
GtkWidget* comboBoxSeparator = GetWidget(MOZ_GTK_COMBOBOX_SEPARATOR);
if (comboBoxSeparator) {
style = gtk_widget_get_style_context(comboBoxSeparator);
gtk_style_context_get_style(style,
"wide-separators", &wide_separators,
"separator-width", &separator_width,
NULL);
if (!wide_separators) {
gtk_style_context_get_border(style, GTK_STATE_FLAG_NORMAL, &border);
gtk_style_context_get_border(style, GTK_STATE_FLAG_NORMAL,
&border);
separator_width = border.left;
}
}
gtk_widget_get_preferred_size(gComboBoxArrowWidget, NULL, &arrow_req);
gtk_widget_get_preferred_size(GetWidget(MOZ_GTK_COMBOBOX_ARROW),
NULL, &arrow_req);
if (direction == GTK_TEXT_DIR_RTL)
*left += separator_width + arrow_req.width;
@ -2524,9 +2281,9 @@ moz_gtk_get_combo_box_entry_button_size(gint* width, gint* height)
* as well as the minimum arrow size and its padding
* */
GtkRequisition requisition;
ensure_combo_box_entry_widgets();
gtk_widget_get_preferred_size(gComboBoxEntryButtonWidget, NULL, &requisition);
gtk_widget_get_preferred_size(GetWidget(MOZ_GTK_COMBOBOX_ENTRY_BUTTON),
NULL, &requisition);
*width = requisition.width;
*height = requisition.height;
@ -2555,8 +2312,7 @@ moz_gtk_get_arrow_size(WidgetNodeType widgetType, gint* width, gint* height)
GtkWidget* widget;
switch (widgetType) {
case MOZ_GTK_DROPDOWN:
ensure_combo_box_widgets();
widget = gComboBoxArrowWidget;
widget = GetWidget(MOZ_GTK_COMBOBOX_ARROW);
break;
default:
widget = GetWidget(MOZ_GTK_BUTTON_ARROW);
@ -2830,9 +2586,13 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
state, direction);
break;
case MOZ_GTK_SPINBUTTON_ENTRY:
// TODO - use MOZ_GTK_SPINBUTTON_ENTRY style directly
return moz_gtk_entry_paint(cr, rect, state,
GetWidget(MOZ_GTK_SPINBUTTON), direction);
{
GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_SPINBUTTON_ENTRY,
direction, GetStateFlagsFromGtkWidgetState(state));
gint ret = moz_gtk_entry_paint(cr, rect, state, style);
ReleaseStyleContext(style);
return ret;
}
break;
case MOZ_GTK_GRIPPER:
return moz_gtk_gripper_paint(cr, rect, state,
@ -2857,9 +2617,13 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
(GtkExpanderStyle) flags, direction);
break;
case MOZ_GTK_ENTRY:
return moz_gtk_entry_paint(cr, rect, state, GetWidget(MOZ_GTK_ENTRY),
direction);
break;
{
GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_ENTRY,
direction, GetStateFlagsFromGtkWidgetState(state));
gint ret = moz_gtk_entry_paint(cr, rect, state, style);
ReleaseStyleContext(style);
return ret;
}
case MOZ_GTK_TEXT_VIEW:
return moz_gtk_text_view_paint(cr, rect, state, direction);
break;
@ -2871,9 +2635,13 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
state, flags, direction);
break;
case MOZ_GTK_DROPDOWN_ENTRY:
ensure_combo_box_entry_widgets();
return moz_gtk_entry_paint(cr, rect, state,
gComboBoxEntryTextareaWidget, direction);
{
GtkStyleContext* style = ClaimStyleContext(MOZ_GTK_COMBOBOX_ENTRY_TEXTAREA,
direction, GetStateFlagsFromGtkWidgetState(state));
gint ret = moz_gtk_entry_paint(cr, rect, state, style);
ReleaseStyleContext(style);
return ret;
}
break;
case MOZ_GTK_CHECKBUTTON_CONTAINER:
case MOZ_GTK_RADIOBUTTON_CONTAINER:
@ -2998,16 +2766,6 @@ moz_gtk_shutdown()
/* This will destroy all of our widgets */
ResetWidgetCache();
gProtoLayout = NULL;
gComboBoxWidget = NULL;
gComboBoxButtonWidget = NULL;
gComboBoxSeparatorWidget = NULL;
gComboBoxArrowWidget = NULL;
gComboBoxEntryWidget = NULL;
gComboBoxEntryButtonWidget = NULL;
gComboBoxEntryArrowWidget = NULL;
gComboBoxEntryTextareaWidget = NULL;
is_initialized = FALSE;
return MOZ_GTK_SUCCESS;

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

@ -230,6 +230,22 @@ typedef enum {
MOZ_GTK_WINDOW_CONTAINER,
/* Paints a GtkInfoBar, for notifications. */
MOZ_GTK_INFO_BAR,
/* Used for widget tree construction. */
MOZ_GTK_COMBOBOX,
/* Paints a GtkComboBox button widget. */
MOZ_GTK_COMBOBOX_BUTTON,
/* Paints a GtkComboBox arrow widget. */
MOZ_GTK_COMBOBOX_ARROW,
/* Paints a GtkComboBox separator widget. */
MOZ_GTK_COMBOBOX_SEPARATOR,
/* Used for widget tree construction. */
MOZ_GTK_COMBOBOX_ENTRY,
/* Paints a GtkComboBox entry widget. */
MOZ_GTK_COMBOBOX_ENTRY_TEXTAREA,
/* Paints a GtkComboBox entry button widget. */
MOZ_GTK_COMBOBOX_ENTRY_BUTTON,
/* Paints a GtkComboBox entry arrow widget. */
MOZ_GTK_COMBOBOX_ENTRY_ARROW,
/* Used for scrolled window shell. */
MOZ_GTK_SCROLLED_WINDOW,