MozReview-Commit-ID: AuQEHTgSKcO
This commit is contained in:
Wes Kocher 2017-03-16 14:07:10 -07:00
Родитель a66f6a3080 da9127842f
Коммит c5d1991d35
55 изменённых файлов: 17163 добавлений и 17118 удалений

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

@ -1,6 +1,10 @@
# Always ignore node_modules.
**/node_modules/**/*.*
# Include these to speed up ESLint, see bug 1347906.
.hg
.git
# Exclude expected objdirs.
obj*/**

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

@ -35,14 +35,14 @@ add_task(function* checkReturnToAboutHome() {
is(entries.length, 1, "there is one shistory entry");
info("Clicking the go back button on about:certerror");
let pageshowPromise = promiseWaitForEvent(browser, "pageshow");
yield ContentTask.spawn(browser, null, function* () {
let doc = content.document;
let returnButton = doc.getElementById("returnButton");
is(returnButton.getAttribute("autofocus"), "true", "returnButton has autofocus");
returnButton.click();
yield ContentTaskUtils.waitForEvent(this, "pageshow", true);
});
yield pageshowPromise;
is(browser.webNavigation.canGoBack, true, "webNavigation.canGoBack");
is(browser.webNavigation.canGoForward, false, "!webNavigation.canGoForward");
@ -71,13 +71,13 @@ add_task(function* checkReturnToPreviousPage() {
is(entries.length, 2, "there are two shistory entries");
info("Clicking the go back button on about:certerror");
let pageshowPromise = promiseWaitForEvent(browser, "pageshow");
yield ContentTask.spawn(browser, null, function* () {
let doc = content.document;
let returnButton = doc.getElementById("returnButton");
returnButton.click();
yield ContentTaskUtils.waitForEvent(this, "pageshow", true);
});
yield pageshowPromise;
is(browser.webNavigation.canGoBack, false, "!webNavigation.canGoBack");
is(browser.webNavigation.canGoForward, true, "webNavigation.canGoForward");

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

@ -24,21 +24,24 @@ add_task(function* checkReturnToPreviousPage() {
info("Loading and waiting for the net error");
yield pageLoaded;
Assert.ok(content.document.getElementById("prefResetButton").getBoundingClientRect().left >= 0,
"Should have a visible button");
// NB: This code assumes that the error page and the test page load in the
// same process. If this test starts to fail, it could be because they load
// in different processes.
yield ContentTask.spawn(browser, LOW_TLS_VERSION, function* (LOW_TLS_VERSION_) {
ok(content.document.getElementById("prefResetButton").getBoundingClientRect().left >= 0,
"Should have a visible button");
Assert.ok(content.document.documentURI.startsWith("about:neterror"), "Should be showing error page");
ok(content.document.documentURI.startsWith("about:neterror"), "Should be showing error page");
let pageshowPromise = promiseWaitForEvent(browser, "pageshow");
yield ContentTask.spawn(browser, null, function* () {
let doc = content.document;
let prefResetButton = doc.getElementById("prefResetButton");
Assert.equal(prefResetButton.getAttribute("autofocus"), "true", "prefResetButton has autofocus");
is(prefResetButton.getAttribute("autofocus"), "true", "prefResetButton has autofocus");
prefResetButton.click();
});
yield pageshowPromise;
Assert.equal(content.document.documentURI, LOW_TLS_VERSION, "Should not be showing page");
yield ContentTaskUtils.waitForEvent(this, "pageshow", true);
is(content.document.documentURI, LOW_TLS_VERSION_, "Should not be showing page");
});
yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

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

@ -2,27 +2,22 @@
* 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/. */
function test() {
add_task(function* test() {
let uriString = "http://example.com/";
let cookieBehavior = "network.cookie.cookieBehavior";
let uriObj = Services.io.newURI(uriString)
let cp = Components.classes["@mozilla.org/cookie/permission;1"]
.getService(Components.interfaces.nsICookiePermission);
Services.prefs.setIntPref(cookieBehavior, 2);
yield SpecialPowers.pushPrefEnv({ set: [[ cookieBehavior, 2 ]] });
cp.setAccess(uriObj, cp.ACCESS_ALLOW);
gBrowser.selectedTab = gBrowser.addTab(uriString);
waitForExplicitFinish();
BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(onTabLoaded);
function onTabLoaded() {
is(gBrowser.selectedBrowser.contentWindow.navigator.cookieEnabled, true,
"navigator.cookieEnabled should be true");
// Clean up
gBrowser.removeTab(gBrowser.selectedTab);
Services.prefs.setIntPref(cookieBehavior, 0);
cp.setAccess(uriObj, cp.ACCESS_DEFAULT);
finish();
}
}
yield BrowserTestUtils.withNewTab({ gBrowser, url: uriString }, function* (browser) {
yield ContentTask.spawn(browser, null, function() {
is(content.navigator.cookieEnabled, true,
"navigator.cookieEnabled should be true");
});
});
cp.setAccess(uriObj, cp.ACCESS_DEFAULT);
});

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

@ -12,7 +12,8 @@ function test() {
let tab = gBrowser.addTab();
gBrowser.selectedTab = tab;
load(tab, DUMMY_PAGE, function() {
BrowserTestUtils.loadURI(tab.linkedBrowser, DUMMY_PAGE);
BrowserTestUtils.browserLoaded(tab.linkedBrowser).then(() => {
gFindBar.onFindCommand();
EventUtils.sendString("Dummy");
gBrowser.removeTab(tab);
@ -26,10 +27,3 @@ function test() {
finish();
});
}
function load(aTab, aUrl, aCallback) {
aTab.linkedBrowser.addEventListener("load", function(aEvent) {
waitForFocus(aCallback, content);
}, {capture: true, once: true});
aTab.linkedBrowser.loadURI(aUrl);
}

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

@ -14,18 +14,11 @@ add_task(function*() {
});
let win = OpenBrowserWindow();
yield BrowserTestUtils.waitForEvent(win, "load");
yield BrowserTestUtils.firstBrowserLoaded(win, false);
let browser = win.gBrowser.selectedBrowser;
// If we've finished loading about:home already, we can check
// right away - otherwise, we need to wait.
if (browser.contentDocument.readyState == "complete" &&
browser.currentURI.spec == homepage) {
checkIdentityMode(win);
} else {
yield BrowserTestUtils.browserLoaded(browser, false, homepage);
checkIdentityMode(win);
}
is(browser.currentURI.spec, homepage, "Loaded the correct homepage");
checkIdentityMode(win);
yield BrowserTestUtils.closeWindow(win);
});

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

@ -243,21 +243,23 @@ var tests = [
onLocationChange: function onLocationChange() {
gBrowser.removeProgressListener(progressListener);
executeSoon(() => {
executeSoon(() => {
let notification = PopupNotifications.getNotification(self.notifyObj.id,
self.notifyObj.browser);
ok(notification != null, "Notification remained when subframe navigated");
self.notifyObj.options.eventCallback = undefined;
notification.remove();
});
});
},
};
info("Adding progress listener and performing navigation");
gBrowser.addProgressListener(progressListener);
content.document.getElementById("iframe")
.setAttribute("src", "http://example.org/");
ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
content.document.getElementById("iframe")
.setAttribute("src", "http://example.org/");
});
},
onHidden() {}
},

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

@ -35,8 +35,10 @@ add_task(function* () {
function* test1(gTestBrowser) {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
var x = content.document.getElementsByTagName("iframe")[0].contentDocument.getElementById("mixedContentContainer");
is(x, null, "Mixed Content is NOT to be found in Test1");
yield ContentTask.spawn(gTestBrowser, null, function() {
var x = content.document.getElementsByTagName("iframe")[0].contentDocument.getElementById("mixedContentContainer");
is(x, null, "Mixed Content is NOT to be found in Test1");
});
// Disable Mixed Content Protection for the page (and reload)
gIdentityHandler.disableMixedContentProtection();
@ -45,8 +47,10 @@ function* test1(gTestBrowser) {
function* test2(gTestBrowser) {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
var x = content.document.getElementsByTagName("iframe")[0].contentDocument.getElementById("mixedContentContainer");
isnot(x, null, "Mixed Content is to be found in Test2");
yield ContentTask.spawn(gTestBrowser, null, function() {
var x = content.document.getElementsByTagName("iframe")[0].contentDocument.getElementById("mixedContentContainer");
isnot(x, null, "Mixed Content is to be found in Test2");
});
// Re-enable Mixed Content Protection for the page (and reload)
gIdentityHandler.enableMixedContentProtection();
@ -55,6 +59,8 @@ function* test2(gTestBrowser) {
function* test3(gTestBrowser) {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
var x = content.document.getElementsByTagName("iframe")[0].contentDocument.getElementById("mixedContentContainer");
is(x, null, "Mixed Content is NOT to be found in Test3");
yield ContentTask.spawn(gTestBrowser, null, function() {
var x = content.document.getElementsByTagName("iframe")[0].contentDocument.getElementById("mixedContentContainer");
is(x, null, "Mixed Content is NOT to be found in Test3");
});
}

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

@ -12,23 +12,9 @@ const HTTPS_TEST_ROOT_2 = getRootDirectory(gTestPath).replace("chrome://mochites
var gTestBrowser = null;
registerCleanupFunction(function() {
// Set preferences back to their original values
Services.prefs.clearUserPref(PREF_DISPLAY);
Services.prefs.clearUserPref(PREF_ACTIVE);
});
function MixedTestsCompleted() {
gBrowser.removeCurrentTab();
window.focus();
finish();
}
function test() {
waitForExplicitFinish();
Services.prefs.setBoolPref(PREF_DISPLAY, true);
Services.prefs.setBoolPref(PREF_ACTIVE, true);
add_task(function* test() {
yield SpecialPowers.pushPrefEnv({ set: [[ PREF_DISPLAY, true ],
[ PREF_ACTIVE, true ]] });
var newTab = gBrowser.addTab();
gBrowser.selectedTab = newTab;
@ -36,160 +22,166 @@ function test() {
newTab.linkedBrowser.stop()
// Mixed Script Test
gTestBrowser.addEventListener("load", MixedTest1A, true);
var url = HTTPS_TEST_ROOT + "file_bug822367_1.html";
gTestBrowser.contentWindow.location = url;
}
BrowserTestUtils.loadURI(gTestBrowser, url);
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
// Mixed Script Test
function MixedTest1A() {
gTestBrowser.removeEventListener("load", MixedTest1A, true);
gTestBrowser.addEventListener("load", MixedTest1B, true);
add_task(function* MixedTest1A() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
gIdentityHandler.disableMixedContentProtection();
}
function MixedTest1B() {
BrowserTestUtils.waitForCondition(() => content.document.getElementById("p1").innerHTML == "hello", "Waited too long for mixed script to run in Test 1").then(MixedTest1C);
}
function MixedTest1C() {
ok(content.document.getElementById("p1").innerHTML == "hello", "Mixed script didn't load in Test 1");
gTestBrowser.removeEventListener("load", MixedTest1B, true);
MixedTest2();
}
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest1B() {
yield ContentTask.spawn(gTestBrowser, null, function* () {
yield ContentTaskUtils.waitForCondition(
() => content.document.getElementById("p1").innerHTML == "hello",
"Waited too long for mixed script to run in Test 1");
});
});
// Mixed Display Test - Doorhanger should not appear
function MixedTest2() {
gTestBrowser.addEventListener("load", MixedTest2A, true);
add_task(function* MixedTest2() {
var url = HTTPS_TEST_ROOT_2 + "file_bug822367_2.html";
gTestBrowser.contentWindow.location = url;
}
BrowserTestUtils.loadURI(gTestBrowser, url);
yield BrowserTestUtils.browserLoaded(gTestBrowser);
function MixedTest2A() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: false, passiveLoaded: false});
MixedTest3();
}
});
// Mixed Script and Display Test - User Override should cause both the script and the image to load.
function MixedTest3() {
gTestBrowser.removeEventListener("load", MixedTest2A, true);
gTestBrowser.addEventListener("load", MixedTest3A, true);
add_task(function* MixedTest3() {
var url = HTTPS_TEST_ROOT + "file_bug822367_3.html";
gTestBrowser.contentWindow.location = url;
}
function MixedTest3A() {
gTestBrowser.removeEventListener("load", MixedTest3A, true);
gTestBrowser.addEventListener("load", MixedTest3B, true);
BrowserTestUtils.loadURI(gTestBrowser, url);
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest3A() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
gIdentityHandler.disableMixedContentProtection();
}
function MixedTest3B() {
BrowserTestUtils.waitForCondition(() => content.document.getElementById("p1").innerHTML == "hello", "Waited too long for mixed script to run in Test 3").then(MixedTest3C);
}
function MixedTest3C() {
BrowserTestUtils.waitForCondition(() => content.document.getElementById("p2").innerHTML == "bye", "Waited too long for mixed image to load in Test 3").then(MixedTest3D);
}
function MixedTest3D() {
ok(content.document.getElementById("p1").innerHTML == "hello", "Mixed script didn't load in Test 3");
ok(content.document.getElementById("p2").innerHTML == "bye", "Mixed image didn't load in Test 3");
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest3B() {
yield ContentTask.spawn(gTestBrowser, null, function* () {
let p1 = ContentTaskUtils.waitForCondition(
() => content.document.getElementById("p1").innerHTML == "hello",
"Waited too long for mixed script to run in Test 3");
let p2 = ContentTaskUtils.waitForCondition(
() => content.document.getElementById("p2").innerHTML == "bye",
"Waited too long for mixed image to load in Test 3");
yield Promise.all([ p1, p2 ]);
});
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: true});
MixedTest4();
}
});
// Location change - User override on one page doesn't propogate to another page after location change.
function MixedTest4() {
gTestBrowser.removeEventListener("load", MixedTest3B, true);
gTestBrowser.addEventListener("load", MixedTest4A, true);
add_task(function* MixedTest4() {
var url = HTTPS_TEST_ROOT_2 + "file_bug822367_4.html";
gTestBrowser.contentWindow.location = url;
}
function MixedTest4A() {
gTestBrowser.removeEventListener("load", MixedTest4A, true);
gTestBrowser.addEventListener("load", MixedTest4B, true);
BrowserTestUtils.loadURI(gTestBrowser, url);
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest4A() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
gIdentityHandler.disableMixedContentProtection();
}
function MixedTest4B() {
BrowserTestUtils.waitForCondition(() => content.document.location == HTTPS_TEST_ROOT + "file_bug822367_4B.html", "Waited too long for mixed script to run in Test 4").then(MixedTest4C);
}
function MixedTest4C() {
ok(content.document.location == HTTPS_TEST_ROOT + "file_bug822367_4B.html", "Location didn't change in test 4");
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest4B() {
let url = HTTPS_TEST_ROOT + "file_bug822367_4B.html";
yield ContentTask.spawn(gTestBrowser, url, function* (wantedUrl) {
yield ContentTaskUtils.waitForCondition(
() => content.document.location == wantedUrl,
"Waited too long for mixed script to run in Test 4");
});
});
add_task(function* MixedTest4C() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
BrowserTestUtils.waitForCondition(() => content.document.getElementById("p1").innerHTML == "", "Mixed script loaded in test 4 after location change!").then(MixedTest4D);
}
function MixedTest4D() {
ok(content.document.getElementById("p1").innerHTML == "", "p1.innerHTML changed; mixed script loaded after location change in Test 4");
MixedTest5();
}
yield ContentTask.spawn(gTestBrowser, null, function* () {
yield ContentTaskUtils.waitForCondition(
() => content.document.getElementById("p1").innerHTML == "",
"Mixed script loaded in test 4 after location change!");
});
});
// Mixed script attempts to load in a document.open()
function MixedTest5() {
gTestBrowser.removeEventListener("load", MixedTest4B, true);
gTestBrowser.addEventListener("load", MixedTest5A, true);
add_task(function* MixedTest5() {
var url = HTTPS_TEST_ROOT + "file_bug822367_5.html";
gTestBrowser.contentWindow.location = url;
}
function MixedTest5A() {
gTestBrowser.removeEventListener("load", MixedTest5A, true);
gTestBrowser.addEventListener("load", MixedTest5B, true);
BrowserTestUtils.loadURI(gTestBrowser, url);
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest5A() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
gIdentityHandler.disableMixedContentProtection();
}
function MixedTest5B() {
BrowserTestUtils.waitForCondition(() => content.document.getElementById("p1").innerHTML == "hello", "Waited too long for mixed script to run in Test 5").then(MixedTest5C);
}
function MixedTest5C() {
ok(content.document.getElementById("p1").innerHTML == "hello", "Mixed script didn't load in Test 5");
MixedTest6();
}
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest5B() {
yield ContentTask.spawn(gTestBrowser, null, function* () {
yield ContentTaskUtils.waitForCondition(
() => content.document.getElementById("p1").innerHTML == "hello",
"Waited too long for mixed script to run in Test 5");
});
});
// Mixed script attempts to load in a document.open() that is within an iframe.
function MixedTest6() {
gTestBrowser.removeEventListener("load", MixedTest5B, true);
gTestBrowser.addEventListener("load", MixedTest6A, true);
add_task(function* MixedTest6() {
var url = HTTPS_TEST_ROOT_2 + "file_bug822367_6.html";
gTestBrowser.contentWindow.location = url;
}
function MixedTest6A() {
BrowserTestUtils.loadURI(gTestBrowser, url);
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest6A() {
gTestBrowser.removeEventListener("load", MixedTest6A, true);
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
BrowserTestUtils.waitForCondition(() => gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"), "Waited too long for control center to get mixed active blocked state").then(MixedTest6B);
}
function MixedTest6B() {
gTestBrowser.addEventListener("load", MixedTest6C, true);
yield BrowserTestUtils.waitForCondition(
() => gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"),
"Waited too long for control center to get mixed active blocked state");
});
add_task(function* MixedTest6B() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
gIdentityHandler.disableMixedContentProtection();
}
function MixedTest6C() {
gTestBrowser.removeEventListener("load", MixedTest6C, true);
BrowserTestUtils.waitForCondition(function() {
try {
return content.document.getElementById("f1").contentDocument.getElementById("p1").innerHTML == "hello";
} catch (e) {
return false;
yield BrowserTestUtils.browserLoaded(gTestBrowser);
});
add_task(function* MixedTest6C() {
yield ContentTask.spawn(gTestBrowser, null, function* () {
function test() {
try {
return content.document.getElementById("f1").contentDocument.getElementById("p1").innerHTML == "hello";
} catch (e) {
return false;
}
}
}, "Waited too long for mixed script to run in Test 6").then(MixedTest6D);
}
function MixedTest6D() {
ok(content.document.getElementById("f1").contentDocument.getElementById("p1").innerHTML == "hello", "Mixed script didn't load in Test 6");
yield ContentTaskUtils.waitForCondition(test, "Waited too long for mixed script to run in Test 6");
});
});
add_task(function* MixedTest6D() {
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
MixedTestsCompleted();
}
});
add_task(function* cleanup() {
gBrowser.removeCurrentTab();
});

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

@ -69,7 +69,7 @@ add_task(function* test() {
yield BrowserTestUtils.browserLoaded(browser);
// get the title
let title = browser.contentTitle.trim().split("|");
let title = browser.contentDocument.title.trim().split("|");
// check each item in the title and validate it meets expectatations
for (let part of title) {

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

@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
function checkState(tab) {
let checkState = Task.async(function*(browser) {
// Go back and then forward, and make sure that the state objects received
// from the popState event are as we expect them to be.
//
@ -10,29 +10,33 @@ function checkState(tab) {
// sure it's still there after we go forward -- this is to test that the two
// history entries correspond to the same document.
let deferred = {};
deferred.promise = new Promise(resolve => deferred.resolve = resolve);
let popStateCount = 0;
tab.linkedBrowser.addEventListener("popstate", function(aEvent) {
let contentWindow = tab.linkedBrowser.contentWindow;
browser.addEventListener("popstate", function(aEvent) {
if (popStateCount == 0) {
popStateCount++;
is(tab.linkedBrowser.contentWindow.testState, "foo",
"testState after going back");
ok(aEvent.state, "Event should have a state property.");
is(JSON.stringify(tab.linkedBrowser.contentWindow.history.state), JSON.stringify({obj1:1}),
"first popstate object.");
// Add a node with id "new-elem" to the document.
let doc = contentWindow.document;
ok(!doc.getElementById("new-elem"),
"doc shouldn't contain new-elem before we add it.");
let elem = doc.createElement("div");
elem.id = "new-elem";
doc.body.appendChild(elem);
ContentTask.spawn(browser, null, function() {
is(content.testState, "foo",
"testState after going back");
is(JSON.stringify(content.history.state), JSON.stringify({obj1:1}),
"first popstate object.");
tab.linkedBrowser.goForward();
// Add a node with id "new-elem" to the document.
let doc = content.document;
ok(!doc.getElementById("new-elem"),
"doc shouldn't contain new-elem before we add it.");
let elem = doc.createElement("div");
elem.id = "new-elem";
doc.body.appendChild(elem);
}).then(() => {
browser.goForward();
});
} else if (popStateCount == 1) {
popStateCount++;
// When content fires a PopStateEvent and we observe it from a chrome event
@ -41,75 +45,76 @@ function checkState(tab) {
// deserialized in the content scope. And in this case, since RegExps are
// not currently Xrayable (see bug 1014991), trying to pull |obj3| (a RegExp)
// off of an Xrayed Object won't work. So we need to waive.
ContentTask.spawn(tab.linkedBrowser, aEvent.state, function(state) {
ContentTask.spawn(browser, aEvent.state, function(state) {
Assert.equal(Cu.waiveXrays(state).obj3.toString(),
"/^a$/", "second popstate object.");
}).then(function() {
// Make sure that the new-elem node is present in the document. If it's
// not, then this history entry has a different doc identifier than the
// previous entry, which is bad.
let doc = contentWindow.document;
let doc = content.document;
let newElem = doc.getElementById("new-elem");
ok(newElem, "doc should contain new-elem.");
newElem.remove();
ok(!doc.getElementById("new-elem"), "new-elem should be removed.");
tab.linkedBrowser.removeEventListener("popstate", arguments.callee, true);
gBrowser.removeTab(tab);
finish();
}).then(() => {
browser.removeEventListener("popstate", arguments.callee, true);
deferred.resolve();
});
}
});
// Set some state in the page's window. When we go back(), the page should
// be retrieved from bfcache, and this state should still be there.
tab.linkedBrowser.contentWindow.testState = "foo";
yield ContentTask.spawn(browser, null, function() {
content.testState = "foo";
});
// Now go back. This should trigger the popstate event handler above.
tab.linkedBrowser.goBack();
}
browser.goBack();
function test() {
yield deferred.promise;
});
add_task(function* test() {
// Tests session restore functionality of history.pushState and
// history.replaceState(). (Bug 500328)
waitForExplicitFinish();
// We open a new blank window, let it load, and then load in
// http://example.com. We need to load the blank window first, otherwise the
// docshell gets confused and doesn't have a current history entry.
let tab = gBrowser.addTab("about:blank");
let browser = tab.linkedBrowser;
let state;
yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, function* (browser) {
BrowserTestUtils.loadURI(browser, "http://example.com");
yield BrowserTestUtils.browserLoaded(browser);
promiseBrowserLoaded(browser).then(() => {
browser.loadURI("http://example.com", null, null);
// After these push/replaceState calls, the window should have three
// history entries:
// testURL (state object: null) <-- oldest
// testURL (state object: {obj1:1})
// testURL?page2 (state object: {obj3:/^a$/}) <-- newest
function contentTest() {
let history = content.window.history;
history.pushState({obj1:1}, "title-obj1");
history.pushState({obj2:2}, "title-obj2", "?page2");
history.replaceState({obj3:/^a$/}, "title-obj3");
}
yield ContentTask.spawn(browser, null, contentTest);
yield TabStateFlusher.flush(browser);
promiseBrowserLoaded(browser).then(() => {
// After these push/replaceState calls, the window should have three
// history entries:
// testURL (state object: null) <-- oldest
// testURL (state object: {obj1:1})
// testURL?page2 (state object: {obj3:/^a$/}) <-- newest
function contentTest() {
let history = content.window.history;
history.pushState({obj1:1}, "title-obj1");
history.pushState({obj2:2}, "title-obj2", "?page2");
history.replaceState({obj3:/^a$/}, "title-obj3");
}
ContentTask.spawn(browser, null, contentTest).then(function() {
return TabStateFlusher.flush(tab.linkedBrowser);
}).then(() => {
let state = ss.getTabState(tab);
gBrowser.removeTab(tab);
// Restore the state into a new tab. Things don't work well when we
// restore into the old tab, but that's not a real use case anyway.
let tab2 = gBrowser.addTab("about:blank");
ss.setTabState(tab2, state, true);
// Run checkState() once the tab finishes loading its restored state.
promiseTabRestored(tab2).then(() => checkState(tab2));
});
});
state = ss.getTabState(gBrowser.getTabForBrowser(browser));
});
}
// Restore the state into a new tab. Things don't work well when we
// restore into the old tab, but that's not a real use case anyway.
yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, function* (browser) {
let tab2 = gBrowser.getTabForBrowser(browser);
let tabRestoredPromise = promiseTabRestored(tab2);
ss.setTabState(tab2, state, true);
// Run checkState() once the tab finishes loading its restored state.
yield tabRestoredPromise;
yield checkState(browser);
});
});

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

@ -1,3 +1,4 @@
/* eslint-env mozilla/frame-script */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
@ -25,16 +26,35 @@ var state = {entries:[
}
]};
function test() {
waitForExplicitFinish();
registerCleanupFunction(function() {
ss.setBrowserState(stateBackup);
});
add_task(function* test() {
let tab = gBrowser.addTab("about:blank");
promiseTabState(tab, state).then(() => {
let history = tab.linkedBrowser.webNavigation.sessionHistory;
yield promiseTabState(tab, state);
yield ContentTask.spawn(tab.linkedBrowser, null, function() {
function compareEntries(i, j, history) {
let e1 = history.getEntryAtIndex(i, false)
.QueryInterface(Ci.nsISHEntry)
.QueryInterface(Ci.nsISHContainer);
let e2 = history.getEntryAtIndex(j, false)
.QueryInterface(Ci.nsISHEntry)
.QueryInterface(Ci.nsISHContainer);
ok(e1.sharesDocumentWith(e2),
`${i} should share doc with ${j}`);
is(e1.childCount, e2.childCount,
`Child count mismatch (${i}, ${j})`);
for (let c = 0; c < e1.childCount; c++) {
let c1 = e1.GetChildAt(c);
let c2 = e2.GetChildAt(c);
ok(c1.sharesDocumentWith(c2),
`Cousins should share documents. (${i}, ${j}, ${c})`);
}
}
let history = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsISHistory);
is(history.count, 2, "history.count");
for (let i = 0; i < history.count; i++) {
@ -42,30 +62,7 @@ function test() {
compareEntries(i, j, history);
}
}
finish();
});
}
function compareEntries(i, j, history) {
let e1 = history.getEntryAtIndex(i, false)
.QueryInterface(Ci.nsISHEntry)
.QueryInterface(Ci.nsISHContainer);
let e2 = history.getEntryAtIndex(j, false)
.QueryInterface(Ci.nsISHEntry)
.QueryInterface(Ci.nsISHContainer);
ok(e1.sharesDocumentWith(e2),
i + " should share doc with " + j);
is(e1.childCount, e2.childCount,
"Child count mismatch (" + i + ", " + j + ")");
for (let c = 0; c < e1.childCount; c++) {
let c1 = e1.GetChildAt(c);
let c2 = e2.GetChildAt(c);
ok(c1.sharesDocumentWith(c2),
"Cousins should share documents. (" + i + ", " + j + ", " + c + ")");
}
}
ss.setBrowserState(stateBackup);
});

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

@ -29,9 +29,10 @@ function test() {
is(formdata && formdata.id["foo"], "bar", "tab state's formdata is valid");
promiseTabRestored(tab).then(() => {
let input = browser.contentDocument.getElementById("foo");
is(input.value, "bar", "formdata has been restored correctly");
finish();
ContentTask.spawn(browser, null, function() {
let input = content.document.getElementById("foo");
is(input.value, "bar", "formdata has been restored correctly");
}).then(() => { finish(); });
});
// Restore the tab by selecting it.

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

@ -16,17 +16,24 @@ add_task(function* test() {
// this is a baseline to ensure CSP is active
// attempt to inject and run a script via inline (pre-restore, allowed)
injectInlineScript(browser, 'document.getElementById("test_id").value = "fail";');
is(browser.contentDocument.getElementById("test_id").value, "ok",
"CSP should block the inline script that modifies test_id");
yield injectInlineScript(browser, `document.getElementById("test_id").value = "fail";`);
// attempt to click a link to a data: URI (will inherit the CSP of the
// origin document) and navigate to the data URI in the link.
browser.contentDocument.getElementById("test_data_link").click();
yield promiseBrowserLoaded(browser);
let loadedPromise = promiseBrowserLoaded(browser);
yield ContentTask.spawn(browser, null, function() {
is(content.document.getElementById("test_id").value, "ok",
"CSP should block the inline script that modifies test_id");
is(browser.contentDocument.getElementById("test_id2").value, "ok",
"CSP should block the script loaded by the clicked data URI");
// attempt to click a link to a data: URI (will inherit the CSP of the
// origin document) and navigate to the data URI in the link.
content.document.getElementById("test_data_link").click();
});
yield loadedPromise;
yield ContentTask.spawn(browser, null, function() {
is(content.document.getElementById("test_id2").value, "ok",
"CSP should block the script loaded by the clicked data URI");
});
// close the tab
yield promiseRemoveTab(tab);
@ -36,8 +43,10 @@ add_task(function* test() {
yield promiseTabRestored(tab);
browser = tab.linkedBrowser;
is(browser.contentDocument.getElementById("test_id2").value, "ok",
"CSP should block the script loaded by the clicked data URI after restore");
yield ContentTask.spawn(browser, null, function() {
is(content.document.getElementById("test_id2").value, "ok",
"CSP should block the script loaded by the clicked data URI after restore");
});
// clean up
gBrowser.removeTab(tab);
@ -45,8 +54,10 @@ add_task(function* test() {
// injects an inline script element (with a text body)
function injectInlineScript(browser, scriptText) {
let scriptElt = browser.contentDocument.createElement("script");
scriptElt.type = "text/javascript";
scriptElt.text = scriptText;
browser.contentDocument.body.appendChild(scriptElt);
return ContentTask.spawn(browser, scriptText, function(text) {
let scriptElt = content.document.createElement("script");
scriptElt.type = "text/javascript";
scriptElt.text = text;
content.document.body.appendChild(scriptElt);
});
}

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

@ -1,3 +1,4 @@
/* eslint-env mozilla/frame-script */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
@ -17,27 +18,34 @@ add_task(function* check_history_not_persisted() {
yield TabStateFlusher.flush(browser);
let state = JSON.parse(ss.getTabState(tab));
ok(!state.entries[0].persist, "Should have collected the persistence state");
gBrowser.removeTab(tab);
yield promiseRemoveTab(tab);
browser = null;
// Open a new tab to restore into.
tab = gBrowser.addTab("about:blank");
browser = tab.linkedBrowser;
yield promiseTabState(tab, state);
let sessionHistory = browser.sessionHistory;
is(sessionHistory.count, 1, "Should be a single history entry");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:blank", "Should be the right URL");
yield ContentTask.spawn(browser, null, function() {
let sessionHistory = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsISHistory);
is(sessionHistory.count, 1, "Should be a single history entry");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:blank", "Should be the right URL");
});
// Load a new URL into the tab, it should replace the about:blank history entry
browser.loadURI("about:robots");
yield promiseBrowserLoaded(browser);
sessionHistory = browser.sessionHistory;
is(sessionHistory.count, 1, "Should be a single history entry");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:robots", "Should be the right URL");
yield ContentTask.spawn(browser, null, function() {
let sessionHistory = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsISHistory);
is(sessionHistory.count, 1, "Should be a single history entry");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:robots", "Should be the right URL");
});
// Cleanup.
gBrowser.removeTab(tab);
yield promiseRemoveTab(tab);
});
/**
@ -54,26 +62,32 @@ add_task(function* check_history_default_persisted() {
yield TabStateFlusher.flush(browser);
let state = JSON.parse(ss.getTabState(tab));
delete state.entries[0].persist;
gBrowser.removeTab(tab);
yield promiseRemoveTab(tab);
browser = null;
// Open a new tab to restore into.
tab = gBrowser.addTab("about:blank");
browser = tab.linkedBrowser;
yield promiseTabState(tab, state);
let sessionHistory = browser.sessionHistory;
yield ContentTask.spawn(browser, null, function() {
let sessionHistory = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsISHistory);
is(sessionHistory.count, 1, "Should be a single history entry");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:blank", "Should be the right URL");
is(sessionHistory.count, 1, "Should be a single history entry");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:blank", "Should be the right URL");
});
// Load a new URL into the tab, it should replace the about:blank history entry
browser.loadURI("about:robots");
yield promiseBrowserLoaded(browser);
sessionHistory = browser.sessionHistory;
is(sessionHistory.count, 2, "Should be two history entries");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:blank", "Should be the right URL");
is(sessionHistory.getEntryAtIndex(1, false).URI.spec, "about:robots", "Should be the right URL");
yield ContentTask.spawn(browser, null, function() {
let sessionHistory = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsISHistory);
is(sessionHistory.count, 2, "Should be two history entries");
is(sessionHistory.getEntryAtIndex(0, false).URI.spec, "about:blank", "Should be the right URL");
is(sessionHistory.getEntryAtIndex(1, false).URI.spec, "about:robots", "Should be the right URL");
});
// Cleanup.
gBrowser.removeTab(tab);
yield promiseRemoveTab(tab);
});

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

@ -2909,8 +2909,7 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
%include ../shared/notification-icons.inc.css
.notification-anchor-icon:-moz-focusring {
box-shadow: 0 0 2px 1px -moz-mac-focusring inset,
0 0 3px 2px -moz-mac-focusring;
box-shadow: var(--focus-ring-box-shadow);
}
/* Translation */

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

@ -51,5 +51,3 @@
#identity-popup-securityView-body > button:-moz-focusring {
box-shadow: var(--focus-ring-box-shadow);
}

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

@ -264,6 +264,11 @@ checkbox:-moz-focusring {
height: 16px;
margin: 0 3px;
transition: opacity 0.05s ease-in-out;
/* For text-as-image usage, match the SVG color */
color: #0b0b0b;
direction: ltr;
font-size: 11px;
}
.devtools-button:empty::before {

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

@ -602,18 +602,14 @@
#ruleview-add-rule-button::before {
background-image: url("chrome://devtools/skin/images/add.svg");
background-size: cover;
}
#pseudo-class-panel-toggle::before {
background-image: url("chrome://devtools/skin/images/pseudo-class.svg");
background-size: cover;
}
#class-panel-toggle::before {
content: ".cls";
direction: ltr;
font-size: 11px;
}
.ruleview-overridden-rule-filter {

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

@ -17,3 +17,4 @@
* [Backend](backend.md)
* [Protocol](protocol.md)
* [Debugger API](debugger-api.md)
* [Backward Compatibility](backward-compatibility.md)

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

@ -0,0 +1,59 @@
# Backward Compatibility
## Overview
When making changes to the DevTools, there are certain backward compatibility requirements that we should keep in mind.
In general, we should strive to maintain feature support for existing servers as we continue to make changes to the code base. At times, this can be difficult to achieve, however.
## Specific Guidelines
The important compatibility scenarios are:
1. Nightly desktop client **MUST** maintain existing compatibility back to release channel servers.
This is mainly to simplify cross-platform use cases, i.e. desktop Nightly with release Fennec.
2. Servers **MAY** use traits to state a feature is not supported yet.
This helps us support alternate environments like the Valence adapter, which does not implement every possible server feature.
Certainly when a new feature needs a new actor method to function, it won't work with servers that don't support it. But we should still ensure the client doesn't explode when using unrelated, existing features, at least until the above time windows have elapsed.
## Testing
The harder part of this currently is that there is no automated testing to ensure the above guidelines have been met. While we hope to have this at some point, for now manual testing is needed here.
The easiest way to test this is to check your work against a Firefox for Android device on release channel and Valence to ensure existing features in the area you are changing continue to function. That doesn't cover every case, but it's a great start.
## Feature Detection
Starting with Firefox 36 (thanks to [bug 1069673](https://bugzilla.mozilla.org/show_bug.cgi?id=1069673)), you can use actor feature detection to determine which actors exist and what methods they expose.
1. Detecting if the server has an actor: all you need is access to the `Toolbox` instance, which all panels do, when they get instantiated. Then you can do:
```js
let hasProfilerActor = toolbox.target.hasActor("profiler");
```
The `hasActor` method returns a boolean synchronously.
2. Detecting if an actor has a given method: same thing here, you need access to the toolbox:
```js
toolbox.target.actorHasMethod("domwalker", "duplicateNode").then(hasMethod => {
}).catch(e => console.error(e));
```
The `actorHasMethod` returns a promise that resolves to a boolean.
## Removing old backward compatibility code
We used to support old Firefox OS servers (back to Gecko 28), we don't anymore. Does this mean we can remove compatibility traits for it?
Maybe. Keep in mind that we still want to support Firefox for Android back to release channel, so we still want to keep traits in general. That's a much smaller time window than we supported for Firefox OS, so it should allow for some simplification.
A number of our traits are used by Valence as flags to tell the client "that's not implemented yet", so those are important to keep to avoid breaking this use case.
The type of compatibility that could now be removed are things where the protocol semantics changed in some Gecko older than release channel and the trait is not useful for saying "I don't support feature X".

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

@ -1,9 +1,5 @@
function test() {
waitForExplicitFinish();
let tab = gBrowser.addTab("http://example.com");
tab.linkedBrowser.addEventListener("load", function() {
add_task(function* test() {
yield BrowserTestUtils.withNewTab({ gBrowser, url: "http://example.com" }, function* (browser) {
let numLocationChanges = 0;
let listener = {
@ -15,17 +11,16 @@ function test() {
gBrowser.addTabsProgressListener(listener);
// pushState to a new URL (http://example.com/foo"). This should trigger
// exactly one LocationChange event.
tab.linkedBrowser.contentWindow.history.pushState(null, null, "foo");
executeSoon(function() {
gBrowser.removeTab(tab);
gBrowser.removeTabsProgressListener(listener);
is(numLocationChanges, 1,
"pushState should cause exactly one LocationChange event.");
finish();
yield ContentTask.spawn(browser, null, function() {
// pushState to a new URL (http://example.com/foo"). This should trigger
// exactly one LocationChange event.
content.history.pushState(null, null, "foo");
});
}, {capture: true, once: true});
}
yield Promise.resolve();
gBrowser.removeTabsProgressListener(listener);
is(numLocationChanges, 1,
"pushState should cause exactly one LocationChange event.");
});
});

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

@ -4580,6 +4580,17 @@ nsIPresShell::RestyleForCSSRuleChanges()
mPresContext->RebuildCounterStyles();
}
// Tell Servo that the contents of style sheets have changed.
//
// NB: It's important to do so before bailing out.
//
// Even if we have no frames, we can end up styling those when creating
// them, and it's important for Servo to know that it needs to use the
// correct styles.
if (mStyleSet->IsServo()) {
mStyleSet->AsServo()->NoteStyleSheetsChanged();
}
Element* root = mDocument->GetRootElement();
if (!mDidInitialize) {
// Nothing to do here, since we have no frames yet
@ -4593,11 +4604,6 @@ nsIPresShell::RestyleForCSSRuleChanges()
RestyleManager* restyleManager = mPresContext->RestyleManager();
if (mStyleSet->IsServo()) {
// Tell Servo that the contents of style sheets have changed.
mStyleSet->AsServo()->NoteStyleSheetsChanged();
}
if (scopeRoots.IsEmpty()) {
// If scopeRoots is empty, we know that mStylesHaveChanged was true at
// the beginning of this function, and that we need to restyle the whole

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

@ -1722,8 +1722,8 @@ fails == 731521-1.html 731521-1.html
fails needs-focus == 731726-1.html 731726-1.html
fails == 735481-1.html 735481-1.html
== 745934-1.html 745934-1.html
fails == 748692-1a.html 748692-1a.html
fails == 748692-1b.html 748692-1b.html
== 748692-1a.html 748692-1a.html
== 748692-1b.html 748692-1b.html
fails == 748803-1.html 748803-1.html
== 750551-1.html 750551-1.html
fails == 751012-1a.html 751012-1a.html

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

@ -28,7 +28,7 @@ load 437170-1.html
load 437532-1.html
load 439184-1.html
load 444237-1.html
load 444848-1.html
load 444848-1.html
load 447776-1.html
load 447783-1.html
load 448161-1.html
@ -76,7 +76,7 @@ load 621596-1.html
skip-if(stylo) load 622314-1.xhtml # bug 1337695
load 637242.xhtml
load 645142.html
fails-if(stylo) == 645951-1.html 645951-1-ref.html
== 645951-1.html 645951-1-ref.html
load 652976-1.svg
load 665209-1.html
load 671799-1.html
@ -145,7 +145,7 @@ asserts-if(stylo,0-1) load 1264396-1.html # bug 1324677
# layout.css.prefixes.webkit pref
pref(layout.css.prefixes.webkit,false) load 1265611-1.html
load border-image-visited-link.html
load font-face-truncated-src.html
load font-face-truncated-src.html
load large_border_image_width.html
load long-url-list-stack-overflow.html
pref(layout.css.background-clip-text.enabled,true) load 1264949.html

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

@ -63,7 +63,6 @@ Any line which doesn't follow the format above would be ignored like comment.
* @import
* test_bug221428.html [1]
* @media
* test_condition_text_assignment.html [1]
* test_css_eof_handling.html [1]
* test_group_insertRule.html [16]
* test_rules_out_of_sheets.html [1]
@ -448,7 +447,7 @@ Any line which doesn't follow the format above would be ignored like comment.
* test_units_length.html [5]
* test_units_time.html [1]
* insertRule / deleteRule don't work bug 1336863
* test_rule_insertion.html [8]
* test_rule_insertion.html [7]
* @-moz-document support
* test_rule_serialization.html [2]
* test_moz_document_rules.html [13]
@ -458,6 +457,7 @@ Any line which doesn't follow the format above would be ignored like comment.
* test_css_supports.html: issues around @supports syntax servo/servo#15482 [8]
* test_author_specified_style.html: support serializing color as author specified [33]
* browser_newtab_share_rule_processors.js: agent style sheet sharing [1]
* test_selectors.html `this_better_be_unvisited`: visited handling [2]
## Assertions

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

@ -121,7 +121,7 @@ function remoteResolveURI(uri) {
var loadTestTab = Task.async(function*() {
gBrowser.selectedTab = gBrowser.addTab(TEST_URL);
let browser = gBrowser.selectedBrowser;
yield waitForEvent(browser, "load", true);
yield BrowserTestUtils.browserLoaded(browser);
browser.messageManager.loadFrameScript("data:,(" + frameScript.toString() + ")();", true);
return browser;
});

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

@ -1157,4 +1157,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1498057610195000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1498143261115000);

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

@ -8,7 +8,6 @@
#include "cryptohi.h"
#include "keyhi.h"
#include "mozilla/Assertions.h"
#include "mozilla/Telemetry.h"
#include "nsIContent.h"
#include "nsIDOMHTMLSelectElement.h"
#include "nsIGenKeypairInfoDlg.h"
@ -66,7 +65,7 @@ typedef struct curveNameTagPairStr {
} CurveNameTagPair;
static CurveNameTagPair nameTagPair[] =
{
{
{ "prime192v1", SEC_OID_ANSIX962_EC_PRIME192V1 },
{ "prime192v2", SEC_OID_ANSIX962_EC_PRIME192V2 },
{ "prime192v3", SEC_OID_ANSIX962_EC_PRIME192V3 },
@ -157,7 +156,7 @@ DecodeECParams(const char* curve)
if (curve && *curve) {
numCurves = sizeof(nameTagPair)/sizeof(CurveNameTagPair);
for (i = 0; ((i < numCurves) && (curveOidTag == SEC_OID_UNKNOWN));
for (i = 0; ((i < numCurves) && (curveOidTag == SEC_OID_UNKNOWN));
i++) {
if (PL_strcmp(curve, nameTagPair[i].curveName) == 0)
curveOidTag = nameTagPair[i].curveOidTag;
@ -165,7 +164,7 @@ DecodeECParams(const char* curve)
}
/* Return nullptr if curve name is not recognized */
if ((curveOidTag == SEC_OID_UNKNOWN) ||
if ((curveOidTag == SEC_OID_UNKNOWN) ||
(oidData = SECOID_FindOIDByTag(curveOidTag)) == nullptr) {
return nullptr;
}
@ -176,9 +175,9 @@ DecodeECParams(const char* curve)
return nullptr;
}
/*
/*
* ecparams->data needs to contain the ASN encoding of an object ID (OID)
* representing the named curve. The actual OID is in
* representing the named curve. The actual OID is in
* oidData->oid.data so we simply prepend 0x06 and OID length
*/
ecparams->data[0] = SEC_ASN1_OBJECT_ID;
@ -191,9 +190,9 @@ DecodeECParams(const char* curve)
NS_IMPL_ISUPPORTS(nsKeygenFormProcessor, nsIFormProcessor)
nsKeygenFormProcessor::nsKeygenFormProcessor()
{
{
m_ctx = new PipUIContext();
}
}
nsKeygenFormProcessor::~nsKeygenFormProcessor()
{
@ -307,7 +306,7 @@ GetSlotWithMechanism(uint32_t aMechanism, nsIInterfaceRequestor* m_ctx,
*aSlot = nullptr;
// Get the slot
slotList = PK11_GetAllTokens(MapGenMechToAlgoMech(aMechanism),
slotList = PK11_GetAllTokens(MapGenMechToAlgoMech(aMechanism),
true, true, m_ctx);
if (!slotList || !slotList->head) {
rv = NS_ERROR_FAILURE;
@ -340,7 +339,7 @@ GetSlotWithMechanism(uint32_t aMechanism, nsIInterfaceRequestor* m_ctx,
if (tokenNameList[i])
i++;
else {
// OOM. adjust numSlots so we don't free unallocated memory.
// OOM. adjust numSlots so we don't free unallocated memory.
numSlots = i;
PK11_FreeSlotListElement(slotList, slotElement);
rv = NS_ERROR_OUT_OF_MEMORY;
@ -394,54 +393,6 @@ loser:
return rv;
}
void
GatherKeygenTelemetry(uint32_t keyGenMechanism, int keysize, char* curve)
{
if (keyGenMechanism == CKM_RSA_PKCS_KEY_PAIR_GEN) {
if (keysize > 8196 || keysize < 0) {
return;
}
nsCString telemetryValue("rsa");
telemetryValue.AppendPrintf("%d", keysize);
mozilla::Telemetry::Accumulate(
mozilla::Telemetry::KEYGEN_GENERATED_KEY_TYPE, telemetryValue);
} else if (keyGenMechanism == CKM_EC_KEY_PAIR_GEN) {
nsCString secp384r1 = NS_LITERAL_CSTRING("secp384r1");
nsCString secp256r1 = NS_LITERAL_CSTRING("secp256r1");
mozilla::UniqueSECItem decoded = DecodeECParams(curve);
if (!decoded) {
switch (keysize) {
case 2048:
mozilla::Telemetry::Accumulate(
mozilla::Telemetry::KEYGEN_GENERATED_KEY_TYPE, secp384r1);
break;
case 1024:
case 512:
mozilla::Telemetry::Accumulate(
mozilla::Telemetry::KEYGEN_GENERATED_KEY_TYPE, secp256r1);
break;
}
} else {
if (secp384r1.EqualsIgnoreCase(curve, secp384r1.Length())) {
mozilla::Telemetry::Accumulate(
mozilla::Telemetry::KEYGEN_GENERATED_KEY_TYPE, secp384r1);
} else if (secp256r1.EqualsIgnoreCase(curve, secp256r1.Length())) {
mozilla::Telemetry::Accumulate(
mozilla::Telemetry::KEYGEN_GENERATED_KEY_TYPE, secp256r1);
} else {
mozilla::Telemetry::Accumulate(
mozilla::Telemetry::KEYGEN_GENERATED_KEY_TYPE, NS_LITERAL_CSTRING("other_ec"));
}
}
} else {
MOZ_CRASH("Unknown keygen algorithm");
return;
}
}
nsresult
nsKeygenFormProcessor::GetPublicKey(const nsAString& aValue,
const nsAString& aChallenge,
@ -525,17 +476,17 @@ nsKeygenFormProcessor::GetPublicKey(const nsAString& aValue,
params = &rsaParams;
break;
case CKM_EC_KEY_PAIR_GEN:
/* XXX We ought to rethink how the KEYGEN tag is
/* XXX We ought to rethink how the KEYGEN tag is
* displayed. The pulldown selections presented
* to the user must depend on the keytype.
* The displayed selection could be picked
* from the keyparams attribute (this is currently called
* the pqg attribute).
* For now, we pick ecparams from the keyparams field
* if it specifies a valid supported curve, or else
* if it specifies a valid supported curve, or else
* we pick one of secp384r1, secp256r1 or secp192r1
* respectively depending on the user's selection
* (High, Medium, Low).
* (High, Medium, Low).
* (RSA uses RSA-2048, RSA-1024 and RSA-512 for historical
* reasons, while ECC choices represent a stronger mapping)
* NOTE: The user's selection
@ -559,7 +510,7 @@ nsKeygenFormProcessor::GetPublicKey(const nsAString& aValue,
case 512:
ecParams = DecodeECParams("secp256r1");
break;
}
}
}
MOZ_ASSERT(ecParams);
params = ecParams.get();
@ -616,7 +567,7 @@ nsKeygenFormProcessor::GetPublicKey(const nsAString& aValue,
}
}
}
if (NS_FAILED(rv) || !privateKey) {
goto loser;
}
@ -680,7 +631,6 @@ nsKeygenFormProcessor::GetPublicKey(const nsAString& aValue,
rv = NS_OK;
GatherKeygenTelemetry(keyGenMechanism, keysize, keyparamsString);
loser:
if (srv != SECSuccess) {
if ( privateKey ) {
@ -729,12 +679,12 @@ nsKeygenFormProcessor::ExtractParams(nsIDOMHTMLElement* aElement,
aElement->GetAttribute(NS_LITERAL_STRING("pqg"),
keyParamsValue);
/* XXX We can still support the pqg attribute in the keygen
* tag for backward compatibility while introducing a more
/* XXX We can still support the pqg attribute in the keygen
* tag for backward compatibility while introducing a more
* general attribute named keyparams.
*/
if (keyParamsValue.IsEmpty()) {
aElement->GetAttribute(NS_LITERAL_STRING("keyparams"),
aElement->GetAttribute(NS_LITERAL_STRING("keyparams"),
keyParamsValue);
}
@ -751,7 +701,7 @@ nsKeygenFormProcessor::ProcessValue(nsIDOMHTMLElement* aElement,
nsAutoString keyParamsValue;
ExtractParams(aElement, challengeValue, keyTypeValue, keyParamsValue);
return GetPublicKey(aValue, challengeValue, keyTypeValue,
return GetPublicKey(aValue, challengeValue, keyTypeValue,
aValue, keyParamsValue);
}
@ -770,7 +720,7 @@ nsresult
nsKeygenFormProcessor::ProvideContent(const nsAString& aFormType,
nsTArray<nsString>& aContent,
nsAString& aAttribute)
{
{
if (Compare(aFormType, NS_LITERAL_STRING("SELECT"),
nsCaseInsensitiveStringComparator()) == 0) {
@ -780,5 +730,5 @@ nsKeygenFormProcessor::ProvideContent(const nsAString& aFormType,
aAttribute.AssignLiteral("-mozilla-keygen");
}
return NS_OK;
}
}

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

@ -3,6 +3,7 @@
020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
0g.org.uk: could not connect to host
0p.no: did not receive HSTS header
0x.cx: could not connect to host
0x0a.net: could not connect to host
0x1337.eu: could not connect to host
0x44.net: did not receive HSTS header
@ -28,7 +29,6 @@
1xcess.com: did not receive HSTS header
206rc.net: max-age too low: 2592000
247loan.com: max-age too low: 0
247quickbooks.com: did not receive HSTS header
24hourpaint.com: could not connect to host
25daysof.io: could not connect to host
263.info: could not connect to host
@ -38,7 +38,7 @@
2or3.tk: could not connect to host
2programmers.net: could not connect to host
2smart4food.com: did not receive HSTS header
2ss.jp: did not receive HSTS header
2ss.jp: could not connect to host
300651.ru: did not receive HSTS header
300m.com: did not receive HSTS header
301.website: could not connect to host
@ -149,6 +149,7 @@ aether.pw: could not connect to host
aevpn.net: could not connect to host
aficotroceni.ro: did not receive HSTS header
afp548.tk: could not connect to host
afyou.co.kr: could not connect to host
agalaxyfarfaraway.co.uk: could not connect to host
agbremen.de: did not receive HSTS header
agentseeker.ca: did not receive HSTS header
@ -195,7 +196,7 @@ alittlebitcheeky.com: did not receive HSTS header
aljaspod.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
alkami.com: did not receive HSTS header
all-subtitles.com: did not receive HSTS header
all.tf: did not receive HSTS header
all.tf: could not connect to host
alldaymonitoring.com: could not connect to host
allforyou.at: could not connect to host
allinnote.com: could not connect to host
@ -397,7 +398,6 @@ axado.com.br: did not receive HSTS header
axeny.com: did not receive HSTS header
axg.io: could not connect to host
az.search.yahoo.com: did not receive HSTS header
azazy.net: max-age too low: 2592000
azprep.us: could not connect to host
azuxul.fr: could not connect to host
b3orion.com: max-age too low: 0
@ -411,7 +411,6 @@ babymasaze.cz: did not receive HSTS header
babysaying.me: max-age too low: 6000
bacchanallia.com: could not connect to host
back-bone.nl: did not receive HSTS header
bacon-monitoring.org: could not connect to host
badcronjob.com: could not connect to host
badenhard.eu: could not connect to host
badkamergigant.com: could not connect to host
@ -643,6 +642,7 @@ buildci.asia: could not connect to host
buildify.co.za: could not connect to host
buildsaver.co.za: did not receive HSTS header
built.by: did not receive HSTS header
bul3seas.eu: could not connect to host
bullbits.com: could not connect to host
bulletpoint.cz: could not connect to host
bulmafox.com: could not connect to host
@ -679,6 +679,7 @@ bysymphony.com: max-age too low: 0
byte.wtf: did not receive HSTS header
bytepark.de: did not receive HSTS header
bytesund.biz: could not connect to host
bzv-fr.eu: could not connect to host
c1yd3i.me: could not connect to host
c3b.info: could not connect to host
cabarave.com: could not connect to host
@ -706,7 +707,6 @@ cancelmyprofile.com: did not receive HSTS header
candicontrols.com: did not receive HSTS header
candratech.com: could not connect to host
candylion.rocks: could not connect to host
canfly.org: could not connect to host
cannyfoxx.me: could not connect to host
canyonshoa.com: did not receive HSTS header
capecycles.co.za: did not receive HSTS header
@ -737,7 +737,7 @@ casino-cashflow.ru: did not receive HSTS header
casinostest.com: did not receive HSTS header
casioshop.eu: could not connect to host
casovi.cf: could not connect to host
catarsisvr.com: did not receive HSTS header
catarsisvr.com: could not connect to host
catinmay.com: could not connect to host
catnapstudios.com: could not connect to host
caveclan.org: did not receive HSTS header
@ -767,6 +767,7 @@ cesidianroot.eu: could not connect to host
cevrimici.com: could not connect to host
cfcproperties.com: did not receive HSTS header
cfetengineering.com: could not connect to host
cfoitplaybook.com: could not connect to host
cg.search.yahoo.com: did not receive HSTS header
chainmonitor.com: could not connect to host
championsofregnum.com: did not receive HSTS header
@ -780,6 +781,7 @@ charityclear.com: did not receive HSTS header
charnleyhouse.co.uk: max-age too low: 604800
chartpen.com: did not receive HSTS header
chartstoffarm.de: did not receive HSTS header
chat-porc.eu: could not connect to host
chatbot.me: did not receive HSTS header
chateauconstellation.ch: did not receive HSTS header
chatme.im: did not receive HSTS header
@ -819,7 +821,6 @@ chrisupjohn.com: could not connect to host
chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
chroniclesofgeorge.com: did not receive HSTS header
chrst.ph: could not connect to host
chua.cf: could not connect to host
chulado.com: did not receive HSTS header
cidr.ml: could not connect to host
@ -837,7 +838,6 @@ clara-baumert.de: could not connect to host
classicsandexotics.com: did not receive HSTS header
classicspublishing.com: could not connect to host
clcleaningco.com: could not connect to host
cldly.com: could not connect to host
cleanexperts.co.uk: could not connect to host
cleaningsquad.ca: max-age too low: 0
cleanmta.com: could not connect to host
@ -852,7 +852,6 @@ clint.id.au: max-age too low: 0
clintonbloodworth.com: did not receive HSTS header
clintonbloodworth.io: could not connect to host
clintwilson.technology: max-age too low: 2592000
clipped4u.com: could not connect to host
cloud.wtf: could not connect to host
cloudapi.vc: could not connect to host
cloudcert.org: did not receive HSTS header
@ -860,14 +859,12 @@ cloudcy.net: could not connect to host
clouddesktop.co.nz: could not connect to host
cloudey.net: did not receive HSTS header
cloudflare.com: did not receive HSTS header
cloudia.org: could not connect to host
cloudimag.es: could not connect to host
cloudlink.club: could not connect to host
cloudns.com.au: could not connect to host
cloudspotterapp.com: did not receive HSTS header
cloudstoragemaus.com: could not connect to host
cloudstorm.me: could not connect to host
cloudup.com: did not receive HSTS header
cloudwalk.io: did not receive HSTS header
cloverleaf.net: max-age too low: 0
clubmate.rocks: could not connect to host
@ -901,7 +898,6 @@ codelayer.ca: could not connect to host
codelitmus.com: did not receive HSTS header
codemonkeyrawks.net: could not connect to host
codepoet.de: could not connect to host
codepult.com: could not connect to host
codepx.com: did not receive HSTS header
codewild.de: could not connect to host
codewiththepros.org: could not connect to host
@ -922,7 +918,6 @@ coloradocomputernetworking.net: could not connect to host
combron.nl: did not receive HSTS header
comfortdom.ua: did not receive HSTS header
comfortticket.de: did not receive HSTS header
comfy.moe: did not receive HSTS header
comicspines.com: could not connect to host
comotalk.com: could not connect to host
compalytics.com: could not connect to host
@ -1000,10 +995,9 @@ crypt.guru: could not connect to host
crypticshell.co.uk: could not connect to host
cryptify.eu: could not connect to host
cryptobin.org: could not connect to host
cryptojar.io: could not connect to host
cryptojar.io: did not receive HSTS header
cryptolab.pro: could not connect to host
cryptolab.tk: could not connect to host
cryptoparty.at: could not connect to host
cryptopartyatx.org: could not connect to host
cryptopush.com: did not receive HSTS header
crysadm.com: max-age too low: 1
@ -1011,6 +1005,7 @@ crystalclassics.co.uk: did not receive HSTS header
csapak.com: could not connect to host
csawctf.poly.edu: could not connect to host
csfs.org.uk: could not connect to host
csgf.ru: did not receive HSTS header
csgodicegame.com: did not receive HSTS header
csgoelemental.com: could not connect to host
csgokings.eu: could not connect to host
@ -1052,7 +1047,7 @@ dah5.com: did not receive HSTS header
dailystormerpodcasts.com: did not receive HSTS header
daimadi.com: could not connect to host
dakrib.net: could not connect to host
daku.gdn: could not connect to host
daku.gdn: did not receive HSTS header
dalfiume.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
dalingk.co: could not connect to host
damedrogy.cz: could not connect to host
@ -1158,6 +1153,7 @@ detector.exposed: could not connect to host
detest.org: could not connect to host
dethemium.com: could not connect to host
deuxvia.com: could not connect to host
devafterdark.com: could not connect to host
devcu.com: could not connect to host
devcu.net: could not connect to host
devincrow.me: could not connect to host
@ -1170,6 +1166,7 @@ dhome.at: did not receive HSTS header
dhpcs.com: did not receive HSTS header
dhpiggott.net: did not receive HSTS header
diablotine.rocks: could not connect to host
diagnostix.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
diarbag.us: could not connect to host
diasp.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
die-partei-reutlingen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
@ -1184,7 +1181,6 @@ digitalriver.tk: could not connect to host
digitalskillswap.com: could not connect to host
dim.lighting: could not connect to host
dinamoelektrik.com: max-age too low: 0
dingcc.com: did not receive HSTS header
dinkum.online: could not connect to host
discoveringdocker.com: did not receive HSTS header
discovery.lookout.com: did not receive HSTS header
@ -1213,6 +1209,7 @@ do-do.tk: could not connect to host
do.gd: could not connect to host
do.search.yahoo.com: did not receive HSTS header
dobet.in: could not connect to host
dobrev.family: could not connect to host
docid.io: could not connect to host
docket.news: could not connect to host
docset.io: could not connect to host
@ -1269,7 +1266,6 @@ ds-christiansen.de: did not receive HSTS header
dshiv.io: could not connect to host
dubrovskiy.net: could not connect to host
dubrovskiy.pro: could not connect to host
duelysthub.com: could not connect to host
duesee.org: could not connect to host
dullsir.com: did not receive HSTS header
dutchessuganda.com: did not receive HSTS header
@ -1321,7 +1317,6 @@ edk.com.tr: did not receive HSTS header
edmodo.com: did not receive HSTS header
edp-collaborative.com: max-age too low: 2500
eduvance.in: did not receive HSTS header
edwards.me.uk: could not connect to host
effectiveosgi.com: could not connect to host
efficienthealth.com: did not receive HSTS header
effortlesshr.com: did not receive HSTS header
@ -1333,7 +1328,6 @@ ehito.ovh: could not connect to host
ehrenamt-skpfcw.de: could not connect to host
eicfood.com: could not connect to host
eidolonhost.com: did not receive HSTS header
eisp.it: could not connect to host
ekbanden.nl: could not connect to host
elaintehtaat.fi: did not receive HSTS header
elan-organics.com: did not receive HSTS header
@ -1351,7 +1345,7 @@ elenoon.ir: did not receive HSTS header
elgacien.de: could not connect to host
elimdengelen.com: did not receive HSTS header
elitefishtank.com: could not connect to host
elnutricionista.es: did not receive HSTS header
elnutricionista.es: could not connect to host
eloanpersonal.com: max-age too low: 0
elpo.xyz: could not connect to host
elsamakhin.com: could not connect to host
@ -1381,7 +1375,6 @@ enefan.jp: could not connect to host
enersec.co.uk: could not connect to host
engelwerbung.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
engg.ca: could not connect to host
enginepit.com: could not connect to host
enginsight.com: did not receive HSTS header
enigmacpt.com: did not receive HSTS header
enigmail.net: did not receive HSTS header
@ -1445,7 +1438,6 @@ eulerpi.io: could not connect to host
eupho.me: could not connect to host
euroshop24.net: could not connect to host
evafojtova.cz: did not receive HSTS header
evalesc.com: could not connect to host
evantage.org: could not connect to host
evdenevenakliyatankara.pw: did not receive HSTS header
everybooks.com: max-age too low: 60
@ -1502,6 +1494,7 @@ familie-zimmermann.at: could not connect to host
familjenm.se: could not connect to host
fanyl.cn: could not connect to host
farhadexchange.com: did not receive HSTS header
farhood.org: did not receive HSTS header
fashioncare.cz: did not receive HSTS header
fasset.jp: could not connect to host
fastograph.com: could not connect to host
@ -1557,6 +1550,7 @@ fitiapp.com: could not connect to host
fitnesswerk.de: could not connect to host
five.vn: did not receive HSTS header
fivestarsitters.com: did not receive HSTS header
fivezerocreative.com: did not receive HSTS header
fixatom.com: did not receive HSTS header
fixingdns.com: did not receive HSTS header
fj.search.yahoo.com: did not receive HSTS header
@ -1630,7 +1624,7 @@ freesounding.ru: could not connect to host
freethought.org.au: could not connect to host
freeutopia.org: did not receive HSTS header
frenzel.dk: could not connect to host
freqlabs.com: could not connect to host
freqlabs.com: did not receive HSTS header
freshfind.xyz: could not connect to host
freshlymind.com: did not receive HSTS header
fretscha.com: could not connect to host
@ -1658,7 +1652,6 @@ furiffic.com: did not receive HSTS header
furnation.com: could not connect to host
furry.be: max-age too low: 86400
fusedrops.com: could not connect to host
fushee.com: could not connect to host
fusionmate.com: could not connect to host
futbol11.com: did not receive HSTS header
futurenda.com: could not connect to host
@ -1678,7 +1671,6 @@ g5led.nl: could not connect to host
gabber.scot: could not connect to host
gaelleetarnaud.com: did not receive HSTS header
gafachi.com: could not connect to host
gaiserik.com: could not connect to host
gakkainavi.jp: did not receive HSTS header
gakkainavi4.com: could not connect to host
gakkainavi4.net: did not receive HSTS header
@ -1715,7 +1707,7 @@ geekcast.co.uk: did not receive HSTS header
geeky.software: could not connect to host
geli-graphics.com: did not receive HSTS header
gem-indonesia.net: could not connect to host
gendrin.com: could not connect to host
gensonline.eu: could not connect to host
genuu.com: could not connect to host
genuxation.com: could not connect to host
genyaa.com: could not connect to host
@ -1751,7 +1743,6 @@ getremembrall.com: could not connect to host
getsello.com: could not connect to host
getwashdaddy.com: could not connect to host
gfm.tech: could not connect to host
gfournier.ca: could not connect to host
gfwsb.ml: could not connect to host
ggss.ml: could not connect to host
gh16.com.ar: could not connect to host
@ -1847,6 +1838,7 @@ gresb.com: did not receive HSTS header
gribani.com: could not connect to host
grigalanzsoftware.com: could not connect to host
gripopgriep.net: could not connect to host
groetzner.net: could not connect to host
grossmann.gr: could not connect to host
groups.google.com: did not receive HSTS header (error ignored - included regardless)
grunex.com: did not receive HSTS header
@ -1862,7 +1854,6 @@ gtlfsonlinepay.com: did not receive HSTS header
gtraxapp.com: could not connect to host
gts-schulsoftware.de: did not receive HSTS header
guava.studio: did not receive HSTS header
guge.gq: could not connect to host
gugga.dk: did not receive HSTS header
guilde-vindicta.fr: did not receive HSTS header
gulenet.com: could not connect to host
@ -1870,8 +1861,6 @@ gunnarhafdal.com: did not receive HSTS header
gurom.lv: could not connect to host
gurusupe.com: could not connect to host
guso.gq: could not connect to host
guso.ml: could not connect to host
guso.tech: could not connect to host
gussi.is: did not receive HSTS header
gvt2.com: could not connect to host (error ignored - included regardless)
gvt3.com: could not connect to host (error ignored - included regardless)
@ -1897,6 +1886,7 @@ hackest.org: did not receive HSTS header
hackit.im: could not connect to host
hadzic.co: could not connect to host
haeckdesign.com: did not receive HSTS header
haeckl.eu: could not connect to host
hahayidu.org: could not connect to host
haitschi.com: could not connect to host
haitschi.de: could not connect to host
@ -1907,12 +1897,11 @@ haku.moe: could not connect to host
hakugin.org: could not connect to host
halo.red: could not connect to host
hancc.net: could not connect to host
handiworker.com: could not connect to host
hanfu.la: could not connect to host
hang333.pw: did not receive HSTS header
hanimalis.fr: could not connect to host
hansen.hn: could not connect to host
hao2taiwan.com: max-age too low: 0
hao2taiwan.com: could not connect to host
haoyugao.com: could not connect to host
hapijs.cn: could not connect to host
hapissl.com: could not connect to host
@ -1963,7 +1952,6 @@ hemdal.se: could not connect to host
hencagon.com: could not connect to host
henriknoerr.com: could not connect to host
henry.gg: could not connect to host
hermes-net.de: could not connect to host
herrenfahrt.com: did not receive HSTS header
herzbotschaft.de: did not receive HSTS header
heutger.net: did not receive HSTS header
@ -1985,6 +1973,7 @@ hilnu.tk: could not connect to host
hipercultura.com: did not receive HSTS header
hiphopconvention.nl: could not connect to host
hirake55.com: could not connect to host
historia-arte.com: did not receive HSTS header
hitoy.org: did not receive HSTS header
hittipps.com: did not receive HSTS header
hlyue.com: did not receive HSTS header
@ -2047,6 +2036,7 @@ hydra.ws: could not connect to host
hydronium.cf: could not connect to host
hydronium.ga: could not connect to host
hydronium.me: could not connect to host
hydronium.ml: could not connect to host
hydronium.tk: could not connect to host
hyper69.com: did not receive HSTS header
i-jp.net: could not connect to host
@ -2111,6 +2101,7 @@ immoprotect.ca: did not receive HSTS header
immortals-co.com: did not receive HSTS header
immoverkauf24.at: did not receive HSTS header
immoverkauf24.de: did not receive HSTS header
immunicity.eu: could not connect to host
immunicity.info: could not connect to host
immunicity.press: could not connect to host
immunicity.today: did not receive HSTS header
@ -2119,7 +2110,6 @@ immunicity.works: did not receive HSTS header
immunicity.world: did not receive HSTS header
imolug.org: did not receive HSTS header
imouto.my: max-age too low: 5184000
imouyang.com: did not receive HSTS header
imperialwebsolutions.com: did not receive HSTS header
imu.li: did not receive HSTS header
imusic.dk: did not receive HSTS header
@ -2137,6 +2127,7 @@ infinitusgaming.eu: could not connect to host
inflation.ml: could not connect to host
infogrfx.com: did not receive HSTS header
infosec.rip: could not connect to host
infosoph.org: did not receive HSTS header
infotics.es: did not receive HSTS header
injigo.com: did not receive HSTS header
inkable.com.au: did not receive HSTS header
@ -2160,14 +2151,12 @@ institutoflordelavida.com: could not connect to host
intel.li: could not connect to host
interference.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
interlun.com: could not connect to host
internect.co.za: did not receive HSTS header
internetcasinos.de: could not connect to host
internetcensus.org: could not connect to host
interserved.com: did not receive HSTS header
intex.es: max-age too low: 0
intim-uslugi-kazan.net: could not connect to host
intimtoy.com.ua: could not connect to host
intocities.de: could not connect to host
intranetsec.fr: could not connect to host
intrp.net: did not receive HSTS header
inverselink-user-content.com: could not connect to host
@ -2175,7 +2164,6 @@ inverselink.com: could not connect to host
invictusmc.uk: did not receive HSTS header
invite24.pro: could not connect to host
inwesttitle.com: max-age too low: 0
ioiart.eu: could not connect to host
ionx.co.uk: did not receive HSTS header
iop.intuit.com: max-age too low: 86400
iora.fr: could not connect to host
@ -2203,6 +2191,7 @@ iseek.biz: max-age too low: 0
ishillaryclintoninprisonyet.com: could not connect to host
isitamor.pm: could not connect to host
iskaz.rs: did not receive HSTS header
isntall.us: could not connect to host
isogram.nl: could not connect to host
israkurort.com: did not receive HSTS header
isslshop.com: could not connect to host
@ -2227,7 +2216,6 @@ ivi-fertility.com: max-age too low: 0
ivi.es: max-age too low: 0
ivk.website: could not connect to host
ivo.co.za: could not connect to host
ixec2.tk: could not connect to host
izdiwho.com: could not connect to host
izolight.ch: could not connect to host
izoox.com: did not receive HSTS header
@ -2265,6 +2253,7 @@ janus-engineering.de: did not receive HSTS header
japlex.com: could not connect to host
jaqen.ch: could not connect to host
jardins-utopie.net: could not connect to host
jaredfernandez.com: could not connect to host
jaroslavtrsek.cz: did not receive HSTS header
jarsater.com: could not connect to host
jartza.org: could not connect to host
@ -2327,15 +2316,18 @@ jollausers.de: could not connect to host
jonas-keidel.de: did not receive HSTS header
jonasgroth.se: did not receive HSTS header
jonathan.ir: could not connect to host
jondarby.com: did not receive HSTS header
jonn.me: could not connect to host
joostbovee.nl: did not receive HSTS header
jordanhamilton.me: could not connect to host
joretapo.fr: did not receive HSTS header
jornane.me: could not connect to host
josahrens.me: could not connect to host
joshi.su: could not connect to host
joshstroup.me: could not connect to host
jottit.com: could not connect to host
jpbike.cz: could not connect to host
jpcdi.com: could not connect to host
jrc9.ca: did not receive HSTS header
jrgold.me: could not connect to host
jrmd.io: could not connect to host
@ -2365,6 +2357,7 @@ k-dev.de: could not connect to host
ka-clan.com: could not connect to host
kabinapp.com: could not connect to host
kabuabc.com: did not receive HSTS header
kabus.org: could not connect to host
kadioglumakina.com.tr: did not receive HSTS header
kaela.design: could not connect to host
kahopoon.net: could not connect to host
@ -2374,6 +2367,7 @@ kaneo-gmbh.de: did not receive HSTS header
kaplatz.is: could not connect to host
kapucini.si: max-age too low: 0
karaoketonight.com: could not connect to host
karhm.com: could not connect to host
karhukamera.com: could not connect to host
kasilag.me: did not receive HSTS header
katiaetdavid.fr: could not connect to host
@ -2469,6 +2463,7 @@ krayx.com: could not connect to host
kreavis.com: did not receive HSTS header
kredite.sale: could not connect to host
kriegt.es: did not receive HSTS header
kristikala.nl: could not connect to host
krizevci.info: did not receive HSTS header
kroetenfuchs.de: could not connect to host
kropkait.pl: could not connect to host
@ -2501,7 +2496,7 @@ kz.search.yahoo.com: did not receive HSTS header
kzjnet.com: could not connect to host
l2guru.ru: could not connect to host
labaia.info: could not connect to host
labina.com.tr: did not receive HSTS header
labina.com.tr: could not connect to host
laboiteapc.fr: did not receive HSTS header
labordata.io: did not receive HSTS header
laborie.io: could not connect to host
@ -2542,7 +2537,6 @@ leadership9.com: could not connect to host
leardev.de: did not receive HSTS header
learnfrenchfluently.com: did not receive HSTS header
learningorder.com: could not connect to host
lebal.se: did not receive HSTS header
lechiennoir.net: did not receive HSTS header
ledgerscope.net: could not connect to host
leermotorrijden.nl: max-age too low: 300
@ -2671,7 +2665,7 @@ lt.search.yahoo.com: did not receive HSTS header
ltbytes.com: could not connect to host
lu.search.yahoo.com: did not receive HSTS header
lucaterzini.com: could not connect to host
ludwiggrill.de: could not connect to host
ludwiggrill.de: did not receive HSTS header
lufthansaexperts.com: max-age too low: 2592000
luine.xyz: did not receive HSTS header
luis-checa.com: could not connect to host
@ -2746,7 +2740,6 @@ mansion-note.com: did not receive HSTS header
maomaofuli.vip: could not connect to host
maple5.com: did not receive HSTS header
marchagen.nl: did not receive HSTS header
marcoececilia.it: could not connect to host
marcofinke.de: could not connect to host
marcontrol.com: did not receive HSTS header
marcosteixeira.tk: could not connect to host
@ -3040,7 +3033,6 @@ mypension.ca: could not connect to host
myphonebox.de: could not connect to host
mysecretrewards.com: did not receive HSTS header
mystery-science-theater-3000.de: did not receive HSTS header
mythslegendscollection.com: did not receive HSTS header
mytweeps.com: could not connect to host
myvirtualserver.com: max-age too low: 2592000
myzone.com: did not receive HSTS header
@ -3090,6 +3082,7 @@ near.st: did not receive HSTS header
nedzad.me: could not connect to host
neels.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
neftaly.com: did not receive HSTS header
negai.moe: could not connect to host
neilgreen.net: did not receive HSTS header
neko-life.com: did not receive HSTS header
neko-system.com: did not receive HSTS header
@ -3116,12 +3109,12 @@ neuronfactor.com: [Exception... "Component returned failure code: 0x80004005 (NS
neutralox.com: did not receive HSTS header
never-afk.de: did not receive HSTS header
neveta.com: could not connect to host
new.travel.pl: did not receive HSTS header
newcitygas.ca: max-age too low: 0
newgenerationplus.org: could not connect to host
newhdmovies.io: did not receive HSTS header
newkaliningrad.ru: did not receive HSTS header
newlooknow.com: did not receive HSTS header
newmelalife.com: did not receive HSTS header
newportpropertygroup.com: could not connect to host
newtonwarp.com: could not connect to host
nextcloud.org: could not connect to host
@ -3244,12 +3237,11 @@ ochaken.cf: could not connect to host
odin.xxx: did not receive HSTS header
odinoffice.no: did not receive HSTS header
oe8.bet: could not connect to host
oeko-bundesfreiwilligendienst-sh.de: did not receive HSTS header
oeko-bundesfreiwilligendienst.de: did not receive HSTS header
ofcourselanguages.com: could not connect to host
offenedialoge.de: max-age too low: 2592000
offshore-firma.org: could not connect to host
ogogoshop.com: could not connect to host
oguya.ch: could not connect to host
oishioffice.com: did not receive HSTS header
okane.love: could not connect to host
okok-rent.com: could not connect to host
@ -3260,6 +3252,7 @@ oldoakflorist.com: could not connect to host
oliverdunk.com: did not receive HSTS header
ollehbizev.co.kr: could not connect to host
ollie.io: did not receive HSTS header
ollies.cloud: could not connect to host
omacostudio.com: could not connect to host
omgaanmetidealen.com: could not connect to host
ominto.com: max-age too low: 0
@ -3361,7 +3354,6 @@ owncloud.help: could not connect to host
ownmovies.fr: could not connect to host
oxygenabsorbers.com: did not receive HSTS header
oxynux.fr: could not connect to host
oxynux.xyz: could not connect to host
p.linode.com: could not connect to host
p8r.de: could not connect to host
pa.search.yahoo.com: did not receive HSTS header
@ -3458,7 +3450,7 @@ pet-nsk.ru: could not connect to host
petchart.net: could not connect to host
petit.site: could not connect to host
petplum.com: did not receive HSTS header
petrachuk.ru: did not receive HSTS header
petrachuk.ru: could not connect to host
petravdbos.nl: did not receive HSTS header
petrolplus.ru: did not receive HSTS header
petrovsky.pro: could not connect to host
@ -3466,7 +3458,6 @@ petsittersservices.com: could not connect to host
pettsy.com: could not connect to host
pewboards.com: could not connect to host
pexieapp.com: did not receive HSTS header
peytonfarrar.com: did not receive HSTS header
pflege.de: did not receive HSTS header
pgpm.io: could not connect to host
pharmgkb.org: could not connect to host
@ -3476,7 +3467,6 @@ phoebe.co.nz: did not receive HSTS header
phonenumberinfo.co.uk: could not connect to host
phongmay24h.com: could not connect to host
photoblogverona.com: could not connect to host
phoxmeh.com: could not connect to host
php-bach.org: could not connect to host
phpfashion.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
phryanjr.com: could not connect to host
@ -3516,7 +3506,7 @@ planpharmacy.com: could not connect to host
platform.lookout.com: could not connect to host
play.google.com: did not receive HSTS header (error ignored - included regardless)
playflick.com: did not receive HSTS header
playkh.com: did not receive HSTS header
playkh.com: could not connect to host
playmaker.io: could not connect to host
playmyplay.com: did not receive HSTS header
playnation.io: could not connect to host
@ -3551,12 +3541,12 @@ polypho.nyc: could not connect to host
pompompoes.com: could not connect to host
pontualcomp.com: max-age too low: 2592000
poolsandstuff.com: did not receive HSTS header
poolvilla-margarita.net: could not connect to host
poon.tech: could not connect to host
porno-gif.ru: did not receive HSTS header
portalplatform.net: did not receive HSTS header
poshpak.com: max-age too low: 86400
postcodewise.co.uk: did not receive HSTS header
posterspy.com: did not receive HSTS header
postscheduler.org: could not connect to host
posylka.de: did not receive HSTS header
potatoheads.net: could not connect to host
@ -3577,6 +3567,7 @@ prefontaine.name: could not connect to host
prego-shop.de: did not receive HSTS header
preissler.co.uk: could not connect to host
prelist.org: did not receive HSTS header
prescriptiondrugs.com: could not connect to host
pressfreedomfoundation.org: did not receive HSTS header
pretzlaff.info: did not receive HSTS header
preworkout.me: could not connect to host
@ -3592,6 +3583,7 @@ pro-zone.com: could not connect to host
prodpad.com: did not receive HSTS header
professionalboundaries.com: did not receive HSTS header
profi-durchgangsmelder.de: did not receive HSTS header
profpay.com: could not connect to host
profundr.com: could not connect to host
progblog.net: could not connect to host
progg.no: could not connect to host
@ -3699,6 +3691,7 @@ rbhighinc.org: could not connect to host
rc-rp.com: did not receive HSTS header
rc4.io: did not receive HSTS header
rcafox.com: could not connect to host
rcorporation.be: did not receive HSTS header
rcpcbd.com: did not receive HSTS header
rdns.im: did not receive HSTS header
re-customer.net: did not receive HSTS header
@ -3759,6 +3752,7 @@ restchart.com: did not receive HSTS header
retrotracks.net: max-age too low: 0
revealdata.com: did not receive HSTS header
revello.org: did not receive HSTS header
revensoftware.com: could not connect to host
reverie.pw: could not connect to host
reviews.anime.my: max-age too low: 5184000
revtut.net: did not receive HSTS header
@ -3806,6 +3800,7 @@ rodosto.com: could not connect to host
roeper.party: could not connect to host
roesemann.email: could not connect to host
roguelikecenter.fr: did not receive HSTS header
roguesignal.net: did not receive HSTS header
rolemaster.net: did not receive HSTS header
romans-place.me.uk: did not receive HSTS header
romulusapp.com: could not connect to host
@ -3981,7 +3976,6 @@ semenkovich.com: did not receive HSTS header
semps-servers.de: could not connect to host
semps.de: did not receive HSTS header
senedirect.com: did not receive HSTS header
sensepixel.com: could not connect to host
sensiblemn.org: could not connect to host
sensibus.com: did not receive HSTS header
seo.consulting: did not receive HSTS header
@ -3998,6 +3992,7 @@ servergno.me: did not receive HSTS header
servermonkey.nl: could not connect to host
seryo.moe: could not connect to host
seryo.net: could not connect to host
sesha.co.za: could not connect to host
sethcaplan.com: could not connect to host
setphaserstostun.org: could not connect to host
setuid.de: could not connect to host
@ -4063,7 +4058,6 @@ simbast.com: could not connect to host
simod.org: could not connect to host
simon.butcher.name: max-age too low: 2629743
simongong.net: did not receive HSTS header
simonhirscher.de: could not connect to host
simpan.id: could not connect to host
simpleai.net: max-age too low: 600
simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
@ -4107,7 +4101,6 @@ slightfuture.click: could not connect to host
slix.io: could not connect to host
slope.haus: could not connect to host
slovakiana.sk: did not receive HSTS header
slowfood.es: could not connect to host
sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
slycurity.de: could not connect to host
smart-mirror.de: did not receive HSTS header
@ -4150,6 +4143,7 @@ socialdevelop.biz: max-age too low: 604800
socialhams.net: did not receive HSTS header
socialhead.io: could not connect to host
socialspirit.com.br: did not receive HSTS header
societyhilldance.com: did not receive HSTS header
sockeye.cc: could not connect to host
socomponents.co.uk: did not receive HSTS header
sodacore.com: could not connect to host
@ -4163,12 +4157,13 @@ solsystems.ru: could not connect to host
someshit.xyz: could not connect to host
somethingnew.xyz: could not connect to host
sonic.network: did not receive HSTS header
sonicrainboom.rocks: could not connect to host
sonicrainboom.rocks: did not receive HSTS header
soobi.org: did not receive HSTS header
soondy.com: did not receive HSTS header
sotor.de: did not receive HSTS header
soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
soulfulglamour.uk: could not connect to host
soundeo.net: did not receive HSTS header
sourcelair.com: did not receive HSTS header
southgale.condos: could not connect to host
southside-crew.club: could not connect to host
@ -4206,6 +4201,7 @@ spilsbury.io: could not connect to host
spititout.it: could not connect to host
spittersberger.recipes: did not receive HSTS header
sponsortobias.com: did not receive HSTS header
sportchirp-internal.azurewebsites.net: did not receive HSTS header
sportwette.eu: did not receive HSTS header
spot-events.com: could not connect to host
spotifyripper.tk: could not connect to host
@ -4214,6 +4210,7 @@ spr.id.au: did not receive HSTS header
spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
sproutconnections.com: did not receive HSTS header
sprybear.com: did not receive HSTS header
squaddraft.com: could not connect to host
square.gs: could not connect to host
squatldf.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
sqzryang.com: did not receive HSTS header
@ -4226,17 +4223,17 @@ ssl.rip: could not connect to host
ssmato.me: could not connect to host
ssnc.org: max-age too low: 300
sss3s.com: could not connect to host
sstewartgallus.com: could not connect to host
ssworld.ga: could not connect to host
stabletoken.com: could not connect to host
stadjerspasonline.nl: could not connect to host
staffjoy.com: did not receive HSTS header
stahl.xyz: could not connect to host
stalschermer.nl: could not connect to host
standardssuck.org: did not receive HSTS header
standingmist.com: did not receive HSTS header
stargatepartners.com: did not receive HSTS header
starmusic.ga: did not receive HSTS header
starsam80.net: could not connect to host
starpeak.org: could not connect to host
starttraffic.com: did not receive HSTS header
startuponcloud.com: max-age too low: 2678400
startuppeople.co.uk: did not receive HSTS header
@ -4341,7 +4338,7 @@ sushifrick.de: could not connect to host
suzukikenichi.com: did not receive HSTS header
sv.search.yahoo.com: did not receive HSTS header
svarovani.tk: could not connect to host
svatba-frantovi.cz: did not receive HSTS header
svatba-frantovi.cz: could not connect to host
svenluijten.com: did not receive HSTS header
sweetstreats.ca: could not connect to host
swimbee.nl: did not receive HSTS header
@ -4410,7 +4407,7 @@ teachforcanada.ca: did not receive HSTS header
team-teasers.com: could not connect to host
teamblueridge.org: could not connect to host
teamsocial.co: did not receive HSTS header
teamx-gaming.de: could not connect to host
teamtouring.net: could not connect to host
teamzeus.cz: could not connect to host
tech55i.com: did not receive HSTS header
techassist.io: did not receive HSTS header
@ -4419,6 +4416,7 @@ techhipster.net: could not connect to host
techhub.ml: could not connect to host
techllage.com: could not connect to host
techloaner.com: could not connect to host
techmasters.andover.edu: could not connect to host
techmatehq.com: could not connect to host
technogroup.cz: did not receive HSTS header
technosavvyport.com: did not receive HSTS header
@ -4438,7 +4436,6 @@ tensei-slime.com: did not receive HSTS header
tensionup.com: could not connect to host
tentins.com: could not connect to host
teos.online: could not connect to host
tepid.org: could not connect to host
teriiphotography.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
terra.by: did not receive HSTS header
terrax.berlin: could not connect to host
@ -4454,6 +4451,7 @@ textracer.dk: could not connect to host
tezcam.tk: could not connect to host
tf2stadium.com: did not receive HSTS header
tfcoms-sp-tracker-client.azurewebsites.net: could not connect to host
tffans.com: could not connect to host
tfl.lu: did not receive HSTS header
tgr.re: could not connect to host
thagki9.com: could not connect to host
@ -4621,6 +4619,7 @@ translate.googleapis.com: did not receive HSTS header (error ignored - included
transportal.sk: did not receive HSTS header
travelinsurance.co.nz: did not receive HSTS header
treeby.net: could not connect to host
tremoureux.fr: could not connect to host
trendberry.ru: could not connect to host
trinityaffirmations.com: max-age too low: 0
trinitycore.org: max-age too low: 2592000
@ -4630,7 +4629,7 @@ trollme.me: could not connect to host
trondelan.no: did not receive HSTS header
trunkjunk.co: could not connect to host
trusitio.com: did not receive HSTS header
trusteecar.com: did not receive HSTS header
trusteecar.com: could not connect to host
trustmeimfancy.com: could not connect to host
trybind.com: could not connect to host
tryoneday.co: did not receive HSTS header
@ -4699,6 +4698,7 @@ ukrgadget.com: could not connect to host
ulabox.cat: did not receive HSTS header
ulabox.es: did not receive HSTS header
ulmo.dk: could not connect to host
ultimate-garcinia-plus.com: could not connect to host
ultros.io: did not receive HSTS header
umidev.com: did not receive HSTS header
umie.cc: did not receive HSTS header
@ -4741,6 +4741,7 @@ uprotect.it: could not connect to host
upstats.eu: could not connect to host
ur-lauber.de: did not receive HSTS header
urandom.eu.org: did not receive HSTS header
urbanstylestaging.com: did not receive HSTS header
urphp.com: could not connect to host
us-immigration.com: did not receive HSTS header
usaa.com: did not receive HSTS header
@ -4798,7 +4799,6 @@ venixplays-stream.ml: could not connect to host
verifikatorindonesia.com: could not connect to host
vermontcareergateway.org: could not connect to host
versia.ru: did not receive HSTS header
verspai.de: could not connect to host
veryhax.de: could not connect to host
vetmgmt.com: could not connect to host
vfree.org: could not connect to host
@ -4827,7 +4827,6 @@ vio.no: did not receive HSTS header
viperdns.com: could not connect to host
vipi.es: could not connect to host
vipmusic.ga: could not connect to host
vipnettikasinoklubi.com: did not receive HSTS header
virginiacrimeanalysisnetwork.org: did not receive HSTS header
virtualperez.com: could not connect to host
visiontree-beta.eu: could not connect to host
@ -4884,7 +4883,7 @@ wapjt.cn: could not connect to host
warandpeace.xyz: could not connect to host
warehost.de: did not receive HSTS header
warhistoryonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
warlions.info: did not receive HSTS header
warlions.info: could not connect to host
warped.com: did not receive HSTS header
warsentech.com: did not receive HSTS header
washingtonviews.com: did not receive HSTS header
@ -5001,7 +5000,6 @@ wodice.com: could not connect to host
wohnungsbau-ludwigsburg.de: did not receive HSTS header
woima.fi: max-age too low: 604800
wolfesden.com: could not connect to host
womb.city: could not connect to host
womosale.de: could not connect to host
wonderfall.xyz: could not connect to host
wonderhost.info: could not connect to host
@ -5015,7 +5013,6 @@ workpermit.com.vn: did not receive HSTS header
workwithgo.com: could not connect to host
worldsbeststory.com: did not receive HSTS header
wowapi.org: could not connect to host
wpcarer.pro: could not connect to host
wpfortify.com: did not receive HSTS header
wphostingspot.com: did not receive HSTS header
wpmetadatastandardsproject.org: could not connect to host
@ -5049,7 +5046,7 @@ www.surfeasy.com: did not receive HSTS header
www.zenpayroll.com: did not receive HSTS header
www3.info: did not receive HSTS header
wxukang.cn: could not connect to host
wyzphoto.nl: could not connect to host
wyzphoto.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
x2w.io: could not connect to host
x3led.com: could not connect to host
x509.pub: could not connect to host
@ -5062,7 +5059,7 @@ xbt.co: could not connect to host
xcoop.me: could not connect to host
xellos.ga: could not connect to host
xellos.ml: could not connect to host
xendo.net: could not connect to host
xendo.net: did not receive HSTS header
xenesisziarovky.sk: could not connect to host
xett.com: did not receive HSTS header
xf-liam.com: did not receive HSTS header
@ -5071,7 +5068,6 @@ xiaody.me: could not connect to host
xiaolvmu.me: could not connect to host
xiaoxiao.im: could not connect to host
ximens.me: did not receive HSTS header
xing.ml: could not connect to host
xisa.it: could not connect to host
xiyu.moe: could not connect to host
xmppwocky.net: could not connect to host
@ -5087,7 +5083,6 @@ xn--80aaihqncaejjobbu6v.xn--p1ai: max-age too low: 10000
xn--9pr52k0p5a.com: did not receive HSTS header
xn--datenrettung-mnchen-jbc.com: did not receive HSTS header
xn--dmonenjger-q5ag.net: could not connect to host
xn--knstler-n2a.tips: could not connect to host
xn--lgb3a8bcpn.cf: could not connect to host
xn--lgb3a8bcpn.ga: could not connect to host
xn--lgb3a8bcpn.gq: could not connect to host
@ -5113,7 +5108,7 @@ xuwei.de: could not connect to host
xuyh0120.win: did not receive HSTS header
xxbase.com: could not connect to host
y-o-w.com: did not receive HSTS header
y-s.pw: max-age too low: 0
y-s.pw: could not connect to host
yabrt.cn: could not connect to host
yagi2.com: could not connect to host
yalook.com: did not receive HSTS header
@ -5156,7 +5151,6 @@ yu.gg: did not receive HSTS header
yuan.ga: did not receive HSTS header
yuhen.ru: did not receive HSTS header
yuko.moe: could not connect to host
yunpan.blue: could not connect to host
yunzhu.li: did not receive HSTS header
yunzhu.org: could not connect to host
yutabon.com: could not connect to host
@ -5189,6 +5183,7 @@ zerudi.com: did not receive HSTS header
zett4.me: could not connect to host
zeytin.pro: could not connect to host
zh.search.yahoo.com: did not receive HSTS header
zhangsir.net: could not connect to host
zhaojin97.cn: did not receive HSTS header
zhendingresources.com: max-age too low: 0
zinc-x.com: did not receive HSTS header
@ -5208,7 +5203,6 @@ zoo24.de: did not receive HSTS header
zoomingin.net: max-age too low: 5184000
zoommailing.com: did not receive HSTS header
zorasvobodova.cz: did not receive HSTS header
zorgclustertool.nl: could not connect to host
zortium.report: could not connect to host
zoznamrealit.sk: did not receive HSTS header
zqhong.com: could not connect to host

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

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

@ -999,7 +999,23 @@ public:
TrustLevel certTrustLevel;
};
// trustDomain deliberately shadows the inherited field so that it isn't used
// by accident. See bug 1339921.
// Unfortunately GCC can't parse __has_warning("-Wshadow-field") even if it's
// the latter part of a conjunction that would evaluate to false, so we have to
// wrap it in a separate preprocessor conditional rather than using &&.
#if defined(__clang__)
#if __has_warning("-Wshadow-field")
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-field"
#endif
#endif
TrustDomain trustDomain;
#if defined(__clang__)
#if __has_warning("-Wshadow-field")
#pragma clang diagnostic pop
#endif
#endif
ByteString signerCertDER;
ByteString responseString;
Input response; // references data in responseString

1
servo/Cargo.lock сгенерированный
Просмотреть файл

@ -201,6 +201,7 @@ dependencies = [
"bluetooth_traits 0.0.1",
"device 0.0.1 (git+https://github.com/servo/devices)",
"ipc-channel 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"servo_config 0.0.1",
"servo_rand 0.0.1",
"tinyfiledialogs 2.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",

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

@ -14,6 +14,7 @@ bitflags = "0.7"
bluetooth_traits = {path = "../bluetooth_traits"}
device = {git = "https://github.com/servo/devices", features = ["bluetooth-test"]}
ipc-channel = "0.7"
servo_config = {path = "../config"}
servo_rand = {path = "../rand"}
uuid = {version = "0.4", features = ["v4"]}

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

@ -7,6 +7,7 @@ extern crate bitflags;
extern crate bluetooth_traits;
extern crate device;
extern crate ipc_channel;
extern crate servo_config;
extern crate servo_rand;
#[cfg(target_os = "linux")]
extern crate tinyfiledialogs;
@ -22,6 +23,7 @@ use bluetooth_traits::scanfilter::{BluetoothScanfilter, BluetoothScanfilterSeque
use device::bluetooth::{BluetoothAdapter, BluetoothDevice, BluetoothGATTCharacteristic};
use device::bluetooth::{BluetoothGATTDescriptor, BluetoothGATTService};
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use servo_config::opts;
use servo_rand::Rng;
use std::borrow::ToOwned;
use std::collections::{HashMap, HashSet};
@ -363,7 +365,7 @@ impl BluetoothManager {
#[cfg(target_os = "linux")]
fn select_device(&mut self, devices: Vec<BluetoothDevice>, adapter: &BluetoothAdapter) -> Option<String> {
if is_mock_adapter(adapter) {
if is_mock_adapter(adapter) || opts::get().headless {
for device in devices {
if let Ok(address) = device.get_address() {
return Some(address);

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

@ -7,6 +7,7 @@ use mime_guess::guess_mime_type_opt;
use net_traits::blob_url_store::{BlobBuf, BlobURLStoreError};
use net_traits::filemanager_thread::{FileManagerResult, FileManagerThreadMsg, FileOrigin, FilterPattern};
use net_traits::filemanager_thread::{FileManagerThreadError, ReadFileProgress, RelativePos, SelectedFile};
use servo_config::opts;
use servo_config::prefs::PREFS;
use std::collections::HashMap;
use std::fs::File;
@ -35,6 +36,10 @@ pub struct TFDProvider;
impl UIProvider for TFDProvider {
#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))]
fn open_file_dialog(&self, path: &str, patterns: Vec<FilterPattern>) -> Option<String> {
if opts::get().headless {
return None;
}
let mut filter = vec![];
for p in patterns {
let s = "*.".to_string() + &p.0;
@ -50,6 +55,10 @@ impl UIProvider for TFDProvider {
#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))]
fn open_file_dialog_multi(&self, path: &str, patterns: Vec<FilterPattern>) -> Option<Vec<String>> {
if opts::get().headless {
return None;
}
let mut filter = vec![];
for p in patterns {
let s = "*.".to_string() + &p.0;

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

@ -17,6 +17,7 @@ use dom_struct::dom_struct;
use js::conversions::ConversionResult;
use js::jsapi::{JSContext, JSObject};
use js::jsval::{ObjectValue, UndefinedValue};
use servo_config::opts;
use servo_config::prefs::PREFS;
use std::rc::Rc;
#[cfg(target_os = "linux")]
@ -308,6 +309,9 @@ pub fn get_descriptor_permission_state(permission_name: PermissionName,
#[cfg(target_os = "linux")]
fn prompt_user(message: &str) -> PermissionState {
if opts::get().headless {
return PermissionState::Denied;
}
match tinyfiledialogs::message_box_yes_no(DIALOG_TITLE,
message,
MessageBoxIcon::Question,

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

@ -379,7 +379,9 @@ impl Window {
#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))]
fn display_alert_dialog(message: &str) {
tinyfiledialogs::message_box_ok("Alert!", message, MessageBoxIcon::Warning);
if !opts::get().headless {
tinyfiledialogs::message_box_ok("Alert!", message, MessageBoxIcon::Warning);
}
}
#[cfg(not(any(target_os = "macos", target_os = "linux", target_os = "windows")))]

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

@ -37,7 +37,13 @@ bitflags! {
const IN_TARGET_STATE = 0x100,
#[doc = "https://fullscreen.spec.whatwg.org/#%3Afullscreen-pseudo-class"]
const IN_FULLSCREEN_STATE = 0x200,
#[doc = "https://html.spec.whatwg.org/multipage/#selector-valid"]
const IN_VALID_STATE = 0x400,
#[doc = "https://html.spec.whatwg.org/multipage/#selector-invalid"]
const IN_INVALID_STATE = 0x800,
#[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-ui-valid"]
const IN_MOZ_UI_VALID_STATE = 0x1000,
#[doc = "https://html.spec.whatwg.org/multipage/#selector-read-write"]
const IN_READ_WRITE_STATE = 0x400,
const IN_READ_WRITE_STATE = 0x2000,
}
}

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

@ -44,6 +44,11 @@ macro_rules! apply_non_ts_list {
("disabled", Disabled, disabled, IN_DISABLED_STATE, _),
("checked", Checked, checked, IN_CHECKED_STATE, _),
("indeterminate", Indeterminate, indeterminate, IN_INDETERMINATE_STATE, _),
("placeholder-shown", PlaceholderShown, placeholderShown, IN_PLACEHOLDER_SHOWN_STATE, _),
("target", Target, target, IN_TARGET_STATE, _),
("valid", Valid, valid, IN_VALID_STATE, _),
("invalid", Invalid, invalid, IN_INVALID_STATE, _),
("-moz-ui-valid", MozUIValid, mozUIValid, IN_MOZ_UI_VALID_STATE, _),
("read-write", ReadWrite, _, IN_READ_WRITE_STATE, _),
("read-only", ReadOnly, _, IN_READ_WRITE_STATE, _),

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

@ -651,7 +651,12 @@ impl<'le> ::selectors::Element for GeckoElement<'le> {
NonTSPseudoClass::Checked |
NonTSPseudoClass::ReadWrite |
NonTSPseudoClass::Fullscreen |
NonTSPseudoClass::Indeterminate => {
NonTSPseudoClass::Indeterminate |
NonTSPseudoClass::PlaceholderShown |
NonTSPseudoClass::Target |
NonTSPseudoClass::Valid |
NonTSPseudoClass::Invalid |
NonTSPseudoClass::MozUIValid => {
self.get_state().contains(pseudo_class.state_flag())
},
NonTSPseudoClass::ReadOnly => {

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

@ -777,7 +777,8 @@ ${helpers.single_keyword("overflow-x", "visible hidden scroll auto",
spec="https://drafts.csswg.org/css-transitions/#propdef-transition-delay">
pub use properties::longhands::transition_duration::single_value::SpecifiedValue;
pub use properties::longhands::transition_duration::single_value::computed_value;
pub use properties::longhands::transition_duration::single_value::{get_initial_value, parse};
pub use properties::longhands::transition_duration::single_value::{get_initial_value, get_initial_specified_value};
pub use properties::longhands::transition_duration::single_value::parse;
</%helpers:vector_longhand>
<%helpers:vector_longhand name="animation-name"

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

@ -54,20 +54,22 @@ macro_rules! try_parse_one {
transition-delay"
spec="https://drafts.csswg.org/css-transitions/#propdef-transition">
use parser::Parse;
use properties::longhands::{transition_delay, transition_duration, transition_property};
use properties::longhands::{transition_timing_function};
% for prop in "delay duration property timing_function".split():
use properties::longhands::transition_${prop};
% endfor
pub fn parse_value(context: &ParserContext, input: &mut Parser) -> Result<Longhands, ()> {
struct SingleTransition {
transition_property: transition_property::SingleSpecifiedValue,
transition_duration: transition_duration::SingleSpecifiedValue,
transition_timing_function: transition_timing_function::SingleSpecifiedValue,
transition_delay: transition_delay::SingleSpecifiedValue,
% for prop in "property duration timing_function delay".split():
transition_${prop}: transition_${prop}::SingleSpecifiedValue,
% endfor
}
fn parse_one_transition(context: &ParserContext, input: &mut Parser) -> Result<SingleTransition,()> {
let (mut property, mut duration) = (None, None);
let (mut timing_function, mut delay) = (None, None);
% for prop in "property duration timing_function delay".split():
let mut ${prop} = None;
% endfor
loop {
try_parse_one!(input, property, transition_property);
try_parse_one!(context, input, duration, transition_duration);
@ -80,38 +82,41 @@ macro_rules! try_parse_one {
if let Some(property) = property {
Ok(SingleTransition {
transition_property: property,
transition_duration:
duration.unwrap_or_else(transition_duration::single_value::get_initial_value),
transition_timing_function:
timing_function.unwrap_or_else(transition_timing_function::single_value
% for prop in "duration timing_function delay".split():
transition_${prop}: ${prop}.unwrap_or_else(transition_${prop}::single_value
::get_initial_specified_value),
transition_delay:
delay.unwrap_or_else(transition_delay::single_value::get_initial_value),
% endfor
})
} else {
Err(())
}
}
let (mut properties, mut durations) = (Vec::new(), Vec::new());
let (mut timing_functions, mut delays) = (Vec::new(), Vec::new());
% for prop in "property duration timing_function delay".split():
let mut ${prop}s = Vec::new();
% endfor
if input.try(|input| input.expect_ident_matching("none")).is_err() {
let results = try!(input.parse_comma_separated(|i| parse_one_transition(context, i)));
for result in results {
properties.push(result.transition_property);
durations.push(result.transition_duration);
timing_functions.push(result.transition_timing_function);
delays.push(result.transition_delay);
% for prop in "property duration timing_function delay".split():
${prop}s.push(result.transition_${prop});
% endfor
}
} else {
// `transition: none` is a valid syntax, and we keep transition_property empty because |none| is not
// a valid TransitionProperty.
// durations, delays, and timing_functions are not allowed as empty, so before we convert them into
// longhand properties, we need to put initial values for none transition.
% for prop in "duration timing_function delay".split():
${prop}s.push(transition_${prop}::single_value::get_initial_specified_value());
% endfor
}
Ok(Longhands {
transition_property: transition_property::SpecifiedValue(properties),
transition_duration: transition_duration::SpecifiedValue(durations),
transition_timing_function:
transition_timing_function::SpecifiedValue(timing_functions),
transition_delay: transition_delay::SpecifiedValue(delays),
% for prop in "property duration timing_function delay".split():
transition_${prop}: transition_${prop}::SpecifiedValue(${prop}s),
% endfor
})
}

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

@ -190,7 +190,7 @@ using simple parameterized values, as follows:
``{"relative-datestamp": "certain number of seconds/hours/days/years"}``
Objects of this form will be replaced with an offset from the current time
just before the ``queue.createTask`` call is made. For example, an
artifact expiration might be specified as ``{"relative-timestamp": "1
artifact expiration might be specified as ``{"relative-datestamp": "1
year"}``.
``{"task-reference": "string containing <dep-name>"}``

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

@ -57,7 +57,7 @@ def derive_misc_task(task, purpose, image, taskgraph, label_to_taskid):
'provisionerId': 'aws-provisioner-v1',
'workerType': 'gecko-misc',
'dependencies': [task.task_id, image_taskid],
'created': {'relative-timestamp': '0 seconds'},
'created': {'relative-datestamp': '0 seconds'},
'deadline': task.task['deadline'],
# no point existing past the parent task's deadline
'expires': task.task['deadline'],

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

@ -698,11 +698,11 @@ action.Action = class {
item.origin = action.PointerOrigin.get(actionItem.origin);
item.x = actionItem.x;
if (typeof item.x != "undefined") {
assert.positiveInteger(item.x, error.pprint`Expected 'x' (${item.x}) to be >= 0`);
assert.integer(item.x, error.pprint`Expected 'x' (${item.x}) to be an Integer`);
}
item.y = actionItem.y;
if (typeof item.y != "undefined") {
assert.positiveInteger(item.y, error.pprint`Expected 'y' (${item.y}) to be >= 0`);
assert.integer(item.y, error.pprint`Expected 'y' (${item.y}) to be an Integer`);
}
break;
@ -1333,8 +1333,8 @@ function capitalize(str) {
}
function inViewPort(x, y, win) {
assert.number(x);
assert.number(y);
assert.number(x, `Expected x to be finite number`);
assert.number(y, `Expected y to be finite number`);
// Viewport includes scrollbars if rendered.
return !(x < 0 || y < 0 || x > win.innerWidth || y > win.innerHeight);
}

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

@ -79,11 +79,13 @@ add_test(function test_validateActionDurationAndCoordinates() {
check("pointer", "pointerMove");
}
actionItem.duration = 5000;
for (let d of [-1, "a"]) {
for (let name of ["x", "y"]) {
actionItem[name] = d;
check("pointer", "pointerMove", `${name}: ${actionItem[name]}`);
}
for (let name of ["x", "y"]) {
actionItem[name] = "a";
actionItem.type = "pointerMove";
actionSequence.type = "pointer";
checkErrors(/Expected '.*' \(.*\) to be an Integer/,
action.Action.fromJson, [actionSequence, actionItem],
`duration: ${actionItem.duration}, subtype: pointerMove`);
}
run_next_test();
});
@ -93,6 +95,7 @@ add_test(function test_processPointerMoveActionOriginValidation() {
let actionItem = {duration: 5000, type: "pointerMove"};
for (let d of [-1, {a: "blah"}, []]) {
actionItem.origin = d;
checkErrors(/Expected \'origin\' to be a string or a web element reference/,
action.Action.fromJson,
[actionSequence, actionItem],

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

@ -6,12 +6,7 @@
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
function whenBrowserLoaded(browser, callback) {
browser.addEventListener("load", function onLoad(event) {
if (event.target == browser.contentDocument) {
browser.removeEventListener("load", onLoad, true);
executeSoon(callback);
}
}, true);
return BrowserTestUtils.browserLoaded(browser).then(callback);
}
function waitForOnBeforeUnloadDialog(browser, callback) {

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

@ -2148,15 +2148,6 @@
"releaseChannelCollection": "opt-out",
"description": "The lifetime of accepted HTTPS server certificates, in weeks, up to 2 years. Bucket 105 is all end-entity HTTPS server certificates with a lifetime > 2 years."
},
"KEYGEN_GENERATED_KEY_TYPE": {
"expires_in_version": "55",
"alert_emails": ["seceng-telemetry@mozilla.com"],
"kind": "count",
"keyed": true,
"releaseChannelCollection": "opt-out",
"bug_numbers": [1191414,1284945],
"description": "The number of times we generate a key via keygen, keyed on algorithm and keysize. Keys include RSA with key size (512, 1024, 2048, possibly others), secp384r1, secp256r1, and 'other_ec'."
},
"WEBSOCKETS_HANDSHAKE_TYPE": {
"expires_in_version": "never",
"kind": "enumerated",

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

@ -174,7 +174,7 @@ function removeAllChildNodes(node) {
* Pad a number to two digits with leading "0".
*/
function padToTwoDigits(n) {
return (n > 9) ? n : "0" + n;
return new String(n).padStart(2, "0");
}
/**

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

@ -27,7 +27,7 @@ add_task(function* test_hotkey_event_propagation() {
for (let key of HOTKEYS) {
is(findbar.hidden, true, "Findbar is hidden now.");
gBrowser.selectedTab = tab;
yield promiseFocus();
yield SimpleTest.promiseFocus(gBrowser.selectedBrowser);
yield BrowserTestUtils.sendChar(key, browser);
is(findbar.hidden, false, "Findbar should not be hidden.");
yield closeFindbarAndWait(findbar);
@ -49,7 +49,7 @@ add_task(function* test_hotkey_event_propagation() {
for (let key of HOTKEYS) {
is(findbar.hidden, true, "Findbar is hidden now.");
gBrowser.selectedTab = tab;
yield promiseFocus();
yield SimpleTest.promiseFocus(gBrowser.selectedBrowser);
yield BrowserTestUtils.sendChar(key, browser);
is(findbar.hidden, false, "Findbar should not be hidden.");
yield closeFindbarAndWait(findbar);
@ -237,17 +237,6 @@ function promiseFindFinished(searchText, highlightOn) {
return deferred.promise;
}
/**
* A promise-like wrapper for the waitForFocus helper.
*/
function promiseFocus() {
return new Promise((resolve) => {
waitForFocus(function() {
resolve();
}, content);
});
}
function promiseRemotenessChange(tab, shouldBeRemote) {
return new Promise((resolve) => {
let browser = gBrowser.getBrowserForTab(tab);

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

@ -105,7 +105,7 @@ label.findbar-find-fast:-moz-lwtheme,
.findbar-find-next:-moz-focusring,
.findbar-find-previous:-moz-focusring {
position: relative;
box-shadow: @focusRingShadow@, @roundButtonShadow@;
box-shadow: var(--focus-ring-box-shadow), @roundButtonShadow@;
}
.findbar-container > toolbarbutton[disabled] {
@ -129,20 +129,7 @@ label.findbar-find-fast:-moz-lwtheme,
.findbar-find-previous:hover:active:-moz-focusring {
text-shadow: @loweredShadow@;
background: @roundButtonPressedBackground@;
box-shadow: @focusRingShadow@, @roundButtonPressedShadow@;
}
@media (-moz-mac-yosemite-theme) {
.findbar-container > toolbarbutton:-moz-focusring,
.findbar-find-next:-moz-focusring,
.findbar-find-previous:-moz-focusring {
box-shadow: @yosemiteFocusRingShadow@, @roundButtonShadow@;
}
.findbar-find-next:hover:active:-moz-focusring,
.findbar-find-previous:hover:active:-moz-focusring {
box-shadow: @yosemiteFocusRingShadow@, @roundButtonPressedShadow@;
}
box-shadow: var(--focus-ring-box-shadow), @roundButtonPressedShadow@;
}
/* Search field */
@ -180,13 +167,7 @@ label.findbar-find-fast:-moz-lwtheme,
}
.findbar-textbox[focused="true"] {
box-shadow: @focusRingShadow@;
}
@media (-moz-mac-yosemite-theme) {
.findbar-textbox[focused="true"] {
box-shadow: @yosemiteFocusRingShadow@;
}
box-shadow: var(--focus-ring-box-shadow);
}
.findbar-textbox[flash="true"] {

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

@ -36,7 +36,7 @@ window,
page,
dialog,
wizard,
prefwindow {
prefwindow {
-moz-appearance: dialog;
background-color: #FFFFFF;
color: -moz-DialogText;
@ -118,7 +118,7 @@ statusbarpanel {
.statusbarpanel-iconic {
padding: 0px;
}
}
/* ::::: miscellaneous formatting ::::: */
@ -147,7 +147,7 @@ statusbar:-moz-lwtheme {
border-bottom-color: ThreeDHighlight;
margin: 0 5px 5px;
}
.outset {
border: 1px solid ThreeDShadow;
border-left-color: ThreeDHighlight;
@ -163,7 +163,7 @@ separator[orient="vertical"] {
separator.thin:not([orient="vertical"]) {
height: 0.5em;
}
}
separator.thin[orient="vertical"] {
width: 0.5em;
}
@ -180,7 +180,7 @@ separator.groove[orient="vertical"] {
margin-left: 0.4em;
margin-right: 0.4em;
}
.plain {
-moz-appearance: none;
margin: 0 !important;
@ -241,7 +241,7 @@ label[disabled="true"] {
.text-link:hover {
text-decoration: underline;
}
.text-link:-moz-focusring {
box-shadow: var(--focus-ring-box-shadow);
}
@ -271,11 +271,11 @@ notification > button:active:hover {
}
notification > button:-moz-focusring {
box-shadow: @focusRingShadow@, @roundButtonShadow@;
box-shadow: var(--focus-ring-box-shadow), @roundButtonShadow@;
}
notification > button:active:hover:-moz-focusring {
box-shadow: @focusRingShadow@, @roundButtonPressedShadow@;
box-shadow: var(--focus-ring-box-shadow), @roundButtonPressedShadow@;
}
notification > button > .button-box > .button-text {

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

@ -44,7 +44,6 @@ button {
0 1px 2px hsla(0,0%,0%,.1);
}
button[default=true] {
background-color: hsl(0,0%,79%);
}
@ -61,7 +60,5 @@ button:hover:active {
}
button:focus {
box-shadow: 0 0 1px -moz-mac-focusring inset,
0 0 4px 1px -moz-mac-focusring,
0 0 1.5px 1px -moz-mac-focusring;
box-shadow: var(--focus-ring-box-shadow)
}

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

@ -15,7 +15,7 @@ tree {
/* ::::: tree focusring ::::: */
.focusring > .tree-stack > .tree-rows > .tree-bodybox {
border: 1px solid transparent;
border: 1px solid transparent;
}
.focusring:focus > .tree-stack > .tree-rows > .tree-bodybox {
@ -163,7 +163,7 @@ treechildren::-moz-tree-cell-text(progressmeter) {
/* ::::: tree columns ::::: */
treecol,
treecolpicker {
treecolpicker {
-moz-appearance: treeheadercell;
-moz-box-align: center;
-moz-box-pack: center;
@ -278,7 +278,7 @@ treechildren.gridlines::-moz-tree-row {
.tree-input {
-moz-appearance: none;
border-width: 0;
box-shadow: @focusRingShadow@;
box-shadow: var(--focus-ring-box-shadow);
margin: 0;
margin-inline-start: -2px;
padding: 2px 1px 1px;