MozReview-Commit-ID: Hh4I1wa4u49
This commit is contained in:
Wes Kocher 2017-02-24 16:53:23 -08:00
Родитель 361a8713a8 e84fc624ff
Коммит f8633189c2
464 изменённых файлов: 19796 добавлений и 18843 удалений

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

@ -285,6 +285,7 @@ toolkit/components/osfile/**
# External code:
toolkit/components/microformats/test/**
toolkit/components/microformats/microformat-shiv.js
toolkit/components/reader/Readability.js
toolkit/components/reader/JSDOMParser.js

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

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

@ -4,4 +4,6 @@ support-files =
[browser_CaptivePortalWatcher.js]
skip-if = os == "win" # Bug 1313894
[browser_CaptivePortalWatcher_1.js]
skip-if = os == "win" # Bug 1313894
[browser_captivePortal_certErrorUI.js]

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

@ -1,171 +1,6 @@
"use strict";
Components.utils.import("resource:///modules/RecentWindow.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "CaptivePortalWatcher",
"resource:///modules/CaptivePortalWatcher.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "cps",
"@mozilla.org/network/captive-portal-service;1",
"nsICaptivePortalService");
const CANONICAL_CONTENT = "success";
const CANONICAL_URL = "data:text/plain;charset=utf-8," + CANONICAL_CONTENT;
const CANONICAL_URL_REDIRECTED = "data:text/plain;charset=utf-8,redirected";
const PORTAL_NOTIFICATION_VALUE = "captive-portal-detected";
add_task(function* setup() {
yield SpecialPowers.pushPrefEnv({
set: [["captivedetect.canonicalURL", CANONICAL_URL],
["captivedetect.canonicalContent", CANONICAL_CONTENT]],
});
// We need to test behavior when a portal is detected when there is no browser
// window, but we can't close the default window opened by the test harness.
// Instead, we deactivate CaptivePortalWatcher in the default window and
// exclude it from RecentWindow.getMostRecentBrowserWindow in an attempt to
// mask its presence.
window.CaptivePortalWatcher.uninit();
RecentWindow._getMostRecentBrowserWindowCopy = RecentWindow.getMostRecentBrowserWindow;
let defaultWindow = window;
RecentWindow.getMostRecentBrowserWindow = () => {
let win = RecentWindow._getMostRecentBrowserWindowCopy();
if (win == defaultWindow) {
return null;
}
return win;
};
});
function* portalDetected() {
Services.obs.notifyObservers(null, "captive-portal-login", null);
yield BrowserTestUtils.waitForCondition(() => {
return cps.state == cps.LOCKED_PORTAL;
}, "Waiting for Captive Portal Service to update state after portal detected.");
}
function* freePortal(aSuccess) {
Services.obs.notifyObservers(null,
"captive-portal-login-" + (aSuccess ? "success" : "abort"), null);
yield BrowserTestUtils.waitForCondition(() => {
return cps.state != cps.LOCKED_PORTAL;
}, "Waiting for Captive Portal Service to update state after portal freed.");
}
// If a window is provided, it will be focused. Otherwise, a new window
// will be opened and focused.
function* focusWindowAndWaitForPortalUI(aLongRecheck, win) {
// CaptivePortalWatcher triggers a recheck when a window gains focus. If
// the time taken for the check to complete is under PORTAL_RECHECK_DELAY_MS,
// a tab with the login page is opened and selected. If it took longer,
// no tab is opened. It's not reliable to time things in an async test,
// so use a delay threshold of -1 to simulate a long recheck (so that any
// amount of time is considered excessive), and a very large threshold to
// simulate a short recheck.
Preferences.set("captivedetect.portalRecheckDelayMS", aLongRecheck ? -1 : 1000000);
if (!win) {
win = yield BrowserTestUtils.openNewBrowserWindow();
}
yield SimpleTest.promiseFocus(win);
// After a new window is opened, CaptivePortalWatcher asks for a recheck, and
// waits for it to complete. We need to manually tell it a recheck completed.
yield BrowserTestUtils.waitForCondition(() => {
return win.CaptivePortalWatcher._waitingForRecheck;
}, "Waiting for CaptivePortalWatcher to trigger a recheck.");
Services.obs.notifyObservers(null, "captive-portal-check-complete", null);
let notification = ensurePortalNotification(win);
if (aLongRecheck) {
ensureNoPortalTab(win);
testShowLoginPageButtonVisibility(notification, "visible");
return win;
}
let tab = win.gBrowser.tabs[1];
if (tab.linkedBrowser.currentURI.spec != CANONICAL_URL) {
// The tab should load the canonical URL, wait for it.
yield BrowserTestUtils.waitForLocationChange(win.gBrowser, CANONICAL_URL);
}
is(win.gBrowser.selectedTab, tab,
"The captive portal tab should be open and selected in the new window.");
testShowLoginPageButtonVisibility(notification, "hidden");
return win;
}
function ensurePortalTab(win) {
// For the tests that call this function, it's enough to ensure there
// are two tabs in the window - the default tab and the portal tab.
is(win.gBrowser.tabs.length, 2,
"There should be a captive portal tab in the window.");
}
function ensurePortalNotification(win) {
let notificationBox =
win.document.getElementById("high-priority-global-notificationbox");
let notification = notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE)
isnot(notification, null,
"There should be a captive portal notification in the window.");
return notification;
}
// Helper to test whether the "Show Login Page" is visible in the captive portal
// notification (it should be hidden when the portal tab is selected).
function testShowLoginPageButtonVisibility(notification, visibility) {
let showLoginPageButton = notification.querySelector("button.notification-button");
// If the visibility property was never changed from default, it will be
// an empty string, so we pretend it's "visible" (effectively the same).
is(showLoginPageButton.style.visibility || "visible", visibility,
"The \"Show Login Page\" button should be " + visibility + ".");
}
function ensureNoPortalTab(win) {
is(win.gBrowser.tabs.length, 1,
"There should be no captive portal tab in the window.");
}
function ensureNoPortalNotification(win) {
let notificationBox =
win.document.getElementById("high-priority-global-notificationbox");
is(notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE), null,
"There should be no captive portal notification in the window.");
}
/**
* Some tests open a new window and close it later. When the window is closed,
* the original window opened by mochitest gains focus, generating a
* xul-window-visible notification. If the next test also opens a new window
* before this notification has a chance to fire, CaptivePortalWatcher picks
* up the first one instead of the one from the new window. To avoid this
* unfortunate intermittent timing issue, we wait for the notification from
* the original window every time we close a window that we opened.
*/
function waitForXulWindowVisible() {
return new Promise(resolve => {
Services.obs.addObserver(function observe() {
Services.obs.removeObserver(observe, "xul-window-visible");
resolve();
}, "xul-window-visible", false);
});
}
function* closeWindowAndWaitForXulWindowVisible(win) {
let p = waitForXulWindowVisible();
yield BrowserTestUtils.closeWindow(win);
yield p;
}
/**
* BrowserTestUtils.openNewBrowserWindow() does not guarantee the newly
* opened window has received focus when the promise resolves, so we
* have to manually wait every time.
*/
function* openWindowAndWaitForFocus() {
let win = yield BrowserTestUtils.openNewBrowserWindow();
yield SimpleTest.promiseFocus(win);
return win;
}
add_task(setupPrefsAndRecentWindowBehavior);
// Each of the test cases below is run twice: once for login-success and once
// for login-abort (aSuccess set to true and false respectively).
@ -278,101 +113,7 @@ let testCasesForBothSuccessAndAbort = [
},
];
let singleRunTestCases = [
/**
* A portal is detected when there's no browser window,
* then a browser window is opened, and the portal is logged into
* and redirects to a different page. The portal tab should be added
* and focused when the window is opened, and left open after login
* since it redirected.
*/
function* test_detectedWithNoBrowserWindow_Redirect() {
yield portalDetected();
let win = yield focusWindowAndWaitForPortalUI();
let browser = win.gBrowser.selectedTab.linkedBrowser;
let loadPromise =
BrowserTestUtils.browserLoaded(browser, false, CANONICAL_URL_REDIRECTED);
BrowserTestUtils.loadURI(browser, CANONICAL_URL_REDIRECTED);
yield loadPromise;
yield freePortal(true);
ensurePortalTab(win);
ensureNoPortalNotification(win);
yield closeWindowAndWaitForXulWindowVisible(win);
},
/**
* Test the various expected behaviors of the "Show Login Page" button
* in the captive portal notification. The button should be visible for
* all tabs except the captive portal tab, and when clicked, should
* ensure a captive portal tab is open and select it.
*/
function* test_showLoginPageButton() {
let win = yield openWindowAndWaitForFocus();
yield portalDetected();
let notification = ensurePortalNotification(win);
testShowLoginPageButtonVisibility(notification, "visible");
function testPortalTabSelectedAndButtonNotVisible() {
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
testShowLoginPageButtonVisibility(notification, "hidden");
}
let button = notification.querySelector("button.notification-button");
function* clickButtonAndExpectNewPortalTab() {
let p = BrowserTestUtils.waitForNewTab(win.gBrowser, CANONICAL_URL);
button.click();
let tab = yield p;
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
return tab;
}
// Simulate clicking the button. The portal tab should be opened and
// selected and the button should hide.
let tab = yield clickButtonAndExpectNewPortalTab();
testPortalTabSelectedAndButtonNotVisible();
// Close the tab. The button should become visible.
yield BrowserTestUtils.removeTab(tab);
ensureNoPortalTab(win);
testShowLoginPageButtonVisibility(notification, "visible");
// When the button is clicked, a new portal tab should be opened and
// selected.
tab = yield clickButtonAndExpectNewPortalTab();
// Open another arbitrary tab. The button should become visible. When it's clicked,
// the portal tab should be selected.
let anotherTab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser);
testShowLoginPageButtonVisibility(notification, "visible");
button.click();
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
// Close the portal tab and select the arbitrary tab. The button should become
// visible and when it's clicked, a new portal tab should be opened.
yield BrowserTestUtils.removeTab(tab);
win.gBrowser.selectedTab = anotherTab;
testShowLoginPageButtonVisibility(notification, "visible");
tab = yield clickButtonAndExpectNewPortalTab();
yield BrowserTestUtils.removeTab(anotherTab);
yield freePortal(true);
ensureNoPortalTab(win);
ensureNoPortalNotification(win);
yield closeWindowAndWaitForXulWindowVisible(win);
},
];
for (let testcase of testCasesForBothSuccessAndAbort) {
add_task(testcase.bind(null, true));
add_task(testcase.bind(null, false));
}
for (let testcase of singleRunTestCases) {
add_task(testcase);
}
add_task(function* cleanUp() {
RecentWindow.getMostRecentBrowserWindow = RecentWindow._getMostRecentBrowserWindowCopy;
delete RecentWindow._getMostRecentBrowserWindowCopy;
window.CaptivePortalWatcher.init();
});

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

@ -0,0 +1,91 @@
"use strict";
add_task(setupPrefsAndRecentWindowBehavior);
let testcases = [
/**
* A portal is detected when there's no browser window,
* then a browser window is opened, and the portal is logged into
* and redirects to a different page. The portal tab should be added
* and focused when the window is opened, and left open after login
* since it redirected.
*/
function* test_detectedWithNoBrowserWindow_Redirect() {
yield portalDetected();
let win = yield focusWindowAndWaitForPortalUI();
let browser = win.gBrowser.selectedTab.linkedBrowser;
let loadPromise =
BrowserTestUtils.browserLoaded(browser, false, CANONICAL_URL_REDIRECTED);
BrowserTestUtils.loadURI(browser, CANONICAL_URL_REDIRECTED);
yield loadPromise;
yield freePortal(true);
ensurePortalTab(win);
ensureNoPortalNotification(win);
yield closeWindowAndWaitForXulWindowVisible(win);
},
/**
* Test the various expected behaviors of the "Show Login Page" button
* in the captive portal notification. The button should be visible for
* all tabs except the captive portal tab, and when clicked, should
* ensure a captive portal tab is open and select it.
*/
function* test_showLoginPageButton() {
let win = yield openWindowAndWaitForFocus();
yield portalDetected();
let notification = ensurePortalNotification(win);
testShowLoginPageButtonVisibility(notification, "visible");
function testPortalTabSelectedAndButtonNotVisible() {
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
testShowLoginPageButtonVisibility(notification, "hidden");
}
let button = notification.querySelector("button.notification-button");
function* clickButtonAndExpectNewPortalTab() {
let p = BrowserTestUtils.waitForNewTab(win.gBrowser, CANONICAL_URL);
button.click();
let tab = yield p;
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
return tab;
}
// Simulate clicking the button. The portal tab should be opened and
// selected and the button should hide.
let tab = yield clickButtonAndExpectNewPortalTab();
testPortalTabSelectedAndButtonNotVisible();
// Close the tab. The button should become visible.
yield BrowserTestUtils.removeTab(tab);
ensureNoPortalTab(win);
testShowLoginPageButtonVisibility(notification, "visible");
// When the button is clicked, a new portal tab should be opened and
// selected.
tab = yield clickButtonAndExpectNewPortalTab();
// Open another arbitrary tab. The button should become visible. When it's clicked,
// the portal tab should be selected.
let anotherTab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser);
testShowLoginPageButtonVisibility(notification, "visible");
button.click();
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
// Close the portal tab and select the arbitrary tab. The button should become
// visible and when it's clicked, a new portal tab should be opened.
yield BrowserTestUtils.removeTab(tab);
win.gBrowser.selectedTab = anotherTab;
testShowLoginPageButtonVisibility(notification, "visible");
tab = yield clickButtonAndExpectNewPortalTab();
yield BrowserTestUtils.removeTab(anotherTab);
yield freePortal(true);
ensureNoPortalTab(win);
ensureNoPortalNotification(win);
yield closeWindowAndWaitForXulWindowVisible(win);
},
];
for (let testcase of testcases) {
add_task(testcase);
}

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

@ -5,9 +5,6 @@
const BAD_CERT_PAGE = "https://expired.example.com/";
const CANONICAL_CONTENT = "success";
const CANONICAL_URL = "data:text/plain;charset=utf-8," + CANONICAL_CONTENT;
// This tests the alternate cert error UI when we are behind a captive portal.
add_task(function* checkCaptivePortalCertErrorUI() {

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

@ -1,3 +1,175 @@
Components.utils.import("resource:///modules/RecentWindow.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "CaptivePortalWatcher",
"resource:///modules/CaptivePortalWatcher.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "cps",
"@mozilla.org/network/captive-portal-service;1",
"nsICaptivePortalService");
const CANONICAL_CONTENT = "success";
const CANONICAL_URL = "data:text/plain;charset=utf-8," + CANONICAL_CONTENT;
const CANONICAL_URL_REDIRECTED = "data:text/plain;charset=utf-8,redirected";
const PORTAL_NOTIFICATION_VALUE = "captive-portal-detected";
function* setupPrefsAndRecentWindowBehavior() {
yield SpecialPowers.pushPrefEnv({
set: [["captivedetect.canonicalURL", CANONICAL_URL],
["captivedetect.canonicalContent", CANONICAL_CONTENT]],
});
// We need to test behavior when a portal is detected when there is no browser
// window, but we can't close the default window opened by the test harness.
// Instead, we deactivate CaptivePortalWatcher in the default window and
// exclude it from RecentWindow.getMostRecentBrowserWindow in an attempt to
// mask its presence.
window.CaptivePortalWatcher.uninit();
let getMostRecentBrowserWindowCopy = RecentWindow.getMostRecentBrowserWindow;
let defaultWindow = window;
RecentWindow.getMostRecentBrowserWindow = () => {
let win = getMostRecentBrowserWindowCopy();
if (win == defaultWindow) {
return null;
}
return win;
};
registerCleanupFunction(function* cleanUp() {
RecentWindow.getMostRecentBrowserWindow = getMostRecentBrowserWindowCopy;
window.CaptivePortalWatcher.init();
});
}
function* portalDetected() {
Services.obs.notifyObservers(null, "captive-portal-login", null);
yield BrowserTestUtils.waitForCondition(() => {
return cps.state == cps.LOCKED_PORTAL;
}, "Waiting for Captive Portal Service to update state after portal detected.");
}
function* freePortal(aSuccess) {
Services.obs.notifyObservers(null,
"captive-portal-login-" + (aSuccess ? "success" : "abort"), null);
yield BrowserTestUtils.waitForCondition(() => {
return cps.state != cps.LOCKED_PORTAL;
}, "Waiting for Captive Portal Service to update state after portal freed.");
}
// If a window is provided, it will be focused. Otherwise, a new window
// will be opened and focused.
function* focusWindowAndWaitForPortalUI(aLongRecheck, win) {
// CaptivePortalWatcher triggers a recheck when a window gains focus. If
// the time taken for the check to complete is under PORTAL_RECHECK_DELAY_MS,
// a tab with the login page is opened and selected. If it took longer,
// no tab is opened. It's not reliable to time things in an async test,
// so use a delay threshold of -1 to simulate a long recheck (so that any
// amount of time is considered excessive), and a very large threshold to
// simulate a short recheck.
Preferences.set("captivedetect.portalRecheckDelayMS", aLongRecheck ? -1 : 1000000);
if (!win) {
win = yield BrowserTestUtils.openNewBrowserWindow();
}
yield SimpleTest.promiseFocus(win);
// After a new window is opened, CaptivePortalWatcher asks for a recheck, and
// waits for it to complete. We need to manually tell it a recheck completed.
yield BrowserTestUtils.waitForCondition(() => {
return win.CaptivePortalWatcher._waitingForRecheck;
}, "Waiting for CaptivePortalWatcher to trigger a recheck.");
Services.obs.notifyObservers(null, "captive-portal-check-complete", null);
let notification = ensurePortalNotification(win);
if (aLongRecheck) {
ensureNoPortalTab(win);
testShowLoginPageButtonVisibility(notification, "visible");
return win;
}
let tab = win.gBrowser.tabs[1];
if (tab.linkedBrowser.currentURI.spec != CANONICAL_URL) {
// The tab should load the canonical URL, wait for it.
yield BrowserTestUtils.waitForLocationChange(win.gBrowser, CANONICAL_URL);
}
is(win.gBrowser.selectedTab, tab,
"The captive portal tab should be open and selected in the new window.");
testShowLoginPageButtonVisibility(notification, "hidden");
return win;
}
function ensurePortalTab(win) {
// For the tests that call this function, it's enough to ensure there
// are two tabs in the window - the default tab and the portal tab.
is(win.gBrowser.tabs.length, 2,
"There should be a captive portal tab in the window.");
}
function ensurePortalNotification(win) {
let notificationBox =
win.document.getElementById("high-priority-global-notificationbox");
let notification = notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE)
isnot(notification, null,
"There should be a captive portal notification in the window.");
return notification;
}
// Helper to test whether the "Show Login Page" is visible in the captive portal
// notification (it should be hidden when the portal tab is selected).
function testShowLoginPageButtonVisibility(notification, visibility) {
let showLoginPageButton = notification.querySelector("button.notification-button");
// If the visibility property was never changed from default, it will be
// an empty string, so we pretend it's "visible" (effectively the same).
is(showLoginPageButton.style.visibility || "visible", visibility,
"The \"Show Login Page\" button should be " + visibility + ".");
}
function ensureNoPortalTab(win) {
is(win.gBrowser.tabs.length, 1,
"There should be no captive portal tab in the window.");
}
function ensureNoPortalNotification(win) {
let notificationBox =
win.document.getElementById("high-priority-global-notificationbox");
is(notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE), null,
"There should be no captive portal notification in the window.");
}
/**
* Some tests open a new window and close it later. When the window is closed,
* the original window opened by mochitest gains focus, generating a
* xul-window-visible notification. If the next test also opens a new window
* before this notification has a chance to fire, CaptivePortalWatcher picks
* up the first one instead of the one from the new window. To avoid this
* unfortunate intermittent timing issue, we wait for the notification from
* the original window every time we close a window that we opened.
*/
function waitForXulWindowVisible() {
return new Promise(resolve => {
Services.obs.addObserver(function observe() {
Services.obs.removeObserver(observe, "xul-window-visible");
resolve();
}, "xul-window-visible", false);
});
}
function* closeWindowAndWaitForXulWindowVisible(win) {
let p = waitForXulWindowVisible();
yield BrowserTestUtils.closeWindow(win);
yield p;
}
/**
* BrowserTestUtils.openNewBrowserWindow() does not guarantee the newly
* opened window has received focus when the promise resolves, so we
* have to manually wait every time.
*/
function* openWindowAndWaitForFocus() {
let win = yield BrowserTestUtils.openNewBrowserWindow();
yield SimpleTest.promiseFocus(win);
return win;
}
function waitForCertErrorLoad(browser) {
return new Promise(resolve => {
info("Waiting for DOMContentLoaded event");

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

@ -106,6 +106,7 @@ support-files =
content_aboutAccounts.js
[browser_aboutCertError.js]
[browser_aboutNetError.js]
[browser_aboutSupport.js]
[browser_aboutSupport_newtab_security_state.js]
[browser_aboutHealthReport.js]
skip-if = os == "linux" # Bug 924307

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

@ -0,0 +1,32 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
Cu.import("resource://gre/modules/AppConstants.jsm");
Cu.import("resource://gre/modules/Services.jsm");
add_task(function* () {
yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:support" }, function* (browser) {
const strings = Services.strings.createBundle(
"chrome://global/locale/aboutSupport.properties");
let allowedStates = [strings.GetStringFromName("found"),
strings.GetStringFromName("missing")];
let keyGoogleStatus = yield ContentTask.spawn(browser, null, function* () {
let textBox = content.document.getElementById("key-google-box");
yield ContentTaskUtils.waitForCondition(() => textBox.textContent.trim(),
"Google API key status loaded");
return textBox.textContent;
});
ok(allowedStates.includes(keyGoogleStatus), "Google API key status shown");
let keyMozillaStatus = yield ContentTask.spawn(browser, null, function* () {
let textBox = content.document.getElementById("key-mozilla-box");
yield ContentTaskUtils.waitForCondition(() => textBox.textContent.trim(),
"Mozilla API key status loaded");
return textBox.textContent;
});
ok(allowedStates.includes(keyMozillaStatus), "Mozilla API key status shown");
});
});

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

@ -315,8 +315,8 @@ var FormAutofillContent = {
return formDetails.map(record => record.fieldName);
},
_identifyAutofillFields(doc) {
this.log.debug("_identifyAutofillFields:", "" + doc.location);
identifyAutofillFields(doc) {
this.log.debug("identifyAutofillFields:", "" + doc.location);
let forms = [];
// Collects root forms from inputs.

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

@ -12,6 +12,7 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://formautofill/FormAutofillContent.jsm");
/**
* Handles content's interactions for the frame.
@ -38,14 +39,11 @@ var FormAutofillFrameScript = {
if (!(doc instanceof Ci.nsIDOMHTMLDocument)) {
return;
}
this.FormAutofillContent._identifyAutofillFields(doc);
FormAutofillContent.identifyAutofillFields(doc);
break;
}
}
},
};
XPCOMUtils.defineLazyModuleGetter(FormAutofillFrameScript, "FormAutofillContent",
"resource://formautofill/FormAutofillContent.jsm");
FormAutofillFrameScript.init();

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

@ -12,6 +12,12 @@
-moz-binding: url("chrome://formautofill/content/formautofill.xml#autocomplete-profile-listitem");
}
/* Treat @collpased="true" as display: none similar to how it is for XUL elements.
* https://developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values */
#PopupAutoComplete > richlistbox > richlistitem[originaltype="autofill-profile"][collapsed="true"] {
display: none;
}
#PopupAutoComplete[firstresultstyle="autofill-profile"] {
min-width: 150px !important;
}

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

@ -77,7 +77,7 @@ TESTCASES.forEach(testcase => {
let doc = MockDocument.createTestDocument(
"http://localhost:8080/test/", testcase.document);
FormAutofillContent._identifyAutofillFields(doc);
FormAutofillContent.identifyAutofillFields(doc);
for (let i in testcase.targetInput) {
let input = doc.getElementById(testcase.targetInput[i]);

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

@ -64,7 +64,7 @@ TESTCASES.forEach(testcase => {
let doc = MockDocument.createTestDocument(
"http://localhost:8080/test/", testcase.document);
FormAutofillContent._identifyAutofillFields(doc);
FormAutofillContent.identifyAutofillFields(doc);
Assert.deepEqual(markedFieldId, testcase.expectedResult,
"Check the fields were marked correctly.");

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

@ -78,9 +78,6 @@ check_and_add_gcc_warning('-Werror=non-literal-null-conversion',
# catches string literals used in boolean expressions
check_and_add_gcc_warning('-Wstring-conversion')
# catches inconsistent use of mutexes
check_and_add_gcc_warning('-Wthread-safety')
# we inline 'new' and 'delete' in mozalloc
check_and_add_gcc_warning('-Wno-inline-new-delete', cxx_compiler)

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

@ -5,7 +5,6 @@
"use strict";
const Services = require("Services");
const EventEmitter = require("devtools/shared/event-emitter");
const { TimelineFront } = require("devtools/shared/fronts/timeline");
const { CurlUtils } = require("devtools/client/shared/curl");
const { ACTIVITY_TYPE, EVENTS } = require("./constants");
@ -892,14 +891,6 @@ NetworkEventsHandler.prototype = {
}
};
/**
* Convenient way of emitting events from the panel window.
*/
EventEmitter.decorate(window);
/**
* Preliminary setup for the NetMonitorController object.
*/
NetMonitorController.TargetEventsHandler = new TargetEventsHandler();
NetMonitorController.NetworkEventsHandler = new NetworkEventsHandler();
window.gNetwork = NetMonitorController.NetworkEventsHandler;

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

@ -4,7 +4,19 @@
"use strict";
const { BrowserLoader } = Components.utils.import("resource://devtools/client/shared/browser-loader.js", {});
function Netmonitor(toolbox) {
const require = window.windowRequire = BrowserLoader({
baseURI: "resource://devtools/client/netmonitor/",
window,
commonLibRequire: toolbox.browserRequire,
}).require;
// Inject EventEmitter into netmonitor window.
const EventEmitter = require("devtools/shared/event-emitter");
EventEmitter.decorate(window);
window.NetMonitorController = require("./netmonitor-controller").NetMonitorController;
window.NetMonitorController._toolbox = toolbox;
window.NetMonitorController._target = toolbox.target;

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

@ -8,19 +8,7 @@
<link rel="stylesheet" href="chrome://devtools/content/shared/widgets/widgets.css"/>
<link rel="stylesheet" href="chrome://devtools/skin/widgets.css"/>
<link rel="stylesheet" href="chrome://devtools/skin/netmonitor.css"/>
<script src="chrome://devtools/content/shared/theme-switching.js"/>
<script>
"use strict";
const { BrowserLoader } = Components.utils.import(
"resource://devtools/client/shared/browser-loader.js", {});
const { require } = BrowserLoader({
baseURI: "resource://devtools/client/netmonitor/",
window,
});
window.windowRequire = require;
</script>
</head>
<body class="theme-sidebar" role="application">
<div class="root"></div>

5
devtools/client/shared/vendor/react-dom.js поставляемый
Просмотреть файл

@ -150,8 +150,11 @@
let doc = node.ownerDocument;
const inspectorUrl = "chrome://devtools/content/inspector/inspector.xhtml";
const netMonitorUrl = "chrome://devtools/content/netmonitor/netmonitor.xhtml";
while (doc instanceof XULDocument || doc.location.href === inspectorUrl) {
while (doc instanceof XULDocument ||
doc.location.href === inspectorUrl ||
doc.location.href === netMonitorUrl) {
const {frameElement} = doc.defaultView;
if (!frameElement) {

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

@ -413,12 +413,11 @@ function* generatePageErrorStubs() {
for (let [key, code] of pageError) {
let received = new Promise(resolve => {
toolbox.target.client.addListener("pageError", function onPacket(e, packet) {
toolbox.target.client.removeListener("pageError", onPacket);
let message = prepareMessage(packet, {getNextId: () => 1});
stubs.packets.push(formatPacket(message.messageText, packet));
stubs.preparedMessages.push(formatStub(message.messageText, packet));
resolve();
}, {
once: true
});
});

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

@ -18,7 +18,7 @@
#include "mozilla/LookAndFeel.h" // For LookAndFeel::GetInt
#include "mozilla/KeyframeUtils.h"
#include "mozilla/ServoBindings.h"
#include "mozilla/StyleAnimationValueInlines.h"
#include "mozilla/TypeTraits.h"
#include "Layers.h" // For Layer
#include "nsComputedDOMStyle.h" // nsComputedDOMStyle::GetStyleContextForElement
#include "nsContentUtils.h" // nsContentUtils::ReportToConsole
@ -190,6 +190,27 @@ void
KeyframeEffectReadOnly::SetKeyframes(nsTArray<Keyframe>&& aKeyframes,
nsStyleContext* aStyleContext)
{
DoSetKeyframes(Move(aKeyframes), Move(aStyleContext));
}
void
KeyframeEffectReadOnly::SetKeyframes(
nsTArray<Keyframe>&& aKeyframes,
const ServoComputedStyleValues& aServoValues)
{
DoSetKeyframes(Move(aKeyframes), aServoValues);
}
template<typename StyleType>
void
KeyframeEffectReadOnly::DoSetKeyframes(nsTArray<Keyframe>&& aKeyframes,
StyleType&& aStyle)
{
static_assert(IsSame<StyleType, nsStyleContext*>::value ||
IsSame<StyleType, const ServoComputedStyleValues&>::value,
"StyleType should be nsStyleContext* or "
"const ServoComputedStyleValues&");
if (KeyframesEqualIgnoringComputedOffsets(aKeyframes, mKeyframes)) {
return;
}
@ -205,8 +226,11 @@ KeyframeEffectReadOnly::SetKeyframes(nsTArray<Keyframe>&& aKeyframes,
nsNodeUtils::AnimationChanged(mAnimation);
}
if (aStyleContext) {
UpdateProperties(aStyleContext);
// We need to call UpdateProperties() if the StyleType is
// 'const ServoComputedStyleValues&' (i.e. not a pointer) or nsStyleContext*
// is not nullptr.
if (!IsPointer<StyleType>::value || aStyle) {
UpdateProperties(aStyle);
MaybeUpdateFrameForCompositor();
}
}
@ -275,6 +299,35 @@ KeyframeEffectReadOnly::UpdateProperties(nsStyleContext* aStyleContext)
{
MOZ_ASSERT(aStyleContext);
if (!mDocument->IsStyledByServo()) {
DoUpdateProperties(Move(aStyleContext));
return;
}
const ServoComputedValues* currentStyle =
aStyleContext->StyleSource().AsServoComputedValues();
const ServoComputedValues* parentStyle =
aStyleContext->GetParent()
? aStyleContext->GetParent()->StyleSource().AsServoComputedValues()
: nullptr;
const ServoComputedStyleValues servoValues = { currentStyle, parentStyle };
DoUpdateProperties(servoValues);
}
void
KeyframeEffectReadOnly::UpdateProperties(
const ServoComputedStyleValues& aServoValues)
{
DoUpdateProperties(aServoValues);
}
template<typename StyleType>
void
KeyframeEffectReadOnly::DoUpdateProperties(StyleType&& aStyle)
{
MOZ_ASSERT_IF(IsPointer<StyleType>::value, aStyle);
// Skip updating properties when we are composing style.
// FIXME: Bug 1324966. Drop this check once we have a function to get
// nsStyleContext without resolving animating style.
@ -284,11 +337,12 @@ KeyframeEffectReadOnly::UpdateProperties(nsStyleContext* aStyleContext)
return;
}
nsTArray<AnimationProperty> properties = BuildProperties(aStyleContext);
nsTArray<AnimationProperty> properties =
BuildProperties(Forward<StyleType>(aStyle));
// We need to update base styles even if any properties are not changed at all
// since base styles might have been changed due to parent style changes, etc.
EnsureBaseStyles(aStyleContext, properties);
EnsureBaseStyles(aStyle, properties);
if (mProperties == properties) {
return;
@ -310,10 +364,7 @@ KeyframeEffectReadOnly::UpdateProperties(nsStyleContext* aStyleContext)
runningOnCompositorProperties.HasProperty(property.mProperty);
}
// FIXME (bug 1303235): Do this for Servo too
if (aStyleContext->PresContext()->StyleSet()->IsGecko()) {
CalculateCumulativeChangeHint(aStyleContext);
}
CalculateCumulativeChangeHint(aStyle);
MarkCascadeNeedsUpdate();
@ -854,10 +905,16 @@ KeyframeEffectReadOnly::ConstructKeyframeEffect(const GlobalObject& aGlobal,
return effect.forget();
}
template<typename StyleType>
nsTArray<AnimationProperty>
KeyframeEffectReadOnly::BuildProperties(nsStyleContext* aStyleContext)
KeyframeEffectReadOnly::BuildProperties(StyleType&& aStyle)
{
MOZ_ASSERT(aStyleContext);
static_assert(IsSame<StyleType, nsStyleContext*>::value ||
IsSame<StyleType, const ServoComputedStyleValues&>::value,
"StyleType should be nsStyleContext* or "
"const ServoComputedStyleValues&");
MOZ_ASSERT(aStyle);
nsTArray<AnimationProperty> result;
// If mTarget is null, return an empty property array.
@ -876,22 +933,22 @@ KeyframeEffectReadOnly::BuildProperties(nsStyleContext* aStyleContext)
nsTArray<ComputedKeyframeValues> computedValues =
KeyframeUtils::GetComputedKeyframeValues(keyframesCopy,
mTarget->mElement,
aStyleContext);
aStyle);
// FIXME: Bug 1332633: we have to implement ComputeDistance for
// RawServoAnimationValue.
if (mEffectOptions.mSpacingMode == SpacingMode::paced &&
aStyleContext->PresContext()->StyleSet()->IsGecko()) {
!mDocument->IsStyledByServo()) {
KeyframeUtils::ApplySpacing(keyframesCopy, SpacingMode::paced,
mEffectOptions.mPacedProperty,
computedValues, aStyleContext);
computedValues, aStyle);
}
result =
KeyframeUtils::GetAnimationPropertiesFromKeyframes(keyframesCopy,
KeyframeUtils::GetAnimationPropertiesFromKeyframes(
keyframesCopy,
computedValues,
mEffectOptions.mComposite,
aStyleContext);
mEffectOptions.mComposite);
#ifdef DEBUG
MOZ_ASSERT(SpecifiedKeyframeArraysAreEqual(mKeyframes, keyframesCopy),
@ -1568,6 +1625,10 @@ void
KeyframeEffectReadOnly::CalculateCumulativeChangeHint(
nsStyleContext *aStyleContext)
{
if (aStyleContext->PresContext()->StyleSet()->IsServo()) {
// FIXME (bug 1303235): Do this for Servo too
return;
}
mCumulativeChangeHint = nsChangeHint(0);
for (const AnimationProperty& property : mProperties) {

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

@ -23,7 +23,7 @@
#include "mozilla/KeyframeEffectParams.h"
// RawServoDeclarationBlock and associated RefPtrTraits
#include "mozilla/ServoBindingTypes.h"
#include "mozilla/StyleAnimationValue.h"
#include "mozilla/StyleAnimationValueInlines.h"
#include "mozilla/dom/AnimationEffectReadOnly.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "mozilla/dom/Element.h"
@ -130,6 +130,13 @@ struct AnimationProperty
}
};
struct ServoComputedStyleValues
{
const ServoComputedValues* mCurrentStyle;
const ServoComputedValues* mParentStyle;
explicit operator bool() const { return true; }
};
struct ElementPropertyTransition;
namespace dom {
@ -196,6 +203,8 @@ public:
ErrorResult& aRv);
void SetKeyframes(nsTArray<Keyframe>&& aKeyframes,
nsStyleContext* aStyleContext);
void SetKeyframes(nsTArray<Keyframe>&& aKeyframes,
const ServoComputedStyleValues& aServoValues);
// Returns true if the effect includes |aProperty| regardless of whether the
// property is overridden by !important rule.
@ -223,6 +232,8 @@ public:
// Update |mProperties| by recalculating from |mKeyframes| using
// |aStyleContext| to resolve specified values.
void UpdateProperties(nsStyleContext* aStyleContext);
// Servo version of the above function.
void UpdateProperties(const ServoComputedStyleValues& aServoValues);
// Updates |aStyleRule| with the animation values produced by this
// AnimationEffect for the current time except any properties contained
@ -277,6 +288,10 @@ public:
// Cumulative change hint on each segment for each property.
// This is used for deciding the animation is paint-only.
void CalculateCumulativeChangeHint(nsStyleContext* aStyleContext);
void CalculateCumulativeChangeHint(
const ServoComputedStyleValues& aServoValues)
{
}
// Returns true if all of animation properties' change hints
// can ignore painting if the animation is not visible.
@ -324,7 +339,8 @@ protected:
// Build properties by recalculating from |mKeyframes| using |aStyleContext|
// to resolve specified values. This function also applies paced spacing if
// needed.
nsTArray<AnimationProperty> BuildProperties(nsStyleContext* aStyleContext);
template<typename StyleType>
nsTArray<AnimationProperty> BuildProperties(StyleType&& aStyle);
// This effect is registered with its target element so long as:
//
@ -377,6 +393,11 @@ protected:
// Ensure the base styles is available for any properties in |aProperties|.
void EnsureBaseStyles(nsStyleContext* aStyleContext,
const nsTArray<AnimationProperty>& aProperties);
void EnsureBaseStyles(const ServoComputedStyleValues& aServoValues,
const nsTArray<AnimationProperty>& aProperties)
{
// FIXME: Bug 1311257: Support missing keyframes.
}
// Returns the base style resolved by |aStyleContext| for |aProperty|.
StyleAnimationValue ResolveBaseStyle(nsCSSPropertyID aProperty,
@ -414,6 +435,12 @@ protected:
private:
nsChangeHint mCumulativeChangeHint;
template<typename StyleType>
void DoSetKeyframes(nsTArray<Keyframe>&& aKeyframes, StyleType&& aStyle);
template<typename StyleType>
void DoUpdateProperties(StyleType&& aStyle);
nsIFrame* GetAnimationFrame() const;
bool CanThrottle() const;

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

@ -19,6 +19,7 @@
#include "mozilla/dom/KeyframeEffectReadOnly.h" // For PropertyValuesPair etc.
#include "jsapi.h" // For ForOfIterator etc.
#include "nsClassHashtable.h"
#include "nsContentUtils.h" // For GetContextForContent
#include "nsCSSParser.h"
#include "nsCSSPropertyIDSet.h"
#include "nsCSSProps.h"
@ -590,6 +591,31 @@ KeyframeUtils::ApplyDistributeSpacing(nsTArray<Keyframe>& aKeyframes)
emptyArray, nullptr);
}
/* static */ nsTArray<ComputedKeyframeValues>
KeyframeUtils::GetComputedKeyframeValues(
const nsTArray<Keyframe>& aKeyframes,
dom::Element* aElement,
const ServoComputedStyleValues& aServoValues)
{
MOZ_ASSERT(aElement);
MOZ_ASSERT(aElement->OwnerDoc()->IsStyledByServo());
nsPresContext* presContext = nsContentUtils::GetContextForContent(aElement);
MOZ_ASSERT(presContext);
nsTArray<ComputedKeyframeValues> result(aKeyframes.Length());
// Construct each nsTArray<PropertyStyleAnimationValuePair> here.
result.AppendElements(aKeyframes.Length());
Servo_GetComputedKeyframeValues(&aKeyframes,
aServoValues.mCurrentStyle,
aServoValues.mParentStyle,
presContext,
&result);
return result;
}
/* static */ nsTArray<ComputedKeyframeValues>
KeyframeUtils::GetComputedKeyframeValues(const nsTArray<Keyframe>& aKeyframes,
dom::Element* aElement,
@ -598,32 +624,19 @@ KeyframeUtils::GetComputedKeyframeValues(const nsTArray<Keyframe>& aKeyframes,
MOZ_ASSERT(aStyleContext);
MOZ_ASSERT(aElement);
StyleBackendType styleBackend = aElement->OwnerDoc()->GetStyleBackendType();
const size_t len = aKeyframes.Length();
nsTArray<ComputedKeyframeValues> result(len);
const ServoComputedValues* currentStyle = nullptr;
const ServoComputedValues* parentStyle = nullptr;
if (styleBackend == StyleBackendType::Servo) {
currentStyle = aStyleContext->StyleSource().AsServoComputedValues();
if (aStyleContext->GetParent()) {
parentStyle = aStyleContext->GetParent()->StyleSource().AsServoComputedValues();
}
}
for (const Keyframe& frame : aKeyframes) {
nsCSSPropertyIDSet propertiesOnThisKeyframe;
ComputedKeyframeValues* computedValues = result.AppendElement();
for (const PropertyValuePair& pair :
PropertyPriorityIterator(frame.mPropertyValues)) {
MOZ_ASSERT(!pair.mServoDeclarationBlock ||
styleBackend == StyleBackendType::Servo,
MOZ_ASSERT(!pair.mServoDeclarationBlock,
"Animation values were parsed using Servo backend but target"
" element is not using Servo backend?");
if (IsInvalidValuePair(pair, styleBackend)) {
if (IsInvalidValuePair(pair, StyleBackendType::Gecko)) {
continue;
}
@ -631,28 +644,6 @@ KeyframeUtils::GetComputedKeyframeValues(const nsTArray<Keyframe>& aKeyframes,
// a KeyframeValueEntry for each value.
nsTArray<PropertyStyleAnimationValuePair> values;
if (styleBackend == StyleBackendType::Servo) {
if (nsCSSProps::IsShorthand(pair.mProperty)) {
CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(p, pair.mProperty,
CSSEnabledState::eForAllContent) {
if (nsCSSProps::kAnimTypeTable[*p] == eStyleAnimType_None) {
// Skip non-animatable component longhands.
continue;
}
PropertyStyleAnimationValuePair* valuePair = values.AppendElement();
valuePair->mProperty = *p;
}
} else {
PropertyStyleAnimationValuePair* valuePair = values.AppendElement();
valuePair->mProperty = pair.mProperty;
}
Servo_AnimationValues_Populate(&values,
pair.mServoDeclarationBlock,
currentStyle,
parentStyle,
aStyleContext->PresContext());
} else {
// For shorthands, we store the string as a token stream so we need to
// extract that first.
if (nsCSSProps::IsShorthand(pair.mProperty)) {
@ -673,7 +664,6 @@ KeyframeUtils::GetComputedKeyframeValues(const nsTArray<Keyframe>& aKeyframes,
"Longhand properties should produce a single"
" StyleAnimationValue");
}
}
for (auto& value : values) {
// If we already got a value for this property on the keyframe,
@ -695,8 +685,7 @@ KeyframeUtils::GetComputedKeyframeValues(const nsTArray<Keyframe>& aKeyframes,
KeyframeUtils::GetAnimationPropertiesFromKeyframes(
const nsTArray<Keyframe>& aKeyframes,
const nsTArray<ComputedKeyframeValues>& aComputedValues,
dom::CompositeOperation aEffectComposite,
nsStyleContext* aStyleContext)
dom::CompositeOperation aEffectComposite)
{
MOZ_ASSERT(aKeyframes.Length() == aComputedValues.Length(),
"Array length mismatch");

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

@ -15,6 +15,7 @@ struct JSContext;
class JSObject;
class nsIDocument;
class nsStyleContext;
struct ServoComputedValues;
namespace mozilla {
struct AnimationProperty;
@ -22,6 +23,7 @@ enum class CSSPseudoElementType : uint8_t;
class ErrorResult;
struct Keyframe;
struct PropertyStyleAnimationValuePair;
struct ServoComputedStyleValues;
namespace dom {
class Element;
@ -83,6 +85,11 @@ public:
dom::Element* aElement,
nsStyleContext* aStyleContext);
static nsTArray<ComputedKeyframeValues>
GetComputedKeyframeValues(const nsTArray<Keyframe>& aKeyframes,
dom::Element* aElement,
const ServoComputedStyleValues& aServoValues);
/**
* Fills in the mComputedOffset member of each keyframe in the given array
* using the specified spacing mode.
@ -106,6 +113,14 @@ public:
nsCSSPropertyID aProperty,
nsTArray<ComputedKeyframeValues>& aComputedValues,
nsStyleContext* aStyleContext);
static void ApplySpacing(nsTArray<Keyframe>& aKeyframes,
SpacingMode aSpacingMode,
nsCSSPropertyID aProperty,
nsTArray<ComputedKeyframeValues>& aComputedValues,
const ServoComputedStyleValues& aServoValues)
{
NS_WARNING("stylo: ApplySpacing not implemented yet");
}
/**
* Wrapper for ApplySpacing to simplify using distribute spacing.
@ -130,15 +145,13 @@ public:
* @param aEffectComposite The composite operation specified on the effect.
* For any keyframes in |aKeyframes| that do not specify a composite
* operation, this value will be used.
* @param aStyleContext The style context to calculate the style difference.
* @return The set of animation properties. If an error occurs, the returned
* array will be empty.
*/
static nsTArray<AnimationProperty> GetAnimationPropertiesFromKeyframes(
const nsTArray<Keyframe>& aKeyframes,
const nsTArray<ComputedKeyframeValues>& aComputedValues,
dom::CompositeOperation aEffectComposite,
nsStyleContext* aStyleContext);
dom::CompositeOperation aEffectComposite);
/**
* Check if the property or, for shorthands, one or more of

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

@ -41,6 +41,7 @@ namespace {
// If true, any new AudioChannelAgent will be muted when created.
bool sAudioChannelMutedByDefault = false;
bool sAudioChannelCompeting = false;
bool sAudioChannelCompetingAllAgents = false;
bool sXPCOMShuttingDown = false;
class NotifyChannelActiveRunnable final : public Runnable
@ -171,7 +172,7 @@ IsEnableAudioCompetingForAllAgents()
#ifdef MOZ_WIDGET_ANDROID
return true;
#else
return false;
return sAudioChannelCompetingAllAgents;
#endif
}
@ -299,6 +300,8 @@ AudioChannelService::AudioChannelService()
"dom.audiochannel.mutedByDefault");
Preferences::AddBoolVarCache(&sAudioChannelCompeting,
"dom.audiochannel.audioCompeting");
Preferences::AddBoolVarCache(&sAudioChannelCompetingAllAgents,
"dom.audiochannel.audioCompeting.allAgents");
}
AudioChannelService::~AudioChannelService()
@ -1087,8 +1090,7 @@ AudioChannelService::ChildStatusReceived(uint64_t aChildID,
}
void
AudioChannelService::RefreshAgentsAudioFocusChanged(AudioChannelAgent* aAgent,
bool aActive)
AudioChannelService::RefreshAgentsAudioFocusChanged(AudioChannelAgent* aAgent)
{
MOZ_ASSERT(aAgent);
@ -1097,7 +1099,7 @@ AudioChannelService::RefreshAgentsAudioFocusChanged(AudioChannelAgent* aAgent,
while (iter.HasMore()) {
AudioChannelWindow* winData = iter.GetNext();
if (winData->mOwningAudioFocus) {
winData->AudioFocusChanged(aAgent, aActive);
winData->AudioFocusChanged(aAgent);
}
}
}
@ -1156,8 +1158,7 @@ AudioChannelService::AudioChannelWindow::RequestAudioFocus(AudioChannelAgent* aA
}
void
AudioChannelService::AudioChannelWindow::NotifyAudioCompetingChanged(AudioChannelAgent* aAgent,
bool aActive)
AudioChannelService::AudioChannelWindow::NotifyAudioCompetingChanged(AudioChannelAgent* aAgent)
{
// This function may be called after RemoveAgentAndReduceAgentsNum(), so the
// agent may be not contained in mAgent. In addition, the agent would still
@ -1177,10 +1178,10 @@ AudioChannelService::AudioChannelWindow::NotifyAudioCompetingChanged(AudioChanne
MOZ_LOG(AudioChannelService::GetAudioChannelLog(), LogLevel::Debug,
("AudioChannelWindow, NotifyAudioCompetingChanged, this = %p, "
"agent = %p, active = %d\n",
this, aAgent, aActive));
"agent = %p\n",
this, aAgent));
service->RefreshAgentsAudioFocusChanged(aAgent, aActive);
service->RefreshAgentsAudioFocusChanged(aAgent);
}
bool
@ -1210,8 +1211,7 @@ AudioChannelService::AudioChannelWindow::IsAudioCompetingInSameTab() const
}
void
AudioChannelService::AudioChannelWindow::AudioFocusChanged(AudioChannelAgent* aNewPlayingAgent,
bool aActive)
AudioChannelService::AudioChannelWindow::AudioFocusChanged(AudioChannelAgent* aNewPlayingAgent)
{
// This agent isn't always known for the current window, because it can comes
// from other window.
@ -1236,8 +1236,7 @@ AudioChannelService::AudioChannelWindow::AudioFocusChanged(AudioChannelAgent* aN
}
uint32_t type = GetCompetingBehavior(agent,
aNewPlayingAgent->AudioChannelType(),
aActive);
aNewPlayingAgent->AudioChannelType());
// If window will be suspended, it needs to abandon the audio focus
// because only one window can own audio focus at a time. However, we
@ -1267,8 +1266,7 @@ AudioChannelService::AudioChannelWindow::IsContainingPlayingAgent(AudioChannelAg
uint32_t
AudioChannelService::AudioChannelWindow::GetCompetingBehavior(AudioChannelAgent* aAgent,
int32_t aIncomingChannelType,
bool aIncomingChannelActive) const
int32_t aIncomingChannelType) const
{
MOZ_ASSERT(aAgent);
MOZ_ASSERT(IsEnableAudioCompetingForAllAgents() ?
@ -1279,8 +1277,7 @@ AudioChannelService::AudioChannelWindow::GetCompetingBehavior(AudioChannelAgent*
// TODO : add other competing cases for MediaSession API
if (presentChannelType == int32_t(AudioChannel::Normal) &&
aIncomingChannelType == int32_t(AudioChannel::Normal) &&
aIncomingChannelActive) {
aIncomingChannelType == int32_t(AudioChannel::Normal)) {
competingBehavior = nsISuspendedTypes::SUSPENDED_STOP_DISPOSABLE;
}
@ -1314,7 +1311,7 @@ AudioChannelService::AudioChannelWindow::AppendAgent(AudioChannelAgent* aAgent,
AudibleChangedReasons::eDataAudibleChanged);
} else if (IsEnableAudioCompetingForAllAgents() &&
aAudible != AudibleState::eAudible) {
NotifyAudioCompetingChanged(aAgent, true);
NotifyAudioCompetingChanged(aAgent);
}
}
@ -1412,8 +1409,9 @@ AudioChannelService::AudioChannelWindow::AudioAudibleChanged(AudioChannelAgent*
RemoveAudibleAgentIfContained(aAgent, aReason);
}
NotifyAudioCompetingChanged(aAgent, aAudible == AudibleState::eAudible);
if (aAudible != AudibleState::eNotAudible) {
if (aAudible == AudibleState::eAudible) {
NotifyAudioCompetingChanged(aAgent);
} else if (aAudible != AudibleState::eNotAudible) {
MaybeNotifyMediaBlockStart(aAgent);
}
}

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

@ -233,8 +233,7 @@ private:
void SetDefaultVolumeControlChannelInternal(int32_t aChannel,
bool aVisible, uint64_t aChildID);
void RefreshAgentsAudioFocusChanged(AudioChannelAgent* aAgent,
bool aActive);
void RefreshAgentsAudioFocusChanged(AudioChannelAgent* aAgent);
class AudioChannelConfig final : public AudioPlaybackConfig
{
@ -261,7 +260,7 @@ private:
mChannels[(int16_t)AudioChannel::System].mMuted = false;
}
void AudioFocusChanged(AudioChannelAgent* aNewPlayingAgent, bool aActive);
void AudioFocusChanged(AudioChannelAgent* aNewPlayingAgent);
void AudioAudibleChanged(AudioChannelAgent* aAgent,
AudibleState aAudible,
AudibleChangedReasons aReason);
@ -310,11 +309,12 @@ private:
void MaybeNotifyMediaBlockStart(AudioChannelAgent* aAgent);
void RequestAudioFocus(AudioChannelAgent* aAgent);
void NotifyAudioCompetingChanged(AudioChannelAgent* aAgent, bool aActive);
// We need to do audio competing only when the new incoming agent started.
void NotifyAudioCompetingChanged(AudioChannelAgent* aAgent);
uint32_t GetCompetingBehavior(AudioChannelAgent* aAgent,
int32_t aIncomingChannelType,
bool aIncomingChannelActive) const;
int32_t aIncomingChannelType) const;
bool IsAgentInvolvingInAudioCompeting(AudioChannelAgent* aAgent) const;
bool IsAudioCompetingInSameTab() const;
bool IsContainingPlayingAgent(AudioChannelAgent* aAgent) const;

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

@ -1010,6 +1010,11 @@ private:
return AudioChannelService::AudibleState::eMaybeAudible;
}
// Media is suspended.
if (mSuspended != nsISuspendedTypes::NONE_SUSPENDED) {
return AudioChannelService::AudibleState::eNotAudible;
}
return AudioChannelService::AudibleState::eAudible;
}

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

@ -2,7 +2,7 @@
default-preferences pref(dom.forms.number,true) pref(dom.forms.datetime,true)
fails == input-load.html input-load.html
fails == input-create.html input-create.html
# fuzzy-if(skiaContent,1,3) needs-focus == input-number.html input-number.html
fuzzy-if(skiaContent,1,3) skip-if(stylo) needs-focus == input-number.html input-number.html # Bug 1341973
fails == input-time.html input-time.html
fails == button-load.html button-load.html
fails == button-create.html button-create.html

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

@ -283,7 +283,7 @@ HangMonitorChild::HangMonitorChild(ProcessHangMonitor* aMonitor)
mForcePaintMonitor =
MakeUnique<mozilla::BackgroundHangMonitor>("Gecko_Child_ForcePaint",
128, /* ms timeout for microhangs */
8192 /* ms timeout for permahangs */,
1024, /* ms timeout for permahangs */
BackgroundHangMonitor::THREAD_PRIVATE);
}

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

@ -125,6 +125,7 @@ MediaDataDecoderProxy::ConfigurationChanged(const TrackInfo& aConfig)
if (!mProxyThread) {
mProxyDecoder->ConfigurationChanged(aConfig);
return;
}
RefPtr<MediaDataDecoderProxy> self = this;
RefPtr<TrackInfoSharedPtr> config = new TrackInfoSharedPtr(aConfig, 0);

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

@ -10,8 +10,8 @@ fails == plugin-sanity.html plugin-sanity.html # Bug 1341095
== border-padding-2.html border-padding-2.html
== border-padding-3.html border-padding-3.html
# The following two "pluginproblemui-direction" tests are unreliable on all platforms. They should be re-written or replaced.
#random-if(cocoaWidget||d2d||/^Windows\x20NT\x205\.1/.test(http.oscpu)) fails-if(!haveTestPlugin&&!Android) == pluginproblemui-direction-1.html pluginproblemui-direction-1.html
#random-if(cocoaWidget) fails-if(!haveTestPlugin&&!Android) == pluginproblemui-direction-2.html pluginproblemui-direction-2.html
random-if(cocoaWidget||d2d||/^Windows\x20NT\x205\.1/.test(http.oscpu)) fails-if(!haveTestPlugin&&!Android) skip-if(stylo) == pluginproblemui-direction-1.html pluginproblemui-direction-1.html
random-if(cocoaWidget) fails-if(!haveTestPlugin&&!Android) skip-if(stylo) == pluginproblemui-direction-2.html pluginproblemui-direction-2.html
== plugin-canvas-alpha-zindex.html plugin-canvas-alpha-zindex.html
fails == plugin-transform-alpha-zindex.html plugin-transform-alpha-zindex.html
== plugin-busy-alpha-zindex.html plugin-busy-alpha-zindex.html

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

@ -108,18 +108,18 @@ fails == spellcheck-superscript-2.html spellcheck-superscript-2.html
== 824080-1.html 824080-1.html
== 824080-2.html 824080-2.html
== 824080-3.html 824080-3.html
# needs-focus == 824080-2.html 824080-2.html
needs-focus == 824080-2.html 824080-2.html
== 824080-4.html 824080-4.html
== 824080-5.html 824080-5.html
# needs-focus == 824080-4.html 824080-4.html
# needs-focus == 824080-6.html 824080-6.html
needs-focus == 824080-4.html 824080-4.html
fails needs-focus == 824080-6.html 824080-6.html
fails needs-focus pref(layout.accessiblecaret.enabled,false) pref(layout.accessiblecaret.enabled_on_touch,false) == 824080-7.html 824080-7.html
# needs-focus == 824080-6.html 824080-6.html
fails needs-focus == 824080-6.html 824080-6.html
# Bug 674927: copy spellcheck-textarea tests to contenteditable
== spellcheck-contenteditable-attr.html spellcheck-contenteditable-attr.html
== spellcheck-contenteditable-attr.html spellcheck-contenteditable-attr.html
# needs-focus == spellcheck-contenteditable-focused.html spellcheck-contenteditable-focused.html
# needs-focus == spellcheck-contenteditable-focused-reframe.html spellcheck-contenteditable-focused-reframe.html
needs-focus == spellcheck-contenteditable-focused.html spellcheck-contenteditable-focused.html
needs-focus == spellcheck-contenteditable-focused-reframe.html spellcheck-contenteditable-focused-reframe.html
== spellcheck-contenteditable-nofocus.html spellcheck-contenteditable-nofocus.html
== spellcheck-contenteditable-disabled.html spellcheck-contenteditable-disabled.html
== spellcheck-contenteditable-disabled-partial.html spellcheck-contenteditable-disabled-partial.html

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

@ -217,6 +217,8 @@ ServoRestyleManager::RecreateStyleContexts(Element* aElement,
aStyleSet->GetContext(computedValues.forget(), aParentContext, nullptr,
CSSPseudoElementType::NotPseudo, aElement);
newContext->EnsureStructsForServo(oldStyleContext);
// XXX This could not always work as expected: there are kinds of content
// with the first split and the last sharing style, but others not. We
// should handle those properly.

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

@ -223,7 +223,7 @@ public:
return mFlags.mBlock;
}
bool IsInline() const {
return 0 == mFlags.mBlock;
return !mFlags.mBlock;
}
// mDirty bit
@ -404,7 +404,7 @@ public:
aBreakType == StyleClear::Right ||
aBreakType == StyleClear::Both,
"Only float break types are allowed before a line");
mFlags.mBreakType = static_cast<int>(aBreakType);
mFlags.mBreakType = aBreakType;
}
StyleClear GetBreakTypeBefore() const {
return IsBlock() ? BreakType() : StyleClear::None;
@ -415,7 +415,7 @@ public:
}
void SetBreakTypeAfter(StyleClear aBreakType) {
MOZ_ASSERT(!IsBlock(), "Only inlines have break-after");
mFlags.mBreakType = static_cast<int>(aBreakType);
mFlags.mBreakType = aBreakType;
}
bool HasFloatBreakAfter() const {
return !IsBlock() &&
@ -657,26 +657,26 @@ public:
};
struct FlagBits {
uint32_t mDirty : 1;
uint32_t mPreviousMarginDirty : 1;
uint32_t mHasClearance : 1;
uint32_t mBlock : 1;
uint32_t mImpactedByFloat : 1;
uint32_t mLineWrapped: 1;
uint32_t mInvalidateTextRuns : 1;
bool mDirty : 1;
bool mPreviousMarginDirty : 1;
bool mHasClearance : 1;
bool mBlock : 1;
bool mImpactedByFloat : 1;
bool mLineWrapped: 1;
bool mInvalidateTextRuns : 1;
// default 0 = means that the opt potentially applies to this line.
// 1 = never skip reflowing this line for a resize reflow
uint32_t mResizeReflowOptimizationDisabled: 1;
uint32_t mEmptyCacheValid: 1;
uint32_t mEmptyCacheState: 1;
bool mResizeReflowOptimizationDisabled: 1;
bool mEmptyCacheValid: 1;
bool mEmptyCacheState: 1;
// mHasBullet indicates that this is an inline line whose block's
// bullet is adjacent to this line and non-empty.
uint32_t mHasBullet : 1;
bool mHasBullet : 1;
// Indicates that this line *may* have a placeholder for a float
// that was pushed to a later column or page.
uint32_t mHadFloatPushed : 1;
uint32_t mHasHashedFrames: 1;
uint32_t mBreakType : 4;
bool mHadFloatPushed : 1;
bool mHasHashedFrames: 1;
StyleClear mBreakType;
};
struct ExtraData {
@ -710,7 +710,7 @@ protected:
};
StyleClear BreakType() const {
return static_cast<StyleClear>(mFlags.mBreakType);
return mFlags.mBreakType;
};
union {

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

@ -42,8 +42,8 @@ fails == offscreen-clipped-blendmode-1.html offscreen-clipped-blendmode-1.html
fails == offscreen-clipped-blendmode-2.html offscreen-clipped-blendmode-2.html
fuzzy-if(Android,6,4) skip == offscreen-clipped-blendmode-3.html offscreen-clipped-blendmode-3.html
fuzzy-if(Android,6,4) skip-if(!asyncPan) == offscreen-clipped-blendmode-4.html offscreen-clipped-blendmode-4.html
#fails == perspective-scrolling-1.html perspective-scrolling-1.html
#fails == perspective-scrolling-2.html perspective-scrolling-2.html
fails == perspective-scrolling-1.html perspective-scrolling-1.html
fails == perspective-scrolling-2.html perspective-scrolling-2.html
fuzzy-if(Android,7,4) skip-if(!asyncPan) == perspective-scrolling-3.html perspective-scrolling-3.html
fuzzy-if(Android,7,4) skip-if(!asyncPan) == perspective-scrolling-4.html perspective-scrolling-4.html
pref(apz.disable_for_scroll_linked_effects,true) skip-if(!asyncPan) == disable-apz-for-sle-pages.html disable-apz-for-sle-pages.html

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

@ -27,5 +27,5 @@ fails HTTP(..) == CSS21-t100301.xhtml CSS21-t100301.xhtml
== CSS21-t100303-simple.xhtml CSS21-t100303-simple.xhtml
== CSS21-t100801-vertical-align.xhtml CSS21-t100801-vertical-align.xhtml
== clip-auto.html clip-auto.html
fails == clip-rect-auto.html clip-rect-auto.html
== clip-rect-auto.html clip-rect-auto.html
== width-rounding.html width-rounding.html

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

@ -651,7 +651,7 @@ fails == 371043-1.html 371043-1.html
== 371925-1b.html 371925-1b.html
fails == 372037-1.html 372037-1.html
== 372062-1.html 372062-1.html
fails == 372063-1.html 372063-1.html
== 372063-1.html 372063-1.html
== 372323-1.xhtml 372323-1.xhtml
fails == 372553-1.html 372553-1.html
fails == 372632-1.html 372632-1.html
@ -770,7 +770,7 @@ fails == 386470-1c.html 386470-1c.html # Bug 1341725
== 388026-1.html 388026-1.html
fails == 389074-1.html 389074-1.html
== 389224-1.html 389224-1.html
fails == 389224-2.html 389224-2.html # Bug 1341728
== 389224-2.html 389224-2.html
fails == 389468-1.html 389468-1.html
== 389623-1.html 389623-1.html
== 389636-1.html 389636-1.html
@ -831,7 +831,7 @@ fails == 398101-1.html 398101-1.html
== 398797-1d.html 398797-1d.html
== 399209-1.html 399209-1.html
== 399209-2.html 399209-2.html
fails == 399258-1.html 399258-1.html
== 399258-1.html 399258-1.html
fails == 399384-1.html 399384-1.html
random-if(gtkWidget) == 399636-standards-css.html 399636-standards-css.html
random-if(gtkWidget) == 399636-standards-html.html 399636-standards-html.html
@ -885,7 +885,7 @@ fails == 403519-1.html 403519-1.html
fails == 403656-3.html 403656-3.html
== 403656-4.html 403656-4.html
== 403656-5.html 403656-5.html
#== 403657-1.html 403657-1.html
== 403657-1.html 403657-1.html
fails == 403733-1.html 403733-1.html
fails == 403962-1.xhtml 403962-1.xhtml # Bug 1290276
== 404030-1.html 404030-1.html
@ -901,7 +901,7 @@ random-if(cocoaWidget) HTTP(..) == 404149-1.xul 404149-1.xul
fails == 404309-1a.html 404309-1a.html
fails == 404309-1b.html 404309-1b.html
# Disabled due to compartments for now.
#== data:application/xml,<foo/> data:application/xml,<foo/>
== data:application/xml,<foo/> data:application/xml,<foo/>
fails == 404553-1.html 404553-1.html
== 404666-1.html 404666-1.html
== 404666-2.html 404666-2.html
@ -1402,7 +1402,7 @@ fails == 502795-1.html 502795-1.html
== 503364-1b.html 503364-1b.html
# Reftest for bug 503531 marked as failing; should be re-enabled when
# bug 607548 gets resolved.
# needs-focus fails == 503531-1.html 503531-1.html
needs-focus == 503531-1.html 503531-1.html
== 504032-1.html 504032-1.html
== 505743-1.html 505743-1.html
fails == 506481-1.html 506481-1.html
@ -1503,8 +1503,8 @@ fails == 551463-1.html 551463-1.html
fails random == 553571-1.html 553571-1.html
== 555388-1.html 555388-1.html
== 556661-1.html 556661-1.html
# fuzzy-if(skiaContent,4,5) == 557087-1.html 557087-1.html
# fails-if(Android) fuzzy-if(skiaContent&&!Android,2,5) == 557087-2.html 557087-2.html
fails fuzzy-if(skiaContent,4,5) skip-if(stylo) == 557087-1.html 557087-1.html # Bug 1341973
fails fails-if(Android) fuzzy-if(skiaContent&&!Android,2,5) skip-if(stylo) == 557087-2.html 557087-2.html # Bug 1341973
fails == 557736-1.html 557736-1.html
== 558011-1.xul 558011-1.xul
== 559284-1.html 559284-1.html
@ -1650,7 +1650,7 @@ random-if(winWidget) HTTP(..) == 621918-2.svg 621918-2.svg
fails == 622585-1.html 622585-1.html
== 625409-1.html 625409-1.html
== 627393-1.html 627393-1.html
# fuzzy-if(skiaContent,1,500) == 630835-1.html 630835-1.html
fuzzy-if(skiaContent,1,500) == 630835-1.html 630835-1.html
== 631352-1.html 631352-1.html
== 632423-1.html 632423-1.html
skip-if(Android) random-if(winWidget||OSX==1010) == 632781-verybig.html 632781-verybig.html
@ -1761,7 +1761,7 @@ fails == 818276-1.html 818276-1.html
fails == 825999.html 825999.html
== 827577-1a.html 827577-1a.html
== 827577-1b.html 827577-1b.html
fails == 827799-1.html 827799-1.html
== 827799-1.html 827799-1.html
== 829958.html 829958.html
== 836844-1.html 836844-1.html
== 841192-1.html 841192-1.html

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

@ -67,10 +67,10 @@ random-if(cocoaWidget&&azureSkia) random-if(!cocoaWidget||OSX==1006||OSX==1007)
# azure quartz uses CGDrawLinearGradient instead of DrawShading
# so we have less control over degenerate behaviour as tested by this
# test
# fails-if((azureSkia&&!azureSkiaGL)||(azureSkiaGL&&Android)) == linear-gradient-1a.html linear-gradient-1a.html
fails-if((azureSkia&&!azureSkiaGL)||(azureSkiaGL&&Android)) skip-if(stylo) == linear-gradient-1a.html linear-gradient-1a.html # Too random.
# this passes with cairo on 10.7 and 10.8 but not with azure for reasons unknown
# fails-if((azureSkia&&!azureSkiaGL)||(azureSkiaGL&&Android)) == linear-gradient-1b.html linear-gradient-1b.html
fails-if((azureSkia&&!azureSkiaGL)||(azureSkiaGL&&Android)) skip-if(stylo) == linear-gradient-1b.html linear-gradient-1b.html # Too random.
== zero-dimensions.html zero-dimensions.html

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

@ -3,7 +3,7 @@
# http://dev.w3.org/csswg/css-display
fails == display-contents-acid.html display-contents-acid.html
# fuzzy-if(Android,8,604) == display-contents-acid-dyn-1.html display-contents-acid-dyn-1.html
fails fuzzy-if(Android,8,604) == display-contents-acid-dyn-1.html display-contents-acid-dyn-1.html
fails == display-contents-acid-dyn-2.html display-contents-acid-dyn-2.html # bug 1337700
fails == display-contents-acid-dyn-3.html display-contents-acid-dyn-3.html
skip-if(stylo) == display-contents-generated-content.html display-contents-generated-content.html # Bug 1341083
@ -18,7 +18,7 @@ skip-if(stylo) == display-contents-style-inheritance-1-dom-mutations.html displa
== display-contents-visibility-hidden-2.html display-contents-visibility-hidden-2.html
== display-contents-495385-2d.html display-contents-495385-2d.html
fails == display-contents-xbl.xhtml display-contents-xbl.xhtml
# fuzzy-if(Android,7,1186) pref(dom.webcomponents.enabled,true) == display-contents-shadow-dom-1.html display-contents-shadow-dom-1.html
fuzzy-if(Android,7,1186) skip-if(stylo) pref(dom.webcomponents.enabled,true) == display-contents-shadow-dom-1.html display-contents-shadow-dom-1.html # Bug 1293844
== display-contents-xbl-2.xul display-contents-xbl-2.xul
asserts(2) == display-contents-xbl-3.xul display-contents-xbl-3.xul
skip-if(stylo) == display-contents-xbl-4.xul display-contents-xbl-4.xul # Too intermittent.

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

@ -36,9 +36,9 @@ fails == grid-abspos-items-015.html grid-abspos-items-015.html
fails == grid-order-abspos-items-001.html grid-order-abspos-items-001.html
fails == grid-order-placement-auto-001.html grid-order-placement-auto-001.html
fails == grid-order-placement-definite-001.html grid-order-placement-definite-001.html
# skip-if(Android) == grid-placement-definite-implicit-001.html grid-placement-definite-implicit-001.html
fails skip-if(Android) == grid-placement-definite-implicit-001.html grid-placement-definite-implicit-001.html
fails == grid-placement-definite-implicit-002.html grid-placement-definite-implicit-002.html
# skip-if(Android) fuzzy-if(winWidget,1,32) == grid-placement-auto-implicit-001.html grid-placement-auto-implicit-001.html
fails skip-if(Android) fuzzy-if(winWidget,1,32) == grid-placement-auto-implicit-001.html grid-placement-auto-implicit-001.html
fails == grid-placement-abspos-implicit-001.html grid-placement-abspos-implicit-001.html
fails == rtl-grid-placement-definite-001.html rtl-grid-placement-definite-001.html
fails == rtl-grid-placement-auto-row-sparse-001.html rtl-grid-placement-auto-row-sparse-001.html
@ -132,21 +132,21 @@ random-if(http.oscpu!="Linux\u0020i686") == grid-item-mixed-baseline-003.html gr
fails == grid-item-mixed-baseline-004.html grid-item-mixed-baseline-004.html
fails == grid-align-content-001.html grid-align-content-001.html
fails == grid-justify-content-001.html grid-justify-content-001.html
# skip-if(Android&&isDebugBuild) == grid-justify-content-002.html grid-justify-content-002.html
# skip-if(Android&&isDebugBuild) == grid-justify-content-003.html grid-justify-content-003.html
fails skip-if(Android&&isDebugBuild) == grid-justify-content-002.html grid-justify-content-002.html
fails skip-if(Android&&isDebugBuild) == grid-justify-content-003.html grid-justify-content-003.html
fails == grid-container-baselines-001.html grid-container-baselines-001.html
fails == grid-container-baselines-002.html grid-container-baselines-002.html
fails == grid-container-baselines-003.html grid-container-baselines-003.html
== grid-container-baselines-004.html grid-container-baselines-004.html
# skip-if(Android&&isDebugBuild) == grid-column-gap-001.html grid-column-gap-001.html
fails skip-if(Android&&isDebugBuild) == grid-column-gap-001.html grid-column-gap-001.html
fails == grid-column-gap-002.html grid-column-gap-002.html
fails == grid-column-gap-003.html grid-column-gap-003.html
fails == grid-column-gap-004.html grid-column-gap-004.html
fails == grid-row-gap-001.html grid-row-gap-001.html
fails == grid-percent-grid-gap-001.html grid-percent-grid-gap-001.html
# skip-if(Android&&isDebugBuild) == grid-row-gap-002.html grid-row-gap-002.html
# skip-if(Android&&isDebugBuild) == grid-row-gap-003.html grid-row-gap-003.html
# skip-if(Android&&isDebugBuild) == grid-row-gap-004.html grid-row-gap-004.html
fails skip-if(Android&&isDebugBuild) == grid-row-gap-002.html grid-row-gap-002.html
fails skip-if(Android&&isDebugBuild) == grid-row-gap-003.html grid-row-gap-003.html
fails skip-if(Android&&isDebugBuild) == grid-row-gap-004.html grid-row-gap-004.html
fails == grid-row-gap-005.html grid-row-gap-005.html
fails == grid-container-overflow-001.html grid-container-overflow-001.html
fails == grid-item-margin-left-auto-001.html grid-item-margin-left-auto-001.html
@ -230,11 +230,11 @@ fails == grid-fragmentation-dyn1-016.html grid-fragmentation-dyn1-016.html
fails == grid-fragmentation-dyn5-016.html grid-fragmentation-dyn5-016.html
fails == grid-fragmentation-dyn3-017.html grid-fragmentation-dyn3-017.html
fails == grid-fragmentation-dyn2-018.html grid-fragmentation-dyn2-018.html
# fails == grid-fragmentation-dyn1-019.html grid-fragmentation-dyn1-019.html # bug 1341104
# fails == grid-fragmentation-dyn2-019.html grid-fragmentation-dyn2-019.html # bug 1341104
# fails == grid-fragmentation-dyn3-019.html grid-fragmentation-dyn3-019.html # bug 1341104
# fails == grid-fragmentation-dyn4-019.html grid-fragmentation-dyn4-019.html # bug 1341104
# fails == grid-fragmentation-dyn5-019.html grid-fragmentation-dyn5-019.html # bug 1341104
fails skip-if(stylo) == grid-fragmentation-dyn1-019.html grid-fragmentation-dyn1-019.html # bug 1341104
fails skip-if(stylo) == grid-fragmentation-dyn2-019.html grid-fragmentation-dyn2-019.html # bug 1341104
fails skip-if(stylo) == grid-fragmentation-dyn3-019.html grid-fragmentation-dyn3-019.html # bug 1341104
fails skip-if(stylo) == grid-fragmentation-dyn4-019.html grid-fragmentation-dyn4-019.html # bug 1341104
fails skip-if(stylo) == grid-fragmentation-dyn5-019.html grid-fragmentation-dyn5-019.html # bug 1341104
fails == grid-fragmentation-dyn1-020.html grid-fragmentation-dyn1-020.html
fails == grid-fragmentation-dyn2-020.html grid-fragmentation-dyn2-020.html
skip == grid-fragmentation-dyn1-021.html grid-fragmentation-dyn1-021.html

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

@ -10,7 +10,7 @@
# caret colour and the text colour or just the text colour).
fails == placeholder-simple.html placeholder-simple.html
# needs-focus == placeholder-focus.html placeholder-focus.html
fails needs-focus == placeholder-focus.html placeholder-focus.html
fails needs-focus == placeholder-blur.html placeholder-blur.html
fails == placeholder-value.html placeholder-value.html
fails == placeholder-empty-string.html placeholder-empty-string.html

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

@ -10,7 +10,7 @@
# caret colour and the text colour or just the text colour).
fails == placeholder-simple.html placeholder-simple.html
# needs-focus == placeholder-focus.html placeholder-focus.html
fails needs-focus == placeholder-focus.html placeholder-focus.html
fails needs-focus == placeholder-blur.html placeholder-blur.html
fails == placeholder-value.html placeholder-value.html
fails == placeholder-empty-string.html placeholder-empty-string.html

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

@ -24,7 +24,7 @@ fails == parent-style-1.html parent-style-1.html
== quote-1e.html quote-1e.html
== quote-1f.html quote-1f.html
fails == dynamic-1.html dynamic-1.html
# random-if(d2d) == dynamic-2.html dynamic-2.html
fails random-if(d2d) == dynamic-2.html dynamic-2.html
== dynamic-3a.html dynamic-3a.html
== dynamic-3b.html dynamic-3b.html
== 23605-1.html 23605-1.html

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

@ -51,7 +51,7 @@ fails == localized-family-names-003.html localized-family-names-003.html
fails == localized-family-names-004.html localized-family-names-004.html
# family names with escaped spaces shouldn't match the names without the spaces
# fails-if(http.oscpu=="Linux\u0020x86_64") == familyname-escapedidents.html familyname-escapedidents.html
== familyname-escapedidents.html familyname-escapedidents.html
# weight mapping tests
fails HTTP(..) == normalmedium.html normalmedium.html
@ -117,12 +117,12 @@ fails == italic-oblique-9.html italic-oblique-9.html
# Bug 1212731 - initial implementation caused startup regression and
# regression with full-width digits display in UI elements. Disable
# tests until these problems are corrected.
# random-if(!OSX) == system-generic-fallback-1.html system-generic-fallback-1.html
# random-if(!OSX||OSX<1008) == system-generic-fallback-2.html system-generic-fallback-2.html
# random-if(!OSX||OSX<1008) == system-generic-fallback-3.html system-generic-fallback-3.html
# random-if(!OSX||OSX<1008) == system-generic-fallback-4.html system-generic-fallback-4.html
# random-if(!OSX) == system-generic-fallback-ko.html system-generic-fallback-ko.html
# random-if(!OSX) == system-generic-fallback-zh-tw.html system-generic-fallback-zh-tw.html
# random-if(!OSX) == system-generic-fallback-zh-cn.html system-generic-fallback-zh-cn.html
# random-if(!OSX) == system-generic-fallback-zh-tw.html system-generic-fallback-zh-tw.html
random-if(!OSX) == system-generic-fallback-1.html system-generic-fallback-1.html
random-if(!OSX||OSX<1008) == system-generic-fallback-2.html system-generic-fallback-2.html
random-if(!OSX||OSX<1008) == system-generic-fallback-3.html system-generic-fallback-3.html
random-if(!OSX||OSX<1008) == system-generic-fallback-4.html system-generic-fallback-4.html
random-if(!OSX) == system-generic-fallback-ko.html system-generic-fallback-ko.html
random-if(!OSX) == system-generic-fallback-zh-tw.html system-generic-fallback-zh-tw.html
random-if(!OSX) == system-generic-fallback-zh-cn.html system-generic-fallback-zh-cn.html
random-if(!OSX) == system-generic-fallback-zh-tw.html system-generic-fallback-zh-tw.html

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

@ -3,8 +3,8 @@ default-preferences pref(dom.forms.number,true)
# sanity checks:
# not valid on Android where type=number looks like type=text
# skip-if(Android) == not-other-type-unthemed-1.html not-other-type-unthemed-1.html
# skip-if(Android) == not-other-type-unthemed-1.html not-other-type-unthemed-1.html
skip-if(stylo) == not-other-type-unthemed-1.html not-other-type-unthemed-1.html # Bug 1341973
skip-if(stylo) == not-other-type-unthemed-1.html not-other-type-unthemed-1.html # Bug 1341973
# only valid on Android where type=number looks the same as type=text
skip-if(!Android) == number-same-as-text-unthemed.html number-same-as-text-unthemed.html
@ -19,7 +19,7 @@ fails == to-number-from-other-type-unthemed-1.html to-number-from-other-type-unt
== from-number-to-other-type-unthemed-1.html from-number-to-other-type-unthemed-1.html
# dynamic value changes:
# fuzzy-if(skiaContent,2,13) == show-value.html show-value.html
fuzzy-if(skiaContent,2,13) skip-if(stylo) == show-value.html show-value.html # Bug 1341973
# disabled
== number-disabled.html number-disabled.html

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

@ -1,4 +1,4 @@
# DO NOT EDIT! This is a auto-generated temporary list for Stylo testing
fails == legend.html legend.html
# fuzzy-if(skiaContent,1,7) pref(dom.webcomponents.enabled,true) == shadow-dom.html shadow-dom.html
fails pref(dom.webcomponents.enabled,true) == shadow-dom.html shadow-dom.html
== 1273433.html 1273433.html

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

@ -19,9 +19,9 @@ fails == placeholder-4.html placeholder-4.html
fails == placeholder-5.html placeholder-5.html
fails == placeholder-6.html placeholder-6.html
fails == placeholder-6-textarea.html placeholder-6-textarea.html
# needs-focus == placeholder-7.html placeholder-7.html
# needs-focus == placeholder-8.html placeholder-8.html
# needs-focus == placeholder-9.html placeholder-9.html
fails needs-focus == placeholder-7.html placeholder-7.html
fails needs-focus == placeholder-8.html placeholder-8.html
fails needs-focus == placeholder-9.html placeholder-9.html
fails needs-focus == placeholder-10.html placeholder-10.html
fails == placeholder-11.html placeholder-11.html
fails == placeholder-12.html placeholder-12.html
@ -29,8 +29,8 @@ fails == placeholder-13.html placeholder-13.html
fails == placeholder-14.html placeholder-14.html
fails == placeholder-18.html placeholder-18.html
random-if(winWidget) == placeholder-19.xul placeholder-19.xul
# needs-focus == placeholder-20.html placeholder-20.html
# needs-focus == placeholder-21.html placeholder-21.html
fails needs-focus == placeholder-20.html placeholder-20.html
fails needs-focus == placeholder-21.html placeholder-21.html
fails needs-focus == placeholder-22.html placeholder-22.html
fails == placeholder-rtl.html placeholder-rtl.html # Bug 1340696
fails pref(dom.placeholder.show_on_focus,false) needs-focus == placeholder-focus-pref.html placeholder-focus-pref.html

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

@ -9,4 +9,4 @@ fails HTTP(../..) == vertical-centering.html vertical-centering.html # Bug 12902
fails == 997709-2.html 997709-2.html
fails needs-focus == focusring-1.html focusring-1.html
fails needs-focus == focusring-2.html focusring-2.html
# needs-focus == focusring-3.html focusring-3.html
fails needs-focus == focusring-3.html focusring-3.html

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

@ -4,8 +4,8 @@
skip-if(cocoaWidget||Android) == accesskey-1.xul accesskey-1.xul
skip-if(cocoaWidget||Android) == accesskey-2.xul accesskey-2.xul
# accesskey-3 fails because of defects in XUL bidi support
# fails-if(!cocoaWidget) skip-if(cocoaWidget||Android) == accesskey-3.xul accesskey-3.xul
# skip-if(cocoaWidget||Android) == accesskey-3.xul accesskey-3.xul
skip-if(cocoaWidget||Android) == accesskey-3.xul accesskey-3.xul
skip-if(cocoaWidget||Android) == accesskey-3.xul accesskey-3.xul
skip-if(cocoaWidget||Android) == accesskey-4.xul accesskey-4.xul
skip-if(cocoaWidget||Android) == accesskey-4.xul accesskey-4.xul
skip-if(Android) == align-baseline-1.xul align-baseline-1.xul

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

@ -68,7 +68,7 @@ skip-if(gtkWidget) random-if(d2d) == resizer-bottomstart-rtl.xul resizer-bottoms
# Windows-only, depends on native scrollbar metrics
skip-if(!winWidget) == scroll-thumb-minimum-size-notheme.html scroll-thumb-minimum-size-notheme.html
# skip-if(!winWidget) == scroll-thumb-minimum-size-theme.html scroll-thumb-minimum-size-theme.html
skip-if(!winWidget) == scroll-thumb-minimum-size-theme.html scroll-thumb-minimum-size-theme.html
== border-radius.html border-radius.html

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

@ -2,17 +2,17 @@
# For more pagination tests, see layout/reftests/w3c-css/submitted/css21/pagination/
# and layout/reftests/w3c-css/submitted/multicol3/
# Pagination tests
# asserts(3) == abspos-breaking-000.xhtml abspos-breaking-000.xhtml
fails == abspos-breaking-000.xhtml abspos-breaking-000.xhtml
fails == abspos-breaking-001.xhtml abspos-breaking-001.xhtml
fails == abspos-breaking-002.xhtml abspos-breaking-002.xhtml
fails == abspos-breaking-003.html abspos-breaking-003.html
fails == abspos-breaking-004.html abspos-breaking-004.html
fails == abspos-breaking-005.html abspos-breaking-005.html
fails == abspos-breaking-006.html abspos-breaking-006.html
fails pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-007.html abspos-breaking-007.html
fails pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-008.html abspos-breaking-008.html
fails pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-009.html abspos-breaking-009.html
fails pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-010.html abspos-breaking-010.html
== abspos-breaking-003.html abspos-breaking-003.html
== abspos-breaking-004.html abspos-breaking-004.html
== abspos-breaking-005.html abspos-breaking-005.html
== abspos-breaking-006.html abspos-breaking-006.html
pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-007.html abspos-breaking-007.html
pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-008.html abspos-breaking-008.html
pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-009.html abspos-breaking-009.html
pref(layout.css.box-decoration-break.enabled,true) == abspos-breaking-010.html abspos-breaking-010.html
== abspos-breaking-011.html abspos-breaking-011.html
== abspos-overflow-01.xhtml abspos-overflow-01.xhtml
== abspos-overflow-01-cols.xhtml abspos-overflow-01-cols.xhtml
@ -46,7 +46,7 @@ fails == float-continuations-000.html float-continuations-000.html
fails == resize-reflow-000.html resize-reflow-000.html
fails == resize-reflow-001.html resize-reflow-001.html
== table-page-break-before-auto-1.html table-page-break-before-auto-1.html
#== table-page-break-before-auto-2.html table-page-break-before-auto-2-ref.html bug bug
fails == table-page-break-before-auto-2.html table-page-break-before-auto-2-ref.html
== table-page-break-before-always-1.html table-page-break-before-always-1.html
== table-page-break-before-left-1.html table-page-break-before-left-1.html
== table-page-break-before-right-1.html table-page-break-before-right-1.html

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

@ -33,4 +33,4 @@ fails == 820496-1.html 820496-1.html
fails == 960822.html 960822.html
fails == 966419-1.html 966419-1.html
fails == 966419-2.html 966419-2.html
# asserts(3) HTTP(..) fails 1108104.html 1108104-ref.html
fails HTTP(..) == 1108104.html 1108104-ref.html

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

@ -46,8 +46,8 @@ fails HTTP(..) == filter-2.xhtml filter-2.xhtml
# test that xulRuntime.OS works
== data:text/html,<body>Linux data:text/html,<body>Linux
# fails-if(xulRuntime.OS!="WINNT") == data:text/html,<body>Win data:text/html,<body>Win
# fails-if(xulRuntime.OS!="Darwin") == data:text/html,<body>Mac data:text/html,<body>Mac
== data:text/html,<body>Win data:text/html,<body>Win
== data:text/html,<body>Mac data:text/html,<body>Mac
# test parsing of asserts() expressions
asserts(0) load about:blank
@ -98,8 +98,8 @@ pref(dom.meta-viewport.enabled,true) skip-if(!browserIsRemote||layersOMTC) == te
# IPC Position-fixed frames/layers test
# Fixed layers are temporarily disabled (bug 656167).
#pref(dom.meta-viewport.enabled,true) skip-if(!browserIsRemote) == test-pos-fixed.html test-pos-fixed.html
#pref(dom.meta-viewport.enabled,true) skip-if(!browserIsRemote) == test-bg-attachment-fixed.html test-bg-attachment-fixed.html
pref(dom.meta-viewport.enabled,true) skip-if(!browserIsRemote) == test-pos-fixed.html test-pos-fixed.html
pref(dom.meta-viewport.enabled,true) skip-if(!browserIsRemote) == test-bg-attachment-fixed.html test-bg-attachment-fixed.html
pref(dom.meta-viewport.enabled,true) skip-if(!browserIsRemote) == test-pos-fixed-transform.html test-pos-fixed-transform.html
# reftest syntax: require-or

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

@ -257,7 +257,7 @@ fails == overflow-on-outer-svg-03b.xhtml overflow-on-outer-svg-03b.xhtml
pref(svg.paint-order.enabled,true) == paint-order-01.svg paint-order-01.svg
pref(svg.paint-order.enabled,true) == paint-order-02.svg paint-order-02.svg
pref(svg.paint-order.enabled,true) == paint-order-03.svg paint-order-03.svg
#fuzzy(23,60) fails-if(d2d) == path-01.svg path-01.svg
fuzzy(23,60) fails-if(d2d) == path-01.svg path-01.svg
== path-02.svg path-02.svg
== path-03.svg path-03.svg
== path-04.svg path-04.svg
@ -426,13 +426,13 @@ skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-layer-mas
skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-layer-opacity.svg blend-layer-opacity.svg
skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-lighten.svg blend-lighten.svg
skip-if(stylo) pref(layout.css.mix-blend-mode.enabled,true) == blend-luminosity.svg blend-luminosity.svg # Too intermittent
#skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-multiply-alpha.svg blend-multiply-alpha.svg
skip-if(stylo) skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-multiply-alpha.svg blend-multiply-alpha.svg
skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-multiply.svg blend-multiply.svg
pref(layout.css.mix-blend-mode.enabled,true) == blend-normal.svg blend-normal.svg
#skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-overlay.svg blend-overlay.svg
#skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-saturation.svg blend-saturation.svg
#skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-screen.svg blend-screen.svg
#skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-soft-light.svg blend-soft-light.svg
skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-overlay.svg blend-overlay.svg
skip-if(stylo) skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-saturation.svg blend-saturation.svg
skip-if(stylo) skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-screen.svg blend-screen.svg
skip-if(Android) pref(layout.css.mix-blend-mode.enabled,true) == blend-soft-light.svg blend-soft-light.svg
== blend-difference-stacking.html blend-difference-stacking.html
# test case for Fragment URLs

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

@ -290,12 +290,12 @@ random-if(Android) == object--auto-auto--0-pct.html object--auto-auto--0-pct.htm
random-if(Android) == object--auto-auto--0-px.html object--auto-auto--0-px.html
random-if(Android) == object--auto-auto--pct-0.html object--auto-auto--pct-0.html
# The following four commented out tests fail post bug 428023:
#== object--auto-auto--pct-pct.html object--auto-auto--pct-pct.html
#== object--auto-auto--pct-px.html object--auto-auto--pct-px.html
== object--auto-auto--pct-pct.html object--auto-auto--pct-pct.html
== object--auto-auto--pct-px.html object--auto-auto--pct-px.html
random-if(Android) == object--auto-auto--px-0.html object--auto-auto--px-0.html
#== object--auto-auto--px-pct.html object--auto-auto--px-pct.html
== object--auto-auto--px-pct.html object--auto-auto--px-pct.html
random-if(Android) == object--auto-auto--px-px.html object--auto-auto--px-px.html
#== object--pct-pct--0-0.html object--pct-pct--0-0.html
== object--pct-pct--0-0.html object--pct-pct--0-0.html
# Assorted tests to check that dynamic changes work correctly

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

@ -316,7 +316,7 @@ fails == auto-hyphenation-pl-1.html auto-hyphenation-pl-1.html
== auto-hyphenation-transformed-1.html auto-hyphenation-transformed-1.html
# osx-font-smoothing - with and without subpixel AA, only under OSX
# fails-if(!cocoaWidget||OSX==1006||OSX==1007) == osx-font-smoothing.html osx-font-smoothing.html
== osx-font-smoothing.html osx-font-smoothing.html
== osx-font-smoothing-2.html osx-font-smoothing-2.html
== osx-font-smoothing-2.html osx-font-smoothing-2.html

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

@ -99,7 +99,7 @@ fails == clip-path-strokeBox-1a.html clip-path-strokeBox-1a.html
fails == clip-path-strokeBox-1b.html clip-path-strokeBox-1b.html
fails == clip-path-viewBox-1a.html clip-path-viewBox-1a.html
fails == clip-path-viewBox-1b.html clip-path-viewBox-1b.html
# fuzzy(64,370) == clip-path-viewBox-1c.html clip-path-viewBox-1c.html
fails == clip-path-viewBox-1c.html clip-path-viewBox-1c.html
== clip-path-geometryBox-2.html clip-path-geometryBox-2.html
fails == clip-path-localRef-1.html clip-path-localRef-1.html

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

@ -6,9 +6,9 @@
# Frequent Windows 7 load failed: timed out waiting for test to complete (waiting for onload scripts to complete), bug 1167155 and friends
# Even though the whole reftest-stylo.list here is skipped, it doesn't actually work because reftests match the last
# **-if, which means even though we tried to skip this list,the fuzzy-if still matched forcing us to run the test.
== s71-abs-pos-non-replaced-vlr-003.xht s71-abs-pos-non-replaced-vlr-003.xht
== s71-abs-pos-non-replaced-vlr-005.xht s71-abs-pos-non-replaced-vlr-005.xht
== s71-abs-pos-non-replaced-vlr-007.xht s71-abs-pos-non-replaced-vlr-007.xht
fails == s71-abs-pos-non-replaced-vlr-003.xht s71-abs-pos-non-replaced-vlr-003.xht
fails == s71-abs-pos-non-replaced-vlr-005.xht s71-abs-pos-non-replaced-vlr-005.xht
fails == s71-abs-pos-non-replaced-vlr-007.xht s71-abs-pos-non-replaced-vlr-007.xht
fails == s71-abs-pos-non-replaced-vlr-009.xht s71-abs-pos-non-replaced-vlr-009.xht
fails == s71-abs-pos-non-replaced-vlr-011.xht s71-abs-pos-non-replaced-vlr-011.xht
fails == s71-abs-pos-non-replaced-vlr-013.xht s71-abs-pos-non-replaced-vlr-013.xht

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

@ -70,7 +70,7 @@ fails == ua-style-sheet-textarea-1.html ua-style-sheet-textarea-1.html
fails == ua-style-sheet-button-1.html ua-style-sheet-button-1.html
fails == ua-style-sheet-button-1.html ua-style-sheet-button-1.html
fails == ua-style-sheet-input-color-1.html ua-style-sheet-input-color-1.html
# fuzzy-if(gtkWidget,1,15) == ua-style-sheet-input-number-1.html ua-style-sheet-input-number-1.html
fuzzy-if(gtkWidget,1,15) skip-if(stylo) == ua-style-sheet-input-number-1.html ua-style-sheet-input-number-1.html # Bug 1341973
HTTP(..) == 1127488-align-default-horizontal-tb-ltr.html 1127488-align-default-horizontal-tb-ltr.html
HTTP(..) == 1127488-align-start-horizontal-tb-ltr.html 1127488-align-start-horizontal-tb-ltr.html
@ -188,7 +188,9 @@ fails == 1302389-scrolled-rect-2d.html 1302389-scrolled-rect-2d.html
# Suite of tests from Gérard Talbot in bug 1079151
# Frequent Windows 7 load failed: timed out waiting for test to complete (waiting for onload scripts to complete), bug 1167155 and friends
# Too many intermittents
# skip-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) include abspos/reftest-stylo.list
# Can't use skip-if(stylo) here, because any conditions used in the manifest we
# include will override it!
# skip-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) include abspos/reftest-stylo.list # Loads fail
# Tests for tables with vertical writing modes
include tables/reftest-stylo.list

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

@ -14,7 +14,7 @@
== test013.xul test013.xul
== test014.xul test014.xul
# Disabled due to compartments for now.
#== test015.xul test015.xul
== test015.xul test015.xul
== test016.xul test016.xul
== test017.xul test017.xul
== test018.xul test018.xul

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

@ -105,14 +105,14 @@ SERVO_BINDING_FUNC(Servo_ParseProperty,
const nsACString* base_url, ThreadSafeURIHolder* base,
ThreadSafeURIHolder* referrer,
ThreadSafePrincipalHolder* principal)
SERVO_BINDING_FUNC(Servo_GetComputedKeyframeValues, void,
RawGeckoKeyframeListBorrowed keyframes,
ServoComputedValuesBorrowed style,
ServoComputedValuesBorrowedOrNull parent_style,
RawGeckoPresContextBorrowed pres_context,
RawGeckoComputedKeyframeValuesListBorrowedMut result)
// AnimationValues handling
SERVO_BINDING_FUNC(Servo_AnimationValues_Populate, void,
RawGeckoAnimationValueListBorrowedMut,
RawServoDeclarationBlockBorrowed,
ServoComputedValuesBorrowed,
ServoComputedValuesBorrowedOrNull,
RawGeckoPresContextBorrowed)
SERVO_BINDING_FUNC(Servo_AnimationValues_Interpolate,
RawServoAnimationValueStrong,
RawServoAnimationValueBorrowed from,
@ -130,6 +130,9 @@ SERVO_BINDING_FUNC(Servo_AnimationValue_GetOpacity, float,
SERVO_BINDING_FUNC(Servo_AnimationValue_GetTransform, void,
RawServoAnimationValueBorrowed value,
RefPtr<nsCSSValueSharedList>* list)
SERVO_BINDING_FUNC(Servo_AnimationValue_DeepEqual, bool,
RawServoAnimationValueBorrowed,
RawServoAnimationValueBorrowed)
// Style attribute
SERVO_BINDING_FUNC(Servo_ParseStyleAttribute, RawServoDeclarationBlockStrong,

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

@ -27,6 +27,7 @@ class StyleChildrenIterator;
} // namespace dom
struct Keyframe;
struct PropertyStyleAnimationValuePair;
using ComputedKeyframeValues = nsTArray<PropertyStyleAnimationValuePair>;
} // namespace mozilla
class nsCSSValue;
@ -42,6 +43,7 @@ typedef mozilla::dom::Element RawGeckoElement;
typedef nsIDocument RawGeckoDocument;
typedef nsPresContext RawGeckoPresContext;
typedef nsTArray<mozilla::Keyframe> RawGeckoKeyframeList;
typedef nsTArray<mozilla::ComputedKeyframeValues> RawGeckoComputedKeyframeValuesList;
typedef nsTArray<mozilla::PropertyStyleAnimationValuePair> RawGeckoAnimationValueList;
typedef nsTArray<const RawServoAnimationValue*> RawServoAnimationValueBorrowedList;
@ -116,6 +118,8 @@ DECL_BORROWED_REF_TYPE_FOR(RawGeckoPresContext)
DECL_BORROWED_MUT_REF_TYPE_FOR(RawGeckoAnimationValueList)
DECL_BORROWED_REF_TYPE_FOR(RawServoAnimationValueBorrowedList)
DECL_BORROWED_MUT_REF_TYPE_FOR(RawGeckoKeyframeList)
DECL_BORROWED_REF_TYPE_FOR(RawGeckoKeyframeList)
DECL_BORROWED_MUT_REF_TYPE_FOR(RawGeckoComputedKeyframeValuesList)
#undef DECL_ARC_REF_TYPE_FOR
#undef DECL_OWNED_REF_TYPE_FOR

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

@ -576,11 +576,7 @@ struct AnimationValue
StyleAnimationValue mGecko;
RefPtr<RawServoAnimationValue> mServo;
bool operator==(const AnimationValue& aOther) const
{
// FIXME: Bug 1337229: add a deep == impl for RawServoAnimationValue.
return mGecko == aOther.mGecko && mServo == aOther.mServo;
}
inline bool operator==(const AnimationValue& aOther) const;
bool IsNull() const { return mGecko.IsNull() && !mServo; }

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

@ -11,6 +11,16 @@
namespace mozilla {
bool
AnimationValue::operator==(const AnimationValue& aOther) const
{
// mGecko and mServo are mutual exclusive, one of them must be null
if (mServo) {
return Servo_AnimationValue_DeepEqual(mServo, aOther.mServo);
}
return mGecko == aOther.mGecko;
}
float
AnimationValue::GetOpacity() const
{

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

@ -179,11 +179,51 @@ nsStyleContext::FinishConstruction(bool aSkipParentDisplayBasedStyleFixup)
#undef eStyleStruct_LastItem
}
void
nsStyleContext::EnsureStructsForServo(const nsStyleContext* aOldContext)
{
MOZ_ASSERT(aOldContext);
MOZ_ASSERT(mSource.IsServoComputedValues() &&
aOldContext->mSource.IsServoComputedValues());
// NOTE(emilio): We could do better here. We only call Style##name_() because
// we need to run FinishStyle, but otherwise this is only a bitwise or.
//
// We could reduce the FFI traffic we do only doing it for structs that have
// non-trivial FinishStyle.
#define STYLE_STRUCT(name_, checkdata_cb) \
if (aOldContext->mBits & NS_STYLE_INHERIT_BIT(name_)) { \
mozilla::Unused << Style##name_(); \
}
#include "nsStyleStructList.h"
#undef STYLE_STRUCT
#ifdef DEBUG
auto oldMask = aOldContext->mBits & NS_STYLE_INHERIT_MASK;
auto newMask = mBits & NS_STYLE_INHERIT_MASK;
MOZ_ASSERT((oldMask & newMask) == oldMask,
"Should have at least as many structs computed as the "
"old context!");
#endif
}
nsStyleContext::~nsStyleContext()
{
NS_ASSERTION((nullptr == mChild) && (nullptr == mEmptyChild), "destructing context with children");
MOZ_ASSERT_IF(mSource.IsServoComputedValues(), !mCachedResetData);
#ifdef DEBUG
if (mSource.IsServoComputedValues()) {
MOZ_ASSERT(!mCachedResetData,
"Servo shouldn't cache reset structs in nsStyleContext");
for (const auto* data : mCachedInheritedData.mStyleStructs) {
MOZ_ASSERT(!data,
"Servo shouldn't cache inherit structs in nsStyleContext");
}
}
if (sExpensiveStyleStructAssertionsEnabled) {
// Assert that the style structs we are about to destroy are not referenced
// anywhere else in the style context tree. These checks are expensive,
@ -586,6 +626,8 @@ nsStyleContext::CreateEmptyStyleData(const nsStyleStructID& aSID)
void
nsStyleContext::SetStyle(nsStyleStructID aSID, void* aStruct)
{
MOZ_ASSERT(!mSource.IsServoComputedValues(),
"Servo shouldn't cache style structs in the style context!");
// This method should only be called from nsRuleNode! It is not a public
// method!

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

@ -384,6 +384,14 @@ public:
#include "nsStyleStructList.h"
#undef STYLE_STRUCT
/**
* Ensures that this context's computed struct list is at least the old
* context's.
*
* aOldContext must not be null.
*/
void EnsureStructsForServo(const nsStyleContext* aOldContext);
/**
* Compute the style changes needed during restyling when this style
* context is being replaced by aNewContext. (This is nonsymmetric since
@ -601,6 +609,7 @@ private:
#define STYLE_STRUCT_INHERITED(name_, checkdata_cb_) \
template<bool aComputeData> \
const nsStyle##name_ * DoGetStyle##name_() { \
if (mSource.IsGeckoRuleNode()) { \
const nsStyle##name_ * cachedData = \
static_cast<nsStyle##name_*>( \
mCachedInheritedData.mStyleStructs[eStyleStruct_##name_]); \
@ -613,13 +622,17 @@ private:
} \
/* Have the rulenode deal */ \
AUTO_CHECK_DEPENDENCY(eStyleStruct_##name_); \
const nsStyle##name_ * newData; \
if (mSource.IsGeckoRuleNode()) { \
newData = mSource.AsGeckoRuleNode()-> \
const nsStyle##name_ * newData = \
mSource.AsGeckoRuleNode()-> \
GetStyle##name_<aComputeData>(this, mBits); \
} else { \
/* always cache inherited data on the style context; the rule */\
/* node set the bit in mBits for us if needed. */ \
mCachedInheritedData.mStyleStructs[eStyleStruct_##name_] = \
const_cast<nsStyle##name_ *>(newData); \
return newData; \
} \
/** \
* Reach the parent to grab the inherited style struct if \
* Always forward to the parent to grab the inherited style struct\
* we're a text node. \
* \
* This causes the parent element's style context to cache any \
@ -656,28 +669,34 @@ private:
*/ \
if (mPseudoTag == nsCSSAnonBoxes::mozText) { \
MOZ_ASSERT(mParent); \
newData = mParent->DoGetStyle##name_<true>(); \
NS_WARNING_ASSERTION( \
newData == Servo_GetStyle##name_(mSource.AsServoComputedValues()), \
"bad newData"); \
} else { \
newData = \
Servo_GetStyle##name_(mSource.AsServoComputedValues()); \
const nsStyle##name_* data = \
mParent->DoGetStyle##name_<aComputeData>(); \
NS_WARNING_ASSERTION(!data || \
data == Servo_GetStyle##name_(mSource.AsServoComputedValues()), \
"bad data"); \
return data; \
} \
\
const bool needToCompute = !(mBits & NS_STYLE_INHERIT_BIT(name_));\
if (!aComputeData && needToCompute) { \
return nullptr; \
} \
\
const nsStyle##name_* data = \
Servo_GetStyle##name_(mSource.AsServoComputedValues()); \
/* perform any remaining main thread work on the struct */ \
const_cast<nsStyle##name_*>(newData)->FinishStyle(PresContext());\
if (needToCompute) { \
const_cast<nsStyle##name_*>(data)->FinishStyle(PresContext()); \
/* the Servo-backed StyleContextSource owns the struct */ \
AddStyleBit(NS_STYLE_INHERIT_BIT(name_)); \
} \
/* always cache inherited data on the style context; the rule */ \
/* node set the bit in mBits for us if needed. */ \
mCachedInheritedData.mStyleStructs[eStyleStruct_##name_] = \
const_cast<nsStyle##name_ *>(newData); \
return newData; \
return data; \
}
#define STYLE_STRUCT_RESET(name_, checkdata_cb_) \
template<bool aComputeData> \
const nsStyle##name_ * DoGetStyle##name_() { \
if (mSource.IsGeckoRuleNode()) { \
if (mCachedResetData) { \
const nsStyle##name_ * cachedData = \
static_cast<nsStyle##name_*>( \
@ -687,33 +706,22 @@ private:
} \
/* Have the rulenode deal */ \
AUTO_CHECK_DEPENDENCY(eStyleStruct_##name_); \
const nsStyle##name_ * newData; \
if (mSource.IsGeckoRuleNode()) { \
newData = mSource.AsGeckoRuleNode()-> \
return mSource.AsGeckoRuleNode()-> \
GetStyle##name_<aComputeData>(this); \
} else { \
newData = \
} \
const bool needToCompute = !(mBits & NS_STYLE_INHERIT_BIT(name_));\
if (!aComputeData && needToCompute) { \
return nullptr; \
} \
const nsStyle##name_* data = \
Servo_GetStyle##name_(mSource.AsServoComputedValues()); \
/* perform any remaining main thread work on the struct */ \
const_cast<nsStyle##name_*>(newData)->FinishStyle(PresContext());\
/* The Servo-backed StyleContextSource owns the struct. \
* \
* XXXbholley: Unconditionally caching reset structs here \
* defeats the memory optimization where we lazily allocate \
* mCachedResetData, so that we can avoid performing an FFI \
* call each time we want to get the style structs. We should \
* measure the tradeoffs at some point. If the FFI overhead is \
* low and the memory win significant, we should consider \
* _always_ grabbing the struct over FFI, and potentially \
* giving mCachedInheritedData the same treatment. \
* \
* Note that there is a similar comment in StyleData(). \
*/ \
if (needToCompute) { \
const_cast<nsStyle##name_*>(data)->FinishStyle(PresContext()); \
/* the Servo-backed StyleContextSource owns the struct */ \
AddStyleBit(NS_STYLE_INHERIT_BIT(name_)); \
SetStyle(eStyleStruct_##name_, \
const_cast<nsStyle##name_*>(newData)); \
} \
return newData; \
return data; \
}
#include "nsStyleStructList.h"
#undef STYLE_STRUCT_RESET

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

@ -314,13 +314,8 @@ Any line which doesn't follow the format above would be ignored like comment.
* test_initial_computation.html `counter-increment` [4]
* test_initial_storage.html `counter-increment` [4]
* test_value_storage.html `counter-increment` [30]
* clip property
* test_compute_data_with_start_struct.html `clip` [2]
* test_inherit_computation.html `clip` [2]
* test_inherit_storage.html `clip` [2]
* test_initial_computation.html `'clip'` [4]
* test_initial_storage.html `clip` [4]
* test_value_storage.html `on 'clip'` [12]
* clip property: servo/servo#15729
* test_value_storage.html `should be idempotent for 'clip` [4]
* font-feature-settings property
* test_compute_data_with_start_struct.html `font-feature-settings` [2]
* test_inherit_computation.html `font-feature-settings` [8]
@ -401,7 +396,7 @@ Any line which doesn't follow the format above would be ignored like comment.
* ... `mask-repeat` [24]
* lack glue for function values of content property bug 1296477
* test_rule_insertion.html `decimal counter` [3]
* test_value_storage.html `'content` [41]
* test_value_storage.html `'content` [40]
* SVG-in-OpenType values not supported servo/servo#15211
* test_value_storage.html `context-` [2]
* writing-mode: sideways-{lr,rl} and SVG values servo/servo#15213
@ -436,6 +431,8 @@ Any line which doesn't follow the format above would be ignored like comment.
* test_property_syntax_errors.html `transform-origin'` [50]
* ... `perspective-origin'` [30]
* test_property_syntax_errors.html `'text-overflow'`: servo/servo#15491 [8]
* -moz-alt-content parsing is wrong: servo/servo#15726
* test_property_syntax_errors.html `-moz-alt-content` [4]
* Incorrect serialization
* border-radius and -moz-outline-radius shorthand servo/servo#15169
* test_priority_preservation.html `border-radius` [4]
@ -489,7 +486,6 @@ Any line which doesn't follow the format above would be ignored like comment.
* rounding issue
* test_value_storage.html `33.5833px` [2]
* ... `0.766667px` [2]
* ... `75.5667px` [2]
* ... `105.333px` [2]
* test_viewport_units.html: viewport units support [12]
* test_value_storage.html `: var(--a)`: extra whitespace is added for shorthand with variables servo/servo#15295 [*]
@ -517,7 +513,7 @@ Any line which doesn't follow the format above would be ignored like comment.
* ... ` 2 ` [26]
* ... `: 5 ` [84]
* ... `border-spacing: ` [6]
* ... `rect(1, ` [1]
* ... `rect(1, ` [2]
* test_pseudoelement_parsing.html: support parsing some pseudo-classes on some pseudo-elements [5]
* Unit should be preserved after parsing servo/servo#15346
* test_units_length.html [5]

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

@ -52,14 +52,14 @@ class ReftestFormatter(TbplFormatter):
if "reftest_screenshots" in extra:
screenshots = extra["reftest_screenshots"]
image_1 = screenshots[0]["screenshot"]
image_2 = screenshots[2]["screenshot"]
if len(screenshots) == 3:
image_2 = screenshots[2]["screenshot"]
output_text += ("\nREFTEST IMAGE 1 (TEST): data:image/png;base64,%s\n"
"REFTEST IMAGE 2 (REFERENCE): data:image/png;base64,%s") % (
image_1, image_2)
elif len(screenshots) == 1:
output_text += "\nREFTEST IMAGE: data:image/png;base64,%(image1)s" % image_1
output_text += "\nREFTEST IMAGE: data:image/png;base64,%s" % image_1
output_text += "\nREFTEST TEST-END | %s" % test
return "%s\n" % output_text

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

@ -1762,7 +1762,12 @@ function RecordResult(testRunTime, errorMsg, scriptResults)
message += (", max difference: " + extra.max_difference +
", number of differing pixels: " + differences);
} else {
extra.image1 = gCanvas1.toDataURL();
var image1 = gCanvas1.toDataURL();
extra.reftest_screenshots = [
{url:gURLs[0].identifier[0],
screenshot: image1.slice(image1.indexOf(",") + 1)}
];
extra.image1 = image1;
}
}
logger.testEnd(gURLs[0].identifier, output.s[0], output.s[1], message, null, extra);

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

@ -13,3 +13,4 @@ Landry Breuil <landry@openbsd.org>
Jacek Caban <jacek@codeweavers.com>
Paul Hancock <Paul.Hancock.17041993@live.com>
Ted Mielczarek <ted@mielczarek.org>
Chun-Min Chang <chun.m.chang@gmail.com>

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

@ -5,4 +5,4 @@ Makefile.in build files for the Mozilla build system.
The cubeb git repository is: git://github.com/kinetiknz/cubeb.git
The git commit ID used was 8977c13bf0dab9a7716501ae92ca5945fe4e1dae.
The git commit ID used was 25b593fa59d0c284ff2de54b10db927d48579f5e.

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

@ -41,12 +41,6 @@ typedef UInt32 AudioFormatFlags;
#define AU_OUT_BUS 0
#define AU_IN_BUS 1
#define fieldOffset(type, field) ((size_t) &((type *) 0)->field)
#define PRINT_ERROR_CODE(str, r) do { \
LOG("System call failed: %s (rv: %d)", str, (int) r); \
} while(0)
const char * DISPATCH_QUEUE_LABEL = "org.mozilla.cubeb";
#ifdef ALOGV
@ -72,7 +66,6 @@ static int audiounit_setup_stream(cubeb_stream *stm);
static int audiounit_create_unit(AudioUnit * unit, bool is_input,
const cubeb_stream_params * /* stream_params */,
AudioDeviceID device);
static cubeb_channel_layout audiounit_get_channel_layout(bool preferred);
extern cubeb_ops const audiounit_ops;
@ -88,6 +81,8 @@ struct cubeb {
std::vector<AudioObjectID> devtype_device_array;
// The queue is asynchronously deallocated once all references to it are released
dispatch_queue_t serial_queue = dispatch_queue_create(DISPATCH_QUEUE_LABEL, DISPATCH_QUEUE_SERIAL);
// Current used channel layout
cubeb_channel_layout layout;
};
struct auto_array_wrapper {
@ -100,6 +95,53 @@ struct auto_array_wrapper {
virtual ~auto_array_wrapper() {}
};
template <typename T>
struct auto_array_wrapper_impl : public auto_array_wrapper {
explicit auto_array_wrapper_impl(uint32_t size)
: ar(size)
{}
void push(void * elements, size_t length) override {
auto_lock l(lock);
ar.push(static_cast<T *>(elements), length);
}
size_t length() override {
auto_lock l(lock);
return ar.length();
}
void push_silence(size_t length) override {
auto_lock l(lock);
ar.push_silence(length);
}
bool pop(size_t length) override {
auto_lock l(lock);
return ar.pop(nullptr, length);
}
// XXX: Taking the lock here is pointless.
void * data() override {
auto_lock l(lock);
return ar.data();
}
void clear() override {
auto_lock l(lock);
ar.clear();
}
~auto_array_wrapper_impl() {
auto_lock l(lock);
ar.clear();
}
private:
owned_critical_section lock;
auto_array<T> ar;
};
class auto_channel_layout
{
public:
@ -148,58 +190,22 @@ private:
AudioChannelLayout * layout;
};
template <typename T>
struct auto_array_wrapper_impl : public auto_array_wrapper {
explicit auto_array_wrapper_impl(uint32_t size)
: ar(size)
{}
void push(void * elements, size_t length) override {
auto_lock l(lock);
ar.push(static_cast<T *>(elements), length);
}
size_t length() override {
auto_lock l(lock);
return ar.length();
}
void push_silence(size_t length) override {
auto_lock l(lock);
ar.push_silence(length);
}
bool pop(size_t length) override {
auto_lock l(lock);
return ar.pop(nullptr, length);
}
// XXX: Taking the lock here is pointless.
void * data() override {
auto_lock l(lock);
return ar.data();
}
void clear() override {
auto_lock l(lock);
ar.clear();
}
~auto_array_wrapper_impl() {
auto_lock l(lock);
ar.clear();
}
private:
owned_critical_section lock;
auto_array<T> ar;
};
enum io_side {
INPUT,
OUTPUT,
};
static char const *
to_string(io_side side)
{
switch (side) {
case INPUT:
return "input";
case OUTPUT:
return "output";
}
}
struct cubeb_stream {
explicit cubeb_stream(cubeb * context);
@ -378,7 +384,7 @@ audiounit_render_input(cubeb_stream * stm,
&input_buffer_list);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitRender", r);
LOG("AudioUnitRender rv=%d", r);
return r;
}
@ -616,7 +622,7 @@ audiounit_get_output_device_id(AudioDeviceID * device_id)
&size,
device_id);
if (r != noErr) {
PRINT_ERROR_CODE("output_device_id", r);
LOG("output_device_id rv=%d", r);
return CUBEB_ERROR;
}
@ -801,7 +807,7 @@ audiounit_install_device_changed_callback(cubeb_stream * stm)
r = audiounit_add_listener(stm, output_dev_id, kAudioDevicePropertyDataSource,
kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource", r);
LOG("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource rv=%d", r);
return CUBEB_ERROR;
}
@ -812,7 +818,7 @@ audiounit_install_device_changed_callback(cubeb_stream * stm)
r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice,
kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice", r);
LOG("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice rv=%d", r);
return CUBEB_ERROR;
}
}
@ -828,7 +834,7 @@ audiounit_install_device_changed_callback(cubeb_stream * stm)
r = audiounit_add_listener(stm, input_dev_id, kAudioDevicePropertyDataSource,
kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource", r);
LOG("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource rv=%d", r);
return CUBEB_ERROR;
}
@ -836,7 +842,7 @@ audiounit_install_device_changed_callback(cubeb_stream * stm)
r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice,
kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice", r);
LOG("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice rv=%d", r);
return CUBEB_ERROR;
}
@ -846,7 +852,7 @@ audiounit_install_device_changed_callback(cubeb_stream * stm)
r = audiounit_add_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive,
kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r);
LOG("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive rv=%d", r);
return CUBEB_ERROR;
}
}
@ -904,7 +910,7 @@ audiounit_uninstall_device_changed_callback(cubeb_stream * stm)
r = audiounit_remove_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive,
kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r);
LOG("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDeviceIsAlive rv=%d", r);
return CUBEB_ERROR;
}
}
@ -939,7 +945,7 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range)
&size,
latency_range);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectGetPropertyData/buffer size range", r);
LOG("AudioObjectGetPropertyData/buffer size range rv=%d", r);
return CUBEB_ERROR;
}
@ -1002,7 +1008,7 @@ audiounit_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
&size,
&stream_format);
if (r != noErr) {
PRINT_ERROR_CODE("AudioObjectPropertyAddress/StreamFormat", r);
LOG("AudioObjectPropertyAddress/StreamFormat rv=%d", r);
return CUBEB_ERROR;
}
@ -1071,17 +1077,111 @@ audiounit_get_preferred_sample_rate(cubeb * /* ctx */, uint32_t * rate)
return CUBEB_OK;
}
static cubeb_channel_layout
audiounit_convert_channel_layout(AudioChannelLayout * layout)
{
if (layout->mChannelLayoutTag != kAudioChannelLayoutTag_UseChannelDescriptions) {
// kAudioChannelLayoutTag_UseChannelBitmap
// kAudioChannelLayoutTag_Mono
// kAudioChannelLayoutTag_Stereo
// ....
LOG("Only handle UseChannelDescriptions for now.\n");
return CUBEB_LAYOUT_UNDEFINED;
}
cubeb_channel_map cm;
cm.channels = layout->mNumberChannelDescriptions;
for (UInt32 i = 0; i < layout->mNumberChannelDescriptions; ++i) {
cm.map[i] = channel_label_to_cubeb_channel(layout->mChannelDescriptions[i].mChannelLabel);
}
return cubeb_channel_map_to_layout(&cm);
}
static cubeb_channel_layout
audiounit_get_current_channel_layout(AudioUnit output_unit)
{
OSStatus rv = noErr;
UInt32 size = 0;
rv = AudioUnitGetPropertyInfo(output_unit,
kAudioUnitProperty_AudioChannelLayout,
kAudioUnitScope_Output,
AU_OUT_BUS,
&size,
nullptr);
if (rv != noErr) {
LOG("AudioUnitGetPropertyInfo/kAudioUnitProperty_AudioChannelLayout rv=%d", rv);
return CUBEB_LAYOUT_UNDEFINED;
}
assert(size > 0);
auto_channel_layout layout(size);
rv = AudioUnitGetProperty(output_unit,
kAudioUnitProperty_AudioChannelLayout,
kAudioUnitScope_Output,
AU_OUT_BUS,
layout.get(),
&size);
if (rv != noErr) {
LOG("AudioUnitGetProperty/kAudioUnitProperty_AudioChannelLayout rv=%d", rv);
return CUBEB_LAYOUT_UNDEFINED;
}
return audiounit_convert_channel_layout(layout.get());
}
static cubeb_channel_layout
audiounit_get_preferred_channel_layout()
{
OSStatus rv = noErr;
UInt32 size = 0;
AudioDeviceID id;
if (audiounit_get_output_device_id(&id) != CUBEB_OK) {
return CUBEB_LAYOUT_UNDEFINED;
}
AudioObjectPropertyAddress adr = { kAudioDevicePropertyPreferredChannelLayout,
kAudioDevicePropertyScopeOutput,
kAudioObjectPropertyElementMaster };
rv = AudioObjectGetPropertyDataSize(id, &adr, 0, NULL, &size);
if (rv != noErr) {
return CUBEB_LAYOUT_UNDEFINED;
}
assert(size > 0);
auto_channel_layout layout(size);
rv = AudioObjectGetPropertyData(id, &adr, 0, NULL, &size, layout.get());
if (rv != noErr) {
return CUBEB_LAYOUT_UNDEFINED;
}
return audiounit_convert_channel_layout(layout.get());
}
static int
audiounit_get_preferred_channel_layout(cubeb * /* ctx */, cubeb_channel_layout * layout)
audiounit_get_preferred_channel_layout(cubeb * ctx, cubeb_channel_layout * layout)
{
// The preferred layout is only returned when the connected sound device
// (e.g. ASUS Xonar U7), has preferred layout setting.
// For default output on Mac, there is no preferred channel layout,
// so it might return UNDEFINED.
// In that case, we should get the channel configuration directly.
*layout = audiounit_get_channel_layout(true);
*layout = audiounit_get_preferred_channel_layout();
// If the preferred channel layout is UNDEFINED, then we try to access the
// current applied channel layout.
if (*layout == CUBEB_LAYOUT_UNDEFINED) {
*layout = audiounit_get_channel_layout(false);
// If we already have at least one cubeb stream, then the current channel
// layout must be updated. We can return it directly.
if (ctx->active_streams) {
return ctx->layout;
}
// If there is no existed stream, then we create a default ouput unit and
// use it to get the current used channel layout.
AudioUnit output_unit;
audiounit_create_unit(&output_unit, false, nullptr, 0);
*layout = audiounit_get_current_channel_layout(output_unit);
}
if (*layout == CUBEB_LAYOUT_UNDEFINED) {
@ -1155,10 +1255,14 @@ audio_stream_desc_init(AudioStreamBasicDescription * ss,
}
static int
audiounit_layout_init(AudioUnit * unit,
audiounit_set_channel_layout(AudioUnit unit,
io_side side,
const cubeb_stream_params * stream_params)
{
if (side != OUTPUT) {
return CUBEB_ERROR;
}
assert(stream_params->layout != CUBEB_LAYOUT_UNDEFINED);
assert(stream_params->channels == CUBEB_CHANNEL_LAYOUT_MAPS[stream_params->layout].channels);
@ -1199,7 +1303,7 @@ audiounit_layout_init(AudioUnit * unit,
// For those layouts that can't be matched to coreaudio's predefined layout,
// we use customized layout.
if (layout.get()->mChannelLayoutTag == kAudioChannelLayoutTag_Unknown) {
size_t size = fieldOffset(AudioChannelLayout, mChannelDescriptions[stream_params->channels]);
size_t size = offsetof(AudioChannelLayout, mChannelDescriptions[stream_params->channels]);
layout.reset(size);
layout.get()->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
layout.get()->mNumberChannelDescriptions = stream_params->channels;
@ -1210,24 +1314,38 @@ audiounit_layout_init(AudioUnit * unit,
}
}
r = AudioUnitSetProperty(*unit,
r = AudioUnitSetProperty(unit,
kAudioUnitProperty_AudioChannelLayout,
side == INPUT ? kAudioUnitScope_Output : kAudioUnitScope_Input,
side == INPUT ? AU_IN_BUS : AU_OUT_BUS,
kAudioUnitScope_Input,
AU_OUT_BUS,
layout.get(),
layout.size());
if (r != noErr) {
if (side == INPUT) {
PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_AudioChannelLayout", r);
} else {
PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_AudioChannelLayout", r);
}
LOG("AudioUnitSetProperty/%s/kAudioUnitProperty_AudioChannelLayout rv=%d", to_string(side), r);
return CUBEB_ERROR;
}
return CUBEB_OK;
}
void
audiounit_layout_init(cubeb_stream * stm, io_side side)
{
// We currently don't support the input layout setting.
if (side == INPUT) {
return;
}
audiounit_set_channel_layout(stm->output_unit, OUTPUT, &stm->output_stream_params);
// Update the current used channel layout for the cubeb context.
// Notice that this channel layout may be different from the layout we set above,
// because OSX doesn't return error when the output device can NOT provide
// our desired layout. Thus, we update the layout evertime when the cubeb_stream
// is created and use it when we need to mix audio data.
stm->context->layout = audiounit_get_current_channel_layout(stm->output_unit);
}
static int
audiounit_create_unit(AudioUnit * unit,
bool is_input,
@ -1267,7 +1385,7 @@ audiounit_create_unit(AudioUnit * unit,
rv = AudioComponentInstanceNew(comp, unit);
if (rv != noErr) {
PRINT_ERROR_CODE("AudioComponentInstanceNew", rv);
LOG("AudioComponentInstanceNew rv=%d", rv);
return CUBEB_ERROR;
}
@ -1277,7 +1395,7 @@ audiounit_create_unit(AudioUnit * unit,
is_input ? kAudioUnitScope_Input : kAudioUnitScope_Output,
is_input ? AU_IN_BUS : AU_OUT_BUS, &enable, sizeof(UInt32));
if (rv != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO", rv);
LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO rv=%d", rv);
return CUBEB_ERROR;
}
@ -1286,7 +1404,7 @@ audiounit_create_unit(AudioUnit * unit,
is_input ? kAudioUnitScope_Output : kAudioUnitScope_Input,
is_input ? AU_OUT_BUS : AU_IN_BUS, &enable, sizeof(UInt32));
if (rv != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO", rv);
LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO rv=%d", rv);
return CUBEB_ERROR;
}
@ -1301,7 +1419,7 @@ audiounit_create_unit(AudioUnit * unit,
is_input ? AU_IN_BUS : AU_OUT_BUS,
&devid, sizeof(AudioDeviceID));
if (rv != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_CurrentDevice", rv);
LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_CurrentDevice rv=%d", rv);
return CUBEB_ERROR;
}
}
@ -1346,7 +1464,7 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames)
&output_buffer_size,
&size);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r);
LOG("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize rv=%d", r);
return 0;
}
@ -1363,7 +1481,7 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames)
&input_buffer_size,
&size);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r);
LOG("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize rv=%d", r);
return 0;
}
@ -1407,7 +1525,7 @@ buffer_size_changed_callback(void * inClientData,
AudioUnit au = inUnit;
AudioUnitScope au_scope = kAudioUnitScope_Input;
AudioUnitElement au_element = inElement;
const char * au_type = "output";
char const * au_type = "output";
if (au == stm->input_unit) {
au_scope = kAudioUnitScope_Output;
@ -1446,13 +1564,11 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side
AudioUnit au = stm->output_unit;
AudioUnitScope au_scope = kAudioUnitScope_Input;
AudioUnitElement au_element = AU_OUT_BUS;
const char * au_type = "output";
if (side == INPUT) {
au = stm->input_unit;
au_scope = kAudioUnitScope_Output;
au_element = AU_IN_BUS;
au_type = "input";
}
uint32_t buffer_frames = 0;
@ -1464,16 +1580,12 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side
&buffer_frames,
&size);
if (r != noErr) {
if (side == INPUT) {
PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r);
} else {
PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r);
}
LOG("AudioUnitGetProperty/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r);
return CUBEB_ERROR;
}
if (new_size_frames == buffer_frames) {
LOG("(%p) No need to update %s buffer size already %u frames", stm, au_type, buffer_frames);
LOG("(%p) No need to update %s buffer size already %u frames", stm, to_string(side), buffer_frames);
return CUBEB_OK;
}
@ -1482,11 +1594,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side
buffer_size_changed_callback,
stm);
if (r != noErr) {
if (side == INPUT) {
PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r);
} else {
PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r);
}
LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r);
return CUBEB_ERROR;
}
@ -1499,22 +1607,14 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side
&new_size_frames,
sizeof(new_size_frames));
if (r != noErr) {
if (side == INPUT) {
PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r);
} else {
PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r);
}
LOG("AudioUnitSetProperty/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r);
r = AudioUnitRemovePropertyListenerWithUserData(au,
kAudioDevicePropertyBufferFrameSize,
buffer_size_changed_callback,
stm);
if (r != noErr) {
if (side == INPUT) {
PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r);
} else {
PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r);
}
LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r);
}
return CUBEB_ERROR;
@ -1536,11 +1636,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side
buffer_size_changed_callback,
stm);
if (r != noErr) {
if (side == INPUT) {
PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r);
} else {
PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r);
}
LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r);
return CUBEB_ERROR;
}
@ -1549,7 +1645,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side
return CUBEB_ERROR;
}
LOG("(%p) %s buffer size changed to %u frames.", stm, au_type, new_size_frames);
LOG("(%p) %s buffer size changed to %u frames.", stm, to_string(side), new_size_frames);
return CUBEB_OK;
}
@ -1574,7 +1670,7 @@ audiounit_configure_input(cubeb_stream * stm)
&input_hw_desc,
&size);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r);
LOG("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat rv=%d", r);
return CUBEB_ERROR;
}
stm->input_hw_rate = input_hw_desc.mSampleRate;
@ -1607,7 +1703,7 @@ audiounit_configure_input(cubeb_stream * stm)
&src_desc,
sizeof(AudioStreamBasicDescription));
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r);
LOG("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat rv=%d", r);
return CUBEB_ERROR;
}
@ -1619,7 +1715,7 @@ audiounit_configure_input(cubeb_stream * stm)
&stm->input_buffer_frames,
sizeof(UInt32));
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r);
LOG("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice rv=%d", r);
return CUBEB_ERROR;
}
@ -1644,7 +1740,7 @@ audiounit_configure_input(cubeb_stream * stm)
&aurcbs_in,
sizeof(aurcbs_in));
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r);
LOG("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback rv=%d", r);
return CUBEB_ERROR;
}
LOG("(%p) Input audiounit init successfully.", stm);
@ -1681,7 +1777,7 @@ audiounit_configure_output(cubeb_stream * stm)
&output_hw_desc,
&size);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioUnitProperty_StreamFormat", r);
LOG("AudioUnitGetProperty/output/kAudioUnitProperty_StreamFormat rv=%d", r);
return CUBEB_ERROR;
}
stm->output_hw_rate = output_hw_desc.mSampleRate;
@ -1694,7 +1790,7 @@ audiounit_configure_output(cubeb_stream * stm)
&stm->output_desc,
sizeof(AudioStreamBasicDescription));
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r);
LOG("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat rv=%d", r);
return CUBEB_ERROR;
}
@ -1712,7 +1808,7 @@ audiounit_configure_output(cubeb_stream * stm)
&stm->latency_frames,
sizeof(UInt32));
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice", r);
LOG("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice rv=%d", r);
return CUBEB_ERROR;
}
@ -1726,11 +1822,11 @@ audiounit_configure_output(cubeb_stream * stm)
&aurcbs_out,
sizeof(aurcbs_out));
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r);
LOG("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback rv=%d", r);
return CUBEB_ERROR;
}
audiounit_layout_init(&stm->output_unit, OUTPUT, &stm->output_stream_params);
audiounit_layout_init(stm, OUTPUT);
LOG("(%p) Output audiounit init successfully.", stm);
return CUBEB_OK;
@ -1872,7 +1968,7 @@ audiounit_setup_stream(cubeb_stream * stm)
if (stm->input_unit != NULL) {
r = AudioUnitInitialize(stm->input_unit);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitInitialize/input", r);
LOG("AudioUnitInitialize/input rv=%d", r);
return CUBEB_ERROR;
}
}
@ -1880,7 +1976,7 @@ audiounit_setup_stream(cubeb_stream * stm)
if (stm->output_unit != NULL) {
r = AudioUnitInitialize(stm->output_unit);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitInitialize/output", r);
LOG("AudioUnitInitialize/output rv=%d", r);
return CUBEB_ERROR;
}
}
@ -2122,7 +2218,7 @@ audiounit_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
&unit_latency_sec,
&size);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetProperty/kAudioUnitProperty_Latency", r);
LOG("AudioUnitGetProperty/kAudioUnitProperty_Latency rv=%d", r);
return CUBEB_ERROR;
}
@ -2134,7 +2230,7 @@ audiounit_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
&size,
&device_latency_frames);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetPropertyData/latency_frames", r);
LOG("AudioUnitGetPropertyData/latency_frames rv=%d", r);
return CUBEB_ERROR;
}
@ -2146,7 +2242,7 @@ audiounit_stream_get_latency(cubeb_stream * stm, uint32_t * latency)
&size,
&device_safety_offset);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitGetPropertyData/safety_offset", r);
LOG("AudioUnitGetPropertyData/safety_offset rv=%d", r);
return CUBEB_ERROR;
}
@ -2173,7 +2269,7 @@ int audiounit_stream_set_volume(cubeb_stream * stm, float volume)
0, volume, 0);
if (r != noErr) {
PRINT_ERROR_CODE("AudioUnitSetParameter/kHALOutputParam_Volume", r);
LOG("AudioUnitSetParameter/kHALOutputParam_Volume rv=%d", r);
return CUBEB_ERROR;
}
return CUBEB_OK;
@ -2722,69 +2818,6 @@ int audiounit_register_device_collection_changed(cubeb * context,
return (ret == noErr) ? CUBEB_OK : CUBEB_ERROR;
}
static cubeb_channel_layout
audiounit_get_channel_layout(bool preferred)
{
OSStatus rv = noErr;
// Get the default ouput unit
AudioUnit output_unit;
audiounit_create_unit(&output_unit, false, nullptr, 0);
// Get the channel layout
UInt32 size = 0;
rv = AudioUnitGetPropertyInfo(output_unit,
preferred ? kAudioDevicePropertyPreferredChannelLayout :
kAudioUnitProperty_AudioChannelLayout,
kAudioUnitScope_Output,
AU_OUT_BUS,
&size,
nullptr);
if (rv != noErr) {
if (preferred) {
PRINT_ERROR_CODE("AudioUnitGetPropertyInfo/kAudioDevicePropertyPreferredChannelLayout", rv);
} else {
PRINT_ERROR_CODE("AudioUnitGetPropertyInfo/kAudioUnitProperty_AudioChannelLayout", rv);
}
return CUBEB_LAYOUT_UNDEFINED;
}
assert(size > 0);
auto_channel_layout layout(size);
rv = AudioUnitGetProperty(output_unit,
preferred ? kAudioDevicePropertyPreferredChannelLayout :
kAudioUnitProperty_AudioChannelLayout,
kAudioUnitScope_Output,
AU_OUT_BUS,
layout.get(),
&size);
if (rv != noErr) {
if (preferred) {
PRINT_ERROR_CODE("AudioUnitGetProperty/kAudioDevicePropertyPreferredChannelLayout", rv);
} else {
PRINT_ERROR_CODE("AudioUnitGetProperty/kAudioUnitProperty_AudioChannelLayout", rv);
}
return CUBEB_LAYOUT_UNDEFINED;
}
if (layout.get()->mChannelLayoutTag != kAudioChannelLayoutTag_UseChannelDescriptions) {
// kAudioChannelLayoutTag_UseChannelBitmap
// kAudioChannelLayoutTag_Mono
// kAudioChannelLayoutTag_Stereo
// ....
LOG("Only handle UseChannelDescriptions for now.\n");
return CUBEB_LAYOUT_UNDEFINED;
}
cubeb_channel_map cm;
cm.channels = layout.get()->mNumberChannelDescriptions;
for (UInt32 i = 0; i < layout.get()->mNumberChannelDescriptions; ++i) {
cm.map[i] = channel_label_to_cubeb_channel(layout.get()->mChannelDescriptions[i].mChannelLabel);
}
return cubeb_channel_map_to_layout(&cm);
}
cubeb_ops const audiounit_ops = {
/*.init =*/ audiounit_init,
/*.get_backend_id =*/ audiounit_get_backend_id,

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

@ -857,6 +857,11 @@ wasapi_stream_render_loop(LPVOID stream)
LOG("Unable to use mmcss to bump the render thread priority: %lx", GetLastError());
}
// This has already been nulled out, simply exit.
if (!emergency_bailout) {
is_playing = false;
}
/* WaitForMultipleObjects timeout can trigger in cases where we don't want to
treat it as a timeout, such as across a system sleep/wake cycle. Trigger
the timeout error handling only when the timeout_limit is reached, which is
@ -1166,12 +1171,16 @@ bool stop_and_join_render_thread(cubeb_stream * stm)
/* Something weird happened, leak the thread and continue the shutdown
* process. */
*(stm->emergency_bailout) = true;
// We give the ownership to the rendering thread.
stm->emergency_bailout = nullptr;
LOG("Destroy WaitForSingleObject on thread timed out,"
" leaking the thread: %lx", GetLastError());
rv = false;
}
if (r == WAIT_FAILED) {
*(stm->emergency_bailout) = true;
// We give the ownership to the rendering thread.
stm->emergency_bailout = nullptr;
LOG("Destroy WaitForSingleObject on thread failed: %lx", GetLastError());
rv = false;
}
@ -1599,8 +1608,15 @@ int setup_wasapi_stream(cubeb_stream * stm)
// This delays the input side slightly, but allow to not glitch when no input
// is available when calling into the resampler to call the callback: the input
// refill event will be set shortly after to compensate for this lack of data.
// In debug, four buffers are used, to avoid tripping up assertions down the line.
#if !defined(NDEBUG)
const int silent_buffer_count = 2;
#else
const int silent_buffer_count = 4;
#endif
stm->linear_input_buffer.push_silence(stm->input_buffer_frame_count *
stm->input_stream_params.channels * 2);
stm->input_stream_params.channels *
silent_buffer_count);
if (rv != CUBEB_OK) {
LOG("Failure to open the input side.");
@ -1821,9 +1837,6 @@ void wasapi_stream_destroy(cubeb_stream * stm)
if (stop_and_join_render_thread(stm)) {
delete stm->emergency_bailout.load();
stm->emergency_bailout = nullptr;
} else {
// If we're leaking, it must be that this is true.
XASSERT(*(stm->emergency_bailout));
}
unregister_notification_client(stm);
@ -1885,11 +1898,11 @@ int stream_start_one_side(cubeb_stream * stm, StreamDirection dir)
int wasapi_stream_start(cubeb_stream * stm)
{
auto_lock lock(stm->stream_reset_lock);
XASSERT(stm && !stm->thread && !stm->shutdown_event);
XASSERT(stm->output_client || stm->input_client);
auto_lock lock(stm->stream_reset_lock);
stm->emergency_bailout = new std::atomic<bool>(false);
if (stm->output_client) {
@ -1951,6 +1964,7 @@ int wasapi_stream_stop(cubeb_stream * stm)
}
if (stop_and_join_render_thread(stm)) {
// This is null if we've given the pointer to the other thread
if (stm->emergency_bailout.load()) {
delete stm->emergency_bailout.load();
stm->emergency_bailout = nullptr;

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

@ -258,9 +258,6 @@
],
}],
['(build_for_test==0) and (build_for_standalone==0)', {
'defines' : [
'MOZILLA_INTERNAL_API',
],
'sources': [
'./src/peerconnection/MediaStreamList.cpp',
'./src/peerconnection/MediaStreamList.h',
@ -274,9 +271,7 @@
],
'defines' : [
'NO_CHROMIUM_LOGGING',
'USE_FAKE_MEDIA_STREAMS',
'USE_FAKE_PCOBSERVER',
'MOZILLA_EXTERNAL_LINKAGE',
],
}],
['build_for_standalone==0', {
@ -290,10 +285,7 @@
'./test'
],
'defines' : [
'MOZILLA_INTERNAL_API',
'MOZILLA_EXTERNAL_LINKAGE',
'NO_CHROMIUM_LOGGING',
'USE_FAKE_MEDIA_STREAMS',
'USE_FAKE_PCOBSERVER',
],
}],

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

@ -12,13 +12,9 @@
#include "webrtc/base/logging.h"
#include "nscore.h"
#ifdef MOZILLA_INTERNAL_API
#include "nsString.h"
#include "nsXULAppAPI.h"
#include "mozilla/Preferences.h"
#else
#include "nsStringAPI.h"
#endif
#include "nsIFile.h"
#include "nsDirectoryServiceUtils.h"
@ -63,7 +59,6 @@ static WebRtcTraceCallback gWebRtcCallback;
// For LOG()
static mozilla::StaticAutoPtr<LogSinkImpl> sSink;
#ifdef MOZILLA_INTERNAL_API
void GetWebRtcLogPrefs(uint32_t *aTraceMask, nsACString* aLogFile, nsACString *aAECLogDir, bool *aMultiLog)
{
*aMultiLog = mozilla::Preferences::GetBool("media.webrtc.debug.multi_log");
@ -72,7 +67,6 @@ void GetWebRtcLogPrefs(uint32_t *aTraceMask, nsACString* aLogFile, nsACString *a
mozilla::Preferences::GetCString("media.webrtc.debug.aec_log_dir", aAECLogDir);
webrtc::Trace::set_aec_debug_size(mozilla::Preferences::GetUint("media.webrtc.debug.aec_dump_max_size"));
}
#endif
mozilla::LogLevel
CheckOverrides(uint32_t *aTraceMask, nsACString *aLogFile, bool *aMultiLog)
@ -213,9 +207,7 @@ void StartWebRtcLog(uint32_t log_level)
nsAutoCString log_file;
nsAutoCString aec_log_dir;
#ifdef MOZILLA_INTERNAL_API
GetWebRtcLogPrefs(&trace_mask, &log_file, &aec_log_dir, &multi_log);
#endif
mozilla::LogLevel level = CheckOverrides(&trace_mask, &log_file, &multi_log);
if (trace_mask == 0) {
@ -238,9 +230,7 @@ void EnableWebRtcLog()
nsAutoCString log_file;
nsAutoCString aec_log_dir;
#ifdef MOZILLA_INTERNAL_API
GetWebRtcLogPrefs(&trace_mask, &log_file, &aec_log_dir, &multi_log);
#endif
mozilla::LogLevel level = CheckOverrides(&trace_mask, &log_file, &multi_log);
ConfigWebRtcLog(level, trace_mask, log_file, aec_log_dir, multi_log);
return;
@ -295,9 +285,7 @@ void StartAecLog()
nsAutoCString log_file;
nsAutoCString aec_log_dir;
#ifdef MOZILLA_INTERNAL_API
GetWebRtcLogPrefs(&trace_mask, &log_file, &aec_log_dir, &multi_log);
#endif
CheckOverrides(&trace_mask, &log_file, &multi_log);
ConfigAecLog(aec_log_dir);

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

@ -22,11 +22,9 @@ VideoCodecStatistics::VideoCodecStatistics(int channel,
mDecoderDiscardedPackets(0),
mRegisteredEncode(false),
mRegisteredDecode(false),
mReceiveState(kReceiveStateInitial)
#ifdef MOZILLA_INTERNAL_API
, mRecoveredBeforeLoss(0)
, mRecoveredLosses(0)
#endif
mReceiveState(kReceiveStateInitial),
mRecoveredBeforeLoss(0),
mRecoveredLosses(0)
{
MOZ_ASSERT(mPtrViECodec);
}
@ -92,7 +90,6 @@ void VideoCodecStatistics::ReceiveStateChange(const int aChannel,
VideoReceiveState aState)
{
CSFLogDebug(logTag,"New state for %d: %d (was %d)", aChannel, aState, mReceiveState);
#ifdef MOZILLA_INTERNAL_API
if (mFirstDecodeTime.IsNull()) {
mFirstDecodeTime = TimeStamp::Now();
}
@ -134,14 +131,11 @@ void VideoCodecStatistics::ReceiveStateChange(const int aChannel,
break;
}
#endif
mReceiveState = aState;
}
void VideoCodecStatistics::EndOfCallStats()
{
#ifdef MOZILLA_INTERNAL_API
if (!mFirstDecodeTime.IsNull()) {
TimeDuration callDelta = TimeStamp::Now() - mFirstDecodeTime;
if (callDelta.ToSeconds() != 0) {
@ -159,7 +153,6 @@ void VideoCodecStatistics::EndOfCallStats()
static_cast<uint32_t>(percent*10));
}
}
#endif
}
void VideoCodecStatistics::SentFrame()

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

@ -97,13 +97,11 @@ private:
bool mRegisteredDecode;
webrtc::VideoReceiveState mReceiveState;
#ifdef MOZILLA_INTERNAL_API
TimeStamp mFirstDecodeTime;
TimeStamp mReceiveFailureTime;
TimeDuration mTotalLossTime;
uint32_t mRecoveredBeforeLoss;
uint32_t mRecoveredLosses;
#endif
};
}

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

@ -28,7 +28,7 @@
#include "mozilla/Unused.h"
#if defined(MOZ_WIDGET_ANDROID) && defined(MOZILLA_INTERNAL_API)
#if defined(MOZ_WIDGET_ANDROID)
#include "AndroidJNIWrapper.h"
#include "VideoEngine.h"
#endif
@ -846,7 +846,6 @@ WebrtcVideoConduit::GetRTCPSenderReport(DOMHighResTimeStamp* timestamp,
MediaConduitErrorCode
WebrtcVideoConduit::InitMain()
{
#if defined(MOZILLA_INTERNAL_API)
// already know we must be on MainThread barring unit test weirdness
MOZ_ASSERT(NS_IsMainThread());
@ -916,8 +915,7 @@ WebrtcVideoConduit::InitMain()
CSFLogError(logTag, "%s: could not set Android objects", __FUNCTION__);
return kMediaConduitSessionNotInited;
}
#endif
#endif
#endif //MOZ_WIDGET_ANDROID
return kMediaConduitNoError;
}
@ -1191,10 +1189,8 @@ WebrtcVideoConduit::CreateDecoder(webrtc::VideoDecoder::DecoderType aType)
} else if (aType == webrtc::VideoDecoder::kVp8) {
bool enabled = false;
// attempt to get a decoder
#ifdef MOZILLA_INTERNAL_API
enabled = mozilla::Preferences::GetBool(
"media.navigator.hardware.vp8_decode.acceleration_enabled", false);
#endif
if (enabled) {
nsCOMPtr<nsIGfxInfo> gfxInfo = do_GetService("@mozilla.org/gfx/info;1");
if (gfxInfo) {
@ -1246,10 +1242,8 @@ WebrtcVideoConduit::CreateEncoder(webrtc::VideoEncoder::EncoderType aType,
} else if (aType == webrtc::VideoEncoder::kVp8) {
bool enabled = false;
// attempt to get a encoder
#ifdef MOZILLA_INTERNAL_API
enabled = mozilla::Preferences::GetBool(
"media.navigator.hardware.vp8_encode.acceleration_enabled", false);
#endif
if (enabled) {
nsCOMPtr<nsIGfxInfo> gfxInfo = do_GetService("@mozilla.org/gfx/info;1");
if (gfxInfo) {

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

@ -31,19 +31,8 @@ namespace mozilla {
#undef LOG
#endif
#ifdef MOZILLA_INTERNAL_API
extern mozilla::LogModule* GetGMPLog();
#else
// For CPP unit tests
PRLogModuleInfo*
GetGMPLog()
{
static PRLogModuleInfo *sLog;
if (!sLog)
sLog = PR_NewLogModule("GMP");
return sLog;
}
#endif
#define LOGD(msg) MOZ_LOG(GetGMPLog(), mozilla::LogLevel::Debug, msg)
#define LOG(level, msg) MOZ_LOG(GetGMPLog(), (level), msg)
@ -90,12 +79,10 @@ WebrtcGmpVideoEncoder::WebrtcGmpVideoEncoder()
, mCallback(nullptr)
, mCachedPluginId(0)
{
#ifdef MOZILLA_INTERNAL_API
if (mPCHandle.empty()) {
mPCHandle = WebrtcGmpPCHandleSetter::GetCurrentHandle();
}
MOZ_ASSERT(!mPCHandle.empty());
#endif
}
WebrtcGmpVideoEncoder::~WebrtcGmpVideoEncoder()
@ -657,12 +644,10 @@ WebrtcGmpVideoDecoder::WebrtcGmpVideoDecoder() :
mCachedPluginId(0),
mDecoderStatus(GMPNoErr)
{
#ifdef MOZILLA_INTERNAL_API
if (mPCHandle.empty()) {
mPCHandle = WebrtcGmpPCHandleSetter::GetCurrentHandle();
}
MOZ_ASSERT(!mPCHandle.empty());
#endif
}
WebrtcGmpVideoDecoder::~WebrtcGmpVideoDecoder()

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

@ -1454,11 +1454,6 @@ void MediaPipelineTransmit::AttachToTrack(const std::string& track_id) {
} else {
MOZ_ASSERT(false, "Unknown track type");
}
#ifndef MOZILLA_INTERNAL_API
// this enables the unit tests that can't fiddle with principals and the like
listener_->SetEnabled(true);
#endif
}
bool
@ -2089,10 +2084,8 @@ public:
: GenericReceiveListener(source, track_id),
width_(0),
height_(0),
#if defined(MOZILLA_INTERNAL_API)
image_container_(),
image_(),
#endif
monitor_("Video PipelineListener")
{
image_container_ =
@ -2152,16 +2145,11 @@ public:
int64_t render_time,
const RefPtr<layers::Image>& video_image)
{
#ifdef MOZILLA_INTERNAL_API
ReentrantMonitorAutoEnter enter(monitor_);
if (buffer) {
// Create a video frame using |buffer|.
#ifdef MOZ_WIDGET_GONK
RefPtr<PlanarYCbCrImage> yuvImage = new GrallocImage();
#else
RefPtr<PlanarYCbCrImage> yuvImage = image_container_->CreatePlanarYCbCrImage();
#endif // MOZ_WIDGET_GONK
uint8_t* frame = const_cast<uint8_t*>(static_cast<const uint8_t*> (buffer));
PlanarYCbCrData yuvData;
@ -2184,23 +2172,13 @@ public:
image_ = yuvImage;
}
#ifdef WEBRTC_GONK
else {
// Decoder produced video frame that can be appended to the track directly.
MOZ_ASSERT(video_image);
image_ = video_image;
}
#endif // WEBRTC_GONK
#endif // MOZILLA_INTERNAL_API
}
private:
int width_;
int height_;
#if defined(MOZILLA_INTERNAL_API)
RefPtr<layers::ImageContainer> image_container_;
RefPtr<layers::Image> image_;
#endif
mozilla::ReentrantMonitor monitor_; // Monitor for processing WebRTC frames.
// Protects image_ against:
// - Writing from the GIPS thread
@ -2296,9 +2274,7 @@ nsresult MediaPipelineReceiveVideo::Init() {
description_ += track_id_;
description_ += "]";
#if defined(MOZILLA_INTERNAL_API)
listener_->AddSelf();
#endif
// Always happens before we can DetachMedia()
static_cast<VideoSessionConduit *>(conduit_.get())->

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

@ -25,9 +25,7 @@
#include "mozilla/Preferences.h"
#include "MediaEngine.h"
#ifdef MOZILLA_INTERNAL_API
#include "mozilla/Preferences.h"
#endif
#include "WebrtcGmpVideoCodec.h"

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

@ -5,9 +5,7 @@
#include "CSFLog.h"
#include "base/basictypes.h"
#include "MediaStreamList.h"
#ifdef MOZILLA_INTERNAL_API
#include "mozilla/dom/MediaStreamListBinding.h"
#endif
#include "nsIScriptGlobalObject.h"
#include "PeerConnectionImpl.h"
#include "PeerConnectionMedia.h"
@ -26,17 +24,7 @@ MediaStreamList::~MediaStreamList()
{
}
#ifdef MOZILLA_INTERNAL_API
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(MediaStreamList)
#else
NS_IMPL_CYCLE_COLLECTION_CLASS(MediaStreamList)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MediaStreamList)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MediaStreamList)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(MediaStreamList)
NS_IMPL_CYCLE_COLLECTION_TRACE_END
#endif
NS_IMPL_CYCLE_COLLECTING_ADDREF(MediaStreamList)
NS_IMPL_CYCLE_COLLECTING_RELEASE(MediaStreamList)
@ -48,11 +36,7 @@ NS_INTERFACE_MAP_END
JSObject*
MediaStreamList::WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto)
{
#ifdef MOZILLA_INTERNAL_API
return MediaStreamListBinding::Wrap(cx, this, aGivenProto);
#else
return nullptr;
#endif
}
nsISupports*

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

@ -44,7 +44,6 @@ public:
void Init()
{
#ifdef MOZILLA_INTERNAL_API
nsCOMPtr<nsIObserverService> observerService =
services::GetObserverService();
if (!observerService)
@ -61,7 +60,6 @@ public:
false);
MOZ_ALWAYS_SUCCEEDS(rv);
(void) rv;
#endif
}
NS_IMETHOD Observe(nsISupports* aSubject, const char* aTopic,
@ -70,7 +68,6 @@ public:
CSFLogDebug(logTag, "Shutting down PeerConnectionCtx");
PeerConnectionCtx::Destroy();
#ifdef MOZILLA_INTERNAL_API
nsCOMPtr<nsIObserverService> observerService =
services::GetObserverService();
if (!observerService)
@ -82,7 +79,6 @@ public:
rv = observerService->RemoveObserver(this,
NS_XPCOM_SHUTDOWN_OBSERVER_ID);
MOZ_ALWAYS_SUCCEEDS(rv);
#endif
// Make sure we're not deleted while still inside ::Observe()
RefPtr<PeerConnectionCtxObserver> kungFuDeathGrip(this);
@ -108,14 +104,12 @@ public:
private:
virtual ~PeerConnectionCtxObserver()
{
#ifdef MOZILLA_INTERNAL_API
nsCOMPtr<nsIObserverService> observerService =
services::GetObserverService();
if (observerService) {
observerService->RemoveObserver(this, NS_IOSERVICE_OFFLINE_STATUS_TOPIC);
observerService->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
}
#endif
}
};

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

@ -24,9 +24,7 @@
#include "signaling/src/jsep/JsepTransport.h"
#include "MediaSegment.h"
#ifdef MOZILLA_INTERNAL_API
#include "MediaStreamGraph.h"
#endif
#include "MediaStreamGraphImpl.h"

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

@ -326,6 +326,9 @@
'-Wimplicit-fallthrough',
'-Wthread-safety',
],
'cflags_mozilla': [
'-Wthread-safety',
],
}],
],
}],

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

@ -13,9 +13,7 @@
#include <android/log.h>
#include <dlfcn.h>
#ifdef MOZILLA_INTERNAL_API
#include "OpenSLESProvider.h"
#endif
#include "webrtc/base/arraysize.h"
#include "webrtc/base/checks.h"
@ -305,15 +303,9 @@ bool OpenSLESPlayer::CreateEngine() {
const SLEngineOption option[] = {
{SL_ENGINEOPTION_THREADSAFE, static_cast<SLuint32>(SL_BOOLEAN_TRUE)}};
#ifndef MOZILLA_INTERNAL_API
RETURN_ON_ERROR(slCreateEngine_(&engine_object_, 1, option, 0, NULL, NULL),
false);
RETURN_ON_ERROR((*engine_object_)->Realize(engine_object_, SL_BOOLEAN_FALSE), false);
#else
RETURN_ON_ERROR(mozilla_get_sles_engine(&engine_object_, 1, option),
false);
RETURN_ON_ERROR(mozilla_realize_sles_engine(engine_object_), false);
#endif
RETURN_ON_ERROR(
(*engine_object_)->GetInterface(engine_object_, SL_IID_ENGINE_, &engine_),
false);
@ -327,11 +319,7 @@ void OpenSLESPlayer::DestroyEngine() {
if (!engine_object_)
return;
engine_ = nullptr;
#ifndef MOZILLA_INTERNAL_API
(*engine_object_)->Destroy(engine_object_);
#else
mozilla_destroy_sles_engine(&engine_object_);
#endif
}
bool OpenSLESPlayer::CreateMix() {

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

@ -21,9 +21,7 @@
#include <libkern/OSAtomic.h> // OSAtomicCompareAndSwap()
#include <mach/mach.h> // mach_task_self()
#include <sys/sysctl.h> // sysctlbyname()
#ifdef MOZILLA_INTERNAL_API
#include <OSXRunLoopSingleton.h>
#endif
namespace webrtc {
@ -303,19 +301,7 @@ int32_t AudioDeviceMac::Init() {
AudioObjectPropertyAddress propertyAddress = {
kAudioHardwarePropertyRunLoop, kAudioObjectPropertyScopeGlobal,
kAudioObjectPropertyElementMaster};
#ifdef MOZILLA_INTERNAL_API
mozilla_set_coreaudio_notification_runloop_if_needed();
#else
CFRunLoopRef runLoop = NULL;
UInt32 size = sizeof(CFRunLoopRef);
WEBRTC_CA_RETURN_ON_ERR(AudioObjectSetPropertyData(
kAudioObjectSystemObject, &propertyAddress, 0, NULL, size, &runLoop));
// Listen for any device changes.
propertyAddress.mSelector = kAudioHardwarePropertyDevices;
WEBRTC_CA_LOG_ERR(AudioObjectAddPropertyListener(
kAudioObjectSystemObject, &propertyAddress, &objectListenerProc, this));
#endif
// Determine if this is a MacBook Pro
_macBookPro = false;

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

@ -54,6 +54,13 @@ public class SuggestedSiteLoader implements IconLoader {
private IconResponse buildIcon(final Context context, final String siteURL, final int targetSize) {
final SuggestedSites suggestedSites = BrowserDB.from(context).getSuggestedSites();
if (suggestedSites == null) {
// See longer explanation in SuggestedSitePreparer: suggested sites aren't always loaded.
// If they aren't, SuggestedSitePreparer won't suggest any bundled icons so we should
// never try to load them anyway, but we should double check here to be completely safe.
return null;
}
final String iconLocation = suggestedSites.getImageUrlForUrl(siteURL);
final String backgroundColorString = suggestedSites.getBackgroundColorForUrl(siteURL);

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

@ -9,6 +9,7 @@ import android.database.Cursor;
import org.mozilla.gecko.db.BrowserContract;
import org.mozilla.gecko.db.BrowserDB;
import org.mozilla.gecko.db.SuggestedSites;
import org.mozilla.gecko.icons.IconDescriptor;
import org.mozilla.gecko.icons.IconRequest;
import org.mozilla.gecko.icons.loader.SuggestedSiteLoader;
@ -25,8 +26,19 @@ public class SuggestedSitePreparer implements Preparer {
// sites is low, and a HashSet containing them is therefore likely to be exceedingly small.
// Hence we opt to iterate over the list once, and do an immediate lookup every time a favicon
// is requested:
private void initialise(final Context context) {
final Cursor cursor = BrowserDB.from(context).getSuggestedSites().get(Integer.MAX_VALUE);
// Loading can fail if suggested sites haven't been initialised yet, only proceed if we return true.
private boolean initialise(final Context context) {
final SuggestedSites suggestedSites = BrowserDB.from(context).getSuggestedSites();
// suggestedSites may not have been initialised yet if BrowserApp isn't running yet. Suggested
// Sites are initialised in BrowserApp.onCreate(), but we might need to load icons when running
// custom tabs, as geckoview, etc. (But we don't care as much about the bundled icons in those
// scenarios.)
if (suggestedSites == null) {
return false;
}
final Cursor cursor = suggestedSites.get(Integer.MAX_VALUE);
try {
final int urlColumnIndex = cursor.getColumnIndexOrThrow(BrowserContract.Bookmarks.URL);
@ -37,6 +49,8 @@ public class SuggestedSitePreparer implements Preparer {
} finally {
cursor.close();
}
return true;
}
@Override
@ -46,9 +60,13 @@ public class SuggestedSitePreparer implements Preparer {
}
if (!initialised) {
initialise(request.getContext());
initialised = initialise(request.getContext());
initialised = true;
if (!initialised) {
// Early return: if we were unable to load suggested sites metdata, we won't be able
// to provide sites (but we'll still try again next time).
return;
}
}
final String siteURL = request.getPageUrl();

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

@ -5541,6 +5541,7 @@ pref("dom.mozBrowserFramesEnabled", false);
pref("layout.css.color-adjust.enabled", true);
pref("dom.audiochannel.audioCompeting", false);
pref("dom.audiochannel.audioCompeting.allAgents", false);
// Default media volume
pref("media.default_volume", "1.0");

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

@ -436,11 +436,7 @@ nsChannelClassifier::StartInternal()
}
// Add an observer for shutdown
nsCOMPtr<nsIObserverService> observerService = mozilla::services::GetObserverService();
if (!observerService)
return NS_ERROR_FAILURE;
observerService->AddObserver(this, "profile-change-net-teardown", false);
AddShutdownObserver();
return NS_OK;
}
@ -817,10 +813,29 @@ nsChannelClassifier::OnClassifyComplete(nsresult aErrorCode,
}
mChannel = nullptr;
RemoveShutdownObserver();
return NS_OK;
}
void
nsChannelClassifier::AddShutdownObserver()
{
nsCOMPtr<nsIObserverService> observerService = mozilla::services::GetObserverService();
if (observerService) {
observerService->AddObserver(this, "profile-change-net-teardown", false);
}
}
void
nsChannelClassifier::RemoveShutdownObserver()
{
nsCOMPtr<nsIObserverService> observerService = mozilla::services::GetObserverService();
if (observerService) {
observerService->RemoveObserver(this, "profile-change-net-teardown");
}
}
///////////////////////////////////////////////////////////////////////////////
// nsIObserver implementation
NS_IMETHODIMP
@ -836,6 +851,8 @@ nsChannelClassifier::Observe(nsISupports *aSubject, const char *aTopic,
mChannel->Cancel(NS_ERROR_ABORT);
mChannel->Resume();
}
RemoveShutdownObserver();
}
return NS_OK;

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

@ -60,6 +60,8 @@ private:
bool *result);
bool AddonMayLoad(nsIChannel *aChannel, nsIURI *aUri);
void AddShutdownObserver();
void RemoveShutdownObserver();
public:
// If we are blocking content, update the corresponding flag in the respective
// docshell and call nsISecurityEventSink::onSecurityChange.

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

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

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

@ -2,6 +2,7 @@
00f.net: did not receive HSTS header
020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
0p.no: did not receive HSTS header
0x.sk: 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
@ -61,6 +62,7 @@
56ct.com: could not connect to host
60ych.net: did not receive HSTS header
6120.eu: did not receive HSTS header
646.io: could not connect to host
7kovrikov.ru: did not receive HSTS header
808.lv: did not receive HSTS header
83i.net: could not connect to host
@ -159,7 +161,7 @@ ajmahal.com: could not connect to host
akclinics.org: did not receive HSTS header
akombakom.net: did not receive HSTS header
akselimedia.fi: did not receive HSTS header
akutun.cl: could not connect to host
akutun.cl: did not receive HSTS header
al-shami.net: could not connect to host
aladdin.ie: did not receive HSTS header
alainwolf.net: could not connect to host
@ -168,7 +170,7 @@ alanrickmanflipstable.com: could not connect to host
alariel.de: did not receive HSTS header
alarmsystemreviews.com: did not receive HSTS header
albertopimienta.com: did not receive HSTS header
albion2.org: could not connect to host
albion2.org: did not receive HSTS header
alcazaar.com: could not connect to host
alecvannoten.be: did not receive HSTS header
alenan.org: could not connect to host
@ -177,6 +179,7 @@ alethearose.com: did not receive HSTS header
alexandre.sh: did not receive HSTS header
alexisabarca.com: did not receive HSTS header
alexsergeyev.com: could not connect to host
alexvetter.de: did not receive HSTS header
alfa24.pro: could not connect to host
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 121" data: no]
@ -311,9 +314,6 @@ askfit.cz: did not receive HSTS header
asm-x.com: could not connect to host
asmui.ga: could not connect to host
asmui.ml: could not connect to host
asr.li: could not connect to host
asr.rocks: could not connect to host
asr.solar: could not connect to host
asrob.eu: did not receive HSTS header
ass.org.au: did not receive HSTS header
assdecoeur.org: could not connect to host
@ -366,6 +366,8 @@ auxiliumincrementum.co.uk: could not connect to host
av.de: did not receive HSTS header
avec-ou-sans-ordonnance.fr: could not connect to host
avenelequinehospital.com.au: did not receive HSTS header
avepol.cz: did not receive HSTS header
avepol.eu: did not receive HSTS header
aviacao.pt: did not receive HSTS header
avinet.com: max-age too low: 0
avqueen.cn: did not receive HSTS header
@ -385,6 +387,7 @@ babelfisch.eu: could not connect to host
baby-click.de: did not receive HSTS header
babybic.hu: did not receive HSTS header
babyhouse.xyz: could not connect to host
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
@ -395,6 +398,7 @@ badlink.org: could not connect to host
baff.lu: did not receive HSTS header
baiduaccount.com: could not connect to host
baiyangliu.com: could not connect to host
bajic.ch: could not connect to host
bakingstone.com: could not connect to host
bakkerdesignandbuild.com: did not receive HSTS header
balcan-underground.net: could not connect to host
@ -456,7 +460,6 @@ betcafearena.ro: did not receive HSTS header
betnet.fr: could not connect to host
betplanning.it: did not receive HSTS header
bets.de: did not receive HSTS header
bettercrypto.org: could not connect to host
bettween.com: could not connect to host
betz.ro: did not receive HSTS header
bevapehappy.com: did not receive HSTS header
@ -472,6 +475,7 @@ bi.search.yahoo.com: did not receive HSTS header
bidon.ca: did not receive HSTS header
bieberium.de: could not connect to host
bienenblog.cc: could not connect to host
biergaizi.info: could not connect to host
big-black.de: did not receive HSTS header
bigbrownpromotions.com.au: did not receive HSTS header
bigdinosaur.org: could not connect to host
@ -494,7 +498,6 @@ bitf.ly: could not connect to host
bitfactory.ws: could not connect to host
bitfarm-archiv.com: did not receive HSTS header
bitfarm-archiv.de: did not receive HSTS header
bitgo.com: max-age too low: 0
bitheus.com: could not connect to host
bithosting.io: did not receive HSTS header
bitnet.io: did not receive HSTS header
@ -507,7 +510,6 @@ bizcms.com: did not receive HSTS header
bizon.sk: did not receive HSTS header
black-armada.com.pl: could not connect to host
black-armada.pl: could not connect to host
black-octopus.ru: could not connect to host
blackburn.link: could not connect to host
blacklane.com: did not receive HSTS header
blackly.uk: max-age too low: 0
@ -532,7 +534,7 @@ blueliv.com: did not receive HSTS header
bluescloud.xyz: could not connect to host
bluetenmeer.com: did not receive HSTS header
blupig.net: did not receive HSTS header
bluserv.net: did not receive HSTS header
bluserv.net: could not connect to host
bm-trading.nl: did not receive HSTS header
bngsecure.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
bnhlibrary.com: could not connect to host
@ -544,6 +546,7 @@ bodyweightsolution.com: could not connect to host
boensou.com: did not receive HSTS header
bogosity.se: could not connect to host
bohan.life: could not connect to host
boilesen.com: could not connect to host
bonapp.restaurant: could not connect to host
bonfi.net: did not receive HSTS header
bonigo.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
@ -631,7 +634,6 @@ 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
c0rn3j.com: could not connect to host
c1yd3i.me: could not connect to host
c3b.info: could not connect to host
cabarave.com: could not connect to host
@ -666,8 +668,7 @@ capturethepen.co.uk: could not connect to host
car-navi.ph: did not receive HSTS header
carano-service.de: did not receive HSTS header
caraudio69.cz: could not connect to host
carck.co.uk: did not receive HSTS header
cardloan-manual.net: could not connect to host
carck.co.uk: could not connect to host
cardoni.net: did not receive HSTS header
cardstream.com: did not receive HSTS header
cardurl.com: did not receive HSTS header
@ -678,6 +679,7 @@ carlandfaith.com: did not receive HSTS header
carlolly.co.uk: could not connect to host
carlosalves.info: could not connect to host
carsforbackpackers.com: could not connect to host
casc.cz: did not receive HSTS header
casedi.org: max-age too low: 0
cashlink.io: did not receive HSTS header
cashmojo.com: max-age too low: 0
@ -826,7 +828,6 @@ cmsbattle.com: could not connect to host
cmscafe.ru: did not receive HSTS header
cn.search.yahoo.com: did not receive HSTS header
cni-certing.it: max-age too low: 0
cnwage.com: could not connect to host
co50.com: did not receive HSTS header
cocaine-import.agency: could not connect to host
cocktailfuture.fr: could not connect to host
@ -840,6 +841,7 @@ codeforce.io: could not connect to host
codelayer.ca: could not connect to host
codemonkeyrawks.net: did not receive HSTS header
codepoet.de: could not connect to host
codepult.com: could not connect to host
codepx.com: did not receive HSTS header
codewiththepros.org: could not connect to host
codiva.io: max-age too low: 2592000
@ -868,6 +870,7 @@ completeid.com: max-age too low: 86400
completionist.audio: could not connect to host
compraneta.com: could not connect to host
compucorner.com.mx: could not connect to host
computeremergency.com.au: did not receive HSTS header
computersystems.guru: did not receive HSTS header
concord-group.co.jp: did not receive HSTS header
condesaelectronics.com: max-age too low: 0
@ -951,7 +954,6 @@ csohack.tk: could not connect to host
csokolade.hu: could not connect to host
cspbuilder.info: could not connect to host
cspvalidator.org: did not receive HSTS header
csru.net: could not connect to host
csvape.com: did not receive HSTS header
ct-status.org: could not connect to host
ct.search.yahoo.com: did not receive HSTS header
@ -965,6 +967,7 @@ cuntflaps.me: did not receive HSTS header
cuongquach.com: did not receive HSTS header
cupidmentor.com: did not receive HSTS header
curroapp.com: could not connect to host
curveweb.co.uk: did not receive HSTS header
custe.rs: could not connect to host
cuvva.insure: did not receive HSTS header
cyanogenmod.xxx: could not connect to host
@ -984,7 +987,6 @@ daku.gdn: did not receive HSTS header
dalingk.co: could not connect to host
damedrogy.cz: could not connect to host
damianuv-blog.cz: did not receive HSTS header
dango.in: did not receive HSTS header
daniel-steuer.de: could not connect to host
danielcowie.me: could not connect to host
danieldk.eu: did not receive HSTS header
@ -1069,6 +1071,7 @@ dennisdoes.net: could not connect to host
dentaldomain.org: did not receive HSTS header
dentaldomain.ph: could not connect to host
depeche-mode.moscow: max-age too low: 7200
depicus.com: could not connect to host
depijl-mz.nl: did not receive HSTS header
depixion.agency: could not connect to host
dequehablamos.es: could not connect to host
@ -1084,10 +1087,10 @@ detector.exposed: could not connect to host
devcu.net: did not receive HSTS header
deviltracks.net: could not connect to host
devincrow.me: could not connect to host
devopsconnected.com: could not connect to host
devtub.com: did not receive HSTS header
devuan.org: did not receive HSTS header
dewin.io: could not connect to host
dfl.mn: could not connect to host
dhpcs.com: did not receive HSTS header
dhpiggott.net: did not receive HSTS header
diablotine.rocks: could not connect to host
@ -1179,12 +1182,14 @@ drtroyhendrickson.com: could not connect to host
drumbandesperanto.nl: could not connect to host
ds-christiansen.de: did not receive HSTS header
dshiv.io: could not connect to host
dubrovskiy.net: could not connect to host
dt27.org: could not connect to host
dubrovskiy.net: did not receive HSTS header
dubrovskiy.pro: could not connect to host
duesee.org: could not connect to host
dullsir.com: did not receive HSTS header
duria.de: max-age too low: 3600
dustri.org: did not receive HSTS header
dutchessuganda.com: did not receive HSTS header
dutchrank.com: could not connect to host
dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
dworzak.ch: could not connect to host
@ -1201,7 +1206,6 @@ e-sa.com: did not receive HSTS header
e3amn2l.com: could not connect to host
earlybirdsnacks.com: could not connect to host
earthrise16.com: could not connect to host
easez.net: could not connect to host
easychiller.org: could not connect to host
easyhaul.com: did not receive HSTS header
eatlowcarb.de: did not receive HSTS header
@ -1216,6 +1220,7 @@ ecake.in: could not connect to host
ecdn.cz: could not connect to host
ecfs.link: could not connect to host
ecg.fr: could not connect to host
echipstore.com: did not receive HSTS header
echosystem.fr: did not receive HSTS header
ecole-en-danger.fr: could not connect to host
ecole-maternelle-saint-joseph.be: could not connect to host
@ -1349,6 +1354,7 @@ eucl3d.com: did not receive HSTS header
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
evantage.org: could not connect to host
evdenevenakliyatankara.pw: did not receive HSTS header
everybooks.com: max-age too low: 60
@ -1384,6 +1390,7 @@ factorygw.com: did not receive HSTS header
fadilus.com: did not receive HSTS header
faesser.com: did not receive HSTS header
fail4free.de: did not receive HSTS header
failforward.org: could not connect to host
fairlyoddtreasures.com: did not receive HSTS header
faizan.net: did not receive HSTS header
faizan.xyz: could not connect to host
@ -1393,21 +1400,19 @@ falconfrag.com: could not connect to host
falkena.net: max-age too low: 5184000
falkp.no: did not receive HSTS header
fallenangelspirits.uk: could not connect to host
famcloud.de: could not connect to host
familie-sprink.de: could not connect to host
familie-zimmermann.at: could not connect to host
familjenm.se: could not connect to host
fantopia.club: could not connect to host
fanyl.cn: could not connect to host
farhadexchange.com: did not receive HSTS header
fashioncare.cz: did not receive HSTS header
fasset.jp: could not connect to host
fastconfirm.com: could not connect to host
fastograph.com: could not connect to host
fastopen.ml: could not connect to host
fatgeekflix.net: could not connect to host
fatherhood.gov: did not receive HSTS header
fatlossguide.xyz: could not connect to host
fatox.de: could not connect to host
fayolle.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
fbox.li: could not connect to host
fdj.im: could not connect to host
@ -1428,7 +1433,6 @@ fexmen.com: could not connect to host
ffmradio.de: did not receive HSTS header
fhdhelp.de: could not connect to host
fhdhilft.de: could not connect to host
fifieldtech.com: could not connect to host
fiftyshadesofluca.ml: could not connect to host
fig.co: did not receive HSTS header
fightr.co: could not connect to host
@ -1482,6 +1486,8 @@ flyaces.com: did not receive HSTS header
fm83.nl: could not connect to host
fndout.com: did not receive HSTS header
fnvsecurity.com: could not connect to host
fojtova.cz: did not receive HSTS header
fojtovi.cz: did not receive HSTS header
fonetiq.io: could not connect to host
food4health.guide: could not connect to host
foodievenues.com: could not connect to host
@ -1511,11 +1517,10 @@ foxtrot.pw: could not connect to host
fr33d0m.link: could not connect to host
francevpn.xyz: could not connect to host
frangor.info: did not receive HSTS header
frankwei.xyz: could not connect to host
frankwei.xyz: did not receive HSTS header
franta.biz: did not receive HSTS header
franta.email: did not receive HSTS header
franzt.de: could not connect to host
franzt.ovh: could not connect to host
frasys.io: max-age too low: 7776000
fredvoyage.fr: did not receive HSTS header
freeflow.tv: could not connect to host
@ -1534,6 +1539,7 @@ frforms.com: did not receive HSTS header
friendica.ch: could not connect to host
frizo.com: did not receive HSTS header
froggstack.de: could not connect to host
frontisme.nl: could not connect to host
frontmin.com: did not receive HSTS header
frost-ci.xyz: could not connect to host
frosty-gaming.xyz: did not receive HSTS header
@ -1600,6 +1606,7 @@ garciamartin.me: could not connect to host
garden-life.org: could not connect to host
gatapro.net: could not connect to host
gatilagata.com.br: could not connect to host
gatorsa.es: did not receive HSTS header
gdpventure.com: max-age too low: 0
gedankenbude.info: could not connect to host
geekcast.co.uk: did not receive HSTS header
@ -1752,11 +1759,10 @@ guava.studio: did not receive HSTS header
guilde-vindicta.fr: did not receive HSTS header
gulenet.com: could not connect to host
gunnarhafdal.com: did not receive HSTS header
guoqiang.info: did not receive HSTS header
gurochan.ch: could not connect to host
gurom.lv: could not connect to host
gurusupe.com: could not connect to host
guso.gq: could not connect to host
guso.site: 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)
@ -1871,7 +1877,6 @@ hittipps.com: did not receive HSTS header
hlyue.com: did not receive HSTS header
hmm.nyc: could not connect to host
hn.search.yahoo.com: did not receive HSTS header
hochhaus.us: could not connect to host
hodne.io: could not connect to host
hoerbuecher-und-hoerspiele.de: could not connect to host
hogar123.es: could not connect to host
@ -1905,13 +1910,13 @@ howtocuremysciatica.com: could not connect to host
hr-intranet.com: did not receive HSTS header
hsandbox.tech: max-age too low: 2592000
hsir.me: could not connect to host
hsr.gov: could not connect to host
hsts.date: could not connect to host
html-lab.tk: could not connect to host
http418.xyz: could not connect to host
httpstatuscode418.xyz: could not connect to host
hu.search.yahoo.com: did not receive HSTS header
huarongdao.com: max-age too low: 1
huffduffer.com: could not connect to host
hugocollignon.fr: could not connect to host
hugosleep.com.au: did not receive HSTS header
humblefinances.com: could not connect to host
@ -1937,6 +1942,7 @@ icewoman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERR
icfl.com.br: could not connect to host
ichnichtskaufmann.de: could not connect to host
ichoosebtec.com: could not connect to host
icloud.net: could not connect to host
icpc2016.in.th: could not connect to host
icreative.nl: did not receive HSTS header
ictual.com: max-age too low: 0
@ -1960,6 +1966,7 @@ ies.id.lv: could not connect to host
ifad.org: did not receive HSTS header
ifleurs.com: could not connect to host
ifx.ee: could not connect to host
ignace72.eu: could not connect to host
ignatisd.gr: did not receive HSTS header
igule.net: could not connect to host
ihrlotto.de: could not connect to host
@ -1977,7 +1984,6 @@ ilona.graphics: max-age too low: 3600
iluvscotland.co.uk: did not receive HSTS header
imakepoems.net: could not connect to host
ime.moe: could not connect to host
imguoguo.com: did not receive HSTS header
imim.pw: did not receive HSTS header
immersionwealth.com: could not connect to host
immoprotect.ca: did not receive HSTS header
@ -2038,6 +2044,7 @@ 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
intranetsec.fr: could not connect to host
intrp.net: did not receive HSTS header
inverselink-user-content.com: could not connect to host
inverselink.com: could not connect to host
@ -2074,6 +2081,8 @@ isslshop.com: could not connect to host
istaspirtslietas.lv: did not receive HSTS header
it-go.net: did not receive HSTS header
itechgeek.com: max-age too low: 0
ithakama.com: did not receive HSTS header
ithakama.cz: did not receive HSTS header
itos.asia: did not receive HSTS header
itos.pl: did not receive HSTS header
itriskltd.com: could not connect to host
@ -2083,6 +2092,7 @@ itsamurai.ru: max-age too low: 2592000
itsecurityassurance.pw: could not connect to host
itsg-faq.de: could not connect to host
itshost.ru: could not connect to host
ivancacic.com: did not receive HSTS header
ivi-fertility.com: max-age too low: 0
ivi.es: max-age too low: 0
ivk.website: could not connect to host
@ -2097,7 +2107,6 @@ jacobparry.ca: did not receive HSTS header
jagido.de: did not receive HSTS header
jahliveradio.com: could not connect to host
jakenbake.com: did not receive HSTS header
jakubtopic.cz: could not connect to host
james.je: could not connect to host
jamesandpame.la: could not connect to host
jamesbradach.com: did not receive HSTS header
@ -2217,12 +2226,12 @@ jznet.org: max-age too low: 86400
k-dev.de: could not connect to host
ka-clan.com: could not connect to host
kabuabc.com: did not receive HSTS header
kabus.org: could not connect to host
kadioglumakina.com.tr: did not receive HSTS header
kaela.design: could not connect to host
kahopoon.net: could not connect to host
kaisers.de: did not receive HSTS header
kalami.nl: did not receive HSTS header
kaleidomarketing.com: could not connect to host
kamikano.com: could not connect to host
kaneo-gmbh.de: did not receive HSTS header
kaplatz.is: could not connect to host
@ -2319,12 +2328,14 @@ kostuumstore.nl: did not receive HSTS header
kostya.net: could not connect to host
kotonehoko.net: could not connect to host
kotovstyle.ru: could not connect to host
kourpe.online: could not connect to host
kr.search.yahoo.com: did not receive HSTS header
kramsj.uk: could not connect to host
krayx.com: could not connect to host
kreavis.com: did not receive HSTS header
kredite.sale: could not connect to host
kriegt.es: could not connect to host
kristikala.nl: could not connect to host
kroetenfuchs.de: could not connect to host
kropkait.pl: could not connect to host
krouzkyliduska.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 121" data: no]
@ -2337,6 +2348,7 @@ kswriter.com: could not connect to host
kucom.it: did not receive HSTS header
kueulangtahunanak.net: could not connect to host
kummerlaender.eu: did not receive HSTS header
kuoruan.com: could not connect to host
kupelne-ptacek.sk: did not receive HSTS header
kuppingercole.com: did not receive HSTS header
kura.io: could not connect to host
@ -2393,7 +2405,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: could not connect to host
lechiennoir.net: did not receive HSTS header
ledgerscope.net: could not connect to host
leermotorrijden.nl: max-age too low: 300
@ -2513,6 +2524,7 @@ lovelyblogacademy.com: did not receive HSTS header
lovelycorral.com: did not receive HSTS header
loveto.at: could not connect to host
lowhangingfruitgrabber.com: could not connect to host
lowsec.space: could not connect to host
lpak.nl: could not connect to host
lrhsclubs.com: could not connect to host
lrhstsa.com: could not connect to host
@ -2567,7 +2579,6 @@ madebymagnitude.com: did not receive HSTS header
maderwin.com: could not connect to host
mae-berlinistanbul.com: could not connect to host
mafamane.com: could not connect to host
maff.scot: did not receive HSTS header
mafiareturns.com: max-age too low: 2592000
magenx.com: did not receive HSTS header
mahamed91.pw: could not connect to host
@ -2601,6 +2612,7 @@ marcuskoh.com: did not receive HSTS header
mariannematthew.com: could not connect to host
marie-curie.fr: could not connect to host
marie-elisabeth.dk: did not receive HSTS header
marie.club: did not receive HSTS header
mario.party: did not receive HSTS header
markaconnor.com: could not connect to host
markayapilandirma.com: could not connect to host
@ -2618,13 +2630,14 @@ martineve.com: did not receive HSTS header
martinsfamilyappliance.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
marumagic.com: did not receive HSTS header
masjidtawheed.net: did not receive HSTS header
massoni.pl: could not connect to host
masterapi.ninja: did not receive HSTS header
masteringtheterminal.com: did not receive HSTS header
matatall.com: did not receive HSTS header
matchneedle.com: could not connect to host
maternalsafety.org: did not receive HSTS header
matrip.de: could not connect to host
matrix.ac: could not connect to host
matrix.ac: did not receive HSTS header
matrixcheats.net: could not connect to host
matsuz.com: could not connect to host
mattberryman.com: did not receive HSTS header
@ -2697,6 +2710,7 @@ metin2blog.de: did not receive HSTS header
metis.pw: could not connect to host
meuemail.pro: could not connect to host
mexbt.com: could not connect to host
meyercloud.de: could not connect to host
mfcatalin.com: could not connect to host
mfiles.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
mh-bloemen.co.jp: could not connect to host
@ -2756,6 +2770,7 @@ miyoshi-kikaku.com: did not receive HSTS header
mizd.at: could not connect to host
mizi.name: could not connect to host
mkes.com: did not receive HSTS header
mlcdn.co: could not connect to host
mlpepilepsy.org: could not connect to host
mmgazhomeloans.com: did not receive HSTS header
mnemotiv.com: could not connect to host
@ -2813,6 +2828,7 @@ mrettich.org: did not receive HSTS header
mrnonz.com: max-age too low: 0
mrpopat.in: did not receive HSTS header
mrs-shop.com: did not receive HSTS header
ms-alternativ.de: could not connect to host
msc-seereisen.net: could not connect to host
msno.no: did not receive HSTS header
mszaki.com: did not receive HSTS header
@ -2890,6 +2906,7 @@ nanogeneinc.com: could not connect to host
nanto.eu: could not connect to host
narada.com.ua: could not connect to host
narindal.ch: did not receive HSTS header
nashira.cz: did not receive HSTS header
natalia-fadeeva.ru: could not connect to host
natalia.io: could not connect to host
natalt.org: did not receive HSTS header
@ -2909,6 +2926,7 @@ ncpc.gov: could not connect to host
nct.org.uk: max-age too low: 1
nctx.co.uk: did not receive HSTS header
near.st: did not receive HSTS header
neel.ch: 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 121" data: no]
neftaly.com: did not receive HSTS header
neilgreen.net: did not receive HSTS header
@ -2929,6 +2947,7 @@ networx-online.de: could not connect to host
netzbit.de: could not connect to host
netzpolitik.org: did not receive HSTS header
netztest.at: did not receive HSTS header
netzzwerg4u.de: did not receive HSTS header
neueonlinecasino2016.com: could not connect to host
neuralgic.net: could not connect to host
neutralox.com: did not receive HSTS header
@ -2964,7 +2983,6 @@ nightx.uk: could not connect to host
niho.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
nikomo.fi: could not connect to host
ninchisho-online.com: did not receive HSTS header
ninhs.org: could not connect to host
nippler.org: did not receive HSTS header
nippombashi.net: did not receive HSTS header
nipponcareers.com: did not receive HSTS header
@ -2973,6 +2991,7 @@ nkinka.de: did not receive HSTS header
nlegall.fr: did not receive HSTS header
nmctest.net: could not connect to host
nnya.cat: could not connect to host
no-ip.cz: did not receive HSTS header
no17sifangjie.cc: could not connect to host
nocallaghan.com: could not connect to host
noclegi-online.pl: did not receive HSTS header
@ -2985,7 +3004,7 @@ noima.com: did not receive HSTS header
nolatepayments.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
nolberg.net: did not receive HSTS header
nolte.work: could not connect to host
nomorebytes.de: did not receive HSTS header
nomorebytes.de: could not connect to host
noobunbox.net: did not receive HSTS header
nope.website: could not connect to host
nopex.no: could not connect to host
@ -3048,6 +3067,7 @@ nzquakes.maori.nz: did not receive HSTS header
o0o.one: did not receive HSTS header
oasis.mobi: did not receive HSTS header
oasisim.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
obscuredfiles.com: could not connect to host
obsydian.org: could not connect to host
occentus.net: did not receive HSTS header
ochaken.cf: could not connect to host
@ -3215,6 +3235,7 @@ patientinsight.net: could not connect to host
patt.us: did not receive HSTS header
patterson.mp: could not connect to host
paulyang.cn: did not receive HSTS header
pavelfojt.cz: did not receive HSTS header
paxwinkel.nl: did not receive HSTS header
pay.gigahost.dk: did not receive HSTS header
payfreez.com: could not connect to host
@ -3232,7 +3253,7 @@ peakapp.nl: could not connect to host
peissen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
pekkapikkarainen.fi: did not receive HSTS header
pekkarik.ru: could not connect to host
penguinclientsystem.com: did not receive HSTS header
penguinclientsystem.com: could not connect to host
pensacolawinterfest.org: could not connect to host
pentano.net: could not connect to host
pepperhead.com: did not receive HSTS header
@ -3250,7 +3271,7 @@ perthdevicelab.com: did not receive HSTS header
pet-nsk.ru: could not connect to host
petchart.net: 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
petsittersservices.com: could not connect to host
@ -3325,11 +3346,13 @@ poiema.com.sg: did not receive HSTS header
pol.in.th: could not connect to host
pole.net.nz: could not connect to host
poleartschool.com: could not connect to host
poles4pilots.com: did not receive HSTS header
policeiwitness.sg: could not connect to host
polimat.org: could not connect to host
politically-incorrect.xyz: could not connect to host
politologos.org: did not receive HSTS header
polycoise.com: could not connect to host
polymathematician.com: could not connect to host
polypho.nyc: could not connect to host
pompompoes.com: could not connect to host
pontualcomp.com: max-age too low: 2592000
@ -3368,8 +3391,6 @@ prnt.li: did not receive HSTS header
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
@ -3447,7 +3468,6 @@ raajheshkannaa.com: could not connect to host
radicaleducation.net: could not connect to host
rafaelcz.de: could not connect to host
railgun.com.cn: could not connect to host
railjob.cn: could not connect to host
rainbowbarracuda.com: could not connect to host
ramonj.nl: could not connect to host
randomcage.com: did not receive HSTS header
@ -3574,7 +3594,6 @@ rodosto.com: did not receive HSTS header
roeper.party: could not connect to host
roesemann.email: could not connect to host
roguelikecenter.fr: did not receive HSTS header
rolandreed.cn: could not connect to host
romans-place.me.uk: did not receive HSTS header
romulusapp.com: could not connect to host
ronvandordt.info: could not connect to host
@ -3614,6 +3633,8 @@ runementors.com: could not connect to host
runtondev.com: did not receive HSTS header
ruqu.nl: could not connect to host
rusadmin.biz: did not receive HSTS header
ruska-modra.cz: did not receive HSTS header
ruskamodra.cz: did not receive HSTS header
rusl.me: could not connect to host
russmarshall.com: could not connect to host
ruxit.com: did not receive HSTS header
@ -3726,6 +3747,7 @@ securiviera.ch: did not receive HSTS header
sedrubal.de: could not connect to host
seedbox.fr: did not receive HSTS header
seedboxers.net: did not receive HSTS header
seeks.ru: could not connect to host
seele.ca: could not connect to host
segulink.com: could not connect to host
sehenderson.com: did not receive HSTS header
@ -3923,7 +3945,6 @@ souyar.net: could not connect to host
souyar.us: could not connect to host
sovereignshare.com: could not connect to host
sown.dyndns.org: could not connect to host
sowncloud.de: did not receive HSTS header
spacehq.org: max-age too low: 0
spaggel.nl: could not connect to host
sparelib.com: max-age too low: 3650
@ -3981,6 +4002,7 @@ 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
starttraffic.com: did not receive HSTS header
state-sponsored-actors.net: could not connect to host
statementinsertsforless.com: did not receive HSTS header
stateofexception.io: could not connect to host
@ -4006,7 +4028,7 @@ stillblackhat.id: could not connect to host
stirlingpoon.com: did not receive HSTS header
stirlingpoon.net: did not receive HSTS header
stirlingpoon.xyz: could not connect to host
stkbn.com: did not receive HSTS header
stkbn.com: could not connect to host
stmbgr.com: could not connect to host
stn.me.uk: did not receive HSTS header
stocktrade.de: could not connect to host
@ -4032,6 +4054,7 @@ strivephysmed.com: did not receive HSTS header
stroeercrm.de: could not connect to host
strom.family: could not connect to host
strongest-privacy.com: could not connect to host
structurally.net: could not connect to host
stuartbaxter.co: could not connect to host
student-scientist.org: did not receive HSTS header
student.andover.edu: did not receive HSTS header
@ -4058,7 +4081,6 @@ suksit.com: could not connect to host
sumoatm.com: did not receive HSTS header
sumoscout.de: did not receive HSTS header
suncountrymarine.com: did not receive HSTS header
sunflyer.cn: did not receive HSTS header
sunnyfruit.ru: did not receive HSTS header
sunshinepress.org: could not connect to host
supcro.com: could not connect to host
@ -4099,12 +4121,15 @@ syntheticmotoroil.org: did not receive HSTS header
syriatalk.biz: could not connect to host
syriatalk.org: could not connect to host
sysadmin.xyz: did not receive HSTS header
sysmike.de: could not connect to host
syso.name: could not connect to host
szaszm.tk: max-age too low: 0
t-shirts4less.nl: could not connect to host
t-tz.com: could not connect to host
ta-65.com: could not connect to host
ta65.com: could not connect to host
taabe.xyz: did not receive HSTS header
taboragroup.com: could not connect to host
tacomafia.net: did not receive HSTS header
tadigitalstore.com: could not connect to host
tafoma.com: did not receive HSTS header
@ -4183,6 +4208,7 @@ tf2stadium.com: did not receive HSTS header
tfcoms-sp-tracker-client.azurewebsites.net: 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
thai.land: could not connect to host
thaianthro.com: did not receive HSTS header
thaihostcool.com: max-age too low: 0
@ -4229,12 +4255,11 @@ therewill.be: could not connect to host
theseed.io: could not connect to host
thestack.xyz: could not connect to host
thestagchorleywood.co.uk: did not receive HSTS header
thetechnical.me: could not connect to host
thetomharling.com: max-age too low: 86400
thetradinghall.com: could not connect to host
theurbanyoga.com: did not receive HSTS header
thevintagenews.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
thewebfellas.com: did not receive HSTS header
theyosh.nl: could not connect to host
thezonders.com: did not receive HSTS header
thierfreund.de: could not connect to host
thingies.site: could not connect to host
@ -4285,6 +4310,7 @@ titanleaf.com: could not connect to host
titouan.co: did not receive HSTS header
tittelbach.at: did not receive HSTS header
titties.ml: could not connect to host
tjc.wiki: could not connect to host
tkarstens.de: did not receive HSTS header
tkn.tokyo: could not connect to host
tlo.hosting: could not connect to host
@ -4318,7 +4344,6 @@ tommsy.com: did not receive HSTS header
tommyads.com: could not connect to host
tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
tonyfantjr.com: could not connect to host
tonyw.xyz: could not connect to host
toomanypillows.com: could not connect to host
toool.org: did not receive HSTS header
top-stage.net: could not connect to host
@ -4342,6 +4367,7 @@ tradingcentre.com.au: did not receive HSTS header
tradinghope.com: could not connect to host
traindb.nl: did not receive HSTS header
trainut.com: could not connect to host
transitownplaza.com: could not connect to host
translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
transportal.sk: did not receive HSTS header
travelinsurance.co.nz: did not receive HSTS header
@ -4373,6 +4399,7 @@ tuingereedschappen.net: could not connect to host
tunai.id: could not connect to host
tunebitfm.de: could not connect to host
turnik-67.ru: could not connect to host
turniker.ru: could not connect to host
turtlementors.com: could not connect to host
tuturulianda.com: did not receive HSTS header
tuvalie.com: could not connect to host
@ -4435,6 +4462,7 @@ unfiltered.nyc: did not receive HSTS header
unfuddle.cn: could not connect to host
uni-games.com: could not connect to host
unicooo.com: could not connect to host
uniform-agri.com: did not receive HSTS header
unison.com: did not receive HSTS header
unisyssecurity.com: did not receive HSTS header
unitedcyberdevelopment.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
@ -4528,11 +4556,13 @@ viktorsvantesson.net: did not receive HSTS header
vincentkooijman.at: did not receive HSTS header
vincentkooijman.nl: did not receive HSTS header
vincentpancol.com: could not connect to host
vinicius.sl: did not receive HSTS header
vintageheartcoffee.com: did not receive HSTS header
vio.no: did not receive HSTS header
viperdns.com: could not connect to host
vipi.es: could not connect to host
vipmusic.ga: could not connect to host
virginiacrimeanalysisnetwork.org: did not receive HSTS header
visiontree-beta.eu: could not connect to host
visitbroadstairs.com: could not connect to host
vissanum.com: did not receive HSTS header
@ -4541,12 +4571,12 @@ vitagenda.nl: could not connect to host
vitalorange.com: did not receive HSTS header
vitapingu.de: could not connect to host
viva-french.com: did not receive HSTS header
vivocloud.com: did not receive HSTS header
vlastimilburian.cz: did not receive HSTS header
vlora.city: could not connect to host
vm0.eu: did not receive HSTS header
vmrdev.com: could not connect to host
voceinveste.com: did not receive HSTS header
vodpay.com: could not connect to host
vodpay.net: could not connect to host
vodpay.org: could not connect to host
voicesuk.co.uk: did not receive HSTS header
@ -4716,7 +4746,7 @@ wufu.org: did not receive HSTS header
wuhengmin.com: did not receive HSTS header
wurzelzwerg.net: could not connect to host
wusx.club: could not connect to host
www.apollo-auto.com: could not connect to host
www.apollo-auto.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
www.braintreepayments.com: did not receive HSTS header
www.calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
www.cueup.com: could not connect to host
@ -4756,6 +4786,7 @@ xenesisziarovky.sk: could not connect to host
xett.com: did not receive HSTS header
xf-liam.com: did not receive HSTS header
xfive.de: did not receive HSTS header
xia100.xyz: did not receive HSTS header
xiaody.me: could not connect to host
xiaolvmu.me: could not connect to host
xiaoxiao.im: could not connect to host
@ -4769,13 +4800,12 @@ xn--4dbjwf8c.cf: could not connect to host
xn--4dbjwf8c.ga: could not connect to host
xn--4dbjwf8c.gq: could not connect to host
xn--4dbjwf8c.tk: could not connect to host
xn--79q87uvkclvgd56ahq5a.net: could not connect to host
xn--79q87uvkclvgd56ahq5a.net: did not receive HSTS header
xn--7rvz7ku3ppnr.jp: did not receive HSTS header
xn--80aaihqncaejjobbu6v.xn--p1ai: max-age too low: 6000
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--jp-6l5cs1yf3ivjsglphyv.net: 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
@ -4787,7 +4817,7 @@ xn--werner-schffer-fib.de: could not connect to host
xn--yoamomisuasbcn-ynb.com: could not connect to host
xnode.org: did not receive HSTS header
xobox.me: could not connect to host
xoffy.com: did not receive HSTS header
xoffy.com: could not connect to host
xombra.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
xpi.fr: could not connect to host
xsmobile.de: could not connect to host
@ -4820,7 +4850,7 @@ yenniferallulli.moda: could not connect to host
yenniferallulli.nl: could not connect to host
yestees.com: did not receive HSTS header
yetcore.io: could not connect to host
yhaupenthal.org: could not connect to host
yhaupenthal.org: did not receive HSTS header
yingyj.com: could not connect to host
yippie.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
yjsoft.me: did not receive HSTS header
@ -4892,13 +4922,16 @@ zoneminder.com: did not receive HSTS header
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
zortium.report: could not connect to host
zoznamrealit.sk: did not receive HSTS header
zqhong.com: could not connect to host
ztan.tk: could not connect to host
ztcaoll222.cn: did not receive HSTS header
zten.org: could not connect to host
zulu7.com: could not connect to host
zvncloud.com: did not receive HSTS header
zwollemagazine.nl: did not receive HSTS header
zwy.me: did not receive HSTS header
zyf.pw: could not connect to host
zymbit.com: could not connect to host

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

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

@ -629,6 +629,13 @@ dependencies = [
"time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "dom_struct"
version = "0.0.1"
dependencies = [
"quote 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "domobject_derive"
version = "0.0.1"
@ -2204,6 +2211,7 @@ dependencies = [
"cssparser 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
"deny_public_fields 0.0.1",
"devtools_traits 0.0.1",
"dom_struct 0.0.1",
"domobject_derive 0.0.1",
"encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2971,7 +2979,6 @@ dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -3065,7 +3072,6 @@ dependencies = [
"heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]

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

@ -0,0 +1,13 @@
[package]
name = "dom_struct"
version = "0.0.1"
authors = ["The Servo Project Developers"]
license = "MPL-2.0"
publish = false
[lib]
path = "lib.rs"
proc-macro = true
[dependencies]
quote = "0.3"

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

@ -0,0 +1,28 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#![feature(proc_macro)]
extern crate proc_macro;
#[macro_use] extern crate quote;
use proc_macro::TokenStream;
#[proc_macro_attribute]
pub fn dom_struct(args: TokenStream, input: TokenStream) -> TokenStream {
if !args.to_string().is_empty() {
panic!("#[dom_struct] takes no arguments");
}
expand_string(&input.to_string()).parse().unwrap()
}
fn expand_string(input: &str) -> String {
let mut tokens = quote! {
#[derive(DenyPublicFields, DomObject, HeapSizeOf, JSTraceable)]
#[must_root]
#[repr(C)]
};
tokens.append(input);
tokens.to_string()
}

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

@ -12,7 +12,7 @@ path = "lib.rs"
[dependencies]
brotli = "1.0.6"
content-blocker = "0.2.3"
cookie = {version = "0.2.5", features = ["serialize-rustc"]}
cookie = "0.2.5"
devtools_traits = {path = "../devtools_traits"}
flate2 = "0.2.0"
hyper = "0.9.9"
@ -38,7 +38,7 @@ servo_url = {path = "../url"}
threadpool = "1.0"
time = "0.1.17"
unicase = "1.4.0"
url = {version = "1.2", features = ["heap_size", "rustc-serialize"]}
url = {version = "1.2", features = ["heap_size"]}
uuid = {version = "0.4", features = ["v4"]}
websocket = "0.17"

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

@ -10,7 +10,7 @@ name = "net_traits"
path = "lib.rs"
[dependencies]
cookie = {version = "0.2.5", features = ["serialize-rustc"]}
cookie = "0.2.5"
heapsize = "0.3.0"
heapsize_derive = "0.1"
hyper = "0.9.9"

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше