Merge m-c to inbound a=merge

MozReview-Commit-ID: G24aq5fbYNd
This commit is contained in:
Wes Kocher 2017-01-09 16:44:58 -08:00
commit 105aea2522
85 changed files with 13924 additions and 13405 deletions

View File

@ -32,7 +32,6 @@ function dumpAccessibleNode(aNode, level) {
function dumpAccessibleTree(aNode, level) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
level = level || 0;
dumpAccessibleNode(aNode, level);
@ -48,14 +47,12 @@ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
function A(o) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var acc = Components.classes['@mozilla.org/accessibilityService;1']
.getService(Components.interfaces.nsIAccessibilityService);
var acc = SpecialPowers.Cc['@mozilla.org/accessibilityService;1']
.getService(SpecialPowers.Ci.nsIAccessibilityService);
return acc.getAccessibleFor(o);
}
function beginAccessible() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
dumpAccessibleTree(A(document),0);
}
setTimeout(beginAccessible, 100);

View File

@ -0,0 +1,129 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
this.EXPORTED_SYMBOLS = ["ProfileAutoCompleteResult"];
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
this.ProfileAutoCompleteResult = function(searchString,
fieldName,
matchingProfiles,
{resultCode = null}) {
this.searchString = searchString;
this._fieldName = fieldName;
this._matchingProfiles = matchingProfiles;
if (resultCode) {
this.searchResult = resultCode;
} else if (matchingProfiles.length > 0) {
this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
} else {
this.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
}
};
ProfileAutoCompleteResult.prototype = {
// The user's query string
searchString: "",
// The default item that should be entered if none is selected
defaultIndex: 0,
// The reason the search failed
errorDescription: "",
// The result code of this result object.
searchResult: null,
// The autocomplete attribute of the focused input field
_fieldName: "",
// The matching profiles contains the information for filling forms.
_matchingProfiles: null,
/**
* @returns {number} The number of results
*/
get matchCount() {
return this._matchingProfiles.length;
},
_checkIndexBounds(index) {
if (index < 0 || index >= this._matchingProfiles.length) {
throw Components.Exception("Index out of range.", Cr.NS_ERROR_ILLEGAL_VALUE);
}
},
/**
* Retrieves a result
* @param {number} index The index of the result requested
* @returns {string} The result at the specified index
*/
getValueAt(index) {
this._checkIndexBounds(index);
return this._matchingProfiles[index].guid;
},
getLabelAt(index) {
this._checkIndexBounds(index);
return this._matchingProfiles[index].organization;
},
/**
* Retrieves a comment (metadata instance)
* @param {number} index The index of the comment requested
* @returns {string} The comment at the specified index
*/
getCommentAt(index) {
this._checkIndexBounds(index);
return this._matchingProfiles[index].streetAddress;
},
/**
* Retrieves a style hint specific to a particular index.
* @param {number} index The index of the style hint requested
* @returns {string} The style hint at the specified index
*/
getStyleAt(index) {
this._checkIndexBounds(index);
return "autofill-profile";
},
/**
* Retrieves an image url.
* @param {number} index The index of the image url requested
* @returns {string} The image url at the specified index
*/
getImageAt(index) {
this._checkIndexBounds(index);
return "";
},
/**
* Retrieves a result
* @param {number} index The index of the result requested
* @returns {string} The result at the specified index
*/
getFinalCompleteValueAt(index) {
return this.getValueAt(index);
},
/**
* Removes a result from the resultset
* @param {number} index The index of the result to remove
* @param {boolean} removeFromDatabase TRUE for removing data from DataBase
* as well.
*/
removeValueAt(index, removeFromDatabase) {
// There is no plan to support removing profiles via autocomplete.
},
// nsISupports
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteResult]),
};

View File

@ -11,8 +11,9 @@
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr, manager: Cm} = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/nsFormAutoCompleteResult.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ProfileAutoCompleteResult",
"resource://formautofill/ProfileAutoCompleteResult.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "FormLikeFactory",
"resource://gre/modules/FormLikeFactory.jsm");
@ -227,13 +228,19 @@ AutofillProfileAutoCompleteSearch.prototype = {
*/
startSearch(searchString, searchParam, previousResult, listener) {
// TODO: These mock data should be replaced by form autofill API
let labels = ["Mary", "John"];
let values = ["Mary S.", "John S."];
let comments = ["123 Sesame Street.", "331 E. Evelyn Avenue"];
let result = new FormAutoCompleteResult(searchString,
Ci.nsIAutoCompleteResult.RESULT_SUCCESS,
0, "", values, labels,
comments);
let fieldName = "name";
let profiles = [{
guid: "test-guid-1",
organization: "Sesame Street",
streetAddress: "123 Sesame Street.",
tel: "1-345-345-3456.",
}, {
guid: "test-guid-2",
organization: "Mozilla",
streetAddress: "331 E. Evelyn Avenue",
tel: "1-650-903-0800",
}];
let result = new ProfileAutoCompleteResult(searchString, fieldName, profiles, {});
listener.onSearchResult(this, result);
},

View File

@ -0,0 +1,82 @@
"use strict";
Cu.import("resource://formautofill/ProfileAutoCompleteResult.jsm");
let matchingProfiles = [{
guid: "test-guid-1",
organization: "Sesame Street",
streetAddress: "123 Sesame Street.",
tel: "1-345-345-3456.",
}, {
guid: "test-guid-2",
organization: "Mozilla",
streetAddress: "331 E. Evelyn Avenue",
tel: "1-650-903-0800",
}];
let testCases = [{
options: {},
matchingProfiles: matchingProfiles,
searchString: "",
fieldName: "",
expected: {
searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS,
defaultIndex: 0,
items: [{
style: "autofill-profile",
image: "",
}, {
style: "autofill-profile",
image: "",
}],
},
}, {
options: {},
matchingProfiles: [],
searchString: "",
fieldName: "",
expected: {
searchResult: Ci.nsIAutoCompleteResult.RESULT_NOMATCH,
defaultIndex: 0,
items: [],
},
}, {
options: {resultCode: Ci.nsIAutoCompleteResult.RESULT_FAILURE},
matchingProfiles: [],
searchString: "",
fieldName: "",
expected: {
searchResult: Ci.nsIAutoCompleteResult.RESULT_FAILURE,
defaultIndex: 0,
items: [],
},
}];
add_task(function* test_all_patterns() {
testCases.forEach(pattern => {
let actual = new ProfileAutoCompleteResult(pattern.searchString,
pattern.fieldName,
pattern.matchingProfiles,
pattern.options);
let expectedValue = pattern.expected;
equal(actual.searchResult, expectedValue.searchResult);
equal(actual.defaultIndex, expectedValue.defaultIndex);
equal(actual.matchCount, expectedValue.items.length);
expectedValue.items.forEach((item, index) => {
// TODO: getValueAt, getLabelAt, and getCommentAt should be verified here.
equal(actual.getStyleAt(index), item.style);
equal(actual.getImageAt(index), item.image);
});
if (expectedValue.items.length != 0) {
Assert.throws(() => actual.getValueAt(expectedValue.items.length),
/Index out of range\./);
Assert.throws(() => actual.getLabelAt(expectedValue.items.length),
/Index out of range\./);
Assert.throws(() => actual.getCommentAt(expectedValue.items.length),
/Index out of range\./);
}
});
});

View File

@ -6,6 +6,7 @@ support-files =
[test_autofillFormFields.js]
[test_collectFormFields.js]
[test_populateFieldValues.js]
[test_profileStorage.js]
[test_markAsAutofillField.js]
[test_populateFieldValues.js]
[test_profileAutocompleteResult.js]
[test_profileStorage.js]

View File

@ -33,7 +33,7 @@
</dl>
<p><dt><h3>@firefox_heading@</h3></dt>
<dl><p>
<dt><a href="https://www.mozilla.org/@AB_CD@/firefox/help/" icon="@mozilla_icon@">@firefox_help@</a>
<dt><a href="https://support.mozilla.org/@AB_CD@/products/firefox" icon="@mozilla_icon@">@firefox_help@</a>
<dt><a href="https://www.mozilla.org/@AB_CD@/firefox/customize/" icon="@mozilla_icon@">@firefox_customize@</a>
<dt><a href="https://www.mozilla.org/@AB_CD@/contribute/" icon="@mozilla_icon@">@firefox_community@</a>
<dt><a href="https://www.mozilla.org/@AB_CD@/about/" icon="@mozilla_icon@">@firefox_about@</a>

View File

@ -10,7 +10,10 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { createFactories } = require("./rep-utils");
const {
createFactories,
wrapRender,
} = require("./rep-utils");
const { Caption } = createFactories(require("./caption"));
const { MODE } = require("./constants");
@ -116,7 +119,7 @@ define(function (require, exports, module) {
onClickBracket: function (event) {
},
render: function () {
render: wrapRender(function () {
let {
object,
mode = MODE.SHORT,
@ -158,7 +161,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
/**
@ -167,7 +170,7 @@ define(function (require, exports, module) {
let ItemRep = React.createFactory(React.createClass({
displayName: "ItemRep",
render: function () {
render: wrapRender(function () {
const { Rep } = createFactories(require("./rep"));
let object = this.props.object;
@ -179,7 +182,7 @@ define(function (require, exports, module) {
delim
)
);
}
})
}));
function supportsObject(object, type) {

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { createFactories, isGrip } = require("./rep-utils");
const {
createFactories,
isGrip,
wrapRender,
} = require("./rep-utils");
const { StringRep } = require("./string");
// Shortcuts
@ -32,7 +36,7 @@ define(function (require, exports, module) {
return grip.preview.nodeName;
},
render: function () {
render: wrapRender(function () {
let object = this.props.object;
let value = object.preview.value;
let objectLink = this.props.objectLink || span;
@ -50,7 +54,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -12,6 +12,8 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
const DOM = React.DOM;
const { wrapRender } = require("./rep-utils");
/**
* Renders a caption. This template is used by other components
* that needs to distinguish between a simple text/value and a label.
@ -19,11 +21,11 @@ define(function (require, exports, module) {
const Caption = React.createClass({
displayName: "Caption",
render: function () {
render: wrapRender(function () {
return (
DOM.span({"className": "caption"}, this.props.object)
);
},
}),
});
// Exports from this module

View File

@ -9,7 +9,12 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { isGrip, cropString, cropMultipleLines } = require("./rep-utils");
const {
isGrip,
cropString,
cropMultipleLines,
wrapRender,
} = require("./rep-utils");
const { MODE } = require("./constants");
const nodeConstants = require("devtools/shared/dom-node-constants");
@ -28,7 +33,7 @@ define(function (require, exports, module) {
mode: React.PropTypes.oneOf(Object.keys(MODE).map(key => MODE[key])),
},
render: function () {
render: wrapRender(function () {
let {
object,
mode = MODE.SHORT
@ -42,7 +47,7 @@ define(function (require, exports, module) {
}
return span({className: "objectBox theme-comment"}, `<!-- ${textContent} -->`);
},
}),
});
// Registration

View File

@ -11,7 +11,10 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip } = require("./rep-utils");
const {
isGrip,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -35,7 +38,7 @@ define(function (require, exports, module) {
return "";
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
let date;
try {
@ -48,8 +51,9 @@ define(function (require, exports, module) {
} catch (e) {
date = span({className: "objectBox"}, "Invalid Date");
}
return date;
},
}),
});
// Registration

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip, getURLDisplayString } = require("./rep-utils");
const {
isGrip,
getURLDisplayString,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -46,7 +50,7 @@ define(function (require, exports, module) {
return doc.location.href;
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
return (
@ -57,7 +61,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -11,7 +11,10 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Utils
const { isGrip } = require("./rep-utils");
const {
isGrip,
wrapRender,
} = require("./rep-utils");
const { MODE } = require("./constants");
const nodeConstants = require("devtools/shared/dom-node-constants");
@ -88,7 +91,7 @@ define(function (require, exports, module) {
];
},
render: function () {
render: wrapRender(function () {
let {
object,
mode,
@ -114,7 +117,7 @@ define(function (require, exports, module) {
return objectLink({object},
span(baseConfig, ...elements)
);
},
}),
});
// Registration

View File

@ -8,7 +8,10 @@ define(function (require, exports, module) {
// ReactJS
const React = require("devtools/client/shared/vendor/react");
// Utils
const { isGrip } = require("./rep-utils");
const {
isGrip,
wrapRender,
} = require("./rep-utils");
const { MODE } = require("./constants");
// Shortcuts
const { span } = React.DOM;
@ -25,7 +28,7 @@ define(function (require, exports, module) {
mode: React.PropTypes.oneOf(Object.keys(MODE).map(key => MODE[key])),
},
render: function () {
render: wrapRender(function () {
let object = this.props.object;
let preview = object.preview;
let name = preview && preview.name
@ -51,7 +54,7 @@ define(function (require, exports, module) {
span({}, content)
)
);
},
}),
});
// Registration

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { createFactories, isGrip } = require("./rep-utils");
const {
createFactories,
isGrip,
wrapRender,
} = require("./rep-utils");
const { rep } = createFactories(require("./grip").Grip);
/**
@ -34,7 +38,7 @@ define(function (require, exports, module) {
return title;
},
render: function () {
render: wrapRender(function () {
// Use `Object.assign` to keep `this.props` without changes because:
// 1. JSON.stringify/JSON.parse is slow.
// 2. Immutable.js is planned for the future.
@ -80,7 +84,7 @@ define(function (require, exports, module) {
}
return rep(props);
}
})
});
// Registration

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip, cropString } = require("./rep-utils");
const {
isGrip,
cropString,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -40,7 +44,7 @@ define(function (require, exports, module) {
return cropString(name + "()", 100);
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
return (
@ -51,7 +55,7 @@ define(function (require, exports, module) {
this.summarizeFunction(grip)
)
);
},
}),
});
// Registration

View File

@ -10,7 +10,11 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { createFactories, isGrip } = require("./rep-utils");
const {
createFactories,
isGrip,
wrapRender,
} = require("./rep-utils");
const { Caption } = createFactories(require("./caption"));
const { MODE } = require("./constants");
@ -109,7 +113,7 @@ define(function (require, exports, module) {
return items;
},
render: function () {
render: wrapRender(function () {
let {
object,
mode = MODE.SHORT
@ -154,7 +158,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
/**

View File

@ -9,7 +9,11 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { createFactories, isGrip } = require("./rep-utils");
const {
createFactories,
isGrip,
wrapRender,
} = require("./rep-utils");
const { Caption } = createFactories(require("./caption"));
const { PropRep } = createFactories(require("./prop-rep"));
const { MODE } = require("./constants");
@ -144,7 +148,7 @@ define(function (require, exports, module) {
}, []);
},
render: function () {
render: wrapRender(function () {
let object = this.props.object;
let props = this.safeEntriesIterator(object,
(this.props.mode === MODE.LONG) ? 10 : 3);
@ -176,7 +180,7 @@ define(function (require, exports, module) {
}, " }")
)
);
},
}),
});
function supportsObject(grip, type) {

View File

@ -10,7 +10,11 @@ define(function (require, exports, module) {
// ReactJS
const React = require("devtools/client/shared/vendor/react");
// Dependencies
const { createFactories, isGrip } = require("./rep-utils");
const {
createFactories,
isGrip,
wrapRender,
} = require("./rep-utils");
const { Caption } = createFactories(require("./caption"));
const { PropRep } = createFactories(require("./prop-rep"));
const { MODE } = require("./constants");
@ -198,7 +202,7 @@ define(function (require, exports, module) {
return value;
},
render: function () {
render: wrapRender(function () {
let object = this.props.object;
let props = this.safePropIterator(object,
(this.props.mode === MODE.LONG) ? 10 : 3);
@ -230,7 +234,7 @@ define(function (require, exports, module) {
}, " }")
)
);
},
}),
});
// Registration

View File

@ -11,6 +11,8 @@ define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { wrapRender } = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -20,13 +22,13 @@ define(function (require, exports, module) {
const InfinityRep = React.createClass({
displayName: "Infinity",
render: function () {
render: wrapRender(function () {
return (
span({className: "objectBox objectBox-number"},
this.props.object.type
)
);
}
})
});
function supportsObject(object, type) {

View File

@ -8,7 +8,11 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { sanitizeString, isGrip } = require("./rep-utils");
const {
sanitizeString,
isGrip,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -29,7 +33,7 @@ define(function (require, exports, module) {
};
},
render: function () {
render: wrapRender(function () {
let {
cropLimit,
member,
@ -53,7 +57,7 @@ define(function (require, exports, module) {
}
let formattedString = useQuotes ? `"${string}"` : string;
return span(config, sanitizeString(formattedString));
},
}),
});
function supportsObject(object, type) {

View File

@ -11,6 +11,8 @@ define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { wrapRender } = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -20,13 +22,13 @@ define(function (require, exports, module) {
const NaNRep = React.createClass({
displayName: "NaN",
render: function () {
render: wrapRender(function () {
return (
span({className: "objectBox objectBox-nan"},
"NaN"
)
);
}
})
});
function supportsObject(object, type) {

View File

@ -11,6 +11,8 @@ define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { wrapRender } = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -20,13 +22,13 @@ define(function (require, exports, module) {
const Null = React.createClass({
displayName: "NullRep",
render: function () {
render: wrapRender(function () {
return (
span({className: "objectBox objectBox-null"},
"null"
)
);
},
}),
});
function supportsObject(object, type) {

View File

@ -11,6 +11,8 @@ define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { wrapRender } = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -27,7 +29,7 @@ define(function (require, exports, module) {
return (isNegativeZero ? "-0" : String(object));
},
render: function () {
render: wrapRender(function () {
let value = this.props.object;
return (
@ -35,7 +37,7 @@ define(function (require, exports, module) {
this.stringify(value)
)
);
}
})
});
function supportsObject(object, type) {

View File

@ -11,7 +11,10 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip } = require("./rep-utils");
const {
isGrip,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -45,7 +48,7 @@ define(function (require, exports, module) {
return "\"" + grip.preview.text + "\"";
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
return (
span({className: "objectBox objectBox-" + this.getType(grip)},
@ -55,7 +58,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip, getURLDisplayString } = require("./rep-utils");
const {
isGrip,
getURLDisplayString,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -45,7 +49,7 @@ define(function (require, exports, module) {
return getURLDisplayString(grip.preview.url);
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
return (
span({className: "objectBox objectBox-" + this.getType(grip)},
@ -55,7 +59,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -9,7 +9,10 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { createFactories } = require("./rep-utils");
const {
createFactories,
wrapRender,
} = require("./rep-utils");
const { Caption } = createFactories(require("./caption"));
const { PropRep } = createFactories(require("./prop-rep"));
const { MODE } = require("./constants");
@ -132,7 +135,7 @@ define(function (require, exports, module) {
return props;
},
render: function () {
render: wrapRender(function () {
let object = this.props.object;
let props = this.safePropIterator(object);
let objectLink = this.props.objectLink || span;
@ -159,7 +162,7 @@ define(function (require, exports, module) {
}, " }")
)
);
},
}),
});
function supportsObject(object, type) {
return true;

View File

@ -10,7 +10,12 @@ define(function (require, exports, module) {
// ReactJS
const React = require("devtools/client/shared/vendor/react");
// Dependencies
const { createFactories, isGrip } = require("./rep-utils");
const {
createFactories,
isGrip,
wrapRender,
} = require("./rep-utils");
const { PropRep } = createFactories(require("./prop-rep"));
const { MODE } = require("./constants");
// Shortcuts
@ -55,7 +60,7 @@ define(function (require, exports, module) {
});
},
render: function () {
render: wrapRender(function () {
const object = this.props.object;
const {promiseState} = object;
let objectLink = this.props.objectLink || span;
@ -94,7 +99,7 @@ define(function (require, exports, module) {
}, " }")
)
);
},
}),
});
// Registration

View File

@ -9,7 +9,10 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { createFactories } = require("./rep-utils");
const {
createFactories,
wrapRender,
} = require("./rep-utils");
const { MODE } = require("./constants");
// Shortcuts
const { span } = React.DOM;
@ -19,7 +22,7 @@ define(function (require, exports, module) {
* and GripMap (remote JS maps and weakmaps) reps.
* It's used to render object properties.
*/
let PropRep = React.createFactory(React.createClass({
let PropRep = React.createClass({
displayName: "PropRep",
propTypes: {
@ -36,7 +39,7 @@ define(function (require, exports, module) {
mode: React.PropTypes.oneOf(Object.keys(MODE).map(key => MODE[key])),
},
render: function () {
render: wrapRender(function () {
const { Grip } = require("./grip");
let { Rep } = createFactories(require("./rep"));
@ -66,8 +69,8 @@ define(function (require, exports, module) {
}, this.props.delim)
)
);
}
}));
})
});
// Exports from this module
exports.PropRep = PropRep;

View File

@ -11,7 +11,10 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip } = require("./rep-utils");
const {
isGrip,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -30,7 +33,7 @@ define(function (require, exports, module) {
return grip.displayString;
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
let objectLink = this.props.objectLink || span;
@ -42,7 +45,7 @@ define(function (require, exports, module) {
}, this.getSource(grip))
)
);
},
}),
});
// Registration

View File

@ -147,6 +147,27 @@ define(function (require, exports, module) {
};
}
/**
* Wrap the provided render() method of a rep in a try/catch block that will render a
* fallback rep if the render fails.
*/
function wrapRender(renderMethod) {
return function () {
try {
return renderMethod.call(this);
} catch (e) {
return React.DOM.span(
{
className: "objectBox objectBox-failure",
title: "This object could not be rendered, " +
"please file a bug on bugzilla.mozilla.org"
},
/* Labels have to be hardcoded for reps, see Bug 1317038. */
"Invalid object");
}
};
}
// Exports from this module
exports.createFactories = createFactories;
exports.isGrip = isGrip;
@ -156,5 +177,6 @@ define(function (require, exports, module) {
exports.parseURLEncodedText = parseURLEncodedText;
exports.getFileName = getFileName;
exports.getURLDisplayString = getURLDisplayString;
exports.wrapRender = wrapRender;
exports.sanitizeString = sanitizeString;
});

View File

@ -96,6 +96,15 @@
color: var(--source-link-color);
}
.objectBox-failure {
color: var(--string-color);
border-width: 1px;
border-style: solid;
border-radius: 2px;
font-size: 0.8em;
padding: 0 2px;
}
/******************************************************************************/
.objectLink-event,

View File

@ -10,7 +10,11 @@
define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { cropString } = require("./rep-utils");
const {
cropString,
wrapRender,
} = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -32,7 +36,7 @@ define(function (require, exports, module) {
};
},
render: function () {
render: wrapRender(function () {
let text = this.props.object;
let member = this.props.member;
let style = this.props.style;
@ -53,7 +57,7 @@ define(function (require, exports, module) {
"\"" + croppedString + "\"" : croppedString;
return span(config, formattedString);
},
}),
});
function supportsObject(object, type) {

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip, getURLDisplayString } = require("./rep-utils");
const {
isGrip,
getURLDisplayString,
wrapRender
} = require("./rep-utils");
// Shortcuts
const DOM = React.DOM;
@ -44,7 +48,7 @@ define(function (require, exports, module) {
return url ? getURLDisplayString(url) : "";
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
return (
@ -55,7 +59,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -11,6 +11,8 @@ define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { wrapRender } = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -24,7 +26,7 @@ define(function (require, exports, module) {
object: React.PropTypes.object.isRequired
},
render: function () {
render: wrapRender(function () {
let {object} = this.props;
let {name} = object;
@ -33,7 +35,7 @@ define(function (require, exports, module) {
`Symbol(${name || ""})`
)
);
},
}),
});
function supportsObject(object, type) {

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip, cropString } = require("./rep-utils");
const {
isGrip,
cropString,
wrapRender,
} = require("./rep-utils");
const { MODE } = require("./constants");
// Shortcuts
@ -43,7 +47,7 @@ define(function (require, exports, module) {
return title;
},
render: function () {
render: wrapRender(function () {
let {
object: grip,
mode = MODE.SHORT,
@ -75,7 +79,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -11,6 +11,8 @@ define(function (require, exports, module) {
// Dependencies
const React = require("devtools/client/shared/vendor/react");
const { wrapRender } = require("./rep-utils");
// Shortcuts
const { span } = React.DOM;
@ -20,13 +22,13 @@ define(function (require, exports, module) {
const Undefined = React.createClass({
displayName: "UndefinedRep",
render: function () {
render: wrapRender(function () {
return (
span({className: "objectBox objectBox-undefined"},
"undefined"
)
);
},
}),
});
function supportsObject(object, type) {

View File

@ -11,7 +11,11 @@ define(function (require, exports, module) {
const React = require("devtools/client/shared/vendor/react");
// Reps
const { isGrip, getURLDisplayString } = require("./rep-utils");
const {
isGrip,
getURLDisplayString,
wrapRender
} = require("./rep-utils");
// Shortcuts
const DOM = React.DOM;
@ -41,7 +45,7 @@ define(function (require, exports, module) {
return getURLDisplayString(grip.preview.url);
},
render: function () {
render: wrapRender(function () {
let grip = this.props.object;
return (
@ -52,7 +56,7 @@ define(function (require, exports, module) {
)
)
);
},
}),
});
// Registration

View File

@ -15,6 +15,7 @@ support-files =
[test_reps_element-node.html]
[test_reps_error.html]
[test_reps_event.html]
[test_reps_failure.html]
[test_reps_function.html]
[test_reps_grip.html]
[test_reps_grip-array.html]

View File

@ -0,0 +1,60 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!DOCTYPE HTML>
<html>
<!--
Test fallback for rep rendering when a rep fails to render.
-->
<head>
<meta charset="utf-8">
<title>Rep test - Failure</title>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
</head>
<body>
<pre id="test">
<script src="head.js" type="application/javascript;version=1.8"></script>
<script type="application/javascript;version=1.8">
window.onload = Task.async(function* () {
try {
let { Rep } = browserRequire("devtools/client/shared/components/reps/rep");
let { ArrayRep } = browserRequire("devtools/client/shared/components/reps/array");
let { RegExp } = browserRequire("devtools/client/shared/components/reps/regexp");
// Force the RegExp rep to crash by creating RegExp grip that throws when accessing
// the displayString property
let gripStub = {
"type": "object",
"class": "RegExp",
"actor": "server1.conn22.obj39",
"extensible": true,
"frozen": false,
"sealed": false,
"ownPropertyLength": 1,
get displayString() {
throw new Error("failure");
}
};
// Test that correct rep is chosen.
const renderedRep = shallowRenderComponent(Rep, { object: gripStub });
is(renderedRep.type, RegExp.rep, `Rep correctly selects ${RegExp.rep.displayName}`);
// Test fallback message is displayed when rendering bad rep directly.
let renderedComponent = renderComponent(RegExp.rep, { object: gripStub });
is(renderedComponent.textContent, "Invalid object", "Fallback rendering has expected text content");
// Test fallback message is displayed when bad rep is nested in another rep.
renderedComponent = renderComponent(ArrayRep.rep, { object: [1, gripStub, 2] });
is(renderedComponent.textContent, "[ 1, Invalid object, 2 ]", "Fallback rendering has expected text content");
} catch(e) {
ok(false, "Got an error: " + DevToolsUtils.safeErrorString(e));
} finally {
SimpleTest.finish();
}
});
</script>
</pre>
</body>
</html>

View File

@ -576,9 +576,10 @@ Location::GetPathname(nsAString& aPathname)
aPathname.Truncate();
nsCOMPtr<nsIURI> uri;
nsresult result = NS_OK;
result = GetURI(getter_AddRefs(uri));
nsresult result = GetURI(getter_AddRefs(uri));
if (NS_FAILED(result) || !uri) {
return result;
}
nsAutoCString file;

View File

@ -885,9 +885,12 @@ private:
}
SetSuspended(nsISuspendedTypes::NONE_SUSPENDED);
nsresult rv = mOwner->Play();
if (NS_WARN_IF(NS_FAILED(rv))) {
return;
IgnoredErrorResult rv;
RefPtr<Promise> toBeIgnored = mOwner->Play(rv);
MOZ_ASSERT_IF(toBeIgnored && toBeIgnored->State() == Promise::PromiseState::Rejected,
rv.Failed());
if (rv.Failed()) {
NS_WARNING("Not able to resume from AudioChannel.");
}
}
@ -3867,23 +3870,6 @@ HTMLMediaElement::MaybeDoLoad()
}
}
NS_IMETHODIMP HTMLMediaElement::Play()
{
if (mAudioChannelWrapper && mAudioChannelWrapper->IsPlaybackBlocked()) {
MaybeDoLoad();
return NS_OK;
}
ErrorResult rv;
RefPtr<Promise> toBeIgnored = PlayInternal(rv);
if (rv.Failed()) {
return rv.StealNSResult();
}
UpdateCustomPolicyAfterPlayed();
return NS_OK;
}
HTMLMediaElement::WakeLockBoolWrapper&
HTMLMediaElement::WakeLockBoolWrapper::operator=(bool val)
{

View File

@ -65,7 +65,6 @@ interface nsIDOMHTMLMediaElement : nsISupports
readonly attribute boolean mozAutoplayEnabled;
attribute boolean autoplay;
attribute boolean loop;
void play();
void pause();
// controls

View File

@ -633,9 +633,6 @@ void
MediaDecoder::SetStateMachineParameters()
{
MOZ_ASSERT(NS_IsMainThread());
if (mMinimizePreroll) {
mDecoderStateMachine->DispatchMinimizePrerollUntilPlaybackStarts();
}
if (mPlaybackRate != 1 && mPlaybackRate != 0) {
mDecoderStateMachine->DispatchSetPlaybackRate(mPlaybackRate);
}

View File

@ -192,6 +192,8 @@ public:
// not be played. Note that seeking also doesn't cause us start prerolling.
void SetMinimizePrerollUntilPlaybackStarts();
bool GetMinimizePreroll() const { return mMinimizePreroll; }
// All MediaStream-related data is protected by mReentrantMonitor.
// We have at most one DecodedStreamData per MediaDecoder. Its stream
// is used as the input for each ProcessedMediaStream created by calls to

View File

@ -592,14 +592,14 @@ public:
void HandleAudioDecoded(MediaData* aAudio) override
{
mMaster->PushAudio(aAudio);
mMaster->DispatchDecodeTasksIfNeeded();
DispatchDecodeTasksIfNeeded();
MaybeStopPrerolling();
}
void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override
{
mMaster->PushVideo(aVideo);
mMaster->DispatchDecodeTasksIfNeeded();
DispatchDecodeTasksIfNeeded();
MaybeStopPrerolling();
CheckSlowDecoding(aDecodeStart);
}
@ -632,6 +632,8 @@ public:
if (aPlayState == MediaDecoder::PLAY_STATE_PLAYING) {
// Schedule Step() to check if we can start playback.
mMaster->ScheduleStateMachine();
// Try to dispatch decoding tasks for mMinimizePreroll might be reset.
DispatchDecodeTasksIfNeeded();
}
if (aPlayState == MediaDecoder::PLAY_STATE_PAUSED) {
@ -647,6 +649,7 @@ public:
}
private:
void DispatchDecodeTasksIfNeeded();
void MaybeStartBuffering();
void CheckSlowDecoding(TimeStamp aDecodeStart)
@ -1501,6 +1504,8 @@ public:
}
private:
void DispatchDecodeTasksIfNeeded();
TimeStamp mBufferingStart;
// The maximum number of second we spend buffering when we are short on
@ -2016,7 +2021,7 @@ DecodingState::Enter()
MaybeStopPrerolling();
// Ensure that we've got tasks enqueued to decode data if we need to.
mMaster->DispatchDecodeTasksIfNeeded();
DispatchDecodeTasksIfNeeded();
mMaster->ScheduleStateMachine();
@ -2037,6 +2042,23 @@ DecodingState::HandleEndOfStream()
}
}
void
MediaDecoderStateMachine::
DecodingState::DispatchDecodeTasksIfNeeded()
{
if (mMaster->IsAudioDecoding() &&
!mMaster->mMinimizePreroll &&
!mMaster->HaveEnoughDecodedAudio()) {
mMaster->EnsureAudioDecodeTaskQueued();
}
if (mMaster->IsVideoDecoding() &&
!mMaster->mMinimizePreroll &&
!mMaster->HaveEnoughDecodedVideo()) {
mMaster->EnsureVideoDecodeTaskQueued();
}
}
void
MediaDecoderStateMachine::
DecodingState::MaybeStartBuffering()
@ -2210,6 +2232,21 @@ NextFrameSeekingState::HandleVideoNotDecoded(const MediaResult& aError)
}
}
void
MediaDecoderStateMachine::
BufferingState::DispatchDecodeTasksIfNeeded()
{
if (mMaster->IsAudioDecoding() &&
!mMaster->HaveEnoughDecodedAudio()) {
mMaster->EnsureAudioDecodeTaskQueued();
}
if (mMaster->IsVideoDecoding() &&
!mMaster->HaveEnoughDecodedVideo()) {
mMaster->EnsureVideoDecodeTaskQueued();
}
}
void
MediaDecoderStateMachine::
BufferingState::Step()
@ -2230,17 +2267,15 @@ BufferingState::Step()
SLOG("Buffering: wait %ds, timeout in %.3lfs",
mBufferingWait, mBufferingWait - elapsed.ToSeconds());
mMaster->ScheduleStateMachineIn(USECS_PER_S);
mMaster->DispatchDecodeTasksIfNeeded();
DispatchDecodeTasksIfNeeded();
return;
}
} else if (mMaster->OutOfDecodedAudio() || mMaster->OutOfDecodedVideo()) {
mMaster->DispatchDecodeTasksIfNeeded();
MOZ_ASSERT(mMaster->mMinimizePreroll ||
!mMaster->OutOfDecodedAudio() ||
DispatchDecodeTasksIfNeeded();
MOZ_ASSERT(!mMaster->OutOfDecodedAudio() ||
mMaster->IsRequestingAudioData() ||
mMaster->IsWaitingAudioData());
MOZ_ASSERT(mMaster->mMinimizePreroll ||
!mMaster->OutOfDecodedVideo() ||
MOZ_ASSERT(!mMaster->OutOfDecodedVideo() ||
mMaster->IsRequestingVideoData() ||
mMaster->IsWaitingVideoData());
SLOG("In buffering mode, waiting to be notified: outOfAudio: %d, "
@ -2359,7 +2394,7 @@ MediaDecoderStateMachine::MediaDecoderStateMachine(MediaDecoder* aDecoder,
mLowAudioThresholdUsecs(detail::LOW_AUDIO_USECS),
mAmpleAudioThresholdUsecs(detail::AMPLE_AUDIO_USECS),
mAudioCaptured(false),
mMinimizePreroll(false),
mMinimizePreroll(aDecoder->GetMinimizePreroll()),
mSentLoadedMetadataEvent(false),
mSentFirstFrameLoadedEvent(false),
mVideoDecodeSuspended(false),
@ -2832,7 +2867,6 @@ void MediaDecoderStateMachine::PlayStateChanged()
// assume the user is likely to want to keep playing in future. This needs to
// happen before we invoke StartDecoding().
mMinimizePreroll = false;
DispatchDecodeTasksIfNeeded();
}
mStateObj->HandlePlayStateChanged(mPlayState);
@ -2929,39 +2963,6 @@ void MediaDecoderStateMachine::StopMediaSink()
}
}
void
MediaDecoderStateMachine::DispatchDecodeTasksIfNeeded()
{
MOZ_ASSERT(OnTaskQueue());
if (mState != DECODER_STATE_DECODING &&
mState != DECODER_STATE_DECODING_FIRSTFRAME &&
mState != DECODER_STATE_BUFFERING) {
return;
}
const bool needToDecodeAudio =
IsAudioDecoding() &&
((!mSentFirstFrameLoadedEvent && AudioQueue().GetSize() == 0) ||
(!mMinimizePreroll && !HaveEnoughDecodedAudio()));
const bool needToDecodeVideo =
IsVideoDecoding() &&
((!mSentFirstFrameLoadedEvent && VideoQueue().GetSize() == 0) ||
(!mMinimizePreroll && !HaveEnoughDecodedVideo()));
SAMPLE_LOG("DispatchDecodeTasksIfNeeded needAudio=%d audioStatus=%s needVideo=%d videoStatus=%s",
needToDecodeAudio, AudioRequestStatus(),
needToDecodeVideo, VideoRequestStatus());
if (needToDecodeAudio) {
EnsureAudioDecodeTaskQueued();
}
if (needToDecodeVideo) {
EnsureVideoDecodeTaskQueued();
}
}
void
MediaDecoderStateMachine::EnsureAudioDecodeTaskQueued()
{

View File

@ -178,26 +178,6 @@ public:
RefPtr<ShutdownPromise> BeginShutdown();
// Notifies the state machine that should minimize the number of samples
// decoded we preroll, until playback starts. The first time playback starts
// the state machine is free to return to prerolling normally. Note
// "prerolling" in this context refers to when we decode and buffer decoded
// samples in advance of when they're needed for playback.
void DispatchMinimizePrerollUntilPlaybackStarts()
{
RefPtr<MediaDecoderStateMachine> self = this;
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self] () -> void
{
MOZ_ASSERT(self->OnTaskQueue());
self->mMinimizePreroll = true;
// Make sure that this arrives before playback starts, otherwise this won't
// have the intended effect.
MOZ_DIAGNOSTIC_ASSERT(self->mPlayState == MediaDecoder::PLAY_STATE_LOADING);
});
OwnerThread()->Dispatch(r.forget());
}
// Set the media fragment end time. aEndTime is in microseconds.
void DispatchSetFragmentEndTime(int64_t aEndTime)
{
@ -448,12 +428,6 @@ protected:
bool IsWaitingAudioData() const { return mAudioWaitRequest.Exists(); }
bool IsWaitingVideoData() const { return mVideoWaitRequest.Exists(); }
// Re-evaluates the state and determines whether we need to dispatch
// events to run the decode, or if not whether we should set the reader
// to idle mode. This is threadsafe, and can be called from any thread.
// The decoder monitor must be held.
void DispatchDecodeTasksIfNeeded();
// Returns the "media time". This is the absolute time which the media
// playback has reached. i.e. this returns values in the range
// [mStartTime, mEndTime], and mStartTime will not be 0 if the media does

View File

@ -1,6 +1,6 @@
<script>
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
window.opener.opener.postMessage(window.opener.testNum + " - " + window.x, "http://mochi.test:8888");
window.opener.close();
window.close();
var win = SpecialPowers.wrap(window).wrappedJSObject;
win.opener.opener.postMessage(win.opener.testNum + " - " + win.x, "http://mochi.test:8888");
win.opener.close();
win.close();
</script>

View File

@ -1,5 +1,5 @@
<script>
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
window.parent.opener.postMessage(window.parent.testNum + " - " + window.x, "http://mochi.test:8888");
window.parent.close();
var win = SpecialPowers.wrap(window).wrappedJSObject;
win.parent.opener.postMessage(win.parent.testNum + " - " + win.x, "http://mochi.test:8888");
win.parent.close();
</script>

View File

@ -37,14 +37,11 @@ function handleCmd(evt) {
return false;
}
// Grab privileges so we can access cross-domain windows
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
if ("load" in cmd) {
var testNum = cmd.load;
var win = wins[testNum];
var win = SpecialPowers.wrap(wins[testNum]).wrappedJSObject;
win.childWin.x = testNum;
if (win.childWin.opener == win) {
if (SpecialPowers.unwrap(win.childWin.opener) == SpecialPowers.unwrap(win)) {
if ("xsite" in cmd) {
var loc = r(window.location.href, "bug346659-opener-echoer.html");
} else {

View File

@ -29,12 +29,11 @@ var promptState;
function registerMockPromptService()
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var XPCOMUtils = SpecialPowers.Cu.import("resource://gre/modules/XPCOMUtils.jsm").XPCOMUtils;
var Ci = SpecialPowers.Ci;
function MockPrompt(aDOMWindow) {
this.domWindow = aDOMWindow;
this.domWindow = SpecialPowers.unwrap(aDOMWindow);
}
MockPrompt.prototype = {

View File

@ -92,7 +92,6 @@ function persistDocument(aDoc) {
SimpleTest.waitForExplicitFinish();
addLoadEvent(function() {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var srcDoc = document.getElementById('source').contentDocument;
persistDocument(srcDoc);
});

View File

@ -42,8 +42,8 @@ skip-if(Android) load 394751.xhtml # bug 922976
load 395335-1.xhtml
load 395458-1.html
load 396321-1.svg
skip-if(stylo) load 398042-1.xhtml # bug 1323665
skip-if(stylo) load 398042-2.xhtml # bug 1323665
load 398042-1.xhtml
load 398042-2.xhtml
load 402307-1.html
load 403464-1.html
load 404112-1.html

View File

@ -231,10 +231,8 @@ JS_FOR_EACH_TYPED_ARRAY(OBJECT_MOVED_TYPED_ARRAY)
// Set a forwarding pointer for the element buffers in case they were
// preserved on the stack by Ion.
if (nbytes > 0) {
nursery.maybeSetForwardingPointer(trc, oldObj->elements(), newObj->elements(),
/* direct = */nbytes >= sizeof(uintptr_t));
}
nursery.maybeSetForwardingPointer(trc, oldObj->elements(), newObj->elements(),
/* direct = */nbytes >= sizeof(uintptr_t));
return newObj->hasInlineElements() ? 0 : nbytes;
}

View File

@ -27,7 +27,7 @@ asserts-if(stylo,13) load 191272-1.html # bug 1324636
load 199696-1.html
load 217903-1.html
load 223064-1.html
skip-if(stylo) load 234851-1.html # bug 1323665
load 234851-1.html
load 234851-2.html
load 241300-1.html
load 243159-1.html
@ -83,7 +83,7 @@ load 331204-1.html
load 331679-1.xhtml
load 331679-2.xml
load 331679-3.xml
asserts-if(stylo,186) load 331883-1.html # bug 1324673
asserts-if(stylo,10) load 331883-1.html # bug 1324663
load 335140-1.html
load 336291-1.html
load 336999-1.xul
@ -103,7 +103,7 @@ asserts-if(stylo,3) load 343293-2.xhtml # bug 1324663
load 343540-1.html
load 344057-1.xhtml
load 344064-1.html
asserts-if(stylo,1-9) load 344300-1.html # bug 1324673
asserts-if(stylo,1-9) load 344300-1.html # bug 1324663
load 344300-2.html
load 344340-1.xul
load 347898-1.html
@ -172,7 +172,7 @@ load 384649-1.xhtml
load 385354.html
load 385866-1.xhtml
load 385880-1.xhtml
skip-if(stylo) load 386266-1.html # bug 1323665
load 386266-1.html
load 386476.html
load 387195-1.html
load 387195-2.xhtml
@ -276,7 +276,7 @@ load 455171-4.html
skip-if(stylo) load 455623-1.html # bug 1323652
load 457362-1.xhtml
load 457514.html
skip-if(stylo) asserts(0-1) load 460389-1.html # Bug 1323665, bug 780985
asserts(0-1) load 460389-1.html # bug 780985
asserts-if(stylo,1) load 462392.html # bug 1324683
load 466763-1.html
load 467881-1.html
@ -313,7 +313,7 @@ asserts-if(stylo,4) load 490747.html # bug 1324663
load 491547-1.xul
load 491547-2.xul
load 492014.xhtml
skip-if(stylo) load 492112-1.xhtml # bug 1323665
load 492112-1.xhtml
asserts-if(stylo,1) load 492163-1.xhtml # bug 1324663
load 495350-1.html
skip-if(stylo) load 496011-1.xhtml # bug 1323649
@ -443,7 +443,7 @@ pref(layers.progressive-paint,false) pref(layers.low-precision-buffer,false) loa
pref(layers.force-active,true) load 859526-1.html
pref(layers.force-active,true) load 859630-1.html
load 860579-1.html
asserts-if(stylo,2) load 866588.html # bug 1324705
load 866588.html
load 876092.html
load 876221.html
load 897852.html
@ -456,7 +456,7 @@ load 931460-1.html
load 931464.html
load 935765-1.html
load 936988-1.html
asserts-if(stylo,2) load 942690.html # bug 1324705
load 942690.html
load 973390-1.html
load 1001237.html
load 1009036.html

View File

@ -52,7 +52,7 @@ load 348510-1.html
load 348510-2.html
load 348887-1.html
load 348991-1.xhtml
asserts-if(stylo,7-8) load 350370.html # bug 1324673
asserts-if(stylo,7) load 350370.html # bug 1324663
load 354458-1.html
load 354458-2.html
load 355426-1.html
@ -125,7 +125,7 @@ load 385344-2.html
load 385414-1.html
load 385414-2.html
load 385426-1.html
asserts-if(stylo,351) load 385526.html # bug 1324673
asserts-if(stylo,4) load 385526.html # bug 1324663
load 385681.html
load 385885-1.xul
load 386799-1.html
@ -298,7 +298,7 @@ load 445288.html
load 448903-1.html
skip-if(stylo) load 448996-1.html # bug 1323652
asserts-if(stylo,5) load 451315-1.html # bug 1324672
asserts-if(stylo,8) load 451317-1.html # bug 1324665
asserts-if(stylo,7) load 451317-1.html # bug 1324665
load 451334-1.html
load 452157-1.html
load 452157-2.html
@ -392,8 +392,8 @@ load 526217.html
load 533379-1.html
load 533379-2.html
load 534082-1.html
asserts-if(stylo,2) load 534366-1.html # bug 1324705
asserts-if(stylo,2) load 534366-2.html # bug 1324705
load 534366-1.html
load 534366-2.html
load 536692-1.xhtml
load 537645.xhtml
load 541277-1.html

View File

@ -3212,7 +3212,7 @@ nsCSSRendering::PaintGradient(nsPresContext* aPresContext,
if (aGradient->mShape == NS_STYLE_GRADIENT_SHAPE_LINEAR && !isRepeat &&
RectIsBeyondLinearGradientEdge(fillRectRelativeToTile, matrix, stops,
gradientStart, gradientEnd, &edgeColor)) {
edgeColor.a = aOpacity;
edgeColor.a *= aOpacity;
ctx->SetColor(edgeColor);
} else {
ctx->SetMatrix(

View File

@ -0,0 +1,17 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Make sure that gradient masks are painted correctly with translucent end-color</title>
<style>
html {
background: rgba(255, 0, 0, 0.5);
overflow: hidden;
}
</style>

View File

@ -0,0 +1,34 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE html>
<html lang="en" class="reftest-wait">
<meta charset="utf-8">
<title>Make sure that gradient masks are painted correctly with translucent end-color</title>
<!-- See https://bugzilla.mozilla.org/show_bug.cgi?id=1329411 -->
<style>
html {
background: white;
overflow: hidden;
}
div {
height: 5000px;
background-color: red;
mask-image: linear-gradient(transparent 0px, rgba(255, 0, 0, 0.5) 2000px);
}
</style>
<body style="margin: 0px;">
<div></div>
<script>
window.addEventListener("MozReftestInvalidate", function () {
document.documentElement.scrollTop = 3000; // > 2000
document.documentElement.removeAttribute("class");
});
</script>
</body>

View File

@ -152,3 +152,5 @@ fuzzy(1,800000) == large-gradient-3.html large-gradient-3-ref.html
== large-gradient-4.html large-gradient-4-ref.html
fuzzy(2,800000) == large-gradient-5.html large-gradient-5-ref.html
== 1224761-1.html 1224761-1-ref.html
fuzzy(1,800000) == mask-gradient-translucent-end-color-1.html mask-gradient-translucent-end-color-1-ref.html

View File

@ -318,7 +318,6 @@ ServoStyleSet::RemoveStyleSheet(SheetType aType,
ServoStyleSheet* aSheet)
{
MOZ_ASSERT(aSheet);
MOZ_ASSERT(aSheet->IsApplicable());
MOZ_ASSERT(nsStyleSet::IsCSSSheetType(aType));
mSheets[aType].RemoveElement(aSheet);
@ -413,6 +412,8 @@ nsresult
ServoStyleSet::AddDocStyleSheet(ServoStyleSheet* aSheet,
nsIDocument* aDocument)
{
MOZ_ASSERT(aSheet->IsApplicable());
RefPtr<StyleSheet> strong(aSheet);
mSheets[SheetType::Doc].RemoveElement(aSheet);

View File

@ -169,11 +169,7 @@ StyleSheet::SetDisabled(bool aDisabled)
{
// DOM method, so handle BeginUpdate/EndUpdate
MOZ_AUTO_DOC_UPDATE(mDocument, UPDATE_STYLE, true);
if (IsGecko()) {
AsGecko()->SetEnabled(!aDisabled);
} else {
MOZ_CRASH("stylo: unimplemented SetEnabled");
}
SetEnabled(!aDisabled);
return NS_OK;
}

View File

@ -38,7 +38,7 @@ skip-if(stylo) load 456196.html # bug 132652
load 460209-1.html
load 460217-1.html
asserts-if(stylo,2) load 460323-1.html # bug 1324634
asserts-if(stylo,2) load 466845-1.html # bug 1324705
load 466845-1.html
skip-if(stylo) load 469432-1.xhtml # bug 1323649
load 472195-1.html
load 472237-1.html # will fail, test for leak (474704)
@ -68,7 +68,7 @@ load 580685.html
load 585185-1.html
load 588627-1.html
load 592698-1.html
skip-if(stylo) load 601437-1.html # bug 1323706
asserts-if(stylo,2) load 601437-1.html # bug 1324634
load 601439-1.html
load 605689-1.html
load 611922-1.html

View File

@ -89,7 +89,7 @@ load 474700-1.svg
load 475181-1.svg
load 475193-1.html
load 475302-1.svg
skip-if(stylo) load 477935-1.html # bug 1323665
load 477935-1.html
load 478128-1.svg
load 478511-1.svg
load 483439-1.svg

View File

@ -918,6 +918,11 @@ public class BrowserApp extends GeckoApp
* @param intent Intent that launched this activity
*/
private void checkFirstrun(Context context, SafeIntent intent) {
if (getProfile().inGuestMode()) {
// We do not want to show any first run tour for guest profiles.
return;
}
if (intent.getBooleanExtra(EXTRA_SKIP_STARTPANE, false)) {
// Note that we don't set the pref, so subsequent launches can result
// in the firstrun pane being shown.

View File

@ -1,3 +1,3 @@
skip-if(stylo) load 785753-1.html # bug 1323665
asserts-if(stylo,5) load 785753-1.html # bug 1324634
asserts-if(stylo,4) load 785753-2.html # bug 1324634
load 1274044-1.html

View File

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

View File

@ -20,6 +20,7 @@
206rc.net: max-age too low: 2592000
25daysof.io: could not connect to host
2859cc.com: could not connect to host
2kgwf.fi: could not connect to host
2or3.tk: could not connect to host
300651.ru: did not receive HSTS header
302.nyc: could not connect to host
@ -29,7 +30,6 @@
365.or.jp: did not receive HSTS header
3chit.cf: could not connect to host
404.sh: max-age too low: 0
4096bit.de: could not connect to host
420dongstorm.com: could not connect to host
42ms.org: could not connect to host
4455software.com: did not receive HSTS header
@ -127,7 +127,6 @@ ahabingo.com: did not receive HSTS header
ahoynetwork.com: could not connect to host
ahri.ovh: could not connect to host
aidanwoods.com: did not receive HSTS header
aimeeandalec.com: did not receive HSTS header
airbnb.com: did not receive HSTS header
aircomms.com: did not receive HSTS header
airproto.com: did not receive HSTS header
@ -149,8 +148,6 @@ alariel.de: did not receive HSTS header
alarmsystemreviews.com: did not receive HSTS header
albertopimienta.com: did not receive HSTS header
alcazaar.com: could not connect to host
alecpap.com: did not receive HSTS header
alecpapierniak.com: did not receive HSTS header
alecvannoten.be: did not receive HSTS header
alenan.org: could not connect to host
alessandro.pw: did not receive HSTS header
@ -160,6 +157,7 @@ alexei.su: could not connect to host
alexhaydock.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
alexisabarca.com: did not receive HSTS header
alittlebitcheeky.com: did not receive HSTS header
aljaspod.com: could not connect to host
alkami.com: did not receive HSTS header
all-subtitles.com: did not receive HSTS header
all.tf: could not connect to host
@ -181,7 +179,6 @@ american-truck-simulator.de: could not connect to host
american-truck-simulator.net: could not connect to host
americanworkwear.nl: did not receive HSTS header
amigogeek.net: could not connect to host
amihub.com: could not connect to host
amilx.com: could not connect to host
amilx.org: could not connect to host
amitube.com: could not connect to host
@ -277,6 +274,7 @@ as9178.net: could not connect to host
asasuou.pw: could not connect to host
asc16.com: could not connect to host
asdpress.cn: could not connect to host
ashleymedway.com: could not connect to host
ashutoshmishra.org: did not receive HSTS header
asianodor.com: could not connect to host
askfit.cz: did not receive HSTS header
@ -326,13 +324,14 @@ auverbox.ovh: could not connect to host
av.de: did not receive HSTS header
avec-ou-sans-ordonnance.fr: could not connect to host
avinet.com: max-age too low: 0
avqueen.cn: could not connect to host
avqueen.cn: did not receive HSTS header
awg-mode.de: did not receive HSTS header
axado.com.br: did not receive HSTS header
axeny.com: did not receive HSTS header
az.search.yahoo.com: did not receive HSTS header
azabani.com: could not connect to host
azprep.us: could not connect to host
b1c1l1.com: could not connect to host
b3orion.com: max-age too low: 0
baby-click.de: did not receive HSTS header
babybic.hu: did not receive HSTS header
@ -533,7 +532,6 @@ bsquared.org: could not connect to host
btcdlc.com: could not connect to host
buchheld.at: did not receive HSTS header
bucket.tk: could not connect to host
budger.nl: could not connect to host
budgetthostels.nl: did not receive HSTS header
budskap.eu: could not connect to host
bugtrack.io: did not receive HSTS header
@ -547,10 +545,13 @@ bumarkamoda.com: could not connect to host
bunaken.asia: could not connect to host
burian-server.cz: could not connect to host
burrow.ovh: could not connect to host
burtrum.family: could not connect to host
burtrum.me: could not connect to host
burtrum.name: could not connect to host
burtrum.org: could not connect to host
burtrum.top: could not connect to host
business.lookout.com: could not connect to host
business.medbank.com.mt: max-age too low: 10615978
business.medbank.com.mt: max-age too low: 10529578
businesshosting.nl: did not receive HSTS header
busold.ws: could not connect to host
bustimes.org: could not connect to host
@ -572,7 +573,6 @@ cabarave.com: could not connect to host
cabusar.fr: could not connect to host
caconnect.org: could not connect to host
cadao.me: did not receive HSTS header
cadusilva.com: could not connect to host
cafe-scientifique.org.ec: could not connect to host
caim.cz: did not receive HSTS header
cainhosting.com: did not receive HSTS header
@ -767,7 +767,6 @@ comparejewelleryprices.co.uk: could not connect to host
completeid.com: max-age too low: 86400
completionist.audio: could not connect to host
compucorner.com.mx: could not connect to host
computeremergency.com.au: did not receive HSTS header
concord-group.co.jp: did not receive HSTS header
condesaelectronics.com: max-age too low: 0
confirm365.com: could not connect to host
@ -794,6 +793,7 @@ correctpaardbatterijnietje.nl: did not receive HSTS header
corruption-mc.net: could not connect to host
corruption-rsps.net: could not connect to host
corruption-server.net: could not connect to host
cosmeticasimple.com: could not connect to host
count.sh: could not connect to host
couragewhispers.ca: did not receive HSTS header
coursdeprogrammation.com: could not connect to host
@ -849,6 +849,7 @@ ct.search.yahoo.com: did not receive HSTS header
cthulhuden.com: could not connect to host
cubeserver.eu: could not connect to host
cubewano.com: could not connect to host
cubua.com: could not connect to host
cujanovic.com: did not receive HSTS header
cumshots-video.ru: could not connect to host
cupidmentor.com: did not receive HSTS header
@ -864,7 +865,7 @@ cyphertite.com: could not connect to host
dad256.tk: could not connect to host
dadtheimpaler.com: could not connect to host
dah5.com: did not receive HSTS header
dailystormerpodcasts.com: could not connect to host
dailystormerpodcasts.com: did not receive HSTS header
daimadi.com: could not connect to host
dakrib.net: could not connect to host
dalingk.co: could not connect to host
@ -944,6 +945,7 @@ demuzere.net: could not connect to host
demuzere.org: could not connect to host
denh.am: did not receive HSTS header
denisjean.fr: could not connect to host
dennisdoes.net: could not connect to host
dentaldomain.org: did not receive HSTS header
dentaldomain.ph: could not connect to host
depeche-mode.moscow: max-age too low: 7200
@ -957,10 +959,11 @@ designthinking.or.jp: did not receive HSTS header
despora.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]
destinationbijoux.fr: could not connect to host
detector.exposed: could not connect to host
devct.cz: could not connect to host
devcu.net: did not receive HSTS header
devincrow.me: could not connect to host
devinfo.net: did not receive HSTS header
devmsg.com: did not receive HSTS header
devmsg.com: could not connect to host
devtub.com: could not connect to host
devuan.org: did not receive HSTS header
diablotine.rocks: could not connect to host
@ -1114,6 +1117,7 @@ elemprendedor.com.ve: could not connect to host
elenag.ga: could not connect to host
elenoon.ir: did not receive HSTS header
elgacien.de: could not connect to host
elgosblanc.com: could not connect to host
elimdengelen.com: did not receive HSTS header
elisabeth-kostecki.de: did not receive HSTS header
elisabethkostecki.de: did not receive HSTS header
@ -1166,6 +1170,7 @@ equatetechnologies.com.au: max-age too low: 3600
equilibre-yoga-jennifer-will.com: could not connect to host
erawanarifnugroho.com: did not receive HSTS header
eressea.xyz: could not connect to host
eriner.me: could not connect to host
ernesto.at: could not connect to host
eromixx.com: did not receive HSTS header
erotalia.es: could not connect to host
@ -1293,6 +1298,7 @@ fitbylo.com: did not receive HSTS header
fitiapp.com: could not connect to host
fitnesswerk.de: could not connect to host
five.vn: did not receive HSTS header
fivestarsitters.com: did not receive HSTS header
fixatom.com: did not receive HSTS header
fixingdns.com: did not receive HSTS header
fj.search.yahoo.com: did not receive HSTS header
@ -1346,7 +1352,7 @@ franta.email: did not receive HSTS header
franzt.de: could not connect to host
frasys.io: max-age too low: 7776000
freeflow.tv: could not connect to host
freematthale.net: could not connect to host
freematthale.net: did not receive HSTS header
freemedforms.com: did not receive HSTS header
freesoftwaredriver.com: did not receive HSTS header
freesounding.com: could not connect to host
@ -1411,7 +1417,6 @@ gampenhof.de: did not receive HSTS header
gancedo.com.es: [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]
gaptek.id: did not receive HSTS header
garciamartin.me: could not connect to host
gasnews.net: did not receive HSTS header
gatilagata.com.br: did not receive HSTS header
gchq.wtf: could not connect to host
gdpventure.com: max-age too low: 0
@ -1421,6 +1426,7 @@ geekcast.co.uk: did not receive HSTS header
geeky.software: could not connect to host
geli-graphics.com: did not receive HSTS header
gem-indonesia.net: could not connect to host
gendrin.com: could not connect to host
genuu.com: could not connect to host
genuxation.com: could not connect to host
genyaa.com: could not connect to host
@ -1459,7 +1465,7 @@ gipsamsfashion.com: could not connect to host
gipsic.com: did not receive HSTS header
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
gkralik.eu: [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]
gl.search.yahoo.com: did not receive HSTS header
@ -1514,8 +1520,8 @@ gpsfix.cz: could not connect to host
gpstuner.com: did not receive HSTS header
gracesofgrief.com: max-age too low: 86400
grandmascookieblog.com: did not receive HSTS header
grandmasfridge.org: could not connect to host
graph.no: did not receive HSTS header
grassenberg.de: could not connect to host
gravito.nl: did not receive HSTS header
gravity-net.de: could not connect to host
grazetech.com: could not connect to host
@ -1542,6 +1548,7 @@ gtlfsonlinepay.com: did not receive HSTS header
gtraxapp.com: could not connect to host
guava.studio: did not receive HSTS header
guilde-vindicta.fr: did not receive HSTS header
guoqiang.info: did not receive HSTS header
gurusupe.com: could not connect to host
gussi.is: could not connect to host
gvt2.com: could not connect to host (error ignored - included regardless)
@ -1564,7 +1571,6 @@ hack.cz: could not connect to host
hack.li: did not receive HSTS header
hacker.one: could not connect to host
hackerforever.com: did not receive HSTS header
hackernet.se: could not connect to host
hackerone-ext-adroll.com: could not connect to host
hackest.org: did not receive HSTS header
hackit.im: could not connect to host
@ -1597,7 +1603,6 @@ harz.cloud: could not connect to host
has.vision: could not connect to host
hash-list.com: could not connect to host
hasilocke.de: did not receive HSTS header
hasinase.de: did not receive HSTS header
haste.ch: could not connect to host
hastherebeenamassshooting.today: could not connect to host
hatoko.net: could not connect to host
@ -1618,7 +1623,6 @@ hdwallpapers.net: did not receive HSTS header
healtious.com: did not receive HSTS header
heart.ge: did not receive HSTS header
heartlandrentals.com: did not receive HSTS header
heartsucker.com: could not connect to host
heftkaufen.de: did not receive HSTS header
hejahanif.se: could not connect to host
helloworldhost.com: did not receive HSTS header
@ -1704,7 +1708,7 @@ i-partners.sk: did not receive HSTS header
iamokay.nl: did not receive HSTS header
iamusingtheinter.net: could not connect to host
iamveto.com: could not connect to host
iapws.com: could not connect to host
iapws.com: did not receive HSTS header
iban.is: could not connect to host
icebat.dyndns.org: could not connect to host
icewoman.net: [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]
@ -1840,7 +1844,6 @@ itos.asia: did not receive HSTS header
itos.pl: did not receive HSTS header
itsadog.co.uk: did not receive HSTS header
itsamurai.ru: max-age too low: 2592000
itsatrap.nl: could not connect to host
itsecurityassurance.pw: did not receive HSTS header
itsg-faq.de: could not connect to host
itshost.ru: could not connect to host
@ -1868,6 +1871,7 @@ jamesconroyfinn.com: did not receive HSTS header
jamesdoell.com: could not connect to host
jamesdoylephoto.com: did not receive HSTS header
jamesf.xyz: could not connect to host
jamesmaurer.com: did not receive HSTS header
jamesmorrison.me: did not receive HSTS header
jamessan.com: did not receive HSTS header
jamourtney.com: could not connect to host
@ -1893,7 +1897,6 @@ jayscoaching.com: could not connect to host
jayshao.com: did not receive HSTS header
jazzinutrecht.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]
jazzncheese.com: could not connect to host
jbbd.fr: could not connect to host
jbn.mx: could not connect to host
jcch.de: could not connect to host
jcor.me: did not receive HSTS header
@ -1943,7 +1946,6 @@ joretapo.fr: could not connect to host
josahrens.me: could not connect to host
joshstroup.me: could not connect to host
jottit.com: could not connect to host
jpaglier.com: could not connect to host
jpbike.cz: could not connect to host
jrc9.ca: did not receive HSTS header
jrgold.me: could not connect to host
@ -1960,7 +1962,6 @@ junge-selbsthilfe.info: could not connect to host
juniwalk.cz: could not connect to host
junqtion.com: could not connect to host
jupp0r.de: did not receive HSTS header
justinlemay.com: could not connect to host
justlikethat.hosting: did not receive HSTS header
justnaw.co.uk: could not connect to host
justudin.com: did not receive HSTS header
@ -1973,6 +1974,7 @@ jznet.org: max-age too low: 86400
k-dev.de: could not connect to host
ka-clan.com: could not connect to host
kabuabc.com: did not receive HSTS header
kabus.org: could not connect to host
kadioglumakina.com.tr: did not receive HSTS header
kaela.design: did not receive HSTS header
kahopoon.net: could not connect to host
@ -2006,7 +2008,6 @@ kerangalam.com: could not connect to host
kerksanders.nl: did not receive HSTS header
kermadec.net: could not connect to host
kernl.us: did not receive HSTS header
keybored.me: could not connect to host
keymaster.lookout.com: did not receive HSTS header
kgxtech.com: max-age too low: 2592000
ki-on.net: did not receive HSTS header
@ -2047,11 +2048,9 @@ kleertjesvoordelig.nl: did not receive HSTS header
kleinblogje.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]
kletterkater.com: did not receive HSTS header
klicktojob.de: could not connect to host
klingeletest.de: could not connect to host
klustekeningen.nl: did not receive HSTS header
kmartin.io: did not receive HSTS header
knccloud.com: could not connect to host
kngkng.com: could not connect to host
kngk-transavto.ru: could not connect to host
knowledgesnap.com: did not receive HSTS header
kodokushi.fr: could not connect to host
koen.io: did not receive HSTS header
@ -2071,10 +2070,10 @@ korsanparti.org: could not connect to host
kotonehoko.net: could not connect to host
kotovstyle.ru: could not connect to host
kr.search.yahoo.com: did not receive HSTS header
kraiwan.com: did not receive HSTS header
krayx.com: could not connect to host
kredite.sale: could not connect to host
kriegt.es: could not connect to host
kristikala.nl: could not connect to host
krmela.com: could not connect to host
kroetenfuchs.de: could not connect to host
kropkait.pl: could not connect to host
@ -2118,6 +2117,7 @@ landscape.canonical.com: max-age too low: 2592000
langenbach.rocks: could not connect to host
langhun.me: did not receive HSTS header
laozhu.me: did not receive HSTS header
lasereyess.net: could not connect to host
laserfuchs.de: did not receive HSTS header
lashstuff.com: did not receive HSTS header
lask.in: did not receive HSTS header
@ -2159,7 +2159,6 @@ lesperlesdunet.fr: could not connect to host
letras.mus.br: did not receive HSTS header
letsmultiplayerplay.com: did not receive HSTS header
letustravel.tk: could not connect to host
lewis.li: could not connect to host
lfullerdesign.com: did not receive HSTS header
lgiswa.com.au: did not receive HSTS header
lgrs.com.au: did not receive HSTS header
@ -2197,7 +2196,6 @@ lindberg.io: did not receive HSTS header
lingotaxi.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]
lingros-test.tk: could not connect to host
linguaquote.com: did not receive HSTS header
linksanitizer.com: could not connect to host
linmi.cc: did not receive HSTS header
linorman1997.me: could not connect to host
lintmx.com: could not connect to host
@ -2263,6 +2261,8 @@ lukeng.me: could not connect to host
lukeng.net: could not connect to host
lukonet.com: did not receive HSTS header
lumi.do: did not receive HSTS header
lunarift.com: could not connect to host
lunarrift.net: could not connect to host
luody.info: could not connect to host
luoe.ml: could not connect to host
luoxiao.im: could not connect to host
@ -2273,7 +2273,6 @@ luther.fi: could not connect to host
luxus-russen.de: did not receive HSTS header
luxwatch.com: could not connect to host
lv.search.yahoo.com: did not receive HSTS header
lyonl.com: did not receive HSTS header
lzkill.com: could not connect to host
m-ali.xyz: did not receive HSTS header
m.gparent.org: could not connect to host
@ -2314,6 +2313,7 @@ managemynetsuite.com: could not connect to host
mannsolutions.co.uk: did not receive HSTS header
mansion-note.com: could not connect to host
marchagen.nl: did not receive HSTS header
marcofinke.de: could not connect to host
marcontrol.com: did not receive HSTS header
marcuskoh.com: could not connect to host
mariannematthew.com: could not connect to host
@ -2325,7 +2325,6 @@ markayapilandirma.com: could not connect to host
market.android.com: did not receive HSTS header (error ignored - included regardless)
markrego.com: could not connect to host
markus-dev.com: did not receive HSTS header
markusehrlicher.de: could not connect to host
markusweimar.de: did not receive HSTS header
marleyresort.com: did not receive HSTS header
marshut.net: could not connect to host
@ -2414,6 +2413,7 @@ michaelwaite.org: could not connect to host
michal-kral.cz: could not connect to host
michalborka.cz: could not connect to host
michelchouinard.ca: could not connect to host
miconware.de: did not receive HSTS header
micro-dv.ru: could not connect to host
micro-rain-systems.com: did not receive HSTS header
microme.ga: could not connect to host
@ -2434,6 +2434,7 @@ mikonmaa.fi: could not connect to host
mikrom.cz: did not receive HSTS header
miku.be: could not connect to host
miku.hatsune.my: max-age too low: 5184000
milahendri.com: could not connect to host
milang.xyz: could not connect to host
milesgeek.com: did not receive HSTS header
mindcraft.ga: could not connect to host
@ -2475,6 +2476,7 @@ mocloud.eu: could not connect to host
moddedark.com: could not connect to host
modemagazines.co.uk: could not connect to host
moebel-nagel.de: did not receive HSTS header
moegirl.org: did not receive HSTS header
moelord.org: could not connect to host
moen.io: did not receive HSTS header
mogry.net: could not connect to host
@ -2579,11 +2581,10 @@ nanogeneinc.com: could not connect to host
nanto.eu: could not connect to host
narada.com.ua: could not connect to host
nargileh.nl: could not connect to host
narindal.ch: did not receive HSTS header
nascher.org: max-age too low: 7884000
nascher.org: could not connect to host
nasreddine.xyz: could not connect to host
natalia.io: could not connect to host
natalt.org: could not connect to host
natalt.org: did not receive HSTS header
nathanmfarrugia.com: did not receive HSTS header
natural-progesterone.net: did not receive HSTS header
naturesystems.cz: max-age too low: 0
@ -2645,7 +2646,7 @@ nibiisclaim.com: could not connect to host
nicestresser.fr: could not connect to host
nicky.io: did not receive HSTS header
nicoborghuis.nl: could not connect to host
nicolasbettag.me: could not connect to host
nicolasbettag.me: did not receive HSTS header
niconiconi.xyz: could not connect to host
niconode.com: could not connect to host
nien.chat: could not connect to host
@ -2668,8 +2669,8 @@ no17sifangjie.cc: could not connect to host
nocallaghan.com: could not connect to host
nocs.cn: could not connect to host
nodebrewery.com: could not connect to host
nodelia.com: could not connect to host
nodetemple.com: could not connect to host
nodi.at: did not receive HSTS header
noexpect.org: could not connect to host
noima.com: did not receive HSTS header
nojestorget.se: could not connect to host
@ -2677,7 +2678,6 @@ nolatepayments.com: [Exception... "Component returned failure code: 0x80004005 (
nolte.work: could not connect to host
nomorebytes.de: did not receive HSTS header
noobunbox.net: did not receive HSTS header
nootropicsource.com: did not receive HSTS header
nope.website: could not connect to host
nopex.no: could not connect to host
nopol.de: did not receive HSTS header
@ -2836,7 +2836,7 @@ overclockers.ge: could not connect to host
override.io: did not receive HSTS header
oversight.io: could not connect to host
overthinkingit.com: max-age too low: 3600
ovvy.net: could not connect to host
ovvy.net: did not receive HSTS header
owncloud.help: could not connect to host
ownmovies.fr: could not connect to host
oxygenabsorbers.com: did not receive HSTS header
@ -2886,11 +2886,11 @@ paste.linode.com: could not connect to host
pastebin.linode.com: could not connect to host
pastenib.com: could not connect to host
paster.li: did not receive HSTS header
patflix.com: could not connect to host
patientinsight.net: could not connect to host
patt.us: did not receive HSTS header
patterson.mp: could not connect to host
paulchen.at: could not connect to host
paulewen.ca: could not connect to host
paulyang.cn: did not receive HSTS header
paxwinkel.nl: did not receive HSTS header
pay.gigahost.dk: did not receive HSTS header
@ -2931,6 +2931,7 @@ pettitcoat.com: could not connect to host
pettsy.com: could not connect to host
pewboards.com: could not connect to host
pgpm.io: could not connect to host
phantasie.cc: could not connect to host
pharmgkb.org: could not connect to host
phonenumberinfo.co.uk: could not connect to host
phongmay24h.com: could not connect to host
@ -2948,7 +2949,7 @@ pinesandneedles.com: did not receive HSTS header
pippen.io: could not connect to host
piratedb.com: could not connect to host
piratedot.com: could not connect to host
piratelist.online: could not connect to host
piratelist.online: did not receive HSTS header
piratenlogin.de: could not connect to host
pirateproxy.sx: could not connect to host
pirati.cz: max-age too low: 604800
@ -2983,6 +2984,8 @@ plothost.com: did not receive HSTS header
ploup.net: could not connect to host
pmnts.io: could not connect to host
po.gl: did not receive HSTS header
pocketsix.com: did not receive HSTS header
pocloud.homelinux.net: could not connect to host
poiema.com.sg: did not receive HSTS header
pol.in.th: could not connect to host
poleartschool.com: could not connect to host
@ -3048,8 +3051,7 @@ 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: did not receive HSTS header
prxio.site: could not connect to host
prytkov.com: did not receive HSTS header
psicologia.co.ve: could not connect to host
psw.academy: did not receive HSTS header
@ -3095,7 +3097,6 @@ qwilink.me: did not receive HSTS header
r10n.com: did not receive HSTS header
r15.me: could not connect to host
r3bl.me: did not receive HSTS header
r40.us: could not connect to host
raajheshkannaa.com: could not connect to host
radicaleducation.net: could not connect to host
rafaelcz.de: could not connect to host
@ -3238,7 +3239,6 @@ rubyshop.nl: max-age too low: 604800
rudeotter.com: could not connect to host
rudloff.pro: did not receive HSTS header
rugirlfriend.com: could not connect to host
rugk.dedyn.io: could not connect to host
ruiming.me: did not receive HSTS header
runawebinar.nl: could not connect to host
runementors.com: could not connect to host
@ -3266,7 +3266,7 @@ sakurabuff.com: did not receive HSTS header
salesmachine.io: did not receive HSTS header
salserocafe.com: did not receive HSTS header
salserototal.com: did not receive HSTS header
salud.top: did not receive HSTS header
salud.top: could not connect to host
sametovymesic.cz: could not connect to host
saml2.com: could not connect to host
sampoznay.ru: did not receive HSTS header
@ -3348,6 +3348,7 @@ sehenderson.com: did not receive HSTS header
seiko-dojo.com: could not connect to host
selecadm.name: could not connect to host
selectruckscalltrackingreports.com: could not connect to host
selent.me: could not connect to host
selfcarecentral.com: did not receive HSTS header
selfie-france.fr: could not connect to host
selldorado.com: did not receive HSTS header
@ -3391,6 +3392,7 @@ shanesage.com: could not connect to host
shanewadleigh.com: could not connect to host
sharepass.pw: could not connect to host
sharescope.co.uk: max-age too low: 14400
sharevari.com: did not receive HSTS header
shauncrowley.co.uk: could not connect to host
shaunwheelhou.se: could not connect to host
shawnh.net: could not connect to host
@ -3408,6 +3410,7 @@ shoprose.ru: could not connect to host
shops.neonisi.com: could not connect to host
shortr.li: could not connect to host
showkeeper.tv: did not receive HSTS header
shtorku.com: could not connect to host
shukatsu-note.com: could not connect to host
shv25.se: could not connect to host
shwongacc.com: could not connect to host
@ -3418,14 +3421,15 @@ sig6.org: could not connect to host
silentcircle.org: could not connect to host
silicagelpackets.ca: did not receive HSTS header
silver-drachenkrieger.de: did not receive HSTS header
silverhome.ninja: could not connect to host
silverpvp.com: could not connect to host
silverwind.io: did not receive HSTS header
silvistefi.com: could not connect to host
simbast.com: could not connect to host
simbolo.co.uk: could not connect to host
simod.org: could not connect to host
simon.butcher.name: max-age too low: 2629743
simongong.net: did not receive HSTS header
simonhirscher.de: could not connect to host
simpleai.net: max-age too low: 600
simplefraud.com: could not connect to host
simplelearner.com: could not connect to host
@ -3440,6 +3444,7 @@ sitesten.com: did not receive HSTS header
sitsy.ru: did not receive HSTS header
skhosting.eu: did not receive HSTS header
skile.ru: could not connect to host
skills2services.com: did not receive HSTS header
skk.io: could not connect to host
skoda-clever-lead.de: could not connect to host
skoda-im-dialog.de: could not connect to host
@ -3472,6 +3477,7 @@ smkn1lengkong.sch.id: did not receive HSTS header
smksi2.com: could not connect to host
smm.im: could not connect to host
smove.sg: did not receive HSTS header
smpetrey.com: could not connect to host
smusg.com: did not receive HSTS header
snailing.org: could not connect to host
snapappts.com: could not connect to host
@ -3505,7 +3511,6 @@ someshit.xyz: could not connect to host
somethingnew.xyz: did not receive HSTS header
sonic.sk: max-age too low: 0
sonicrainboom.rocks: did not receive HSTS header
sortaweird.net: could not connect to host
sotiran.com: did not receive HSTS header
sotor.de: did not receive HSTS header
soulboy.io: did not receive HSTS header
@ -3604,6 +3609,7 @@ str0.at: did not receive HSTS header
strasweb.fr: did not receive HSTS header
streamingmagazin.de: could not connect to host
streams.dyndns.org: could not connect to host
streetspotr.com: did not receive HSTS header
stressfreehousehold.com: did not receive HSTS header
strictlysudo.com: could not connect to host
stroeercrm.de: could not connect to host
@ -3630,7 +3636,6 @@ suksit.com: could not connect to host
sumoatm.com: did not receive HSTS header
sumoscout.de: did not receive HSTS header
suncountrymarine.com: did not receive HSTS header
sunflyer.cn: did not receive HSTS header
sunnyfruit.ru: did not receive HSTS header
sunshinepress.org: could not connect to host
suos.io: could not connect to host
@ -3760,7 +3765,7 @@ thecharlestonwaldorf.com: did not receive HSTS header
theclementinebutchers.com: could not connect to host
thecoffeehouse.xyz: could not connect to host
thediaryofadam.com: did not receive HSTS header
theendofzion.com: could not connect to host
theendofzion.com: did not receive HSTS header
theeyeopener.com: did not receive HSTS header
theflowerbasketonline.com: could not connect to host
thefootballanalyst.com: could not connect to host
@ -3775,7 +3780,6 @@ themicrocapital.com: could not connect to host
themillerslive.com: could not connect to host
theodorejones.info: could not connect to host
thepartywarehouse.co.uk: did not receive HSTS header
thepasteb.in: could not connect to host
thepiratebay.al: could not connect to host
thepiratebay.tech: could not connect to host
therapyportal.com: did not receive HSTS header
@ -3790,7 +3794,6 @@ thevintagenews.com: [Exception... "Component returned failure code: 0x80004005 (
thewebfellas.com: did not receive HSTS header
thezonders.com: did not receive HSTS header
thierfreund.de: could not connect to host
thijsvanderveen.net: could not connect to host
thinkcoding.de: could not connect to host
thirdpartytrade.com: did not receive HSTS header
thirty5.net: did not receive HSTS header
@ -3850,6 +3853,7 @@ tomcort.com: could not connect to host
tomeara.net: could not connect to host
tomharling.co.uk: max-age too low: 86400
tomharling.uk: max-age too low: 86400
tomharris.tech: could not connect to host
tomlankhorst.nl: did not receive HSTS header
tommsy.com: did not receive HSTS header
tommyads.com: could not connect to host
@ -3927,8 +3931,6 @@ tx041cap.org: did not receive HSTS header
txclimbers.com: could not connect to host
txf.pw: could not connect to host
ty2u.com: did not receive HSTS header
tyler.rs: could not connect to host
tyleromeara.com: could not connect to host
tylian.net: max-age too low: 0
typingrevolution.com: did not receive HSTS header
tyrelius.com: did not receive HSTS header
@ -3937,11 +3939,12 @@ tzappa.net: could not connect to host
u-blox.com: max-age too low: 0
ua.search.yahoo.com: did not receive HSTS header
ubicloud.de: could not connect to host
ubicv.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]
ublox.com: did not receive HSTS header
ubuntuhot.com: did not receive HSTS header
uega.net: did not receive HSTS header
ufgaming.com: did not receive HSTS header
ufotable.uk: max-age too low: 0
ufotable.uk: did not receive HSTS header
ugcdn.com: could not connect to host
ui8.net: max-age too low: 86400
ukas.com: did not receive HSTS header
@ -3952,7 +3955,6 @@ ulmo.dk: could not connect to host
ultros.io: did not receive HSTS header
umidev.com: could not connect to host
umie.cc: did not receive HSTS header
unart.info: could not connect to host
unbanthe.net: could not connect to host
unblocked-networks.org: could not connect to host
unblocked.host: could not connect to host
@ -3960,11 +3962,9 @@ unblocked.win: could not connect to host
unccdesign.club: could not connect to host
unclegen.xyz: 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: did not receive HSTS header
uniform-agri.com: did not receive HSTS header
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]
unitel2000.de: could not connect to host
@ -3982,7 +3982,6 @@ up1.ca: could not connect to host
upaknship.com: did not receive HSTS header
upani.net: did not receive HSTS header
upldr.pw: could not connect to host
upr.com.ua: could not connect to host
uprotect.it: could not connect to host
upstats.eu: could not connect to host
urandom.eu.org: did not receive HSTS header
@ -3993,7 +3992,7 @@ usaa.com: did not receive HSTS header
uscitizenship.info: did not receive HSTS header
used-in.jp: did not receive HSTS header
usercare.com: did not receive HSTS header
userify.com: max-age too low: 0
userify.com: did not receive HSTS header
ustr.gov: max-age too low: 86400
utleieplassen.no: could not connect to host
utopiagalaxy.space: did not receive HSTS header
@ -4037,12 +4036,12 @@ vetmgmt.com: could not connect to host
vfree.org: could not connect to host
vglimg.com: could not connect to host
vhost.co.id: could not connect to host
vibrant-america.com: could not connect to host
videnskabsklubben.dk: did not receive HSTS header
videomuz.com: did not receive HSTS header
vidz.ga: could not connect to host
vieaw.com: could not connect to host
viewsea.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]
vigilo.cf: could not connect to host
viktorsvantesson.net: did not receive HSTS header
vincentkooijman.at: did not receive HSTS header
vincentkooijman.nl: did not receive HSTS header
@ -4101,6 +4100,7 @@ wavefrontsystemstech.com: 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
wearandcare.net: could not connect to host
weather-and-climate.com: could not connect to host
weaverhairextensions.nl: could not connect to host
web.cc: did not receive HSTS header
web4all.fr: max-age too low: 0
@ -4165,6 +4165,7 @@ willosagiede.com: did not receive HSTS header
winaes.com: did not receive HSTS header
winclient.cn: could not connect to host
winecodeavocado.com: could not connect to host
wingos.net: could not connect to host
wingumd.net: could not connect to host
winhistory-forum.net: did not receive HSTS header
winpack.cf: could not connect to host
@ -4185,6 +4186,7 @@ witzemaschine.com: max-age too low: 0
wiz.biz: could not connect to host
wlzhiyin.cn: could not connect to host
wmcuk.net: could not connect to host
wmfinanz.com: max-age too low: 86400
wohnungsbau-ludwigsburg.de: did not receive HSTS header
woima.fi: max-age too low: 604800
wolfesden.com: could not connect to host
@ -4225,7 +4227,6 @@ www.neonisi.com: could not connect to host
www.paycheckrecords.com: did not receive HSTS header
www.rme.li: did not receive HSTS header
www.sandbox.mydigipass.com: could not connect to host
www.simbolo.co.uk: could not connect to host
www.surfeasy.com: did not receive HSTS header
www.zenpayroll.com: did not receive HSTS header
www3.info: did not receive HSTS header
@ -4270,7 +4271,6 @@ xn--neb-tma3u8u.xyz: could not connect to host
xnode.org: did not receive HSTS header
xoffy.com: did not receive HSTS header
xombra.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]
xpi.fr: could not connect to host
xplore-dna.net: [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]
xsmobile.de: could not connect to host
xtream-hosting.com: could not connect to host
@ -4306,7 +4306,7 @@ ynode.co: did not receive HSTS header
ynsn.nl: did not receive HSTS header
yntongji.com: did not receive HSTS header
yoga.is-an-engineer.com: could not connect to host
yokeepo.com: could not connect to host
yokeepo.com: max-age too low: 0
yoloboatrentals.com: did not receive HSTS header
yoloprod.fr: could not connect to host
yoloseo.com: could not connect to host
@ -4341,7 +4341,7 @@ zefiris.org: did not receive HSTS header
zefu.ca: could not connect to host
zeitpunkt-kulturmagazin.de: did not receive HSTS header
zelezny.uk: did not receive HSTS header
zelfstandigemakelaars.net: did not receive HSTS header
zelfstandigemakelaars.net: could not connect to host
zenpayroll.com: did not receive HSTS header
zentraler-kreditausschuss.de: did not receive HSTS header
zentralwolke.de: did not receive HSTS header

File diff suppressed because it is too large Load Diff

View File

@ -13,10 +13,17 @@ from marionette_harness import MarionetteTestCase, skip_if_e10s
class TestTabModals(MarionetteTestCase):
def setUp(self):
MarionetteTestCase.setUp(self)
self.marionette.enforce_gecko_prefs({"prompts.tab_modal.enabled": True})
super(TestTabModals, self).setUp()
self.marionette.set_pref("prompts.tab_modal.enabled", True)
self.marionette.navigate(self.marionette.absolute_url('modal_dialogs.html'))
def tearDown(self):
# Ensure an alert is absent before proceeding past this test.
Wait(self.marionette).until(lambda _: not self.alert_present())
self.marionette.execute_script("window.onbeforeunload = null;")
self.marionette.clear_pref("prompts.tab_modal.enabled")
super(TestTabModals, self).tearDown()
def alert_present(self):
try:
Alert(self.marionette).text
@ -24,11 +31,6 @@ class TestTabModals(MarionetteTestCase):
except NoAlertPresentException:
return False
def tearDown(self):
# Ensure an alert is absent before proceeding past this test.
Wait(self.marionette).until(lambda _: not self.alert_present())
self.marionette.execute_script("window.onbeforeunload = null;")
def wait_for_alert(self):
Wait(self.marionette).until(lambda _: self.alert_present())
@ -187,9 +189,8 @@ class TestTabModals(MarionetteTestCase):
class TestGlobalModals(TestTabModals):
def setUp(self):
MarionetteTestCase.setUp(self)
self.marionette.enforce_gecko_prefs({"prompts.tab_modal.enabled": False})
self.marionette.navigate(self.marionette.absolute_url('modal_dialogs.html'))
super(TestGlobalModals, self).setUp()
self.marionette.set_pref("prompts.tab_modal.enabled", False)
def test_unrelated_command_when_alert_present(self):
# The assumptions in this test do not hold on certain platforms, and not when

View File

@ -103,7 +103,6 @@ skip-if = os == "linux" || appname == 'fennec' # Bug 1085717
[test_with_using_context.py]
[test_modal_dialogs.py]
skip-if = manage_instance == false || appname == 'fennec' # Bug 1328696
[test_key_actions.py]
[test_mouse_action.py]
skip-if = appname == 'fennec'

View File

@ -37,21 +37,30 @@ MockObjectRegisterer.prototype = {
throw new Exception("Invalid object state when calling register()");
// Define a factory that creates a new object using the given constructor.
var isChrome = location.protocol == "chrome:";
var providedConstructor = this._replacementCtor;
this._mockFactory = {
createInstance: function MF_createInstance(aOuter, aIid) {
if (aOuter != null)
throw SpecialPowers.Cr.NS_ERROR_NO_AGGREGATION;
return new providedConstructor().QueryInterface(aIid);
var inst = new providedConstructor();
if (!isChrome) {
var QI = inst.QueryInterface;
inst = SpecialPowers.wrapCallbackObject(inst);
inst.QueryInterface = QI;
}
return inst.QueryInterface(aIid);
}
};
if (!isChrome) {
this._mockFactory = SpecialPowers.wrapCallbackObject(this._mockFactory);
}
var retVal = SpecialPowers.swapFactoryRegistration(this._cid, this._contractID, this._mockFactory, this._originalFactory);
var retVal = SpecialPowers.swapFactoryRegistration(null, this._contractID, this._mockFactory, this._originalFactory);
if ('error' in retVal) {
throw new Exception("ERROR: " + retVal.error);
} else {
this._cid = retVal.cid;
this._originalFactory = retVal.originalFactory;
this._originalFactory = SpecialPowers.wrap(retVal).originalFactory;
}
},
@ -63,10 +72,9 @@ MockObjectRegisterer.prototype = {
throw new Exception("Invalid object state when calling unregister()");
// Free references to the mock factory.
SpecialPowers.swapFactoryRegistration(this._cid, this._contractID, this._mockFactory, this._originalFactory);
SpecialPowers.swapFactoryRegistration(null, this._contractID, this._originalFactory, this._mockFactory);
// Allow registering a mock factory again later.
this._cid = null;
this._originalFactory = null;
this._mockFactory = null;
},
@ -78,11 +86,6 @@ MockObjectRegisterer.prototype = {
*/
_originalFactory: null,
/**
* The CID under which the mock contractID was registered.
*/
_cid: null,
/**
* The nsIFactory that was automatically generated by this object.
*/

View File

@ -17,9 +17,18 @@
</form>
<script>
var parentOrigin = "http://mochi.test:8888";
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if (event.origin !== parentOrigin) {
parent.postMessage({error: "unexpected origin " + event.origin}, parentOrigin);
return;
}
clickButton(+event.data);
}
function checkSubmit(num) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
return parent.checkSubmit(num);
return parent.postMessage({num}, parentOrigin);
}
function clickButton(num) {

View File

@ -256,6 +256,16 @@
<pre id="test">
<script class="testbody" type="text/javascript">
/* import-globals-from satchel_common.js */
var iframeOrigin = "https://example.com";
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
is(event.origin, iframeOrigin, "checking origin");
if (event.data.error) {
ok(false, event.data.error);
}
checkSubmit(+event.data.num);
}
var numSubmittedForms = 0;
var ccNumbers = {
@ -365,7 +375,6 @@ function startTest() {
// Called by each form's onsubmit handler.
function checkSubmit(formNum) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
ok(true, "form " + formNum + " submitted");
numSubmittedForms++;
@ -501,7 +510,7 @@ function submitForm(formNum) {
// from an HTTPS domain in an iframe.
if (nextFormNum == 21 || nextFormNum == 100) {
ok(true, "submitting iframe test " + nextFormNum);
document.getElementById("iframe").contentWindow.clickButton(nextFormNum);
document.getElementById("iframe").contentWindow.postMessage(nextFormNum, iframeOrigin);
} else {
var button = getFormSubmitButton(nextFormNum);
button.click();

View File

@ -16,17 +16,16 @@
<div id="date-picker">
<div class="calendar-container">
<div class="nav">
<button class="left">&lt;</button>
<button class="right">&gt;</button>
<button class="left"/>
<button class="right"/>
</div>
<div class="week-header"></div>
<div class="days-viewport">
<div class="days-view"></div>
</div>
</div>
<div class="month-year">
<div class="month-year-label"></div>
<div class="month-year-arrow"></div>
<div class="month-year-container">
<button class="month-year"/>
</div>
<div class="month-year-view"></div>
</div>

View File

@ -174,7 +174,8 @@ function DatePicker(context) {
*/
_attachEventListeners() {
window.addEventListener("message", this);
document.addEventListener("click", this);
document.addEventListener("mouseup", this, { passive: true });
document.addEventListener("mousedown", this);
},
/**
@ -188,16 +189,28 @@ function DatePicker(context) {
this.handleMessage(event);
break;
}
case "click": {
case "mousedown": {
// Use preventDefault to keep focus on input boxes
event.preventDefault();
event.target.setCapture();
if (event.target == this.context.buttonLeft) {
event.target.classList.add("active");
this.state.dateKeeper.setMonthByOffset(-1);
this._update();
} else if (event.target == this.context.buttonRight) {
event.target.classList.add("active");
this.state.dateKeeper.setMonthByOffset(1);
this._update();
}
break;
}
case "mouseup": {
if (event.target == this.context.buttonLeft || event.target == this.context.buttonRight) {
event.target.classList.remove("active");
}
}
}
},
@ -307,6 +320,7 @@ function DatePicker(context) {
this.context.monthYear.textContent = this.state.dateFormat(props.dateObj);
if (props.isVisible) {
this.context.monthYear.classList.add("active");
this.components.month.setState({
value: props.month,
items: props.months,
@ -323,6 +337,7 @@ function DatePicker(context) {
});
this.state.firstOpened = false;
} else {
this.context.monthYear.classList.remove("active");
this.state.isMonthSet = false;
this.state.isYearSet = false;
this.state.firstOpened = true;

View File

@ -266,11 +266,11 @@ function Spinner(props, context) {
* Attach event listeners to the spinner and buttons.
*/
_attachEventListeners() {
const { spinner } = this.elements;
const { spinner, container } = this.elements;
spinner.addEventListener("scroll", this, { passive: true });
document.addEventListener("mouseup", this, { passive: true });
document.addEventListener("mousedown", this);
container.addEventListener("mouseup", this, { passive: true });
container.addEventListener("mousedown", this, { passive: true });
},
/**
@ -288,9 +288,6 @@ function Spinner(props, context) {
break;
}
case "mousedown": {
// Use preventDefault to keep focus on input boxes
event.preventDefault();
event.target.setCapture();
this.state.mouseState = {
down: true,
layerX: event.layerX,

View File

@ -216,6 +216,7 @@ function TimePicker(context) {
},
_attachEventListeners() {
window.addEventListener("message", this);
document.addEventListener("mousedown", this);
},
/**
@ -229,6 +230,12 @@ function TimePicker(context) {
this.handleMessage(event);
break;
}
case "mousedown": {
// Use preventDefault to keep focus on input boxes
event.preventDefault();
event.target.setCapture();
break;
}
}
},

View File

@ -16,6 +16,7 @@
--border: 0.1rem solid #D6D6D6;
--border-radius: 0.3rem;
--border-active-color: #B1B1B1;
--font-color: #191919;
--fill-color: #EBEBEB;
@ -26,6 +27,7 @@
--button-font-color: #858585;
--button-font-color-hover: #4D4D4D;
--button-font-color-active: #191919;
--button-fill-color-active: #D4D4D4;
--weekday-font-color: #6C6C6C;
--weekday-outside-font-color: #6C6C6C;
@ -46,6 +48,12 @@ body {
font-size: var(--font-size-default);
}
button {
-moz-appearance: none;
background: none;
border: none;
}
.nav {
display: flex;
width: var(--calendar-width);
@ -54,15 +62,30 @@ body {
justify-content: space-between;
}
.nav button {
-moz-appearance: none;
background: none;
border: none;
.nav > button {
width: 3rem;
height: var(--date-picker-item-height);
filter: url("chrome://global/skin/filters.svg#fill");
fill: var(--button-font-color);
}
.month-year {
.nav > button:hover {
fill: var(--button-font-color-hover);
}
.nav > button.active {
fill: var(--button-font-color-active);
}
.nav > button.left {
background: url("chrome://global/skin/icons/calendar-arrows.svg#left") no-repeat 50% 50%;
}
.nav > button.right {
background: url("chrome://global/skin/icons/calendar-arrows.svg#right") no-repeat 50% 50%;
}
.month-year-container {
position: absolute;
display: flex;
justify-content: center;
@ -74,6 +97,36 @@ body {
z-index: 10;
}
button.month-year {
font-size: 1.3rem;
border: var(--border);
border-radius: 0.3rem;
padding: 0.2rem 2.6rem 0.2rem 1.2rem;
}
button.month-year:hover {
background: var(--fill-color);
}
button.month-year.active {
border-color: var(--border-active-color);
background: var(--button-fill-color-active);
}
button.month-year::after {
position: absolute;
content: "";
width: 2.6rem;
height: 1.6rem;
background: url("chrome://global/skin/icons/spinner-arrows.svg#down") no-repeat 50% 50%;
filter: url("chrome://global/skin/filters.svg#fill");
fill: var(--button-font-color);
}
button.month-year.active::after {
background: url("chrome://global/skin/icons/spinner-arrows.svg#up") no-repeat 50% 50%;
}
.month-year-view {
position: absolute;
z-index: 5;
@ -187,9 +240,6 @@ body {
}
.spinner-container > button {
-moz-appearance: none;
border: none;
background: none;
height: var(--spinner-button-height);
filter: url("chrome://global/skin/filters.svg#fill");
fill: var(--button-font-color);

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14">
<style>
path:not(:target) {
display: none;
}
</style>
<path id="right" d="M4.8 14L3 12.3 8.5 7 3 1.7 4.8 0 12 7"/>
<path id="left" d="M9.2 0L11 1.7 5.5 7 11 12.3 9.2 14 2 7"/>
</svg>

After

Width:  |  Height:  |  Size: 540 B

View File

@ -24,6 +24,7 @@ toolkit.jar:
skin/classic/global/datetimeinputpickers.css (../../shared/datetimeinputpickers.css)
skin/classic/global/datetimepopup.css (../../shared/datetimepopup.css)
skin/classic/global/filters.svg (../../shared/filters.svg)
skin/classic/global/icons/calendar-arrows.svg (../../shared/icons/calendar-arrows.svg)
skin/classic/global/icons/find-arrows.svg (../../shared/icons/find-arrows.svg)
skin/classic/global/icons/info.svg (../../shared/incontent-icons/info.svg)
skin/classic/global/icons/input-clear.svg (../../shared/icons/input-clear.svg)

View File

@ -1,6 +1,6 @@
load 38589-1.xul
load 64049-1.html
skip-if(stylo) load 281743-1.html # bug 1323665
load 281743-1.html
load 323497-1.html
load 382756-1.xul
load 387745-1.svg

View File

@ -16,6 +16,9 @@ support-files = window_bug478536.xul
[test_bug517396.xul]
[test_bug538242.xul]
support-files = window_bug538242.xul
[test_bug565392.html]
subsuite = clipboard
skip-if = toolkit != "windows"
[test_bug593307.xul]
support-files = window_bug593307_offscreen.xul window_bug593307_centerscreen.xul
[test_bug1151186.html]

View File

@ -4,9 +4,6 @@ support-files = utils.js
[test_assign_event_data.html]
subsuite = clipboard
skip-if = toolkit == "cocoa" # Mac: Bug 933303
[test_bug565392.html]
subsuite = clipboard
skip-if = toolkit != "windows" || e10s # Bug 1267406
[test_picker_no_crash.html]
skip-if = toolkit != "windows" || e10s # Bug 1267491
support-files = window_picker_no_crash_child.html

View File

@ -5,8 +5,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=565392
-->
<head>
<title>Test for Bug 565392</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565392">Mozilla Bug 565392</a>
@ -19,7 +19,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=565392
/** Test for Bug 565392 **/
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const Cc = SpecialPowers.Cc;
const Ci = SpecialPowers.Ci;
var ds = Cc["@mozilla.org/file/directory_service;1"]