author | arthur.iakab <aiakab@mozilla.com> |
Thu, 22 Mar 2018 02:02:06 +0200 | |
changeset 409413 | 17c6a17df94a52888a467a1e23d939174e21c37b |
parent 409412 | ff30955a00d2f6cbba9288b3ba2b7b749a577628 (current diff) |
parent 409343 | b41c7c1ff91f49b1500b087ff23c288dd88f1fde (diff) |
child 409414 | 689d9921beb532f06bca6e53599baa0ed2fed616 |
push id | 33687 |
push user | apavel@mozilla.com |
push date | Thu, 22 Mar 2018 09:31:48 +0000 |
treeherder | mozilla-central@7771df14ea18 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 61.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/Cargo.lock +++ b/Cargo.lock @@ -689,17 +689,17 @@ dependencies = [ "atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)", "cstr 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "malloc_size_of 0.0.1", "nsstring 0.1.0", - "parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.19.0", "servo_arc 0.1.1", "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", ] [[package]] @@ -1250,22 +1250,21 @@ name = "owning_ref" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot" -version = "0.4.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot_core 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot_core" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1645,17 +1644,17 @@ dependencies = [ "malloc_size_of_derive 0.0.1", "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "nsstring 0.1.0", "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.19.0", "servo_arc 0.1.1", "smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "style_derive 0.0.1", @@ -1776,25 +1775,16 @@ name = "textwrap" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "thread-id" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] name = "thread_local" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2299,17 +2289,17 @@ dependencies = [ "checksum num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525" "checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba" "checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01" "checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070" "checksum num-traits 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e7de20f146db9d920c45ee8ed8f71681fd9ade71909b48c3acbd766aa504cf10" "checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d" "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" -"checksum parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "37f364e2ce5efa24c7d0b6646d5bb61145551a0112f107ffd7499f1a3e322fbd" +"checksum parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9fd9d732f2de194336fb02fe11f9eed13d9e76f13f4315b4d88a14ca411750cd" "checksum parking_lot_core 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6c677d78851950b3aec390e681a411f78cc250cba277d4f578758a377f727970" "checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" "checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356" "checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" "checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" "checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" "checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" @@ -2348,17 +2338,16 @@ dependencies = [ "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" "checksum syn 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9e1c669ed757c0ebd04337f6a5bb972d05e0c08fe2540dd3ee3dd9e4daf1604c" "checksum synom 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "27e31aa4b09b9f4cb12dff3c30ba503e17b1a624413d764d32dab76e3920e5bc" "checksum synstructure 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "010366096045d8250555904c58da03377289e7f4b2ce7a5b1027e2b532f41000" "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" "checksum term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2b6b55df3198cc93372e85dd2ed817f0e38ce8cc0f22eb32391bfad9c4bf209" "checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693" -"checksum thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8df7875b676fddfadffd96deea3b1124e5ede707d4884248931077518cf1f773" "checksum thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14" "checksum thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf947d192a9be60ef5131cc7a4648886ba89d712f16700ebbf80c8a69d05d48f" "checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" "checksum tokio-core 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "febd81b3e2ef615c6c8077347b33f3f3deec3d708ecd08194c9707b7a1eccfc9" "checksum tokio-io 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b4ab83e7adb5677e42e405fa4ceff75659d93c4d7d7dd22f52fcec59ee9f02af" "checksum tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "65ae5d255ce739e8537221ed2942e0445f4b3b813daebac1c0050ddaaa3587f9" "checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
--- a/browser/base/content/browser-sets.inc +++ b/browser/base/content/browser-sets.inc @@ -162,17 +162,17 @@ <broadcaster id="isFrameImage"/> <broadcaster id="singleFeedMenuitemState" disabled="true"/> <broadcaster id="multipleFeedsMenuState" hidden="true"/> <!-- Sync broadcasters --> <!-- A broadcaster of a number of attributes suitable for "sync now" UI - A 'syncstatus' attribute is set while actively syncing, and the label attribute which changes from "sync now" to "syncing" etc. --> - <broadcaster id="sync-status"/> + <broadcaster id="sync-status" onmouseover="gSync.refreshSyncButtonsTooltip();"/> <!-- broadcasters of the "hidden" attribute to reflect setup state for menus --> <broadcaster id="sync-setup-state" hidden="true"/> <broadcaster id="sync-unverified-state" hidden="true"/> <broadcaster id="sync-syncnow-state" hidden="true"/> <broadcaster id="sync-reauth-state" hidden="true"/> <broadcaster id="viewTabsSidebar" autoCheck="false" sidebartitle="&syncedTabs.sidebar.label;" type="checkbox" group="sidebar"
--- a/browser/base/content/browser-sync.js +++ b/browser/base/content/browser-sync.js @@ -383,17 +383,17 @@ var gSync = { targetDevice.setAttribute("label", name); fragment.appendChild(targetDevice); } const clients = this.remoteClients; for (let client of clients) { const type = client.formfactor && client.formfactor.includes("tablet") ? "tablet" : client.type; - addTargetDevice(client.id, client.name, type, client.serverLastModified * 1000); + addTargetDevice(client.id, client.name, type, new Date(client.serverLastModified * 1000)); } // "Send to All Devices" menu item if (clients.length > 1) { const separator = createDeviceNodeFn(); separator.classList.add("sync-menuitem"); fragment.appendChild(separator); const allDevicesLabel = this.fxaStrings.GetStringFromName("sendToAllDevices.menuitem"); @@ -586,16 +586,21 @@ var gSync = { PanelUI.showSubView("PanelUI-remotetabs", anchor); }, Cu.reportError); } else { // It is placed somewhere else - just try and show it. PanelUI.showSubView("PanelUI-remotetabs", anchor); } }, + refreshSyncButtonsTooltip() { + const state = UIState.get(); + this.updateSyncButtonsTooltip(state); + }, + /* Update the tooltip for the sync-status broadcaster (which will update the Sync Toolbar button and the Sync spinner in the FxA hamburger area.) If Sync is configured, the tooltip is when the last sync occurred, otherwise the tooltip reflects the fact that Sync needs to be (re-)configured. */ updateSyncButtonsTooltip(state) { const status = state.status; @@ -623,42 +628,27 @@ var gSync = { if (tooltiptext) { broadcaster.setAttribute("tooltiptext", tooltiptext); } else { broadcaster.removeAttribute("tooltiptext"); } } }, - get withinLastWeekFormat() { - delete this.withinLastWeekFormat; - return this.withinLastWeekFormat = new Intl.DateTimeFormat(undefined, - {weekday: "long", hour: "numeric", minute: "numeric"}); - }, - - get oneWeekOrOlderFormat() { - delete this.oneWeekOrOlderFormat; - return this.oneWeekOrOlderFormat = new Intl.DateTimeFormat(undefined, - {month: "long", day: "numeric"}); + get relativeTimeFormat() { + delete this.relativeTimeFormat; + return this.relativeTimeFormat = new Services.intl.RelativeTimeFormat(undefined, {style: "short"}); }, formatLastSyncDate(date) { - let sixDaysAgo = (() => { - let tempDate = new Date(); - tempDate.setDate(tempDate.getDate() - 6); - tempDate.setHours(0, 0, 0, 0); - return tempDate; - })(); - - // It may be confusing for the user to see "Last Sync: Monday" when the last - // sync was indeed a Monday, but 3 weeks ago. - let dateFormat = date < sixDaysAgo ? this.oneWeekOrOlderFormat : this.withinLastWeekFormat; - - let lastSyncDateString = dateFormat.format(date); - return this.syncStrings.formatStringFromName("lastSync2.label", [lastSyncDateString], 1); + if (!date) { // Date can be null before the first sync! + return null; + } + const relativeDateStr = this.relativeTimeFormat.formatBestUnit(date); + return this.syncStrings.formatStringFromName("lastSync2.label", [relativeDateStr], 1); }, onClientsSynced() { let broadcaster = document.getElementById("sync-syncnow-state"); if (broadcaster) { if (Weave.Service.clientsEngine.stats.numClients > 1) { broadcaster.setAttribute("devices-status", "multi"); } else {
--- a/browser/base/content/test/sync/browser_fxa_badge.js +++ b/browser/base/content/test/sync/browser_fxa_badge.js @@ -17,16 +17,17 @@ add_task(async function test_unconfigure UIState.get = oldUIState; }); add_task(async function test_signedin_no_badge() { const oldUIState = UIState.get; UIState.get = () => ({ status: UIState.STATUS_SIGNED_IN, + lastSync: new Date(), email: "foo@bar.com" }); Services.obs.notifyObservers(null, UIState.ON_UPDATE); checkFxABadge(false); UIState.get = oldUIState; });
--- a/browser/base/content/test/sync/browser_sync.js +++ b/browser/base/content/test/sync/browser_sync.js @@ -129,31 +129,16 @@ add_task(async function test_ui_state_lo avatarURL: null, syncing: false, syncNowTooltip: tooltipText }); checkRemoteTabsPanel("PanelUI-remotetabs-reauthsync", false); checkMenuBarItem("sync-reauthitem"); }); -add_task(async function test_FormatLastSyncDateNow() { - let now = new Date(); - let nowString = gSync.formatLastSyncDate(now); - is(nowString, "Last sync: " + now.toLocaleDateString(undefined, {weekday: "long", hour: "numeric", minute: "numeric"}), - "The date is correctly formatted"); -}); - -add_task(async function test_FormatLastSyncDateMonthAgo() { - let monthAgo = new Date(); - monthAgo.setMonth(monthAgo.getMonth() - 1); - let monthAgoString = gSync.formatLastSyncDate(monthAgo); - is(monthAgoString, "Last sync: " + monthAgo.toLocaleDateString(undefined, {month: "long", day: "numeric"}), - "The date is correctly formatted"); -}); - function checkPanelUIStatusBar({label, tooltip, fxastatus, avatarURL, syncing, syncNowTooltip}) { let labelNode = document.getElementById("appMenu-fxa-label"); let tooltipNode = document.getElementById("appMenu-fxa-status"); let statusNode = document.getElementById("appMenu-fxa-container"); let avatar = document.getElementById("appMenu-fxa-avatar"); is(labelNode.getAttribute("label"), label, "fxa label has the right value"); is(tooltipNode.getAttribute("tooltiptext"), tooltip, "fxa tooltip has the right value");
--- a/browser/base/content/test/urlbar/browser_page_action_menu.js +++ b/browser/base/content/test/urlbar/browser_page_action_menu.js @@ -323,17 +323,17 @@ add_task(async function sendToDevice_syn }, ]; for (let client of mockRemoteClients) { expectedItems.push({ attrs: { clientId: client.id, label: client.name, clientType: client.type, - tooltiptext: gSync.formatLastSyncDate(lastModifiedFixture * 1000) + tooltiptext: gSync.formatLastSyncDate(new Date(lastModifiedFixture * 1000)) }, }); } expectedItems.push( null, { attrs: { label: "Send to All Devices"
--- a/browser/components/customizableui/CustomizableWidgets.jsm +++ b/browser/components/customizableui/CustomizableWidgets.jsm @@ -560,36 +560,17 @@ if (Services.prefs.getBoolPref("identity deckIndices: { DECKINDEX_TABS: 0, DECKINDEX_TABSDISABLED: 1, DECKINDEX_FETCHING: 2, DECKINDEX_NOCLIENTS: 3, }, TABS_PER_PAGE: 25, NEXT_PAGE_MIN_TABS: 5, // Minimum number of tabs displayed when we click "Show All" - onCreated(aNode) { - this._initialize(aNode); - }, - _initialize(aNode) { - if (this._initialized) { - return; - } - // Add an observer to the button so we get the animation during sync. - // (Note the observer sets many attributes, including label and - // tooltiptext, but we only want the 'syncstatus' attribute for the - // animation) - let doc = aNode.ownerDocument; - let obnode = doc.createElementNS(kNSXUL, "observes"); - obnode.setAttribute("element", "sync-status"); - obnode.setAttribute("attribute", "syncstatus"); - aNode.appendChild(obnode); - this._initialized = true; - }, onViewShowing(aEvent) { - this._initialize(aEvent.target); let doc = aEvent.target.ownerDocument; this._tabsList = doc.getElementById("PanelUI-remotetabs-tabslist"); Services.obs.addObserver(this, SyncedTabs.TOPIC_TABS_CHANGED); if (SyncedTabs.isConfiguredToSyncTabs) { if (SyncedTabs.hasSyncedThisSession) { this.setDeckIndex(this.deckIndices.DECKINDEX_TABS); } else {
--- a/browser/components/customizableui/content/panelUI.inc.xul +++ b/browser/components/customizableui/content/panelUI.inc.xul @@ -194,16 +194,17 @@ </hbox> <toolbarseparator orient="vertical"/> <toolbarbutton id="appMenu-fxa-icon" class="subviewbutton subviewbutton-iconic" oncommand="gSync.doSync();" closemenu="none"> <observes element="sync-status" attribute="syncstatus"/> <observes element="sync-status" attribute="tooltiptext"/> + <observes element="sync-status" attribute="onmouseover"/> </toolbarbutton> </toolbaritem> <toolbarseparator class="sync-ui-item"/> <toolbarbutton id="appMenu-new-window-button" class="subviewbutton subviewbutton-iconic" label="&newNavigatorCmd.label;" key="key_newNavigator" command="cmd_newNavigator"/>
--- a/browser/components/customizableui/test/browser_remote_tabs_button.js +++ b/browser/components/customizableui/test/browser_remote_tabs_button.js @@ -65,16 +65,17 @@ add_task(async function asyncCleanup() { restoreValues(); }); function mockFunctions() { // mock UIState.get() UIState.get = () => ({ status: UIState.STATUS_SIGNED_IN, + lastSync: new Date(), email: "user@mozilla.com" }); service.sync = mocked_sync; } function mocked_sync() { syncWasCalled = true;
--- a/browser/components/customizableui/test/browser_synced_tabs_menu.js +++ b/browser/components/customizableui/test/browser_synced_tabs_menu.js @@ -154,17 +154,18 @@ add_task(asyncCleanup); // When Sync is configured in a "needs reauthentication" state. add_task(async function() { gSync.updateAllUI({ status: UIState.STATUS_LOGIN_FAILED, email: "foo@bar.com" }); await openPrefsFromMenuPanel("PanelUI-remotetabs-reauthsync", "synced-tabs"); }); // Test the Connect Another Device button add_task(async function() { - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com" }); + gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com", + lastSync: new Date() }); let button = document.getElementById("PanelUI-remotetabs-connect-device-button"); ok(button, "found the button"); await document.getElementById("nav-bar").overflowable.show(); let expectedUrl = "https://example.com/connect_another_device?service=sync&context=" + "fx_desktop_v3&entrypoint=synced-tabs&uid=uid&email=foo%40bar.com"; let promiseTabOpened = BrowserTestUtils.waitForNewTab(gBrowser, expectedUrl); @@ -173,17 +174,18 @@ add_task(async function() { ok(!isOverflowOpen(), "click closed the panel"); await promiseTabOpened; gBrowser.removeTab(gBrowser.selectedTab); }); // Test the "Sync Now" button add_task(async function() { - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com" }); + gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com", + lastSync: new Date() }); await document.getElementById("nav-bar").overflowable.show(); let tabsUpdatedPromise = promiseObserverNotified("synced-tabs-menu:test:tabs-updated"); let syncPanel = document.getElementById("PanelUI-remotetabs"); let viewShownPromise = BrowserTestUtils.waitForEvent(syncPanel, "ViewShown"); let syncButton = document.getElementById("sync-button"); syncButton.click(); await Promise.all([tabsUpdatedPromise, viewShownPromise]); @@ -336,17 +338,18 @@ add_task(async function() { allTabsDesktop.push({ title: "Tab #" + i }); } return allTabsDesktop; }(), } ]); }; - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com" }); + gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, lastSync: new Date(), + email: "foo@bar.com" }); await document.getElementById("nav-bar").overflowable.show(); let tabsUpdatedPromise = promiseObserverNotified("synced-tabs-menu:test:tabs-updated"); let syncPanel = document.getElementById("PanelUI-remotetabs"); let viewShownPromise = BrowserTestUtils.waitForEvent(syncPanel, "ViewShown"); let syncButton = document.getElementById("sync-button"); syncButton.click(); await Promise.all([tabsUpdatedPromise, viewShownPromise]);
--- a/browser/components/enterprisepolicies/Policies.jsm +++ b/browser/components/enterprisepolicies/Policies.jsm @@ -261,22 +261,27 @@ var Policies = { "DontCheckDefaultBrowser": { onBeforeUIStartup(manager, param) { setAndLockPref("browser.shell.checkDefaultBrowser", false); } }, "EnableTrackingProtection": { onBeforeUIStartup(manager, param) { - if (param.Locked) { - setAndLockPref("privacy.trackingprotection.enabled", param.Value); - setAndLockPref("privacy.trackingprotection.pbmode.enabled", param.Value); + if (param.Value) { + if (param.Locked) { + setAndLockPref("privacy.trackingprotection.enabled", true); + setAndLockPref("privacy.trackingprotection.pbmode.enabled", true); + } else { + setDefaultPref("privacy.trackingprotection.enabled", true); + setDefaultPref("privacy.trackingprotection.pbmode.enabled", true); + } } else { - setDefaultPref("privacy.trackingprotection.enabled", param.Value); - setDefaultPref("privacy.trackingprotection.pbmode.enabled", param.Value); + setAndLockPref("privacy.trackingprotection.enabled", false); + setAndLockPref("privacy.trackingprotection.pbmode.enabled", false); } } }, "FlashPlugin": { onBeforeUIStartup(manager, param) { addAllowDenyPermissions("plugin:flash", param.Allow, param.Block); }
--- a/browser/components/syncedtabs/TabListView.js +++ b/browser/components/syncedtabs/TabListView.js @@ -126,21 +126,30 @@ TabListView.prototype = { // Client rows are hidden when the list is filtered _renderFilteredClient(client, filter) { client.tabs.forEach((tab, index) => { let node = this._renderTab(client, tab, index); this.list.appendChild(node); }); }, + _updateLastSyncTitle(lastModified, itemNode) { + let lastSync = new Date(lastModified); + let lastSyncTitle = getChromeWindow(this._window).gSync.formatLastSyncDate(lastSync); + itemNode.setAttribute("title", lastSyncTitle); + }, + _renderClient(client) { let itemNode = client.tabs.length ? this._createClient(client) : this._createEmptyClient(client); + itemNode.addEventListener("mouseover", () => + this._updateLastSyncTitle(client.lastModified, itemNode)); + this._updateClient(client, itemNode); let tabsList = itemNode.querySelector(".item-tabs-list"); client.tabs.forEach((tab, index) => { let node = this._renderTab(client, tab, index); tabsList.appendChild(node); }); @@ -149,25 +158,25 @@ TabListView.prototype = { }, _renderTab(client, tab, index) { let itemNode = this._createTab(tab); this._updateTab(tab, itemNode, index); return itemNode; }, - _createClient(item) { + _createClient() { return this._doc.importNode(this._clientTemplate.content, true).firstElementChild; }, - _createEmptyClient(item) { + _createEmptyClient() { return this._doc.importNode(this._emptyClientTemplate.content, true).firstElementChild; }, - _createTab(item) { + _createTab() { return this._doc.importNode(this._tabTemplate.content, true).firstElementChild; }, _clearChilden(node) { let parent = node || this.container; while (parent.firstChild) { parent.firstChild.remove(); } @@ -206,19 +215,17 @@ TabListView.prototype = { /** * Update the element representing an item, ensuring it's in sync with the * underlying data. * @param {client} item - Item to use as a source. * @param {Element} itemNode - Element to update. */ _updateClient(item, itemNode) { itemNode.setAttribute("id", "item-" + item.id); - let lastSync = new Date(item.lastModified); - let lastSyncTitle = getChromeWindow(this._window).gSync.formatLastSyncDate(lastSync); - itemNode.setAttribute("title", lastSyncTitle); + this._updateLastSyncTitle(item.lastModified, itemNode); if (item.closed) { itemNode.classList.add("closed"); } else { itemNode.classList.remove("closed"); } if (item.selected) { itemNode.classList.add("selected"); } else {
--- a/browser/components/uitour/test/browser_fxa.js +++ b/browser/components/uitour/test/browser_fxa.js @@ -31,17 +31,17 @@ var tests = [ let highlight = document.getElementById("UITourHighlightContainer"); is(highlight.getAttribute("targetName"), "accountStatus", "Correct highlight target"); }), taskify(async function test_highlight_accountStatus_loggedIn() { await setSignedInUser(); let userData = await fxAccounts.getSignedInUser(); isnot(userData, null, "Logged in now"); - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@example.com" }); + gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, lastSync: new Date(), email: "foo@example.com" }); await showMenuPromise("appMenu"); await showHighlightPromise("accountStatus"); let highlight = document.getElementById("UITourHighlightContainer"); let expectedTarget = "appMenu-fxa-avatar"; is(highlight.popupBoxObject.anchorNode.id, expectedTarget, "Anchored on avatar"); is(highlight.getAttribute("targetName"), "accountStatus", "Correct highlight target"); }), ];
--- a/browser/modules/AsyncTabSwitcher.jsm +++ b/browser/modules/AsyncTabSwitcher.jsm @@ -102,20 +102,18 @@ class AsyncTabSwitcher { // Set of tabs that might be visible right now. We maintain // this set because we can't be sure when a tab is actually // drawn. A tab is added to this set when we ask to make it // visible. All tabs but the most recently shown tab are // removed from the set upon MozAfterPaint. this.maybeVisibleTabs = new Set([tabbrowser.selectedTab]); - // This holds onto the set of tabs that we've been asked to warm up. - // This is used only for Telemetry and logging, and (in order to not - // over-complicate the async tab switcher any further) has nothing to do - // with how warmed tabs are loaded and unloaded. + // This holds onto the set of tabs that we've been asked to warm up, + // and tabs are evicted once they're done loading or are unloaded. this.warmingTabs = new WeakSet(); this.STATE_UNLOADED = 0; this.STATE_LOADING = 1; this.STATE_LOADED = 2; this.STATE_UNLOADING = 3; // re-entrancy guard: @@ -837,34 +835,39 @@ class AsyncTabSwitcher { if (this.minimizedOrFullyOccluded || !tab.linkedPanel || tab.closing || !tab.linkedBrowser.isRemoteBrowser || !tab.linkedBrowser.frameLoader.tabParent) { return false; } - // Similarly, if the tab is already in STATE_LOADING or - // STATE_LOADED somehow, there's no point in trying to - // warm it up. - let state = this.getTabState(tab); - if (state === this.STATE_LOADING || - state === this.STATE_LOADED) { - return false; + return true; + } + + shouldWarmTab(tab) { + if (this.canWarmTab(tab)) { + // Tabs that are already in STATE_LOADING or STATE_LOADED + // have no need to be warmed up. + let state = this.getTabState(tab); + if (state === this.STATE_UNLOADING || + state === this.STATE_UNLOADED) { + return true; + } } - return true; + return false; } unwarmTab(tab) { this.warmingTabs.delete(tab); } warmupTab(tab) { - if (!this.canWarmTab(tab)) { + if (!this.shouldWarmTab(tab)) { return; } this.logState("warmupTab " + this.tinfo(tab)); this.warmingTabs.add(tab); this.setTabState(tab, this.STATE_LOADING); this.suppressDisplayPortAndQueueUnload(tab, @@ -875,25 +878,31 @@ class AsyncTabSwitcher { requestTab(tab) { if (tab === this.requestedTab) { return; } if (this.tabbrowser.tabWarmingEnabled) { let warmingState = "disqualified"; - if (this.warmingTabs.has(tab)) { + if (this.canWarmTab(tab)) { let tabState = this.getTabState(tab); if (tabState == this.STATE_LOADING) { warmingState = "stillLoading"; } else if (tabState == this.STATE_LOADED) { warmingState = "loaded"; + } else if (tabState == this.STATE_UNLOADING || + tabState == this.STATE_UNLOADED) { + // At this point, if the tab's browser was being inserted + // lazily, we never had a chance to warm it up, and unfortunately + // there's no great way to detect that case. Those cases will + // end up in the "notWarmed" bucket, along with legitimate cases + // where tabs could have been warmed but weren't. + warmingState = "notWarmed"; } - } else if (this.canWarmTab(tab)) { - warmingState = "notWarmed"; } Services.telemetry .getHistogramById("FX_TAB_SWITCH_REQUEST_TAB_WARMING_STATE") .add(warmingState); } this._requestingTab = true;
--- a/build/clang-plugin/Makefile.in +++ b/build/clang-plugin/Makefile.in @@ -8,20 +8,16 @@ include $(topsrcdir)/config/config.mk # variable to limit ourselves to what we need to build the clang plugin. ifneq ($(HOST_OS_ARCH),WINNT) DSO_LDOPTS := -shared endif ifeq ($(HOST_OS_ARCH)_$(OS_ARCH),Linux_Darwin) # Use the host compiler instead of the target compiler. CXX := $(HOST_CXX) -# expandlibs doesn't know the distinction between host and target toolchains, -# and on cross linux/darwin builds, the options to give to the linker for file -# lists differ between both, so don't use file lists. -EXPAND_MKSHLIB_ARGS := endif # Use the default OS X deployment target to enable using the libc++ headers # correctly. Note that the binary produced here is a host tool and doesn't need # to be distributed. MACOSX_DEPLOYMENT_TARGET := # Temporarily relax the requirements for libstdc++ symbol versions on static
--- a/config/config.mk +++ b/config/config.mk @@ -413,28 +413,16 @@ ifdef MOZ_DEBUG JAVAC_FLAGS += -g endif CREATE_PRECOMPLETE_CMD = $(PYTHON) $(abspath $(MOZILLA_DIR)/config/createprecomplete.py) # MDDEPDIR is the subdirectory where dependency files are stored MDDEPDIR := .deps -EXPAND_LIBS_EXEC = $(PYTHON) $(MOZILLA_DIR)/config/expandlibs_exec.py -EXPAND_LIBS_GEN = $(PYTHON) $(MOZILLA_DIR)/config/expandlibs_gen.py -EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR) -EXPAND_CC = $(EXPAND_LIBS_EXEC) --uselist -- $(CC) -EXPAND_CCC = $(EXPAND_LIBS_EXEC) --uselist -- $(CCC) -EXPAND_LINK = $(EXPAND_LIBS_EXEC) --uselist -- $(LINKER) -EXPAND_MKSHLIB_ARGS = --uselist -ifdef SYMBOL_ORDER -EXPAND_MKSHLIB_ARGS += --symbol-order $(SYMBOL_ORDER) -endif -EXPAND_MKSHLIB = $(EXPAND_LIBS_EXEC) $(EXPAND_MKSHLIB_ARGS) -- $(MKSHLIB) - # $(call CHECK_SYMBOLS,lib,PREFIX,dep_name,test) # Checks that the given `lib` doesn't contain dependency on symbols with a # version starting with `PREFIX`_ and matching the `test`. `dep_name` is only # used for the error message. # `test` is an awk expression using the information in the variable `v` which # contains a list of version items ([major, minor, ...]). define CHECK_SYMBOLS @$(TOOLCHAIN_PREFIX)readelf -sW $(1) | \ @@ -481,25 +469,28 @@ define CHECK_BINARY $(call LOCAL_CHECKS,$(1)) $(call CHECK_MOZGLUE_ORDER,$(1)) endef # autoconf.mk sets OBJ_SUFFIX to an error to avoid use before including # this file OBJ_SUFFIX := $(_OBJ_SUFFIX) +OBJS_VAR_SUFFIX := OBJS + # PGO builds with GCC build objects with instrumentation in a first pass, # then objects optimized, without instrumentation, in a second pass. If # we overwrite the objects from the first pass with those from the second, # we end up not getting instrumentation data for better optimization on # incremental builds. As a consequence, we use a different object suffix # for the first pass. -ifndef NO_PROFILE_GUIDED_OPTIMIZE ifdef MOZ_PROFILE_GENERATE ifdef GNU_CC +OBJS_VAR_SUFFIX := PGO_OBJS +ifndef NO_PROFILE_GUIDED_OPTIMIZE OBJ_SUFFIX := i_o endif endif endif PLY_INCLUDE = -I$(MOZILLA_DIR)/other-licenses/ply export CL_INCLUDES_PREFIX
deleted file mode 100644 --- a/config/expandlibs.py +++ /dev/null @@ -1,143 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -'''Expandlibs is a system that allows to replace some libraries with a -descriptor file containing some linking information about them. - -The descriptor file format is as follows: ----8<----- -OBJS = a.o b.o ... -LIBS = libfoo.a libbar.a ... ---->8----- - -(In the example above, OBJ_SUFFIX is o and LIB_SUFFIX is a). - -Expandlibs also canonicalizes how to pass libraries to the linker, such -that only the ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} form needs to be used: -given a list of files, expandlibs will replace items with the form -${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} following these rules: - -- If a ${DLL_PREFIX}${ROOT}.${DLL_SUFFIX} or - ${DLL_PREFIX}${ROOT}.${IMPORT_LIB_SUFFIX} file exists, use that instead -- If the ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} file exists, use it -- If a ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX}.${LIB_DESC_SUFFIX} file exists, - replace ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} with the OBJS and LIBS the - descriptor contains. And for each of these LIBS, also apply the same - rules. -''' -from __future__ import with_statement -import sys, os, errno -import expandlibs_config as conf - -def ensureParentDir(file): - '''Ensures the directory parent to the given file exists''' - dir = os.path.dirname(file) - if dir and not os.path.exists(dir): - try: - os.makedirs(dir) - except OSError, error: - if error.errno != errno.EEXIST: - raise - -def relativize(path): - '''Returns a path relative to the current working directory, if it is - shorter than the given path''' - def splitpath(path): - dir, file = os.path.split(path) - if os.path.splitdrive(dir)[1] == os.sep: - return [file] - return splitpath(dir) + [file] - - if not os.path.exists(path): - return path - curdir = splitpath(os.path.abspath(os.curdir)) - abspath = splitpath(os.path.abspath(path)) - while curdir and abspath and curdir[0] == abspath[0]: - del curdir[0] - del abspath[0] - if not curdir and not abspath: - return '.' - relpath = os.path.join(*[os.pardir for i in curdir] + abspath) - if len(path) > len(relpath): - return relpath - return path - -def isObject(path): - '''Returns whether the given path points to an object file, that is, - ends with OBJ_SUFFIX or .i_o''' - return os.path.splitext(path)[1] in [conf.OBJ_SUFFIX, '.i_o'] - -def isDynamicLib(path): - '''Returns whether the given path points to a dynamic library, that is, - ends with DLL_SUFFIX.''' - # On mac, the xul library is named XUL, instead of libxul.dylib. Assume any - # file by that name is a dynamic library. - return os.path.splitext(path)[1] == conf.DLL_SUFFIX or os.path.basename(path) == 'XUL' - -class LibDescriptor(dict): - KEYS = ['OBJS', 'LIBS'] - - def __init__(self, content=None): - '''Creates an instance of a lib descriptor, initialized with contents - from a list of strings when given. This is intended for use with - file.readlines()''' - if isinstance(content, list) and all([isinstance(item, str) for item in content]): - pass - elif content is not None: - raise TypeError("LibDescriptor() arg 1 must be None or a list of strings") - super(LibDescriptor, self).__init__() - for key in self.KEYS: - self[key] = [] - if not content: - return - for key, value in [(s.strip() for s in item.split('=', 2)) for item in content if item.find('=') >= 0]: - if key in self.KEYS: - self[key] = value.split() - - def __str__(self): - '''Serializes the lib descriptor''' - return '\n'.join('%s = %s' % (k, ' '.join(self[k])) for k in self.KEYS if len(self[k])) - -class ExpandArgs(list): - def __init__(self, args): - '''Creates a clone of the |args| list and performs file expansion on - each item it contains''' - super(ExpandArgs, self).__init__() - self._descs = set() - for arg in args: - self += self._expand(arg) - - def _expand(self, arg): - '''Internal function doing the actual work''' - (root, ext) = os.path.splitext(arg) - if ext != conf.LIB_SUFFIX or not os.path.basename(root).startswith(conf.LIB_PREFIX): - return [relativize(arg)] - if conf.LIB_PREFIX: - dll = root.replace(conf.LIB_PREFIX, conf.DLL_PREFIX, 1) + conf.DLL_SUFFIX - else: - dll = root + conf.DLL_SUFFIX - if os.path.exists(dll): - if conf.IMPORT_LIB_SUFFIX: - return [relativize(root + conf.IMPORT_LIB_SUFFIX)] - else: - return [relativize(dll)] - return self._expand_desc(arg) - - def _expand_desc(self, arg): - '''Internal function taking care of lib descriptor expansion only''' - desc = os.path.abspath(arg + conf.LIBS_DESC_SUFFIX) - if os.path.exists(desc): - if desc in self._descs: - return [] - self._descs.add(desc) - with open(desc, 'r') as f: - desc = LibDescriptor(f.readlines()) - objs = [relativize(o) for o in desc['OBJS']] - for lib in desc['LIBS']: - objs += self._expand(lib) - return objs - return [relativize(arg)] - -if __name__ == '__main__': - print " ".join(ExpandArgs(sys.argv[1:]))
deleted file mode 100644 --- a/config/expandlibs_config.py +++ /dev/null @@ -1,29 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -from buildconfig import substs - -def normalize_suffix(suffix): - '''Returns a normalized suffix, i.e. ensures it starts with a dot and - doesn't starts or ends with whitespace characters''' - value = suffix.strip() - if len(value) and not value.startswith('.'): - value = '.' + value - return value - -# Variables from the build system -AR = substs['AR'] -AR_EXTRACT = substs['AR_EXTRACT'].replace('$(AR)', AR) -DLL_PREFIX = substs['DLL_PREFIX'] -LIB_PREFIX = substs['LIB_PREFIX'] -RUST_LIB_PREFIX = substs['RUST_LIB_PREFIX'] -OBJ_SUFFIX = normalize_suffix(substs['OBJ_SUFFIX']) -LIB_SUFFIX = normalize_suffix(substs['LIB_SUFFIX']) -RUST_LIB_SUFFIX = normalize_suffix(substs['RUST_LIB_SUFFIX']) -DLL_SUFFIX = normalize_suffix(substs['DLL_SUFFIX']) -IMPORT_LIB_SUFFIX = normalize_suffix(substs['IMPORT_LIB_SUFFIX']) -LIBS_DESC_SUFFIX = normalize_suffix(substs['LIBS_DESC_SUFFIX']) -EXPAND_LIBS_LIST_STYLE = substs['EXPAND_LIBS_LIST_STYLE'] -EXPAND_LIBS_ORDER_STYLE = substs['EXPAND_LIBS_ORDER_STYLE'] -LD_PRINT_ICF_SECTIONS = substs['LD_PRINT_ICF_SECTIONS']
deleted file mode 100644 --- a/config/expandlibs_exec.py +++ /dev/null @@ -1,354 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -'''expandlibs-exec.py applies expandlibs rules, and some more (see below) to -a given command line, and executes that command line with the expanded -arguments. - -With the --extract argument (useful for e.g. $(AR)), it extracts object files -from static libraries (or use those listed in library descriptors directly). - -With the --uselist argument (useful for e.g. $(CC)), it replaces all object -files with a list file. This can be used to avoid limitations in the length -of a command line. The kind of list file format used depends on the -EXPAND_LIBS_LIST_STYLE variable: 'list' for MSVC style lists (@file.list) -or 'linkerscript' for GNU ld linker scripts. -See https://bugzilla.mozilla.org/show_bug.cgi?id=584474#c59 for more details. - -With the --symbol-order argument, followed by a file name, it will add the -relevant linker options to change the order in which the linker puts the -symbols appear in the resulting binary. Only works for ELF targets. -''' -from __future__ import with_statement -import sys -import os -from expandlibs import ( - ExpandArgs, - relativize, - isDynamicLib, - isObject, -) -import expandlibs_config as conf -from optparse import OptionParser -import subprocess -import tempfile -import shutil -import subprocess -import re -from mozbuild.makeutil import Makefile - -# The are the insert points for a GNU ld linker script, assuming a more -# or less "standard" default linker script. This is not a dict because -# order is important. -SECTION_INSERT_BEFORE = [ - ('.text', '.fini'), - ('.rodata', '.rodata1'), - ('.data.rel.ro', '.dynamic'), - ('.data', '.data1'), -] - -class ExpandArgsMore(ExpandArgs): - ''' Meant to be used as 'with ExpandArgsMore(args) as ...: ''' - def __enter__(self): - self.tmp = [] - return self - - def __exit__(self, type, value, tb): - '''Automatically remove temporary files''' - for tmp in self.tmp: - if os.path.isdir(tmp): - shutil.rmtree(tmp, True) - else: - os.remove(tmp) - - def extract(self): - self[0:] = self._extract(self) - - def _extract(self, args): - '''When a static library name is found, either extract its contents - in a temporary directory or use the information found in the - corresponding lib descriptor. - ''' - ar_extract = conf.AR_EXTRACT.split() - newlist = [] - - def lookup(base, f): - for root, dirs, files in os.walk(base): - if f in files: - return os.path.join(root, f) - - for arg in args: - if os.path.splitext(arg)[1] == conf.LIB_SUFFIX: - if os.path.exists(arg + conf.LIBS_DESC_SUFFIX): - newlist += self._extract(self._expand_desc(arg)) - continue - elif os.path.exists(arg) and (len(ar_extract) or conf.AR == 'lib'): - tmp = tempfile.mkdtemp(dir=os.curdir) - self.tmp.append(tmp) - if conf.AR == 'lib': - out = subprocess.check_output([conf.AR, '-NOLOGO', '-LIST', arg]) - files = out.splitlines() - # If lib -list returns a list full of dlls, it's an - # import lib. - if all(isDynamicLib(f) for f in files): - newlist += [arg] - continue - for f in files: - subprocess.call([conf.AR, '-NOLOGO', '-EXTRACT:%s' % f, os.path.abspath(arg)], cwd=tmp) - else: - subprocess.call(ar_extract + [os.path.abspath(arg)], cwd=tmp) - objs = [] - basedir = os.path.dirname(arg) - for root, dirs, files in os.walk(tmp): - for f in files: - if isObject(f): - # If the file extracted from the library also - # exists in the directory containing the - # library, or one of its subdirectories, use - # that instead. - maybe_obj = lookup(os.path.join(basedir, os.path.relpath(root, tmp)), f) - if maybe_obj: - objs.append(relativize(maybe_obj)) - else: - objs.append(relativize(os.path.join(root, f))) - newlist += sorted(objs) - continue - newlist += [arg] - return newlist - - def makelist(self): - '''Replaces object file names with a temporary list file, using a - list format depending on the EXPAND_LIBS_LIST_STYLE variable - ''' - objs = [o for o in self if isObject(o)] - if not len(objs): return - fd, tmp = tempfile.mkstemp(suffix=".list",dir=os.curdir) - if conf.EXPAND_LIBS_LIST_STYLE == "linkerscript": - content = ['INPUT("%s")\n' % obj for obj in objs] - ref = tmp - elif conf.EXPAND_LIBS_LIST_STYLE == "filelist": - content = ["%s\n" % obj for obj in objs] - ref = "-Wl,-filelist," + tmp - elif conf.EXPAND_LIBS_LIST_STYLE == "list": - content = ["%s\n" % obj for obj in objs] - ref = "@" + tmp - else: - os.close(fd) - os.remove(tmp) - return - self.tmp.append(tmp) - f = os.fdopen(fd, "w") - f.writelines(content) - f.close() - idx = self.index(objs[0]) - newlist = self[0:idx] + [ref] + [os.path.normpath(item) for item in self[idx:] if item not in objs] - self[0:] = newlist - - def _getFoldedSections(self): - '''Returns a dict about folded sections. - When section A and B are folded into section C, the dict contains: - { 'A': 'C', - 'B': 'C', - 'C': ['A', 'B'] }''' - if not conf.LD_PRINT_ICF_SECTIONS: - return {} - - proc = subprocess.Popen(self + [conf.LD_PRINT_ICF_SECTIONS], stdout = subprocess.PIPE, stderr = subprocess.PIPE) - (stdout, stderr) = proc.communicate() - result = {} - # gold's --print-icf-sections output looks like the following: - # ld: ICF folding section '.section' in file 'file.o'into '.section' in file 'file.o' - # In terms of words, chances are this will change in the future, - # especially considering "into" is misplaced. Splitting on quotes - # seems safer. - for l in stderr.split('\n'): - quoted = l.split("'") - if len(quoted) > 5 and quoted[1] != quoted[5]: - result[quoted[1]] = [quoted[5]] - if quoted[5] in result: - result[quoted[5]].append(quoted[1]) - else: - result[quoted[5]] = [quoted[1]] - return result - - def _getOrderedSections(self, ordered_symbols): - '''Given an ordered list of symbols, returns the corresponding list - of sections following the order.''' - if not conf.EXPAND_LIBS_ORDER_STYLE in ['linkerscript', 'section-ordering-file']: - raise Exception('EXPAND_LIBS_ORDER_STYLE "%s" is not supported' % conf.EXPAND_LIBS_ORDER_STYLE) - finder = SectionFinder([arg for arg in self if isObject(arg) or os.path.splitext(arg)[1] == conf.LIB_SUFFIX]) - folded = self._getFoldedSections() - sections = set() - ordered_sections = [] - for symbol in ordered_symbols: - symbol_sections = finder.getSections(symbol) - all_symbol_sections = [] - for section in symbol_sections: - if section in folded: - if isinstance(folded[section], str): - section = folded[section] - all_symbol_sections.append(section) - all_symbol_sections.extend(folded[section]) - else: - all_symbol_sections.append(section) - for section in all_symbol_sections: - if not section in sections: - ordered_sections.append(section) - sections.add(section) - return ordered_sections - - def orderSymbols(self, order): - '''Given a file containing a list of symbols, adds the appropriate - argument to make the linker put the symbols in that order.''' - with open(order) as file: - sections = self._getOrderedSections([l.strip() for l in file.readlines() if l.strip()]) - split_sections = {} - linked_sections = [s[0] for s in SECTION_INSERT_BEFORE] - for s in sections: - for linked_section in linked_sections: - if s.startswith(linked_section): - if linked_section in split_sections: - split_sections[linked_section].append(s) - else: - split_sections[linked_section] = [s] - break - content = [] - # Order is important - linked_sections = [s for s in linked_sections if s in split_sections] - - if conf.EXPAND_LIBS_ORDER_STYLE == 'section-ordering-file': - option = '-Wl,--section-ordering-file,%s' - content = sections - for linked_section in linked_sections: - content.extend(split_sections[linked_section]) - content.append('%s.*' % linked_section) - content.append(linked_section) - - elif conf.EXPAND_LIBS_ORDER_STYLE == 'linkerscript': - option = '-Wl,-T,%s' - section_insert_before = dict(SECTION_INSERT_BEFORE) - for linked_section in linked_sections: - content.append('SECTIONS {') - content.append(' %s : {' % linked_section) - content.extend(' *(%s)' % s for s in split_sections[linked_section]) - content.append(' }') - content.append('}') - content.append('INSERT BEFORE %s' % section_insert_before[linked_section]) - else: - raise Exception('EXPAND_LIBS_ORDER_STYLE "%s" is not supported' % conf.EXPAND_LIBS_ORDER_STYLE) - - fd, tmp = tempfile.mkstemp(dir=os.curdir) - f = os.fdopen(fd, "w") - f.write('\n'.join(content)+'\n') - f.close() - self.tmp.append(tmp) - self.append(option % tmp) - -class SectionFinder(object): - '''Instances of this class allow to map symbol names to sections in - object files.''' - - def __init__(self, objs): - '''Creates an instance, given a list of object files.''' - if not conf.EXPAND_LIBS_ORDER_STYLE in ['linkerscript', 'section-ordering-file']: - raise Exception('EXPAND_LIBS_ORDER_STYLE "%s" is not supported' % conf.EXPAND_LIBS_ORDER_STYLE) - self.mapping = {} - for obj in objs: - if not isObject(obj) and os.path.splitext(obj)[1] != conf.LIB_SUFFIX: - raise Exception('%s is not an object nor a static library' % obj) - for symbol, section in SectionFinder._getSymbols(obj): - sym = SectionFinder._normalize(symbol) - if sym in self.mapping: - if not section in self.mapping[sym]: - self.mapping[sym].append(section) - else: - self.mapping[sym] = [section] - - def getSections(self, symbol): - '''Given a symbol, returns a list of sections containing it or the - corresponding thunks. When the given symbol is a thunk, returns the - list of sections containing its corresponding normal symbol and the - other thunks for that symbol.''' - sym = SectionFinder._normalize(symbol) - if sym in self.mapping: - return self.mapping[sym] - return [] - - @staticmethod - def _normalize(symbol): - '''For normal symbols, return the given symbol. For thunks, return - the corresponding normal symbol.''' - if re.match('^_ZThn[0-9]+_', symbol): - return re.sub('^_ZThn[0-9]+_', '_Z', symbol) - return symbol - - @staticmethod - def _getSymbols(obj): - '''Returns a list of (symbol, section) contained in the given object - file.''' - proc = subprocess.Popen(['objdump', '-t', obj], stdout = subprocess.PIPE, stderr = subprocess.PIPE) - (stdout, stderr) = proc.communicate() - syms = [] - for line in stdout.splitlines(): - # Each line has the following format: - # <addr> [lgu!][w ][C ][W ][Ii ][dD ][FfO ] <section>\t<length> <symbol> - tmp = line.split(' ',1) - # This gives us ["<addr>", "[lgu!][w ][C ][W ][Ii ][dD ][FfO ] <section>\t<length> <symbol>"] - # We only need to consider cases where "<section>\t<length> <symbol>" is present, - # and where the [FfO] flag is either F (function) or O (object). - if len(tmp) > 1 and len(tmp[1]) > 6 and tmp[1][6] in ['O', 'F']: - tmp = tmp[1][8:].split() - # That gives us ["<section>","<length>", "<symbol>"] - syms.append((tmp[-1], tmp[0])) - return syms - -def print_command(out, args): - print >>out, "Executing: " + " ".join(args) - for tmp in [f for f in args.tmp if os.path.isfile(f)]: - print >>out, tmp + ":" - with open(tmp) as file: - print >>out, "".join([" " + l for l in file.readlines()]) - out.flush() - -def main(args, proc_callback=None): - parser = OptionParser() - parser.add_option("--extract", action="store_true", dest="extract", - help="when a library has no descriptor file, extract it first, when possible") - parser.add_option("--uselist", action="store_true", dest="uselist", - help="use a list file for objects when executing a command") - parser.add_option("--verbose", action="store_true", dest="verbose", - help="display executed command and temporary files content") - parser.add_option("--symbol-order", dest="symbol_order", metavar="FILE", - help="use the given list of symbols to order symbols in the resulting binary when using with a linker") - - (options, args) = parser.parse_args(args) - - with ExpandArgsMore(args) as args: - if options.extract: - args.extract() - if options.symbol_order: - args.orderSymbols(options.symbol_order) - if options.uselist: - args.makelist() - - if options.verbose: - print_command(sys.stderr, args) - try: - proc = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) - if proc_callback: - proc_callback(proc) - except Exception, e: - print >>sys.stderr, 'error: Launching', args, ':', e - raise e - (stdout, stderr) = proc.communicate() - if proc.returncode and not options.verbose: - print_command(sys.stderr, args) - sys.stderr.write(stdout) - sys.stderr.flush() - if proc.returncode: - return proc.returncode - return 0 - -if __name__ == '__main__': - exit(main(sys.argv[1:]))
deleted file mode 100644 --- a/config/expandlibs_gen.py +++ /dev/null @@ -1,41 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -'''Given a list of object files and library names, prints a library -descriptor to standard output''' - -from __future__ import with_statement -import sys -import os -import expandlibs_config as conf -from expandlibs import LibDescriptor, isObject, ensureParentDir -from optparse import OptionParser - -def generate(args): - desc = LibDescriptor() - for arg in args: - if isObject(arg): - if os.path.exists(arg): - desc['OBJS'].append(os.path.abspath(arg)) - else: - raise Exception("File not found: %s" % arg) - elif os.path.splitext(arg)[1] == conf.LIB_SUFFIX: - if os.path.exists(arg) or os.path.exists(arg + conf.LIBS_DESC_SUFFIX): - desc['LIBS'].append(os.path.abspath(arg)) - else: - raise Exception("File not found: %s" % arg) - return desc - -if __name__ == '__main__': - parser = OptionParser() - parser.add_option("-o", dest="output", metavar="FILE", - help="send output to the given file") - - (options, args) = parser.parse_args() - if not options.output: - raise Exception("Missing option: -o") - - ensureParentDir(options.output) - with open(options.output, 'w') as outfile: - print >>outfile, generate(args)
--- a/config/rules.mk +++ b/config/rules.mk @@ -95,38 +95,22 @@ endif # ENABLE_TESTS # Library rules # # If FORCE_STATIC_LIB is set, build a static library. # Otherwise, build a shared library. # ifndef LIBRARY ifdef REAL_LIBRARY -# Don't build actual static library if a shared library is also built -ifdef FORCE_SHARED_LIB -# ... except when we really want one ifdef NO_EXPAND_LIBS +# Only build actual library if it is requested. LIBRARY := $(REAL_LIBRARY) -else -LIBRARY := $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) -endif -else -# Only build actual library if it is installed in DIST/lib -ifeq (,$(DIST_INSTALL)$(NO_EXPAND_LIBS)) -LIBRARY := $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) -else -ifdef NO_EXPAND_LIBS -LIBRARY := $(REAL_LIBRARY) -else -LIBRARY := $(REAL_LIBRARY) $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) endif endif endif -endif # REAL_LIBRARY -endif # LIBRARY ifndef HOST_LIBRARY ifdef HOST_LIBRARY_NAME HOST_LIBRARY := $(LIB_PREFIX)$(HOST_LIBRARY_NAME).$(LIB_SUFFIX) endif endif ifdef FORCE_SHARED_LIB @@ -441,32 +425,35 @@ ECHO := true QUIET := -q endif # Do everything from scratch everything:: $(MAKE) clean $(MAKE) all -STATIC_LIB_DEP = $(if $(wildcard $(1).$(LIBS_DESC_SUFFIX)),$(1).$(LIBS_DESC_SUFFIX),$(1)) -STATIC_LIBS_DEPS := $(foreach l,$(STATIC_LIBS),$(call STATIC_LIB_DEP,$(l))) - # Dependencies which, if modified, should cause everything to rebuild GLOBAL_DEPS += Makefile $(addprefix $(DEPTH)/config/,$(INCLUDED_AUTOCONF_MK)) $(MOZILLA_DIR)/config/config.mk ############################################## ifdef COMPILE_ENVIRONMENT OBJ_TARGETS = $(OBJS) $(PROGOBJS) $(HOST_OBJS) $(HOST_PROGOBJS) compile:: host target host:: $(HOST_LIBRARY) $(HOST_PROGRAM) $(HOST_SIMPLE_PROGRAMS) $(HOST_RUST_PROGRAMS) $(HOST_RUST_LIBRARY_FILE) target:: $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAM) $(SIMPLE_PROGRAMS) $(RUST_LIBRARY_FILE) $(RUST_PROGRAMS) +ifndef LIBRARY +ifdef OBJS +target:: $(OBJS) +endif +endif + syms:: include $(MOZILLA_DIR)/config/makefiles/target_binaries.mk endif ############################################## ifneq (1,$(NO_PROFILE_GUIDED_OPTIMIZE)) ifdef MOZ_PROFILE_USE @@ -540,28 +527,28 @@ distclean:: $(wildcard *.$(LIB_SUFFIX)) $(wildcard *$(DLL_SUFFIX)) \ $(wildcard *.$(IMPORT_LIB_SUFFIX)) alltags: $(RM) TAGS find $(topsrcdir) -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' -o -name '*.idl' \) -print | $(TAG_PROGRAM) define EXPAND_CC_OR_CXX -$(if $(PROG_IS_C_ONLY_$(1)),$(EXPAND_CC),$(EXPAND_CCC)) +$(if $(PROG_IS_C_ONLY_$(1)),$(CC),$(CCC)) endef # # PROGRAM = Foo # creates OBJS, links with LIBS to create Foo # -$(PROGRAM): $(PROGOBJS) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(RESFILE) $(GLOBAL_DEPS) $(call mkdir_deps,$(FINAL_TARGET)) +$(PROGRAM): $(PROGOBJS) $(STATIC_LIBS) $(EXTRA_DEPS) $(RESFILE) $(GLOBAL_DEPS) $(call mkdir_deps,$(FINAL_TARGET)) $(REPORT_BUILD) @$(RM) $@.manifest ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LINK) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) -IMPLIB:$(basename $(@F)).lib $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(STATIC_LIBS) $(SHARED_LIBS) $(OS_LIBS) + $(LINKER) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) -IMPLIB:$(basename $(@F)).lib $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $($(notdir $@)_$(OBJS_VAR_SUFFIX)) $(RESFILE) $(STATIC_LIBS) $(SHARED_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ if test -f '$(srcdir)/$(notdir $@).manifest'; then \ echo 'Embedding manifest from $(srcdir)/$(notdir $@).manifest and $@.manifest'; \ $(MT) -NOLOGO -MANIFEST '$(win_srcdir)/$(notdir $@).manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \ else \ echo 'Embedding manifest from $@.manifest'; \ $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ @@ -572,140 +559,133 @@ ifdef MSMANIFEST_TOOL fi endif # MSVC with manifest tool ifdef MOZ_PROFILE_GENERATE # touch it a few seconds into the future to work around FAT's # 2-second granularity touch -t `date +%Y%m%d%H%M.%S -d 'now+5seconds'` pgo.relink endif else # !WINNT || GNU_CC - $(call EXPAND_CC_OR_CXX,$@) -o $@ $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(STATIC_LIBS) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(OS_LIBS) + $(call EXPAND_CC_OR_CXX,$@) -o $@ $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) $($(notdir $@)_$(OBJS_VAR_SUFFIX)) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(STATIC_LIBS) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(OS_LIBS) $(call CHECK_BINARY,$@) endif # WINNT && !GNU_CC ifdef ENABLE_STRIP $(STRIP) $(STRIP_FLAGS) $@ endif ifdef MOZ_POST_PROGRAM_COMMAND $(MOZ_POST_PROGRAM_COMMAND) $@ endif $(HOST_PROGRAM): $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_DEPS) $(GLOBAL_DEPS) $(REPORT_BUILD) ifeq (_WINNT,$(GNU_CC)_$(HOST_OS_ARCH)) - $(EXPAND_LIBS_EXEC) -- $(LINKER) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) + $(LINKER) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ if test -f '$(srcdir)/$@.manifest'; then \ echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \ $(MT) -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \ else \ echo 'Embedding manifest from $@.manifest'; \ $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ fi; \ elif test -f '$(srcdir)/$@.manifest'; then \ echo 'Embedding manifest from $(srcdir)/$@.manifest'; \ $(MT) -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' -OUTPUTRESOURCE:$@\;1; \ fi endif # MSVC with manifest tool else ifeq ($(HOST_CPP_PROG_LINK),1) - $(EXPAND_LIBS_EXEC) -- $(HOST_CXX) -o $@ $(HOST_CXX_LDFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) + $(HOST_CXX) -o $@ $(HOST_CXX_LDFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) else - $(EXPAND_LIBS_EXEC) -- $(HOST_CC) -o $@ $(HOST_C_LDFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) + $(HOST_CC) -o $@ $(HOST_C_LDFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) endif # HOST_CPP_PROG_LINK endif ifndef CROSS_COMPILE $(call CHECK_STDCXX,$@) endif # # This is an attempt to support generation of multiple binaries # in one directory, it assumes everything to compile Foo is in # Foo.o (from either Foo.c or Foo.cpp). # # SIMPLE_PROGRAMS = Foo Bar # creates Foo.o Bar.o, links with LIBS to create Foo, Bar. # -$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) +$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(STATIC_LIBS) $(EXTRA_DEPS) $(GLOBAL_DEPS) $(REPORT_BUILD) ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LINK) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(STATIC_LIBS) $(SHARED_LIBS) $(OS_LIBS) + $(LINKER) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $($@_$(OBJS_VAR_SUFFIX)) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(STATIC_LIBS) $(SHARED_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ rm -f $@.manifest; \ fi endif # MSVC with manifest tool else - $(call EXPAND_CC_OR_CXX,$@) $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(STATIC_LIBS) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(OS_LIBS) + $(call EXPAND_CC_OR_CXX,$@) $(COMPUTED_CXX_LDFLAGS) $(PGO_CFLAGS) -o $@ $($@_$(OBJS_VAR_SUFFIX)) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(STATIC_LIBS) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(OS_LIBS) $(call CHECK_BINARY,$@) endif # WINNT && !GNU_CC ifdef ENABLE_STRIP $(STRIP) $(STRIP_FLAGS) $@ endif ifdef MOZ_POST_PROGRAM_COMMAND $(MOZ_POST_PROGRAM_COMMAND) $@ endif $(HOST_SIMPLE_PROGRAMS): host_%$(HOST_BIN_SUFFIX): host_%.$(OBJ_SUFFIX) $(HOST_LIBS) $(HOST_EXTRA_DEPS) $(GLOBAL_DEPS) $(REPORT_BUILD) ifeq (WINNT_,$(HOST_OS_ARCH)_$(GNU_CC)) - $(EXPAND_LIBS_EXEC) -- $(LINKER) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) + $(LINKER) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS) else ifneq (,$(HOST_CPPSRCS)$(USE_HOST_CXX)) - $(EXPAND_LIBS_EXEC) -- $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXX_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS) + $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXX_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS) else - $(EXPAND_LIBS_EXEC) -- $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_C_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS) + $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_C_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS) endif endif ifndef CROSS_COMPILE $(call CHECK_STDCXX,$@) endif -$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) +$(LIBRARY): $(OBJS) $(STATIC_LIBS) $(EXTRA_DEPS) $(GLOBAL_DEPS) $(REPORT_BUILD) -# Always remove both library and library descriptor - $(RM) $(REAL_LIBRARY) $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) - $(EXPAND_AR) $(AR_FLAGS) $(OBJS) $(STATIC_LIBS) - -$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) -# When we only build a library descriptor, blow out any existing library - $(REPORT_BUILD) - $(if $(filter %.$(LIB_SUFFIX),$(LIBRARY)),,$(RM) $(REAL_LIBRARY)) - $(EXPAND_LIBS_GEN) -o $@ $(OBJS) $(STATIC_LIBS) + $(RM) $(REAL_LIBRARY) + $(AR) $(AR_FLAGS) $(OBJS) $($@_$(OBJS_VAR_SUFFIX)) ifeq ($(OS_ARCH),WINNT) # Import libraries are created by the rules creating shared libraries. # The rules to copy them to $(DIST)/lib depend on $(IMPORT_LIBRARY), # but make will happily consider the import library before it is refreshed # when rebuilding the corresponding shared library. Defining an empty recipe # for import libraries forces make to wait for the shared library recipe to # have run before considering other targets that depend on the import library. # See bug 795204. $(IMPORT_LIBRARY): $(SHARED_LIBRARY) ; endif $(HOST_LIBRARY): $(HOST_OBJS) Makefile $(REPORT_BUILD) $(RM) $@ - $(EXPAND_LIBS_EXEC) --extract -- $(HOST_AR) $(HOST_AR_FLAGS) $(HOST_OBJS) + $(HOST_AR) $(HOST_AR_FLAGS) $(HOST_OBJS) # On Darwin (Mac OS X), dwarf2 debugging uses debug info left in .o files, # so instead of deleting .o files after repacking them into a dylib, we make # symlinks back to the originals. The symlinks are a no-op for stabs debugging, # so no need to conditionalize on OS version or debugging format. -$(SHARED_LIBRARY): $(OBJS) $(RESFILE) $(RUST_STATIC_LIB_FOR_SHARED_LIB) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) +$(SHARED_LIBRARY): $(OBJS) $(RESFILE) $(RUST_STATIC_LIB_FOR_SHARED_LIB) $(STATIC_LIBS) $(EXTRA_DEPS) $(GLOBAL_DEPS) $(REPORT_BUILD) ifndef INCREMENTAL_LINKER $(RM) $@ endif - $(EXPAND_MKSHLIB) $(OBJS) $(RESFILE) $(LDFLAGS) $(STATIC_LIBS) $(RUST_STATIC_LIB_FOR_SHARED_LIB) $(SHARED_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) + $(MKSHLIB) $($@_$(OBJS_VAR_SUFFIX)) $(RESFILE) $(LDFLAGS) $(STATIC_LIBS) $(RUST_STATIC_LIB_FOR_SHARED_LIB) $(SHARED_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(call CHECK_BINARY,$@) ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) ifdef MSMANIFEST_TOOL ifdef EMBED_MANIFEST_AT @if test -f $@.manifest; then \ if test -f '$(srcdir)/$@.manifest'; then \ echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \
--- a/config/tests/python.ini +++ b/config/tests/python.ini @@ -1,5 +1,4 @@ [test_mozbuild_reading.py] -[unit-expandlibs.py] [unit-mozunit.py] [unit-nsinstall.py] [unit-printprereleasesuffix.py]
deleted file mode 100644 --- a/config/tests/unit-expandlibs.py +++ /dev/null @@ -1,431 +0,0 @@ -import subprocess -import unittest -import sys -import os -import imp -from tempfile import mkdtemp -from shutil import rmtree -import mozunit - -from UserString import UserString -# Create a controlled configuration for use by expandlibs -config_win = { - 'AR': 'lib', - 'AR_EXTRACT': '', - 'DLL_PREFIX': '', - 'LIB_PREFIX': '', - 'OBJ_SUFFIX': '.obj', - 'LIB_SUFFIX': '.lib', - 'DLL_SUFFIX': '.dll', - 'IMPORT_LIB_SUFFIX': '.lib', - 'LIBS_DESC_SUFFIX': '.desc', - 'EXPAND_LIBS_LIST_STYLE': 'list', -} -config_unix = { - 'AR': 'ar', - 'AR_EXTRACT': 'ar -x', - 'DLL_PREFIX': 'lib', - 'LIB_PREFIX': 'lib', - 'OBJ_SUFFIX': '.o', - 'LIB_SUFFIX': '.a', - 'DLL_SUFFIX': '.so', - 'IMPORT_LIB_SUFFIX': '', - 'LIBS_DESC_SUFFIX': '.desc', - 'EXPAND_LIBS_LIST_STYLE': 'linkerscript', -} - -config = sys.modules['expandlibs_config'] = imp.new_module('expandlibs_config') - -from expandlibs import LibDescriptor, ExpandArgs, relativize -from expandlibs_gen import generate -from expandlibs_exec import ExpandArgsMore, SectionFinder - -def Lib(name): - return config.LIB_PREFIX + name + config.LIB_SUFFIX - -def Obj(name): - return name + config.OBJ_SUFFIX - -def Dll(name): - return config.DLL_PREFIX + name + config.DLL_SUFFIX - -def ImportLib(name): - if not len(config.IMPORT_LIB_SUFFIX): return Dll(name) - return config.LIB_PREFIX + name + config.IMPORT_LIB_SUFFIX - -class TestRelativize(unittest.TestCase): - def test_relativize(self): - '''Test relativize()''' - os_path_exists = os.path.exists - def exists(path): - return True - os.path.exists = exists - self.assertEqual(relativize(os.path.abspath(os.curdir)), os.curdir) - self.assertEqual(relativize(os.path.abspath(os.pardir)), os.pardir) - self.assertEqual(relativize(os.path.join(os.curdir, 'a')), 'a') - self.assertEqual(relativize(os.path.join(os.path.abspath(os.curdir), 'a')), 'a') - # relativize is expected to return the absolute path if it is shorter - self.assertEqual(relativize(os.sep), os.sep) - os.path.exists = os.path.exists - -class TestLibDescriptor(unittest.TestCase): - def test_serialize(self): - '''Test LibDescriptor's serialization''' - desc = LibDescriptor() - desc[LibDescriptor.KEYS[0]] = ['a', 'b'] - self.assertEqual(str(desc), "{0} = a b".format(LibDescriptor.KEYS[0])) - desc['unsupported-key'] = ['a'] - self.assertEqual(str(desc), "{0} = a b".format(LibDescriptor.KEYS[0])) - desc[LibDescriptor.KEYS[1]] = ['c', 'd', 'e'] - self.assertEqual(str(desc), - "{0} = a b\n{1} = c d e" - .format(LibDescriptor.KEYS[0], LibDescriptor.KEYS[1])) - desc[LibDescriptor.KEYS[0]] = [] - self.assertEqual(str(desc), "{0} = c d e".format(LibDescriptor.KEYS[1])) - - def test_read(self): - '''Test LibDescriptor's initialization''' - desc_list = ["# Comment", - "{0} = a b".format(LibDescriptor.KEYS[1]), - "", # Empty line - "foo = bar", # Should be discarded - "{0} = c d e".format(LibDescriptor.KEYS[0])] - desc = LibDescriptor(desc_list) - self.assertEqual(desc[LibDescriptor.KEYS[1]], ['a', 'b']) - self.assertEqual(desc[LibDescriptor.KEYS[0]], ['c', 'd', 'e']) - self.assertEqual(False, 'foo' in desc) - -def wrap_method(conf, wrapped_method): - '''Wrapper used to call a test with a specific configuration''' - def _method(self): - for key in conf: - setattr(config, key, conf[key]) - self.init() - try: - wrapped_method(self) - except: - raise - finally: - self.cleanup() - return _method - -class ReplicateTests(type): - '''Replicates tests for unix and windows variants''' - def __new__(cls, clsName, bases, dict): - for name in [key for key in dict if key.startswith('test_')]: - dict[name + '_unix'] = wrap_method(config_unix, dict[name]) - dict[name + '_unix'].__doc__ = dict[name].__doc__ + ' (unix)' - dict[name + '_win'] = wrap_method(config_win, dict[name]) - dict[name + '_win'].__doc__ = dict[name].__doc__ + ' (win)' - del dict[name] - return type.__new__(cls, clsName, bases, dict) - -class TestCaseWithTmpDir(unittest.TestCase): - __metaclass__ = ReplicateTests - def init(self): - self.tmpdir = os.path.abspath(mkdtemp(dir=os.curdir)) - - def cleanup(self): - rmtree(self.tmpdir) - - def touch(self, files): - for f in files: - open(f, 'w').close() - - def tmpfile(self, *args): - return os.path.join(self.tmpdir, *args) - -class TestExpandLibsGen(TestCaseWithTmpDir): - def test_generate(self): - '''Test library descriptor generation''' - files = [self.tmpfile(f) for f in - [Lib('a'), Obj('b'), Lib('c'), Obj('d'), Obj('e'), Lib('f')]] - self.touch(files[:-1]) - self.touch([files[-1] + config.LIBS_DESC_SUFFIX]) - - desc = generate(files) - self.assertEqual(desc['OBJS'], [self.tmpfile(Obj(s)) for s in ['b', 'd', 'e']]) - self.assertEqual(desc['LIBS'], [self.tmpfile(Lib(s)) for s in ['a', 'c', 'f']]) - - self.assertRaises(Exception, generate, files + [self.tmpfile(Obj('z'))]) - self.assertRaises(Exception, generate, files + [self.tmpfile(Lib('y'))]) - -class TestExpandInit(TestCaseWithTmpDir): - def init(self): - ''' Initializes test environment for library expansion tests''' - super(TestExpandInit, self).init() - # Create 2 fake libraries, each containing 3 objects, and the second - # including the first one and another library. - os.mkdir(self.tmpfile('libx')) - os.mkdir(self.tmpfile('liby')) - self.libx_files = [self.tmpfile('libx', Obj(f)) for f in ['g', 'h', 'i']] - self.liby_files = [self.tmpfile('liby', Obj(f)) for f in ['j', 'k', 'l']] + [self.tmpfile('liby', Lib('z'))] - self.touch(self.libx_files + self.liby_files) - with open(self.tmpfile('libx', Lib('x') + config.LIBS_DESC_SUFFIX), 'w') as f: - f.write(str(generate(self.libx_files))) - with open(self.tmpfile('liby', Lib('y') + config.LIBS_DESC_SUFFIX), 'w') as f: - f.write(str(generate(self.liby_files + [self.tmpfile('libx', Lib('x'))]))) - - # Create various objects and libraries - self.arg_files = [self.tmpfile(f) for f in [Lib('a'), Obj('b'), Obj('c'), Lib('d'), Obj('e')]] - # We always give library names (LIB_PREFIX/SUFFIX), even for - # dynamic/import libraries - self.files = self.arg_files + [self.tmpfile(ImportLib('f'))] - self.arg_files += [self.tmpfile(Lib('f'))] - self.touch(self.files) - - def assertRelEqual(self, args1, args2): - self.assertEqual(args1, [relativize(a) for a in args2]) - -class TestExpandArgs(TestExpandInit): - def test_expand(self): - '''Test library expansion''' - # Expanding arguments means libraries with a descriptor are expanded - # with the descriptor content, and import libraries are used when - # a library doesn't exist - args = ExpandArgs(['foo', '-bar'] + self.arg_files + [self.tmpfile('liby', Lib('y'))]) - self.assertRelEqual(args, ['foo', '-bar'] + self.files + self.liby_files + self.libx_files) - - # When a library exists at the same time as a descriptor, we still use - # the descriptor. - self.touch([self.tmpfile('libx', Lib('x'))]) - args = ExpandArgs(['foo', '-bar'] + self.arg_files + [self.tmpfile('liby', Lib('y'))]) - self.assertRelEqual(args, ['foo', '-bar'] + self.files + self.liby_files + self.libx_files) - - self.touch([self.tmpfile('liby', Lib('y'))]) - args = ExpandArgs(['foo', '-bar'] + self.arg_files + [self.tmpfile('liby', Lib('y'))]) - self.assertRelEqual(args, ['foo', '-bar'] + self.files + self.liby_files + self.libx_files) - -class TestExpandArgsMore(TestExpandInit): - def test_makelist(self): - '''Test grouping object files in lists''' - # ExpandArgsMore does the same as ExpandArgs - with ExpandArgsMore(['foo', '-bar'] + self.arg_files + [self.tmpfile('liby', Lib('y'))]) as args: - self.assertRelEqual(args, ['foo', '-bar'] + self.files + self.liby_files + self.libx_files) - - # But also has an extra method replacing object files with a list - args.makelist() - # self.files has objects at #1, #2, #4 - self.assertRelEqual(args[:3], ['foo', '-bar'] + self.files[:1]) - self.assertRelEqual(args[4:], [self.files[3]] + self.files[5:] + [self.tmpfile('liby', Lib('z'))]) - - # Check the list file content - objs = [f for f in self.files + self.liby_files + self.libx_files if f.endswith(config.OBJ_SUFFIX)] - if config.EXPAND_LIBS_LIST_STYLE == "linkerscript": - self.assertNotEqual(args[3][0], '@') - filename = args[3] - content = ['INPUT("{0}")'.format(relativize(f)) for f in objs] - with open(filename, 'r') as f: - self.assertEqual([l.strip() for l in f.readlines() if len(l.strip())], content) - elif config.EXPAND_LIBS_LIST_STYLE == "list": - self.assertEqual(args[3][0], '@') - filename = args[3][1:] - content = objs - with open(filename, 'r') as f: - self.assertRelEqual([l.strip() for l in f.readlines() if len(l.strip())], content) - - tmp = args.tmp - # Check that all temporary files are properly removed - self.assertEqual(True, all([not os.path.exists(f) for f in tmp])) - - def test_extract(self): - '''Test library extraction''' - # Divert subprocess.call - subprocess_call = subprocess.call - subprocess_check_output = subprocess.check_output - def call(args, **kargs): - if config.AR == 'lib': - self.assertEqual(args[:2], [config.AR, '-NOLOGO']) - self.assertTrue(args[2].startswith('-EXTRACT:')) - extract = [args[2][len('-EXTRACT:'):]] - self.assertTrue(extract) - args = args[3:] - else: - # The command called is always AR_EXTRACT - ar_extract = config.AR_EXTRACT.split() - self.assertEqual(args[:len(ar_extract)], ar_extract) - args = args[len(ar_extract):] - # Remaining argument is always one library - self.assertEqual(len(args), 1) - arg = args[0] - self.assertEqual(os.path.splitext(arg)[1], config.LIB_SUFFIX) - # Simulate file extraction - lib = os.path.splitext(os.path.basename(arg))[0] - if config.AR != 'lib': - extract = [lib, lib + '2'] - extract = [os.path.join(kargs['cwd'], f) for f in extract] - if config.AR != 'lib': - extract = [Obj(f) for f in extract] - if not lib in extracted: - extracted[lib] = [] - extracted[lib].extend(extract) - self.touch(extract) - subprocess.call = call - - def check_output(args, **kargs): - # The command called is always AR - ar = config.AR - self.assertEqual(args[0:3], [ar, '-NOLOGO', '-LIST']) - # Remaining argument is always one library - self.assertRelEqual([os.path.splitext(arg)[1] for arg in args[3:]], -[config.LIB_SUFFIX]) - # Simulate LIB -NOLOGO -LIST - lib = os.path.splitext(os.path.basename(args[3]))[0] - return '%s\n%s\n' % (Obj(lib), Obj(lib + '2')) - subprocess.check_output = check_output - - # ExpandArgsMore does the same as ExpandArgs - self.touch([self.tmpfile('liby', Lib('y'))]) - for iteration in (1, 2): - with ExpandArgsMore(['foo', '-bar'] + self.arg_files + [self.tmpfile('liby', Lib('y'))]) as args: - files = self.files + self.liby_files + self.libx_files - - self.assertRelEqual(args, ['foo', '-bar'] + files) - - extracted = {} - # ExpandArgsMore also has an extra method extracting static libraries - # when possible - args.extract() - - # With AR_EXTRACT, it uses the descriptors when there are, and - # actually - # extracts the remaining libraries - extracted_args = [] - for f in files: - if f.endswith(config.LIB_SUFFIX): - base = os.path.splitext(os.path.basename(f))[0] - # On the first iteration, we test the behavior of - # extracting archives that don't have a copy of their - # contents next to them, which is to use the file - # extracted from the archive in a temporary directory. - # On the second iteration, we test extracting archives - # that do have a copy of their contents next to them, - # in which case those contents are used instead of the - # temporarily extracted files. - if iteration == 1: - extracted_args.extend(sorted(extracted[base])) - else: - dirname = os.path.dirname(f[len(self.tmpdir)+1:]) - if base.endswith('f'): - dirname = os.path.join(dirname, 'foo', 'bar') - extracted_args.extend([self.tmpfile(dirname, Obj(base)), self.tmpfile(dirname, Obj(base + '2'))]) - else: - extracted_args.append(f) - self.assertRelEqual(args, ['foo', '-bar'] + extracted_args) - - tmp = args.tmp - # Check that all temporary files are properly removed - self.assertEqual(True, all([not os.path.exists(f) for f in tmp])) - - # Create archives contents next to them for the second iteration. - base = os.path.splitext(Lib('_'))[0] - self.touch(self.tmpfile(Obj(base.replace('_', suffix))) for suffix in ('a', 'a2', 'd', 'd2')) - try: - os.makedirs(self.tmpfile('foo', 'bar')) - except: - pass - self.touch(self.tmpfile('foo', 'bar', Obj(base.replace('_', suffix))) for suffix in ('f', 'f2')) - self.touch(self.tmpfile('liby', Obj(base.replace('_', suffix))) for suffix in ('z', 'z2')) - - # Restore subprocess.call and subprocess.check_output - subprocess.call = subprocess_call - subprocess.check_output = subprocess_check_output - -class FakeProcess(object): - def __init__(self, out, err = ''): - self.out = out - self.err = err - - def communicate(self): - return (self.out, self.err) - -OBJDUMPS = { -'foo.o': ''' -00000000 g F .text\t00000001 foo -00000000 g F .text._Z6foobarv\t00000001 _Z6foobarv -00000000 g F .text.hello\t00000001 hello -00000000 g F .text._ZThn4_6foobarv\t00000001 _ZThn4_6foobarv -''', -'bar.o': ''' -00000000 g F .text.hi\t00000001 hi -00000000 g F .text.hot._Z6barbazv\t00000001 .hidden _Z6barbazv -''', -} - -PRINT_ICF = ''' -ld: ICF folding section '.text.hello' in file 'foo.o'into '.text.hi' in file 'bar.o' -ld: ICF folding section '.foo' in file 'foo.o'into '.foo' in file 'bar.o' -''' - -class SubprocessPopen(object): - def __init__(self, test): - self.test = test - - def __call__(self, args, stdout = None, stderr = None): - self.test.assertEqual(stdout, subprocess.PIPE) - self.test.assertEqual(stderr, subprocess.PIPE) - if args[0] == 'objdump': - self.test.assertEqual(args[1], '-t') - self.test.assertTrue(args[2] in OBJDUMPS) - return FakeProcess(OBJDUMPS[args[2]]) - else: - return FakeProcess('', PRINT_ICF) - -class TestSectionFinder(unittest.TestCase): - def test_getSections(self): - '''Test SectionFinder''' - # Divert subprocess.Popen - subprocess_popen = subprocess.Popen - subprocess.Popen = SubprocessPopen(self) - config.EXPAND_LIBS_ORDER_STYLE = 'linkerscript' - config.OBJ_SUFFIX = '.o' - config.LIB_SUFFIX = '.a' - finder = SectionFinder(['foo.o', 'bar.o']) - self.assertEqual(finder.getSections('foobar'), []) - self.assertEqual(finder.getSections('_Z6barbazv'), ['.text.hot._Z6barbazv']) - self.assertEqual(finder.getSections('_Z6foobarv'), ['.text._Z6foobarv', '.text._ZThn4_6foobarv']) - self.assertEqual(finder.getSections('_ZThn4_6foobarv'), ['.text._Z6foobarv', '.text._ZThn4_6foobarv']) - subprocess.Popen = subprocess_popen - -class TestSymbolOrder(unittest.TestCase): - def test_getOrderedSections(self): - '''Test ExpandMoreArgs' _getOrderedSections''' - # Divert subprocess.Popen - subprocess_popen = subprocess.Popen - subprocess.Popen = SubprocessPopen(self) - config.EXPAND_LIBS_ORDER_STYLE = 'linkerscript' - config.OBJ_SUFFIX = '.o' - config.LIB_SUFFIX = '.a' - config.LD_PRINT_ICF_SECTIONS = '' - args = ExpandArgsMore(['foo', '-bar', 'bar.o', 'foo.o']) - self.assertEqual(args._getOrderedSections(['_Z6foobarv', '_Z6barbazv']), ['.text._Z6foobarv', '.text._ZThn4_6foobarv', '.text.hot._Z6barbazv']) - self.assertEqual(args._getOrderedSections(['_ZThn4_6foobarv', '_Z6barbazv']), ['.text._Z6foobarv', '.text._ZThn4_6foobarv', '.text.hot._Z6barbazv']) - subprocess.Popen = subprocess_popen - - def test_getFoldedSections(self): - '''Test ExpandMoreArgs' _getFoldedSections''' - # Divert subprocess.Popen - subprocess_popen = subprocess.Popen - subprocess.Popen = SubprocessPopen(self) - config.LD_PRINT_ICF_SECTIONS = '-Wl,--print-icf-sections' - args = ExpandArgsMore(['foo', '-bar', 'bar.o', 'foo.o']) - self.assertEqual(args._getFoldedSections(), {'.text.hello': ['.text.hi'], '.text.hi': ['.text.hello']}) - subprocess.Popen = subprocess_popen - - def test_getOrderedSectionsWithICF(self): - '''Test ExpandMoreArgs' _getOrderedSections, with ICF''' - # Divert subprocess.Popen - subprocess_popen = subprocess.Popen - subprocess.Popen = SubprocessPopen(self) - config.EXPAND_LIBS_ORDER_STYLE = 'linkerscript' - config.OBJ_SUFFIX = '.o' - config.LIB_SUFFIX = '.a' - config.LD_PRINT_ICF_SECTIONS = '-Wl,--print-icf-sections' - args = ExpandArgsMore(['foo', '-bar', 'bar.o', 'foo.o']) - self.assertEqual(args._getOrderedSections(['hello', '_Z6barbazv']), ['.text.hello', '.text.hi', '.text.hot._Z6barbazv']) - self.assertEqual(args._getOrderedSections(['_ZThn4_6foobarv', 'hi', '_Z6barbazv']), ['.text._Z6foobarv', '.text._ZThn4_6foobarv', '.text.hi', '.text.hello', '.text.hot._Z6barbazv']) - subprocess.Popen = subprocess_popen - - -if __name__ == '__main__': - mozunit.main(runwith='unittest')
--- a/devtools/client/shadereditor/panel.js +++ b/devtools/client/shadereditor/panel.js @@ -2,17 +2,17 @@ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; const { Cc, Ci, Cu, Cr } = require("chrome"); const promise = require("promise"); -const EventEmitter = require("devtools/shared/old-event-emitter"); +const EventEmitter = require("devtools/shared/event-emitter"); const { WebGLFront } = require("devtools/shared/fronts/webgl"); const DevToolsUtils = require("devtools/shared/DevToolsUtils"); function ShaderEditorPanel(iframeWindow, toolbox) { this.panelWin = iframeWindow; this._toolbox = toolbox; this._destroyer = null;
--- a/devtools/client/shadereditor/shadereditor.js +++ b/devtools/client/shadereditor/shadereditor.js @@ -5,17 +5,17 @@ const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {}); const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm"); const {SideMenuWidget} = require("resource://devtools/client/shared/widgets/SideMenuWidget.jsm"); const promise = require("promise"); const defer = require("devtools/shared/defer"); const {Task} = require("devtools/shared/task"); const Services = require("Services"); -const EventEmitter = require("devtools/shared/old-event-emitter"); +const EventEmitter = require("devtools/shared/event-emitter"); const Tooltip = require("devtools/client/shared/widgets/tooltip/Tooltip"); const Editor = require("devtools/client/sourceeditor/editor"); const {LocalizationHelper} = require("devtools/shared/l10n"); const {extend} = require("devtools/shared/extend"); const {WidgetMethods, setNamedTimeout} = require("devtools/client/shared/widgets/view-helpers"); // Use privileged promise in panel documents to prevent having them to freeze
--- a/devtools/client/shadereditor/test/browser_se_editors-error-gutter.js +++ b/devtools/client/shadereditor/test/browser_se_editors-error-gutter.js @@ -15,62 +15,62 @@ async function ifWebGLSupported() { once(gFront, "program-linked"), once(panel.panelWin, EVENTS.SOURCES_SHOWN) ]); let vsEditor = await ShadersEditorsView._getEditor("vs"); let fsEditor = await ShadersEditorsView._getEditor("fs"); vsEditor.replaceText("vec3", { line: 7, ch: 22 }, { line: 7, ch: 26 }); - let [, vertError] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + let vertError = await panel.panelWin.once(EVENTS.SHADER_COMPILED); checkHasVertFirstError(true, vertError); checkHasVertSecondError(false, vertError); info("Error marks added in the vertex shader editor."); vsEditor.insertText(" ", { line: 1, ch: 0 }); - await once(panel.panelWin, EVENTS.EDITOR_ERROR_MARKERS_REMOVED); + await panel.panelWin.once(EVENTS.EDITOR_ERROR_MARKERS_REMOVED); is(vsEditor.getText(1), " precision lowp float;", "Typed space."); checkHasVertFirstError(false, vertError); checkHasVertSecondError(false, vertError); info("Error marks removed while typing in the vertex shader editor."); - [, vertError] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + vertError = await panel.panelWin.once(EVENTS.SHADER_COMPILED); checkHasVertFirstError(true, vertError); checkHasVertSecondError(false, vertError); info("Error marks were re-added after recompiling the vertex shader."); fsEditor.replaceText("vec4", { line: 2, ch: 14 }, { line: 2, ch: 18 }); - let [, fragError] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + let fragError = await panel.panelWin.once(EVENTS.SHADER_COMPILED); checkHasVertFirstError(true, vertError); checkHasVertSecondError(false, vertError); checkHasFragError(true, fragError); info("Error marks added in the fragment shader editor."); fsEditor.insertText(" ", { line: 1, ch: 0 }); - await once(panel.panelWin, EVENTS.EDITOR_ERROR_MARKERS_REMOVED); + await panel.panelWin.once(EVENTS.EDITOR_ERROR_MARKERS_REMOVED); is(fsEditor.getText(1), " precision lowp float;", "Typed space."); checkHasVertFirstError(true, vertError); checkHasVertSecondError(false, vertError); checkHasFragError(false, fragError); info("Error marks removed while typing in the fragment shader editor."); - [, fragError] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + fragError = await panel.panelWin.once(EVENTS.SHADER_COMPILED); checkHasVertFirstError(true, vertError); checkHasVertSecondError(false, vertError); checkHasFragError(true, fragError); info("Error marks were re-added after recompiling the fragment shader."); vsEditor.replaceText("2", { line: 3, ch: 19 }, { line: 3, ch: 20 }); - await once(panel.panelWin, EVENTS.EDITOR_ERROR_MARKERS_REMOVED); + await panel.panelWin.once(EVENTS.EDITOR_ERROR_MARKERS_REMOVED); checkHasVertFirstError(false, vertError); checkHasVertSecondError(false, vertError); checkHasFragError(true, fragError); info("Error marks removed while typing in the vertex shader editor again."); - [, vertError] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + vertError = await panel.panelWin.once(EVENTS.SHADER_COMPILED); checkHasVertFirstError(true, vertError); checkHasVertSecondError(true, vertError); checkHasFragError(true, fragError); info("Error marks were re-added after recompiling the fragment shader again."); await teardown(panel); finish();
--- a/devtools/client/shadereditor/test/browser_se_shaders-edit-02.js +++ b/devtools/client/shadereditor/test/browser_se_shaders-edit-02.js @@ -16,17 +16,17 @@ async function ifWebGLSupported() { once(panel.panelWin, EVENTS.SOURCES_SHOWN) ]); let vsEditor = await ShadersEditorsView._getEditor("vs"); let fsEditor = await ShadersEditorsView._getEditor("fs"); vsEditor.replaceText("vec3", { line: 7, ch: 22 }, { line: 7, ch: 26 }); - let [, error] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + let error = await panel.panelWin.once(EVENTS.SHADER_COMPILED); ok(error, "The new vertex shader source was compiled with errors."); // The implementation has the choice to defer all compile-time errors to link time. let infoLog = (error.compile != "") ? error.compile : error.link; isnot(infoLog, "", @@ -37,17 +37,17 @@ async function ifWebGLSupported() { "A constructor error is contained in the info log."); ok(infoLog.includes("ERROR: 0:8: '='"), "A dimension error is contained in the info log."); ok(infoLog.includes("ERROR: 0:8: 'assign'"), "An assignment error is contained in the info log."); fsEditor.replaceText("vec4", { line: 2, ch: 14 }, { line: 2, ch: 18 }); - [, error] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + error = await panel.panelWin.once(EVENTS.SHADER_COMPILED); ok(error, "The new fragment shader source was compiled with errors."); infoLog = (error.compile != "") ? error.compile : error.link; isnot(infoLog, "", "The one of the compile or link info logs should not be empty."); @@ -56,21 +56,21 @@ async function ifWebGLSupported() { ok(infoLog.includes("ERROR: 0:6: 'constructor'"), "A constructor error is contained in the info log."); await ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 0, b: 0, a: 255 }, true); await ensurePixelIs(gFront, { x: 511, y: 511 }, { r: 0, g: 255, b: 0, a: 255 }, true); vsEditor.replaceText("vec4", { line: 7, ch: 22 }, { line: 7, ch: 26 }); - [, error] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + error = await panel.panelWin.once(EVENTS.SHADER_COMPILED); ok(!error, "The new vertex shader source was compiled successfully."); fsEditor.replaceText("vec3", { line: 2, ch: 14 }, { line: 2, ch: 18 }); - [, error] = await onceSpread(panel.panelWin, EVENTS.SHADER_COMPILED); + error = await panel.panelWin.once(EVENTS.SHADER_COMPILED); ok(!error, "The new fragment shader source was compiled successfully."); await ensurePixelIs(gFront, { x: 0, y: 0 }, { r: 255, g: 0, b: 0, a: 255 }, true); await ensurePixelIs(gFront, { x: 511, y: 511 }, { r: 0, g: 255, b: 0, a: 255 }, true); await teardown(panel); finish(); }
--- a/devtools/client/shadereditor/test/head.js +++ b/devtools/client/shadereditor/test/head.js @@ -76,26 +76,16 @@ async function test() { handlError(e); } } function createCanvas() { return document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); } -// Hack around `once`, as that only resolves to a single (first) argument -// and discards the rest. `onceSpread` is similar, except resolves to an -// array of all of the arguments in the handler. These should be consolidated -// into the same function, but many tests will need to be changed. -function onceSpread(aTarget, aEvent) { - let deferred = defer(); - aTarget.once(aEvent, (...args) => deferred.resolve(args)); - return deferred.promise; -} - function observe(aNotificationName, aOwnsWeak = false) { info("Waiting for observer notification: '" + aNotificationName + "."); let deferred = defer(); Services.obs.addObserver(function onNotification(...aArgs) { Services.obs.removeObserver(onNotification, aNotificationName); deferred.resolve.apply(deferred, aArgs);
--- a/dom/file/nsHostObjectProtocolHandler.cpp +++ b/dom/file/nsHostObjectProtocolHandler.cpp @@ -71,19 +71,16 @@ struct DataInfo RefPtr<BlobImpl> mBlobImpl; RefPtr<DOMMediaStream> mMediaStream; RefPtr<MediaSource> mMediaSource; nsCOMPtr<nsIPrincipal> mPrincipal; nsCString mStack; - // WeakReferences of nsHostObjectURI objects. - nsTArray<nsWeakPtr> mURIs; - // When a blobURL is revoked, we keep it alive for RELEASING_TIMER // milliseconds in order to support pending operations such as navigation, // download and so on. bool mRevoked; }; static nsClassHashtable<nsCStringHashKey, DataInfo>* gDataTable; @@ -118,29 +115,29 @@ GetDataInfo(const nsACString& aUri, bool if (!aAlsoIfRevoked && res && res->mRevoked) { return nullptr; } return res; } static DataInfo* -GetDataInfoFromURI(nsIURI* aURI) +GetDataInfoFromURI(nsIURI* aURI, bool aAlsoIfRevoked = false) { if (!aURI) { return nullptr; } nsCString spec; nsresult rv = aURI->GetSpec(spec); if (NS_WARN_IF(NS_FAILED(rv))) { return nullptr; } - return GetDataInfo(spec); + return GetDataInfo(spec, aAlsoIfRevoked); } // Memory reporting for the hash table. namespace mozilla { void BroadcastBlobURLRegistration(const nsACString& aURI, BlobImpl* aBlobImpl, @@ -535,23 +532,16 @@ private: DataInfo* info = GetDataInfo(mURI, true /* We care about revoked dataInfo */); if (!info) { // Already gone! return; } MOZ_ASSERT(info->mRevoked); - for (uint32_t i = 0; i < info->mURIs.Length(); ++i) { - nsCOMPtr<nsIURI> uri = do_QueryReferent(info->mURIs[i]); - if (uri) { - static_cast<nsHostObjectURI*>(uri.get())->ForgetBlobImpl(); - } - } - gDataTable->Remove(mURI); if (gDataTable->Count() == 0) { delete gDataTable; gDataTable = nullptr; } } void @@ -895,58 +885,51 @@ nsHostObjectProtocolHandler::NewURI(cons MOZ_ASSERT(info->mBlobImpl); principal = info->mPrincipal; blob = info->mBlobImpl; } nsCOMPtr<nsIURI> uri; rv = NS_MutateURI(new nsHostObjectURI::Mutator()) .SetSpec(aSpec) - .Apply(NS_MutatorMethod(&nsIBlobURIMutator::SetBlobImpl, blob)) .Apply(NS_MutatorMethod(&nsIPrincipalURIMutator::SetPrincipal, principal)) .Finalize(uri); NS_ENSURE_SUCCESS(rv, rv); uri.forget(aResult); - if (info && info->mObjectType == DataInfo::eBlobImpl) { - info->mURIs.AppendElement(do_GetWeakReference(*aResult)); - } - return NS_OK; } NS_IMETHODIMP nsHostObjectProtocolHandler::NewChannel2(nsIURI* uri, nsILoadInfo* aLoadInfo, nsIChannel** result) { *result = nullptr; - nsCOMPtr<nsIURIWithBlobImpl> uriBlobImpl = do_QueryInterface(uri); - if (!uriBlobImpl) { - return NS_ERROR_DOM_BAD_URI; - } - - nsCOMPtr<nsISupports> tmp; - MOZ_ALWAYS_SUCCEEDS(uriBlobImpl->GetBlobImpl(getter_AddRefs(tmp))); - nsCOMPtr<BlobImpl> blobImpl = do_QueryInterface(tmp); + RefPtr<BlobImpl> blobImpl; + NS_GetBlobForBlobURI(uri, getter_AddRefs(blobImpl), true); if (!blobImpl) { return NS_ERROR_DOM_BAD_URI; } nsCOMPtr<nsIURIWithPrincipal> uriPrinc = do_QueryInterface(uri); if (!uriPrinc) { return NS_ERROR_DOM_BAD_URI; } nsCOMPtr<nsIPrincipal> principal; nsresult rv = uriPrinc->GetPrincipal(getter_AddRefs(principal)); NS_ENSURE_SUCCESS(rv, rv); + if (!principal) { + return NS_ERROR_DOM_BAD_URI; + } + #ifdef DEBUG // Info can be null, in case this blob URL has been revoked already. DataInfo* info = GetDataInfoFromURI(uri); MOZ_ASSERT_IF(info, info->mPrincipal == principal); #endif // We want to be sure that we stop the creation of the channel if the blob URL // is copy-and-pasted on a different context (ex. private browsing or @@ -1037,34 +1020,22 @@ nsFontTableProtocolHandler::GetProtocolF NS_IMETHODIMP nsFontTableProtocolHandler::GetScheme(nsACString &result) { result.AssignLiteral(FONTTABLEURI_SCHEME); return NS_OK; } -/* static */ void -nsHostObjectProtocolHandler::StoreClonedURI(const nsACString& aSpec, - nsIURI* aURI) -{ - MOZ_ASSERT(aURI); - - DataInfo* info = GetDataInfo(aSpec); - if (info) { - info->mURIs.AppendElement(do_GetWeakReference(aURI)); - } -} - nsresult -NS_GetBlobForBlobURI(nsIURI* aURI, BlobImpl** aBlob) +NS_GetBlobForBlobURI(nsIURI* aURI, BlobImpl** aBlob, bool aAlsoIfRevoked) { *aBlob = nullptr; - DataInfo* info = GetDataInfoFromURI(aURI); + DataInfo* info = GetDataInfoFromURI(aURI, aAlsoIfRevoked); if (!info || info->mObjectType != DataInfo::eBlobImpl) { return NS_ERROR_DOM_BAD_URI; } RefPtr<BlobImpl> blob = info->mBlobImpl; blob.forget(aBlob); return NS_OK; }
--- a/dom/file/nsHostObjectProtocolHandler.h +++ b/dom/file/nsHostObjectProtocolHandler.h @@ -83,19 +83,16 @@ public: static nsIPrincipal* GetDataEntryPrincipal(const nsACString& aUri); static void Traverse(const nsACString& aUri, nsCycleCollectionTraversalCallback& aCallback); static bool GetAllBlobURLEntries(nsTArray<mozilla::dom::BlobURLRegistrationData>& aRegistrations, mozilla::dom::ContentParent* aCP); - // This is for nsHostObjectURI. - static void StoreClonedURI(const nsACString& aSpec, nsIURI* aURI); - protected: virtual ~nsHostObjectProtocolHandler() {} private: static void Init(); }; class nsBlobProtocolHandler : public nsHostObjectProtocolHandler @@ -128,17 +125,17 @@ inline bool IsRtspURI(nsIURI* aUri) inline bool IsFontTableURI(nsIURI* aUri) { bool isFont; return NS_SUCCEEDED(aUri->SchemeIs(FONTTABLEURI_SCHEME, &isFont)) && isFont; } extern nsresult -NS_GetBlobForBlobURI(nsIURI* aURI, mozilla::dom::BlobImpl** aBlob); +NS_GetBlobForBlobURI(nsIURI* aURI, mozilla::dom::BlobImpl** aBlob, bool aAlsoIfRevoked = false); extern nsresult NS_GetBlobForBlobURISpec(const nsACString& aSpec, mozilla::dom::BlobImpl** aBlob); extern nsresult NS_GetStreamForBlobURI(nsIURI* aURI, nsIInputStream** aStream); extern nsresult
--- a/dom/file/nsHostObjectURI.cpp +++ b/dom/file/nsHostObjectURI.cpp @@ -17,41 +17,29 @@ static NS_DEFINE_CID(kHOSTOBJECTURICID, static NS_DEFINE_CID(kThisSimpleURIImplementationCID, NS_THIS_SIMPLEURI_IMPLEMENTATION_CID); NS_IMPL_ADDREF_INHERITED(nsHostObjectURI, mozilla::net::nsSimpleURI) NS_IMPL_RELEASE_INHERITED(nsHostObjectURI, mozilla::net::nsSimpleURI) NS_INTERFACE_MAP_BEGIN(nsHostObjectURI) - NS_INTERFACE_MAP_ENTRY(nsIURIWithBlobImpl) NS_INTERFACE_MAP_ENTRY(nsIURIWithPrincipal) - NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) if (aIID.Equals(kHOSTOBJECTURICID)) foundInterface = static_cast<nsIURI*>(this); else if (aIID.Equals(kThisSimpleURIImplementationCID)) { // Need to return explicitly here, because if we just set foundInterface // to null the NS_INTERFACE_MAP_END_INHERITING will end up calling into // nsSimplURI::QueryInterface and finding something for this CID. *aInstancePtr = nullptr; return NS_NOINTERFACE; } else NS_INTERFACE_MAP_END_INHERITING(mozilla::net::nsSimpleURI) -// nsIURIWithBlobImpl methods: - -NS_IMETHODIMP -nsHostObjectURI::GetBlobImpl(nsISupports** aBlobImpl) -{ - RefPtr<mozilla::dom::BlobImpl> blobImpl(mBlobImpl); - blobImpl.forget(aBlobImpl); - return NS_OK; -} - // nsIURIWithPrincipal methods: NS_IMETHODIMP nsHostObjectURI::GetPrincipal(nsIPrincipal** aPrincipal) { NS_IF_ADDREF(*aPrincipal = mPrincipal); return NS_OK; @@ -144,20 +132,16 @@ nsHostObjectURI::Deserialize(const mozil return true; } mPrincipal = PrincipalInfoToPrincipal(hostParams.principal().get_PrincipalInfo()); if (!mPrincipal) { return false; } - // If this fails, we still want to complete the operation. Probably this - // blobURL has been revoked in the meantime. - NS_GetBlobForBlobURI(this, getter_AddRefs(mBlobImpl)); - return true; } nsresult nsHostObjectURI::SetScheme(const nsACString& aScheme) { // Disallow setting the scheme, since that could cause us to be associated // with a different protocol handler that doesn't expect us to be carrying @@ -180,19 +164,16 @@ nsHostObjectURI::CloneInternal(mozilla:: RefPtr<nsHostObjectURI> uriCheck; rv = simpleClone->QueryInterface(kHOSTOBJECTURICID, getter_AddRefs(uriCheck)); MOZ_ASSERT(NS_SUCCEEDED(rv) && uriCheck); #endif nsHostObjectURI* u = static_cast<nsHostObjectURI*>(simpleClone.get()); u->mPrincipal = mPrincipal; - u->mBlobImpl = mBlobImpl; - - nsHostObjectProtocolHandler::StoreClonedURI(newRef, simpleClone); simpleClone.forget(aClone); return NS_OK; } /* virtual */ nsresult nsHostObjectURI::EqualsInternal(nsIURI* aOther, mozilla::net::nsSimpleURI::RefHandlingEnum aRefHandlingMode, @@ -211,34 +192,29 @@ nsHostObjectURI::EqualsInternal(nsIURI* } // Compare the member data that our base class knows about. if (!mozilla::net::nsSimpleURI::EqualsInternal(otherUri, aRefHandlingMode)) { *aResult = false; return NS_OK; } - // Compare the piece of additional member data that we add to base class, - // but we cannot compare BlobImpl. This should not be a problem, because we - // don't support changing the underlying mBlobImpl. - if (mPrincipal && otherUri->mPrincipal) { // Both of us have mPrincipals. Compare them. return mPrincipal->Equals(otherUri->mPrincipal, aResult); } // else, at least one of us lacks a principal; only equal if *both* lack it. *aResult = (!mPrincipal && !otherUri->mPrincipal); return NS_OK; } // Queries this list of interfaces. If none match, it queries mURI. NS_IMPL_NSIURIMUTATOR_ISUPPORTS(nsHostObjectURI::Mutator, nsIURISetters, nsIURIMutator, - nsIBlobURIMutator, nsIPrincipalURIMutator, nsISerializable) NS_IMETHODIMP nsHostObjectURI::Mutate(nsIURIMutator** aMutator) { RefPtr<nsHostObjectURI::Mutator> mutator = new nsHostObjectURI::Mutator(); nsresult rv = mutator->InitFromURI(this); @@ -300,15 +276,8 @@ nsHostObjectURI::GetFlags(uint32_t *aFla } NS_IMETHODIMP nsHostObjectURI::GetClassIDNoAlloc(nsCID *aClassIDNoAlloc) { *aClassIDNoAlloc = kHOSTOBJECTURICID; return NS_OK; } - -void -nsHostObjectURI::ForgetBlobImpl() -{ - MOZ_ASSERT(mBlobImpl); - mBlobImpl = nullptr; -}
--- a/dom/file/nsHostObjectURI.h +++ b/dom/file/nsHostObjectURI.h @@ -8,48 +8,43 @@ #define nsHostObjectURI_h #include "mozilla/Attributes.h" #include "mozilla/dom/File.h" #include "nsCOMPtr.h" #include "nsIClassInfo.h" #include "nsIPrincipal.h" #include "nsISerializable.h" -#include "nsIURIWithBlobImpl.h" #include "nsIURIWithPrincipal.h" #include "nsSimpleURI.h" #include "nsIIPCSerializableURI.h" -#include "nsWeakReference.h" /** * These URIs refer to host objects: Blobs, with scheme "blob", * MediaStreams, with scheme "mediastream", and MediaSources, with scheme * "mediasource". */ class nsHostObjectURI final : public mozilla::net::nsSimpleURI , public nsIURIWithPrincipal - , public nsIURIWithBlobImpl - , public nsSupportsWeakReference { private: - nsHostObjectURI(nsIPrincipal* aPrincipal, - mozilla::dom::BlobImpl* aBlobImpl) + explicit nsHostObjectURI(nsIPrincipal* aPrincipal) : mozilla::net::nsSimpleURI() , mPrincipal(aPrincipal) - , mBlobImpl(aBlobImpl) {} // For use only from deserialization - nsHostObjectURI() : mozilla::net::nsSimpleURI() {} + explicit nsHostObjectURI() + : mozilla::net::nsSimpleURI() + {} public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_NSIURIWITHBLOBIMPL NS_DECL_NSIURIWITHPRINCIPAL NS_DECL_NSISERIALIZABLE NS_DECL_NSICLASSINFO NS_DECL_NSIIPCSERIALIZABLEURI // Override CloneInternal() and EqualsInternal() virtual nsresult CloneInternal(RefHandlingEnum aRefHandlingMode, const nsACString& newRef, @@ -64,32 +59,28 @@ public: { nsHostObjectURI* url = new nsHostObjectURI(); SetRefOnClone(url, refHandlingMode, newRef); return url; } NS_IMETHOD Mutate(nsIURIMutator * *_retval) override; - void ForgetBlobImpl(); - nsCOMPtr<nsIPrincipal> mPrincipal; - RefPtr<mozilla::dom::BlobImpl> mBlobImpl; protected: virtual ~nsHostObjectURI() {} nsresult SetScheme(const nsACString &aProtocol) override; bool Deserialize(const mozilla::ipc::URIParams&); public: class Mutator final : public nsIURIMutator , public BaseURIMutator<nsHostObjectURI> - , public nsIBlobURIMutator , public nsIPrincipalURIMutator , public nsISerializable { NS_DECL_ISUPPORTS NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI) NS_DEFINE_NSIMUTATOR_COMMON NS_IMETHOD @@ -100,26 +91,16 @@ public: MOZ_MUST_USE NS_IMETHOD Read(nsIObjectInputStream* aStream) override { return InitFromInputStream(aStream); } MOZ_MUST_USE NS_IMETHOD - SetBlobImpl(mozilla::dom::BlobImpl *aBlobImpl) override - { - if (!mURI) { - return NS_ERROR_NULL_POINTER; - } - mURI->mBlobImpl = aBlobImpl; - return NS_OK; - } - - MOZ_MUST_USE NS_IMETHOD SetPrincipal(nsIPrincipal *aPrincipal) override { if (!mURI) { return NS_ERROR_NULL_POINTER; } mURI->mPrincipal = aPrincipal; return NS_OK; }
--- a/dom/svg/test/test_fragments.html +++ b/dom/svg/test/test_fragments.html @@ -8,17 +8,17 @@ https://bugzilla.mozilla.org/show_bug.cg <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=759124">Mozilla Bug 759124</a> <p id="display"></p> <div id="content" style="display: none"></div> -<iframe id="svg" src="fragments-helper.svg"></iframe> +<iframe id="svg"></iframe> <pre id="test"> <script class="testbody" type="application/javascript"> SimpleTest.waitForExplicitFinish(); function Test(svgFragmentIdentifier, valid, viewBoxString, preserveAspectRatioString, zoomAndPanString) { @@ -105,12 +105,13 @@ function runTests() rootElement.setAttribute("zoomAndPan", "disable"); rootElement.setAttribute("transform", "translate(10,10)"); } SimpleTest.finish(); } $(svg).addEventListener("load", runTests); +$(svg).setAttribute("src", "fragments-helper.svg"); </script> </pre> </body> </html>
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp +++ b/gfx/layers/ipc/CompositorBridgeParent.cpp @@ -1680,20 +1680,22 @@ CompositorBridgeParent::RecvMapAndNotify mozilla::ipc::IPCResult CompositorBridgeParent::RecvAdoptChild(const uint64_t& child) { RefPtr<APZSampler> oldApzSampler; APZCTreeManagerParent* parent; { MonitorAutoLock lock(*sIndirectLayerTreesLock); - // We currently don't support adopting children from one compositor to - // another if the two compositors don't have the same options. - MOZ_ASSERT(sIndirectLayerTrees[child].mParent->mOptions == mOptions); - oldApzSampler = sIndirectLayerTrees[child].mParent->mApzSampler; + if (sIndirectLayerTrees[child].mParent) { + // We currently don't support adopting children from one compositor to + // another if the two compositors don't have the same options. + MOZ_ASSERT(sIndirectLayerTrees[child].mParent->mOptions == mOptions); + oldApzSampler = sIndirectLayerTrees[child].mParent->mApzSampler; + } NotifyChildCreated(child); if (sIndirectLayerTrees[child].mLayerTree) { sIndirectLayerTrees[child].mLayerTree->SetLayerManager(mLayerManager, GetAnimationStorage()); // Trigger composition to handle a case that mLayerTree was not composited yet // by previous CompositorBridgeParent, since nsRefreshDriver might wait composition complete. ScheduleComposition(); } if (mWrBridge && sIndirectLayerTrees[child].mWrBridge) {
--- a/netwerk/base/moz.build +++ b/netwerk/base/moz.build @@ -122,17 +122,16 @@ XPIDL_SOURCES += [ 'nsITransport.idl', 'nsIUDPSocket.idl', 'nsIUnicharStreamLoader.idl', 'nsIUploadChannel.idl', 'nsIUploadChannel2.idl', 'nsIURI.idl', 'nsIURIClassifier.idl', 'nsIURIMutator.idl', - 'nsIURIWithBlobImpl.idl', 'nsIURIWithPrincipal.idl', 'nsIURL.idl', 'nsIURLParser.idl', 'nsPILoadGroupInternal.idl', 'nsPISocketTransportService.idl', ] if CONFIG['MOZ_TOOLKIT_SEARCH']:
deleted file mode 100644 --- a/netwerk/base/nsIURIWithBlobImpl.idl +++ /dev/null @@ -1,40 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "nsISupports.idl" - -interface nsIURI; - -%{C++ -namespace mozilla { -namespace dom { - class BlobImpl; -}} -%} - -[ptr] native BlobImplPtr(mozilla::dom::BlobImpl); - -/** - * nsIURIWithBlobImpl is implemented by URIs which are associated with a - * specific BlobImpl. - */ -[builtinclass, builtinclass, uuid(331b41d3-3506-4ab5-bef9-aab41e3202a3)] -interface nsIURIWithBlobImpl : nsISupports -{ - /** - * The BlobImpl associated with the resource returned when loading this uri. - */ - readonly attribute nsISupports blobImpl; -}; - -[builtinclass, uuid(d3e8c9fa-ff07-47cc-90dc-0cc5445ddb59)] -interface nsIBlobURIMutator : nsISupports -{ - /** - * Associates a blobImpl to the mutated URI. - * Would normally return nsIURIMutator, but since it only gets called - * from C++, there is no need for that. - */ - [must_use, noscript] void setBlobImpl(in BlobImplPtr blobImpl); -};
--- a/python/mozbuild/mozbuild/artifacts.py +++ b/python/mozbuild/mozbuild/artifacts.py @@ -421,16 +421,17 @@ class MacArtifactJob(ArtifactJob): class WinArtifactJob(ArtifactJob): package_artifact_patterns = { 'firefox/dependentlibs.list', 'firefox/platform.ini', 'firefox/application.ini', 'firefox/**/*.dll', 'firefox/*.exe', 'firefox/**/interfaces.xpt', + 'firefox/*.tlb', } product = 'firefox' # These are a subset of TEST_HARNESS_BINS in testing/mochitest/Makefile.in. test_artifact_patterns = { ('bin/BadCertServer.exe', ('bin', 'bin')), ('bin/GenerateOCSPResponse.exe', ('bin', 'bin')),
--- a/python/mozbuild/mozbuild/backend/common.py +++ b/python/mozbuild/mozbuild/backend/common.py @@ -22,30 +22,37 @@ from mozbuild.frontend.data import ( BaseProgram, ChromeManifestEntry, ConfigFileSubstitution, Exports, FinalTargetPreprocessedFiles, FinalTargetFiles, GeneratedSources, GnProjectData, + HostLibrary, + HostRustLibrary, IPDLCollection, + RustLibrary, SharedLibrary, + StaticLibrary, UnifiedSources, XPIDLFile, WebIDLCollection, ) from mozbuild.jar import ( DeprecatedJarManifest, JarManifestParser, ) from mozbuild.preprocessor import Preprocessor from mozpack.chrome.manifest import parse_manifest_line -from mozbuild.util import group_unified_files +from mozbuild.util import ( + group_unified_files, + mkdir, +) class XPIDLManager(object): """Helps manage XPCOM IDLs in the context of the build system.""" def __init__(self, config): self.config = config self.topsrcdir = config.topsrcdir self.topobjdir = config.topobjdir @@ -191,16 +198,103 @@ class CommonBackend(BuildBackend): # Write out a file listing generated sources. with self._write_file(mozpath.join(topobjdir, 'generated-sources.json')) as fh: d = { 'sources': sorted(self._generated_sources), } json.dump(d, fh, sort_keys=True, indent=4) + def _expand_libs(self, input_bin): + os_libs = [] + shared_libs = [] + static_libs = [] + objs = [] + no_pgo_objs = [] + + seen_objs = set() + seen_libs = set() + + def add_objs(lib): + for o in lib.objs: + if o not in seen_objs: + seen_objs.add(o) + objs.append(o) + # This is slightly odd, buf for consistency with the + # recursivemake backend we don't replace OBJ_SUFFIX if any + # object in a library has `no_pgo` set. + if lib.no_pgo_objs or lib.no_pgo: + no_pgo_objs.append(o) + + def expand(lib, recurse_objs, system_libs): + if isinstance(lib, StaticLibrary): + if lib.no_expand_lib: + static_libs.append(lib) + recurse_objs = False + elif recurse_objs: + add_objs(lib) + + for l in lib.linked_libraries: + expand(l, recurse_objs, system_libs) + + if system_libs: + for l in lib.linked_system_libs: + if l not in seen_libs: + seen_libs.add(l) + os_libs.append(l) + + elif isinstance(lib, SharedLibrary): + if lib not in seen_libs: + seen_libs.add(lib) + shared_libs.append(lib) + + add_objs(input_bin) + + system_libs = not isinstance(input_bin, StaticLibrary) + for lib in input_bin.linked_libraries: + if isinstance(lib, RustLibrary): + continue + elif isinstance(lib, StaticLibrary): + expand(lib, True, system_libs) + elif isinstance(lib, SharedLibrary): + if lib not in seen_libs: + seen_libs.add(lib) + shared_libs.append(lib) + + for lib in input_bin.linked_system_libs: + if lib not in seen_libs: + seen_libs.add(lib) + os_libs.append(lib) + + return objs, no_pgo_objs, shared_libs, os_libs, static_libs + + def _make_list_file(self, objdir, objs, name): + if not objs: + return None + list_style = self.environment.substs.get('EXPAND_LIBS_LIST_STYLE') + list_file_path = mozpath.join(objdir, name) + objs = [os.path.relpath(o, objdir) for o in objs] + if list_style == 'linkerscript': + ref = list_file_path + content = '\n'.join('INPUT("%s")' % o for o in objs) + elif list_style == 'filelist': + ref = "-Wl,-filelist," + list_file_path + content = '\n'.join(objs) + elif list_style == 'list': + ref = "@" + list_file_path + content = '\n'.join(objs) + else: + return None + + mkdir(objdir) + with self._write_file(list_file_path) as fh: + fh.write(content) + + return ref + def _handle_generated_sources(self, files): self._generated_sources.update(mozpath.relpath(f, self.environment.topobjdir) for f in files) def _handle_webidl_collection(self, webidls): bindings_dir = mozpath.join(self.environment.topobjdir, 'dom', 'bindings') all_inputs = set(webidls.all_static_sources())
--- a/python/mozbuild/mozbuild/backend/recursivemake.py +++ b/python/mozbuild/mozbuild/backend/recursivemake.py @@ -1319,77 +1319,113 @@ class RecursiveMakeBackend(CommonBackend def _process_host_library(self, libdef, backend_file): backend_file.write('HOST_LIBRARY_NAME = %s\n' % libdef.basename) def _build_target_for_obj(self, obj): return '%s/%s' % (mozpath.relpath(obj.objdir, self.environment.topobjdir), obj.KIND) def _process_linked_libraries(self, obj, backend_file): - def write_shared_and_system_libs(lib): - for l in lib.linked_libraries: - if isinstance(l, (StaticLibrary, RustLibrary)): - write_shared_and_system_libs(l) - else: - backend_file.write_once('SHARED_LIBS += %s/%s\n' - % (pretty_relpath(l), l.import_name)) - for l in lib.linked_system_libs: - backend_file.write_once('OS_LIBS += %s\n' % l) - def pretty_relpath(lib): return '$(DEPTH)/%s' % mozpath.relpath(lib.objdir, topobjdir) topobjdir = mozpath.normsep(obj.topobjdir) # This will create the node even if there aren't any linked libraries. build_target = self._build_target_for_obj(obj) self._compile_graph[build_target] + objs, no_pgo_objs, shared_libs, os_libs, static_libs = self._expand_libs(obj) + + if obj.KIND == 'target': + obj_target = obj.name + if isinstance(obj, Program): + obj_target = self._pretty_path(obj.output_path, backend_file) + + is_unit_test = isinstance(obj, BaseProgram) and obj.is_unit_test + profile_gen_objs = [] + + if (self.environment.substs.get('MOZ_PGO') and + self.environment.substs.get('GNU_CC')): + # We use a different OBJ_SUFFIX for the profile generate phase on + # linux. These get picked up via OBJS_VAR_SUFFIX in config.mk. + if not is_unit_test and not isinstance(obj, SimpleProgram): + profile_gen_objs = [o if o in no_pgo_objs else '%s.%s' % + (mozpath.splitext(o)[0], 'i_o') for o in objs] + + def write_obj_deps(target, objs_ref, pgo_objs_ref): + if pgo_objs_ref: + backend_file.write('ifdef MOZ_PROFILE_GENERATE\n') + backend_file.write('%s: %s\n' % (target, pgo_objs_ref)) + backend_file.write('else\n') + backend_file.write('%s: %s\n' % (target, objs_ref)) + backend_file.write('endif\n') + else: + backend_file.write('%s: %s\n' % (target, objs_ref)) + + objs_ref = ' \\\n '.join(os.path.relpath(o, obj.objdir) + for o in objs) + pgo_objs_ref = ' \\\n '.join(os.path.relpath(o, obj.objdir) + for o in profile_gen_objs) + # Don't bother with a list file if we're only linking objects built + # in this directory or building a real static library. This + # accommodates clang-plugin, where we would otherwise pass an + # incorrect list file format to the host compiler as well as when + # creating an archive with AR, which doesn't understand list files. + if (objs == obj.objs and not isinstance(obj, StaticLibrary) or + isinstance(obj, StaticLibrary) and obj.no_expand_lib): + backend_file.write_once('%s_OBJS := %s\n' % (obj.name, + objs_ref)) + if profile_gen_objs: + backend_file.write_once('%s_PGO_OBJS := %s\n' % (obj.name, + pgo_objs_ref)) + write_obj_deps(obj_target, objs_ref, pgo_objs_ref) + elif not isinstance(obj, StaticLibrary): + list_file_path = '%s.list' % obj.name.replace('.', '_') + list_file_ref = self._make_list_file(obj.objdir, objs, + list_file_path) + backend_file.write_once('%s_OBJS := %s\n' % + (obj.name, list_file_ref)) + backend_file.write_once('%s: %s\n' % (obj_target, list_file_path)) + if profile_gen_objs: + pgo_list_file_path = '%s_pgo.list' % obj.name.replace('.', '_') + pgo_list_file_ref = self._make_list_file(obj.objdir, + profile_gen_objs, + pgo_list_file_path) + backend_file.write_once('%s_PGO_OBJS := %s\n' % + (obj.name, pgo_list_file_ref)) + backend_file.write_once('%s: %s\n' % (obj_target, + pgo_list_file_path)) + write_obj_deps(obj_target, objs_ref, pgo_objs_ref) + + for lib in shared_libs: + backend_file.write_once('SHARED_LIBS += %s/%s\n' % + (pretty_relpath(lib), lib.import_name)) + for lib in static_libs: + backend_file.write_once('STATIC_LIBS += %s/%s\n' % + (pretty_relpath(lib), lib.import_name)) + for lib in os_libs: + if obj.KIND == 'target': + backend_file.write_once('OS_LIBS += %s\n' % lib) + else: + backend_file.write_once('HOST_EXTRA_LIBS += %s\n' % lib) + for lib in obj.linked_libraries: if not isinstance(lib, ExternalLibrary): self._compile_graph[build_target].add( self._build_target_for_obj(lib)) - relpath = pretty_relpath(lib) - if isinstance(obj, Library): - if isinstance(lib, RustLibrary): - # We don't need to do anything here; we will handle - # linkage for any RustLibrary elsewhere. - continue - elif isinstance(lib, StaticLibrary): - backend_file.write_once('STATIC_LIBS += %s/%s\n' - % (relpath, lib.import_name)) - if isinstance(obj, SharedLibrary): - write_shared_and_system_libs(lib) - elif isinstance(obj, SharedLibrary): - backend_file.write_once('SHARED_LIBS += %s/%s\n' - % (relpath, lib.import_name)) - elif isinstance(obj, (Program, SimpleProgram)): - if isinstance(lib, StaticLibrary): - backend_file.write_once('STATIC_LIBS += %s/%s\n' - % (relpath, lib.import_name)) - write_shared_and_system_libs(lib) - else: - backend_file.write_once('SHARED_LIBS += %s/%s\n' - % (relpath, lib.import_name)) - elif isinstance(obj, (HostLibrary, HostProgram, HostSimpleProgram)): - assert isinstance(lib, (HostLibrary, HostRustLibrary)) - backend_file.write_once('HOST_LIBS += %s/%s\n' - % (relpath, lib.import_name)) + if isinstance(lib, (HostLibrary, HostRustLibrary)): + backend_file.write_once('HOST_LIBS += %s/%s\n' % + (pretty_relpath(lib), lib.import_name)) # We have to link any Rust libraries after all intermediate static # libraries have been listed to ensure that the Rust libraries are # searched after the C/C++ objects that might reference Rust symbols. if isinstance(obj, SharedLibrary): self._process_rust_libraries(obj, backend_file, pretty_relpath) - for lib in obj.linked_system_libs: - if obj.KIND == 'target': - backend_file.write_once('OS_LIBS += %s\n' % lib) - else: - backend_file.write_once('HOST_EXTRA_LIBS += %s\n' % lib) - # Process library-based defines self._process_defines(obj.lib_defines, backend_file) def _process_rust_libraries(self, obj, backend_file, pretty_relpath): assert isinstance(obj, SharedLibrary) # If this library does not depend on any Rust libraries, then we are done. direct_linked = [l for l in obj.linked_libraries if isinstance(l, RustLibrary)]
--- a/python/mozbuild/mozbuild/frontend/data.py +++ b/python/mozbuild/mozbuild/frontend/data.py @@ -383,26 +383,30 @@ class LinkageMultipleRustLibrariesError( class Linkable(ContextDerived): """Generic context derived container object for programs and libraries""" __slots__ = ( 'cxx_link', 'lib_defines', 'linked_libraries', 'linked_system_libs', + 'no_pgo_sources', + 'no_pgo', 'sources', ) def __init__(self, context): ContextDerived.__init__(self, context) self.cxx_link = False self.linked_libraries = [] self.linked_system_libs = [] self.lib_defines = Defines(context, {}) self.sources = defaultdict(list) + self.no_pgo_sources = [] + self.no_pgo = False def link_library(self, obj): assert isinstance(obj, BaseLibrary) if obj.KIND != self.KIND: raise LinkageWrongKindError('%s != %s' % (obj.KIND, self.KIND)) # Linking multiple Rust libraries into an object would result in # multiple copies of the Rust standard library, as well as linking # errors from duplicate symbols. @@ -432,26 +436,33 @@ class Linkable(ContextDerived): def source_files(self): all_sources = [] # This is ordered for reproducibility and consistently w/ # config/rules.mk for suffix in ('.c', '.S', '.cpp', '.m', '.mm', '.s'): all_sources += self.sources.get(suffix, []) return all_sources - @property - def objs(self): + def _get_objs(self, sources): obj_prefix = '' if self.KIND == 'host': obj_prefix = 'host_' return [mozpath.join(self.objdir, '%s%s.%s' % (obj_prefix, mozpath.splitext(mozpath.basename(f))[0], self.config.substs.get('OBJ_SUFFIX', ''))) - for f in self.source_files()] + for f in sources] + + @property + def no_pgo_objs(self): + return self._get_objs(self.no_pgo_sources) + + @property + def objs(self): + return self._get_objs(self.source_files()) class BaseProgram(Linkable): """Context derived container object for programs, which is a unicode string. This class handles automatically appending a binary suffix to the program name. @@ -482,16 +493,20 @@ class BaseProgram(Linkable): if self.installed: return ObjDirPath(self._context, '!/' + mozpath.join(self.install_target, self.program)) else: return ObjDirPath(self._context, '!' + self.program) def __repr__(self): return '<%s: %s/%s>' % (type(self).__name__, self.relobjdir, self.program) + @property + def name(self): + return self.program + class Program(BaseProgram): """Context derived container object for PROGRAM""" SUFFIX_VAR = 'BIN_SUFFIX' KIND = 'target' class HostProgram(HostMixin, BaseProgram): @@ -596,16 +611,20 @@ class BaseLibrary(Linkable): ) self.import_name = self.lib_name self.refs = [] def __repr__(self): return '<%s: %s/%s>' % (type(self).__name__, self.relobjdir, self.lib_name) + @property + def name(self): + return self.lib_name + class Library(BaseLibrary): """Context derived container object for a library""" KIND = 'target' __slots__ = ( ) def __init__(self, context, basename, real_name=None):
--- a/python/mozbuild/mozbuild/frontend/emitter.py +++ b/python/mozbuild/mozbuild/frontend/emitter.py @@ -946,16 +946,20 @@ class TreeMetadataEmitter(LoggingMixin): ctxt_sources[variable][canonical_suffix] += sorted(srcs) yield obj if ctxt_sources: for linkable in linkables: for target_var in ('SOURCES', 'UNIFIED_SOURCES'): for suffix, srcs in ctxt_sources[target_var].items(): linkable.sources[suffix] += srcs + if no_pgo_sources: + linkable.no_pgo_sources = no_pgo_sources + elif no_pgo: + linkable.no_pgo = True for host_linkable in host_linkables: for suffix, srcs in ctxt_sources['HOST_SOURCES'].items(): host_linkable.sources[suffix] += srcs for f, flags in all_flags.iteritems(): if flags.flags: ext = mozpath.splitext(f)[1] yield PerSourceFlag(context, f, flags.flags)
--- a/python/mozbuild/mozbuild/test/backend/common.py +++ b/python/mozbuild/mozbuild/test/backend/common.py @@ -200,16 +200,28 @@ CONFIGS = defaultdict(lambda: { 'program-paths': { 'defines': {}, 'non_global_defines': [], 'substs': { 'COMPILE_ENVIRONMENT': '1', 'BIN_SUFFIX': '.prog', }, }, + 'linkage': { + 'defines': {}, + 'non_global_defines': [], + 'substs': { + 'COMPILE_ENVIRONMENT': '1', + 'LIB_SUFFIX': 'a', + 'BIN_SUFFIX': '.exe', + 'DLL_SUFFIX': '.so', + 'OBJ_SUFFIX': 'o', + 'EXPAND_LIBS_LIST_STYLE': 'list', + }, + }, }) class BackendTester(unittest.TestCase): def setUp(self): self._old_env = dict(os.environ) os.environ.pop('MOZ_OBJDIR', None)
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/moz.build @@ -0,0 +1,11 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +include('templates.mozbuild') + +DIRS += [ + 'real', + 'shared', + 'prog', + 'static', +] \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/prog/moz.build @@ -0,0 +1,11 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +DIRS += ['qux'] + +Program('MyProgram') + +USE_LIBS += [ + 'bar', + 'baz', +]
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/prog/qux/moz.build @@ -0,0 +1,6 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +SOURCES += ['qux1.c'] + +SharedLibrary('qux') \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/real/foo/moz.build @@ -0,0 +1,9 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +SOURCES += [ + 'foo1.c', + 'foo2.c' +] + +FINAL_LIBRARY = 'foo' \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/real/moz.build @@ -0,0 +1,14 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +DIRS += [ + 'foo', +] + +NO_EXPAND_LIBS = True + +OS_LIBS += ['-lbaz'] + +USE_LIBS += ['static:baz'] + +Library('foo') \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/shared/baz/moz.build @@ -0,0 +1,6 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +SOURCES += ['baz1.c'] + +FINAL_LIBRARY = 'baz' \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/shared/moz.build @@ -0,0 +1,14 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +DIRS += [ + 'baz', +] + +STATIC_LIBRARY_NAME = 'baz_s' +FORCE_STATIC_LIB = True + +OS_LIBS += ['-lfoo'] +USE_LIBS += ['qux'] + +SharedLibrary('baz') \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/static/bar/bar_helper/moz.build @@ -0,0 +1,8 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +SOURCES += [ + 'bar_helper1.cpp', +] + +FINAL_LIBRARY = 'bar' \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/static/bar/moz.build @@ -0,0 +1,13 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +SOURCES += [ + 'bar1.cc', + 'bar2.cc', +] + +DIRS += [ + 'bar_helper', +] + +FINAL_LIBRARY = 'bar' \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/static/moz.build @@ -0,0 +1,12 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +DIRS += [ + 'bar', +] + +USE_LIBS += ['foo'] + +OS_LIBS += ['-lbar'] + +Library('bar')
new file mode 100644 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/linkage/templates.mozbuild @@ -0,0 +1,23 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +@template +def Library(name): + LIBRARY_NAME = name + +@template +def SharedLibrary(name): + FORCE_SHARED_LIB = True + LIBRARY_NAME = name + +@template +def Binary(): + # Add -lfoo for testing purposes. + OS_LIBS += ['foo'] + + +@template +def Program(name): + PROGRAM = name + + Binary() \ No newline at end of file
--- a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py +++ b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py @@ -1045,16 +1045,83 @@ class TestRecursiveMakeBackend(BackendTe with open(os.path.join(env.topobjdir, 'cxx-library', 'backend.mk'), 'rb') as fh: lines = fh.readlines() lines = [line.rstrip() for line in lines] for line in lines: self.assertNotIn('LIB_IS_C_ONLY', line) + def test_linkage(self): + env = self._consume('linkage', RecursiveMakeBackend) + expected_linkage = { + 'prog': { + 'SHARED_LIBS': ['$(DEPTH)/prog/qux/qux.so', + '$(DEPTH)/shared/baz.so'], + 'STATIC_LIBS': ['$(DEPTH)/real/foo.a'], + 'OS_LIBS': ['-lfoo', '-lbaz', '-lbar'], + }, + 'shared': { + 'OS_LIBS': ['-lfoo'], + 'SHARED_LIBS': ['$(DEPTH)/prog/qux/qux.so'], + 'STATIC_LIBS': [], + }, + 'static': { + 'STATIC_LIBS': ['$(DEPTH)/real/foo.a'], + 'OS_LIBS': ['-lbar'], + 'SHARED_LIBS': ['$(DEPTH)/prog/qux/qux.so'], + }, + 'real': { + 'STATIC_LIBS': [], + 'SHARED_LIBS': ['$(DEPTH)/prog/qux/qux.so'], + 'OS_LIBS': ['-lbaz'], + } + } + actual_linkage = {} + for name in expected_linkage.keys(): + with open(os.path.join(env.topobjdir, name, 'backend.mk'), 'rb') as fh: + actual_linkage[name] = [line.rstrip() for line in fh.readlines()] + for name in expected_linkage: + for var in expected_linkage[name]: + for val in expected_linkage[name][var]: + line = '%s += %s' % (var, val) + self.assertIn(line, + actual_linkage[name]) + actual_linkage[name].remove(line) + for line in actual_linkage[name]: + self.assertNotIn('%s +=' % var, line) + + def test_list_files(self): + env = self._consume('linkage', RecursiveMakeBackend) + expected_list_files = { + 'prog/MyProgram_exe.list': [ + '../static/bar/bar1.o', + '../static/bar/bar2.o', + '../static/bar/bar_helper/bar_helper1.o', + ], + 'shared/baz_so.list': [ + 'baz/baz1.o', + ], + } + actual_list_files = {} + for name in expected_list_files.keys(): + with open(os.path.join(env.topobjdir, name), 'rb') as fh: + actual_list_files[name] = [mozpath.normsep(line.rstrip()) + for line in fh.readlines()] + for name in expected_list_files: + self.assertEqual(actual_list_files[name], + expected_list_files[name]) + + # We don't produce a list file for a shared library composed only of + # object files in its directory, but instead list them in a variable. + with open(os.path.join(env.topobjdir, 'prog', 'qux', 'backend.mk'), 'rb') as fh: + lines = [line.rstrip() for line in fh.readlines()] + + self.assertIn('qux.so_OBJS := qux1.o', lines) + def test_jar_manifests(self): env = self._consume('jar-manifests', RecursiveMakeBackend) with open(os.path.join(env.topobjdir, 'backend.mk'), 'rb') as fh: lines = fh.readlines() lines = [line.rstrip() for line in lines]
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py +++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py @@ -668,16 +668,20 @@ class TestEmitterBasic(unittest.TestCase self.assertIsInstance(objs[3], Program) self.assertIsInstance(objs[4], SimpleProgram) self.assertIsInstance(objs[5], SimpleProgram) self.assertEqual(objs[3].program, 'test_program.prog') self.assertEqual(objs[4].program, 'test_program1.prog') self.assertEqual(objs[5].program, 'test_program2.prog') + self.assertEqual(objs[3].name, 'test_program.prog') + self.assertEqual(objs[4].name, 'test_program1.prog') + self.assertEqual(objs[5].name, 'test_program2.prog') + self.assertEqual(objs[4].objs, [mozpath.join(reader.config.topobjdir, 'test_program1.%s' % reader.config.substs['OBJ_SUFFIX'])]) self.assertEqual(objs[5].objs, [mozpath.join(reader.config.topobjdir, 'test_program2.%s' % reader.config.substs['OBJ_SUFFIX'])]) @@ -1195,19 +1199,25 @@ class TestEmitterBasic(unittest.TestCase def test_linkables_cxx_link(self): """Test that linkables transitively set cxx_link properly.""" reader = self.reader('test-linkables-cxx-link') got_results = 0 for obj in self.read_topsrcdir(reader): if isinstance(obj, SharedLibrary): if obj.basename == 'cxx_shared': + self.assertEquals(obj.name, '%scxx_shared%s' % + (reader.config.dll_prefix, + reader.config.dll_suffix)) self.assertTrue(obj.cxx_link) got_results += 1 elif obj.basename == 'just_c_shared': + self.assertEquals(obj.name, '%sjust_c_shared%s' % + (reader.config.dll_prefix, + reader.config.dll_suffix)) self.assertFalse(obj.cxx_link) got_results += 1 self.assertEqual(got_results, 2) def test_generated_sources(self): """Test that GENERATED_SOURCES works properly.""" reader = self.reader('generated-sources') objs = self.read_topsrcdir(reader)
--- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1158,9 +1158,9 @@ static const TransportSecurityPreload kP { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, }; // Pinning Preload List Length = 485; static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1530043637929000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1530130018442000);
--- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -10,17 +10,17 @@ 0day.su: could not connect to host 0i0.nl: could not connect to host 0vi.org: could not connect to host 0x52.org: could not connect to host 0xaa55.me: could not connect to host 1001.best: could not connect to host 100onrainkajino.com: could not connect to host 135vv.com: could not connect to host 13826145000.com: could not connect to host -166166.com: could not connect to host +16164f.com: could not connect to host 1888zr.com: could not connect to host 1912x.com: could not connect to host 1er-secours.ch: could not connect to host 1gsoft.com: could not connect to host 1nian.vip: could not connect to host 1q365a.com: could not connect to host 249cq.com: could not connect to host 256k.me: could not connect to host @@ -30,27 +30,27 @@ 2fl.me: could not connect to host 2gen.com: could not connect to host 330.net: could not connect to host 360ds.co.in: could not connect to host 38888msc.com: could not connect to host 38blog.com: could not connect to host 3dm.audio: could not connect to host 3vlnaeet.cz: could not connect to host 404.guide: could not connect to host +404forest.com: could not connect to host 41844.de: could not connect to host 42t.ru: could not connect to host 439191.com: could not connect to host 47tech.com: could not connect to host 4baby.com.br: could not connect to host 4d2.xyz: could not connect to host 4host.ch: could not connect to host 4loc.us: could not connect to host 4web-hosting.com: could not connect to host 5000yz.com: could not connect to host -517vpn.cn: could not connect to host 52kb1.com: could not connect to host 52neptune.com: could not connect to host 5w5.la: could not connect to host 68277.me: could not connect to host 692b8c32.de: could not connect to host 69mentor.com: could not connect to host 6w6.la: could not connect to host 7183.org: could not connect to host @@ -62,24 +62,25 @@ 88laohu.cc: could not connect to host 88laohu.com: could not connect to host 8ackprotect.com: could not connect to host 8ballbombom.uk: could not connect to host 8t88.biz: could not connect to host 91-freedom.com: could not connect to host 99buffets.com: could not connect to host a-ix.net: could not connect to host aaron.xin: could not connect to host +abi-2017.tk: could not connect to host abi-fvs.de: could not connect to host abigailstark.com: could not connect to host -abilma.com: could not connect to host abloop.com: could not connect to host abolition.co: could not connect to host abstractbarista.com: could not connect to host abstractbarista.net: could not connect to host ac.milan.it: could not connect to host +ac0g.dyndns.org: could not connect to host acat.io: could not connect to host accolade.com.br: could not connect to host accwing.com: could not connect to host acgaudio.com: could not connect to host achterhoekseveiligheidsbeurs.nl: could not connect to host acpinformatique.fr: could not connect to host acrossgw.com: could not connect to host activeclearweb.com: could not connect to host @@ -89,17 +90,16 @@ adamcoffee.net: could not connect to hos adamdixon.co.uk: could not connect to host adec-emsa.ae: could not connect to host adrianajewelry.my: could not connect to host adult.properties: could not connect to host advaithnikhi.ml: could not connect to host advaithnikhi.tk: could not connect to host advanced-online.eu: could not connect to host adzie.xyz: could not connect to host -aerobotz.com: could not connect to host aevpn.org: could not connect to host affiliateroyale.com: could not connect to host affily.io: could not connect to host afterstack.net: could not connect to host agdalieso.com.ba: could not connect to host agingstop.net: could not connect to host agoravm.tk: could not connect to host agowa.eu: could not connect to host @@ -134,19 +134,19 @@ alldm.ru: could not connect to host alloutatl.com: could not connect to host allscammers.exposed: could not connect to host allthingsfpl.com: could not connect to host allthingssquared.com: could not connect to host alocato.com: could not connect to host alohapartyevents.co.uk: could not connect to host alpe-d-or.dyn-o-saur.com: could not connect to host alphabrock.cn: could not connect to host +alphahunks.com: could not connect to host altahrim.net: could not connect to host altered.network: could not connect to host -altitudemoversdenver.com: could not connect to host amdouglas.uk: could not connect to host ameho.me: could not connect to host americandistribuidora.com: could not connect to host amilum.org: could not connect to host amua.fr: could not connect to host amunoz.org: could not connect to host anadoluefessk.org: could not connect to host analyzemyfriends.com: could not connect to host @@ -187,17 +187,16 @@ arnaudminable.net: could not connect to arresttracker.com: could not connect to host arsenal.ru: could not connect to host arsk1.com: could not connect to host artea.ga: could not connect to host articaexports.com: could not connect to host artisense.de: could not connect to host artisticedgegranite.net: could not connect to host artofeyes.nl: could not connect to host -asec01.net: could not connect to host aserver.co: could not connect to host ashleyadum.com: could not connect to host asphaltfruehling.de: could not connect to host asphyxia.su: could not connect to host aspisdata.com: could not connect to host asral7.com: could not connect to host assdecoeur.org: could not connect to host assindia.nl: could not connect to host @@ -206,17 +205,16 @@ astrath.net: could not connect to host astrea-voetbal-groningen.nl: could not connect to host asuhe.win: could not connect to host asuhe.xyz: could not connect to host async.be: could not connect to host at1.co: could not connect to host athi.pl: could not connect to host atigerseye.com: could not connect to host atlas-5.site: could not connect to host -aubg.org: could not connect to host aufmerksamkeitsstudie.com: could not connect to host augix.net: could not connect to host aur.rocks: could not connect to host ausec.ch: could not connect to host ausschreibungen-suedtirol.it: could not connect to host austinsutphin.com: could not connect to host australiancattle.dog: could not connect to host authint.com: could not connect to host @@ -259,16 +257,17 @@ bbdos.ru: could not connect to host bbwteens.org: could not connect to host bcnet.com.hk: could not connect to host bcradio.org: could not connect to host bcrook.com: could not connect to host bdikaros-network.net: could not connect to host bdsmxxxpics.com: could not connect to host beamitapp.com: could not connect to host beasel.biz: could not connect to host +beauty-italy.ru: could not connect to host beccajoshwedding.com: could not connect to host beersandco.ch: could not connect to host bellavistaoutdoor.com: could not connect to host belpbleibtbelp.ch: could not connect to host belwederczykow.eu: could not connect to host ben.ninja: could not connect to host benfairclough.com: could not connect to host benjamin-horvath.com: could not connect to host @@ -286,17 +285,16 @@ bestellipticalmachinereview.info: could bestfitnesswatchreview.info: could not connect to host besthotsales.com: could not connect to host betonmoney.com: could not connect to host bey.io: could not connect to host bezoomnyville.com: could not connect to host bfrailwayclub.cf: could not connect to host bianinapiccanovias.com: could not connect to host bichonmaltes.com.br: could not connect to host -bierochs.org: could not connect to host bigerbio.com: could not connect to host billaud.eu.org: could not connect to host billigpoker.dk: could not connect to host binam.center: could not connect to host bingcheung.com: could not connect to host binimo.com: could not connect to host biou.me: could not connect to host biovalue.eu: could not connect to host @@ -313,16 +311,17 @@ bitmaincare.ru: could not connect to hos bitmessage.ch: could not connect to host bityes.org: could not connect to host bjgongyi.com: could not connect to host bjtxl.cn: could not connect to host black-khat.com: could not connect to host blackberrycentral.com: could not connect to host blackdragoninc.org: could not connect to host blackscreen.me: could not connect to host +blameomar.com: could not connect to host blantik.net: could not connect to host blazeit.io: could not connect to host blindaryproduction.tk: could not connect to host blinkenlight.co.uk: could not connect to host blinkenlight.com.au: could not connect to host blog.gparent.org: could not connect to host blogabout.ru: could not connect to host blogdieconomia.it: could not connect to host @@ -343,17 +342,16 @@ boxdevigneron.fr: could not connect to h bpadvisors.eu: could not connect to host bqcp.net: could not connect to host bradkovach.com: could not connect to host bragaweb.com.br: could not connect to host brage.info: could not connect to host braintensive.com: could not connect to host brandontaylor-black.com: could not connect to host brianmwaters.net: could not connect to host -brickwerks.io: could not connect to host brideandgroomdirect.ie: could not connect to host bridgeout.com: could not connect to host brinkmann.one: could not connect to host brio-ukraine.store: could not connect to host brookframework.org: could not connect to host brrr.fr: could not connect to host brynnan.nl: could not connect to host bsalyzer.com: could not connect to host @@ -425,23 +423,24 @@ cctld.com: could not connect to host cdeck.net: could not connect to host cdlcenter.com: could not connect to host cdmhp.org.nz: could not connect to host cdmon.tech: could not connect to host cdnk39.com: could not connect to host cee.io: could not connect to host cegfw.com: could not connect to host cencalvia.org: could not connect to host +centerforpolicy.org: could not connect to host centos.pub: could not connect to host centrallead.net: could not connect to host centrolavoro.org: could not connect to host +certcenter.de: could not connect to host cgtx.us: could not connect to host challengeskins.com: could not connect to host championnat-romand-cuisiniers-amateurs.ch: could not connect to host -chancat.blog: could not connect to host channellife.asia: could not connect to host chaouby.com: could not connect to host charge.co: could not connect to host charmyadesara.com: could not connect to host cheah.xyz: could not connect to host cheesefusion.com: could not connect to host cheltik.ru: could not connect to host chemicalguys-ruhrpott.de: could not connect to host @@ -452,16 +451,17 @@ chinternet.xyz: could not connect to hos chloe.re: could not connect to host chocolat-suisse.ch: could not connect to host chorkley.me: could not connect to host chrisebert.net: could not connect to host christianhoffmann.info: could not connect to host christianpusch.de: could not connect to host christiansayswords.com: could not connect to host chromaryu.net: could not connect to host +chua.family: could not connect to host chziyue.com: could not connect to host cipher.land: could not connect to host cipherli.st: could not connect to host cisy.me: could not connect to host citywalkr.com: could not connect to host ciuciucadou.ro: could not connect to host cjtkfan.club: could not connect to host ckcameron.net: could not connect to host @@ -470,34 +470,32 @@ clearchatsandbox.com: could not connect clearviewwealthprojector.com.au: could not connect to host clic-music.com: could not connect to host clickclock.cc: could not connect to host clickomobile.com: could not connect to host clintonbloodworth.com: could not connect to host cloudberlin.goip.de: could not connect to host cloudbleed.info: could not connect to host cloudimproved.com: could not connect to host -cloudimprovedtest.com: could not connect to host cloudwarez.xyz: could not connect to host clownish.co.il: could not connect to host clycat.ru: could not connect to host cmcc.network: could not connect to host cmrss.com: could not connect to host cms-weble.jp: could not connect to host cmweller.com: could not connect to host cnetw.xyz: could not connect to host cnlic.com: could not connect to host cnwage.com: could not connect to host cnwarn.com: could not connect to host co-yutaka.com: could not connect to host cobaltlp.com: could not connect to host coccinellaskitchen.com: could not connect to host coccinellaskitchen.de: could not connect to host coccinellaskitchen.it: could not connect to host -cocoaheads.at: could not connect to host codeloop.pw: could not connect to host codenlife.xyz: could not connect to host coderhangout.com: could not connect to host codewiz.xyz: could not connect to host cogumelosmagicos.org: could not connect to host colarelli.ch: could not connect to host colleencornez.com: could not connect to host collins.kg: could not connect to host @@ -510,43 +508,43 @@ comicrelief.com: could not connect to ho compeuphoria.com: could not connect to host complex-organization.com: could not connect to host complt.xyz: could not connect to host comprehensiveihc.com: could not connect to host conception.sk: could not connect to host conniesacademy.com: could not connect to host conrad.am: could not connect to host constructive.men: could not connect to host +consumeractionlawgroup.com: could not connect to host corecdn.org: could not connect to host corinnanese.de: could not connect to host correct.horse: could not connect to host cosmeticosdelivery.com.br: could not connect to host cosmeticosnet.com.br: could not connect to host cosmiatria.pe: could not connect to host cosplayer.com: could not connect to host cotta.dk: could not connect to host coumoul.fr: could not connect to host cpaneltips.com: could not connect to host crackslut.eu: could not connect to host craftination.net: could not connect to host craftydev.design: could not connect to host crashsec.com: could not connect to host +creativecommonscatpictures.com: could not connect to host creato.top: could not connect to host credential.eu: could not connect to host cristianhares.com: could not connect to host criticalaim.com: could not connect to host crow.tw: could not connect to host crox.co: could not connect to host cryptoki.fr: could not connect to host cryptolosophy.io: could not connect to host -cryptoparty.at: could not connect to host cryptoparty.dk: could not connect to host cryptopartynewcastle.org: could not connect to host cryptoshot.pw: could not connect to host -crystalmachine.net: could not connect to host cselzer.com: could not connect to host csgo77.com: could not connect to host csilies.de: could not connect to host cunha.be: could not connect to host cuni-cuni-club.com: could not connect to host cuni-rec.com: could not connect to host cuonic.com: could not connect to host curacao-license.com: could not connect to host @@ -604,16 +602,17 @@ dedietrich-asia.com: could not connect t deepcreampie.com: could not connect to host deeps.cat: could not connect to host deepsouthsounds.com: could not connect to host deloittequant.com: could not connect to host dengchangdong.com: could not connect to host depedtayo.ph: could not connect to host derchris.me: could not connect to host derivativeshub.pro: could not connect to host +derive.cc: could not connect to host dermacarecomplex.com: could not connect to host dermapuur.nl: could not connect to host designsbykerrialee.co.uk: could not connect to host detalhecomercio.com.br: could not connect to host detecte-fuite.ch: could not connect to host detecte.ch: could not connect to host detectefuite.ch: could not connect to host devdesco.com: could not connect to host @@ -655,42 +654,41 @@ distinctivephotography.com.au: could not distrilogservices.com: could not connect to host ditch.ch: could not connect to host dixmag.com: could not connect to host diyosun.com: could not connect to host diz.in.ua: could not connect to host djul.net: could not connect to host dlouwrink.nl: could not connect to host dlyl888.com: could not connect to host -dn42.eu: could not connect to host dna.li: could not connect to host dnfc.rocks: could not connect to host dnmaze.com: could not connect to host dobrisan.ro: could not connect to host doctafit.com: could not connect to host docubox.info: could not connect to host doesmycodehavebugs.today: could not connect to host dogcratereview.info: could not connect to host dojifish.space: could not connect to host dolarcanadense.com.br: could not connect to host dolphin-hosting.com: could not connect to host -domainoo.com: could not connect to host domengrad.ru: could not connect to host domfee.com: could not connect to host dongkexue.com: could not connect to host donotspellitgav.in: could not connect to host donovand.info: could not connect to host doopdidoop.com: could not connect to host dougferris.id.au: could not connect to host doyoulyft.com: could not connect to host doze-cloud.tech: could not connect to host dragonwork.me: could not connect to host dranderle.com: could not connect to host dreamaholic.club: could not connect to host dreaming.solutions: could not connect to host +dreischneidiger.de: could not connect to host dreizwosechs.de: could not connect to host drinkplanet.eu: could not connect to host driving-lessons.co.uk: could not connect to host drivinghorror.com: could not connect to host drixn.cn: could not connect to host drixn.info: could not connect to host drixn.net: could not connect to host drizz.com.br: could not connect to host @@ -726,16 +724,17 @@ effectiveosgi.com: could not connect to eggplant.today: could not connect to host ehrlichesbier.de: could not connect to host ehuber.info: could not connect to host einhorn.space: could not connect to host einsatzstiefel.info: could not connect to host einsteinathome.org: could not connect to host ekobudisantoso.net: could not connect to host ekong366.com: could not connect to host +electicofficial.com: could not connect to host electricalcontrolpanels.co.uk: could not connect to host elektronring.com: could not connect to host elenorsmadness.org: could not connect to host elepover.com: could not connect to host elevateandprosper.com: could not connect to host elitesensual.com.br: could not connect to host elonbase.com: could not connect to host elsword.moe: could not connect to host @@ -752,20 +751,22 @@ empire24.co: could not connect to host emrenovation.com: could not connect to host endohaus.us: could not connect to host endspamwith.us: could not connect to host enoou.com: could not connect to host enpalmademallorca.info: could not connect to host enskat.de: could not connect to host enskatson-sippe.de: could not connect to host envelope.co.nz: could not connect to host +eolme.ml: could not connect to host epichouse.net: could not connect to host er-music.com: could not connect to host erad.fr: could not connect to host erclab.kr: could not connect to host +ericloud.tk: could not connect to host erigrid.eu: could not connect to host erspro.net: could not connect to host es888999.com: could not connect to host esoterik.link: could not connect to host essentialoilsimports.com: could not connect to host esseriumani.com: could not connect to host ethanfaust.com: could not connect to host etzi.myds.me: could not connect to host @@ -773,23 +774,23 @@ euexia.fr: could not connect to host eung.ga: could not connect to host euph.eu: could not connect to host eurostrategy.vn.ua: could not connect to host evankurniawan.com: could not connect to host evasioncreole.com: could not connect to host eventaro.com: could not connect to host eventmake.es: could not connect to host everyarti.st: could not connect to host +everygayporn.com: could not connect to host eveshaiwu.com: could not connect to host eworksmedia.com: could not connect to host exceptionalservices.us: could not connect to host exo.do: could not connect to host expoort.fr: could not connect to host exteriorservices.io: could not connect to host -extratorrent.cool: could not connect to host extratorrent.fyi: could not connect to host extratorrent.red: could not connect to host extratorrent.world: could not connect to host eytosh.net: could not connect to host f1bigpicture.com: could not connect to host f8842.com: could not connect to host faber.org.ru: could not connect to host fabian-kluge.de: could not connect to host @@ -808,17 +809,16 @@ falkus.net: could not connect to host fallenangeldrinks.eu: could not connect to host famer.me: could not connect to host fameuxhosting.co.uk: could not connect to host faretravel.co.uk: could not connect to host farm24.co.uk: could not connect to host farmacia.pt: could not connect to host fastaim.de: could not connect to host fastbackmbg.be: could not connect to host -faxite.com: could not connect to host faxreader.net: could not connect to host fcapartsdb.com: could not connect to host feac.us: could not connect to host fedn.it: could not connect to host feedstringer.com: could not connect to host feirlane.org: could not connect to host feisbed.com: could not connect to host feist.io: could not connect to host @@ -828,17 +828,16 @@ feras-alhajjaji.com: could not connect t fetclips.se: could not connect to host ff-bg.xyz: could not connect to host fhsseniormens.club: could not connect to host ficklenote.net: could not connect to host fierman.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116" data: no] fierman.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 116" data: no] fierman.us: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116" data: no] fifieldtech.com: could not connect to host -figurasdelinguagem.com.br: could not connect to host figuurzagers.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 116" data: no] filebox.space: could not connect to host fileio.io: could not connect to host filesense.com: could not connect to host findmybottleshop.com.au: could not connect to host findyour.diet: could not connect to host finstererlebnis.de: could not connect to host firexarxa.de: could not connect to host @@ -849,48 +848,46 @@ fixmyglitch.com: could not connect to ho fixthetimeline.com: could not connect to host fixthetimeline.org: could not connect to host flam.io: could not connect to host flamingcow.tv: could not connect to host flexinvesting.fi: could not connect to host floth.at: could not connect to host flugplatz-edvc.de: could not connect to host flyingdoggy.net: could not connect to host -fmovies.fyi: could not connect to host fmovies.life: could not connect to host focalforest.com: could not connect to host fognini-depablo.eu: could not connect to host fojing.com: could not connect to host foodserve.in: could not connect to host forcamp.ga: could not connect to host forsyththeatre.com: could not connect to host fortuna-loessnitz.de: could not connect to host foshanshequ.com: could not connect to host fossewayflowers.co.uk: could not connect to host fossewayflowers.com: could not connect to host foudufafa.de: could not connect to host -foxmay.co.uk: could not connect to host foxyslut.com: could not connect to host fragnic.com: could not connect to host frank.fyi: could not connect to host franklinhua.com: could not connect to host franzt.ovh: could not connect to host freddieonfire.tk: could not connect to host fredliang.cn: could not connect to host fredtec.ru: could not connect to host free8.xyz: could not connect to host freeassangenow.org: could not connect to host freedomvote.nl: could not connect to host freejidi.com: could not connect to host freelansir.com: could not connect to host freesitemapgenerator.com: could not connect to host +freesounding.ru: could not connect to host freshcode.nl: could not connect to host frickenate.com: could not connect to host friedhelm-wolf.de: could not connect to host -friller.com.au: could not connect to host frodriguez.xyz: could not connect to host frolov.net: could not connect to host fromlemaytoz.com: could not connect to host frosty-gaming.xyz: could not connect to host frp-roleplay.de: could not connect to host fsfi.is: could not connect to host ftgho.com: could not connect to host fuckcf.cf: could not connect to host @@ -933,22 +930,22 @@ gdhzcgs.com: could not connect to host gdz-otvety.com: could not connect to host ge1.me: could not connect to host gear-acquisition-syndrome.community: could not connect to host gearev.net: could not connect to host geeks.berlin: could not connect to host gehrke.nrw: could not connect to host geigr.de: could not connect to host geldteveel.eu: could not connect to host -generalpants.com.au: could not connect to host generationnext.pl: could not connect to host geneve.guide: could not connect to host genia-life.de: could not connect to host genoog.com: could not connect to host genossen.ru: could not connect to host +gerardobsd.com: could not connect to host geri.be: could not connect to host gers-authentique.com: could not connect to host geta.pub: could not connect to host getdigitized.net: could not connect to host getfilterlive.org: could not connect to host getgeek.dk: could not connect to host getgeek.ee: could not connect to host getgeek.fi: could not connect to host @@ -986,42 +983,40 @@ goanalyse.co.uk: could not connect to ho godrealms.com: could not connect to host goiaspropaganda.com.br: could not connect to host goldfelt.com: could not connect to host gongjuhao.com: could not connect to host goodyearsotn.co.uk: could not connect to host google.ax: could not connect to host goranrango.ch: could not connect to host gorod74.ru: could not connect to host -gosciencegirls.com: could not connect to host gottfridsberg.org: could not connect to host gouthro-goteborg.se: could not connect to host gozadentro.com: could not connect to host gpfclan.de: could not connect to host gradsm-ci.net: could not connect to host granth.io: could not connect to host graphite.org.uk: could not connect to host gratisonlinesex.com: could not connect to host greggsfoundation.org.uk: could not connect to host gregmartyn.com: could not connect to host greuel.online: could not connect to host -greybit.net: could not connect to host greyhash.se: could not connect to host gritte.net: could not connect to host grossberger-ge.org: could not connect to host grossmisconduct.news: could not connect to host growingmetrics.com: could not connect to host grusenmeyer.be: could not connect to host gugaltika-ipb.org: could not connect to host guinea-pig.co: could not connect to host -gummibande.noip.me: could not connect to host gunhunter.com: could not connect to host gus.moe: could not connect to host gutuia.blue: could not connect to host gvchannel.xyz: could not connect to host +gviedu.com: could not connect to host gxgx.org: could not connect to host gzitech.net: could not connect to host gzpblog.com: could not connect to host h2cdn.cloud: could not connect to host h3artbl33d.nl: could not connect to host habeo.si: could not connect to host hackbubble.me: could not connect to host hackmeplz.com: could not connect to host @@ -1033,16 +1028,18 @@ halta.info: could not connect to host hamking.tk: could not connect to host hammer-schnaps.com: could not connect to host hamu.blue: could not connect to host hanksservice.com: could not connect to host happytiger.eu: could not connect to host hapsfordmill.co.uk: could not connect to host hapvm.com: could not connect to host hardeman.nu: could not connect to host +hardergayporn.com: could not connect to host +hardfalcon.net: could not connect to host harrypottereditor.net: could not connect to host has-no-email-set.de: could not connect to host hasabig.wang: could not connect to host hasalittle.wang: could not connect to host hashimah.ca: could not connect to host hashplex.com: could not connect to host hatethe.uk: could not connect to host hbbet.com: could not connect to host @@ -1086,17 +1083,17 @@ hjes.com.ve: could not connect to host hochzeitshelferlein.de: could not connect to host hoffens.se: could not connect to host hohm.in: could not connect to host holidayincotswolds.co.uk: could not connect to host holowaty.me: could not connect to host home-cloud.online: could not connect to host homesfordinner.ca: could not connect to host homoglyph.net: could not connect to host -honeybeard.co.uk: could not connect to host +hompus.nl: could not connect to host honeytracks.com: could not connect to host hoodoo.io: could not connect to host hoodoo.tech: could not connect to host hopglass.eu: could not connect to host hopglass.net: could not connect to host horvathd.eu: could not connect to host hosted-oswa.org: could not connect to host hostingfirst.nl: could not connect to host @@ -1159,17 +1156,16 @@ imgencrypt.com: could not connect to hos imgul.net: could not connect to host imguoguo.com: could not connect to host imlinan.cn: could not connect to host imlinan.info: could not connect to host imlinan.net: could not connect to host imoner.ga: could not connect to host imperdintechnologies.com: could not connect to host impulse-clan.de: could not connect to host -imy.life: could not connect to host increasetestosteronelevels.org: could not connect to host industreiler.com: could not connect to host industreiler.com.br: could not connect to host inexpensivecomputers.net: could not connect to host informatik.zone: could not connect to host infoworm.org: could not connect to host infruction.com: could not connect to host injust.eu.org: could not connect to host @@ -1191,30 +1187,28 @@ intracom.com: could not connect to host invenio.software: could not connect to host investingdiary.cn: could not connect to host investorloanshub.com: could not connect to host iodu.re: could not connect to host ip.or.at: could not connect to host iphonechina.net: could not connect to host iplog.info: could not connect to host ipnetworking.net: could not connect to host -irayo.net: could not connect to host irinkeby.nu: could not connect to host isamiok.com: could not connect to host isisfighters.info: could not connect to host isoroc-nidzica.pl: could not connect to host isscouncil.com: could not connect to host isslshop.com: could not connect to host isthefieldcontrolsystemdown.com: could not connect to host istherrienstillcoach.com: could not connect to host it-adminio.ru: could not connect to host itad.top: could not connect to host itnews-bg.com: could not connect to host itpro-mg.de: could not connect to host -its-gutachten.de: could not connect to host its-schindler.de: could not connect to host itsatrap.nl: could not connect to host itsmejohn.org: could not connect to host ivanilla.org: could not connect to host ivanpolchenko.com: could not connect to host ivfmeds.com: could not connect to host ivyshop.com.br: could not connect to host iwex.swiss: could not connect to host @@ -1262,16 +1256,17 @@ juliaoantiguidades.com.br: could not con juliawebber.co.za: could not connect to host jumbopan.com: could not connect to host jumbopan.net: could not connect to host jurriaan.ninja: could not connect to host just-pools.co.za: could not connect to host justinharrison.ca: could not connect to host justzz.xyz: could not connect to host juventusmania1897.com: could not connect to host +kabus.org: could not connect to host kaika-facilitymanagement.de: could not connect to host kainz.be: could not connect to host kalender.goip.de: could not connect to host kaloix.de: could not connect to host kamalame.co: could not connect to host kamitech.ch: could not connect to host kandalife.com: could not connect to host kanganer.com: could not connect to host @@ -1287,16 +1282,17 @@ kearney.io: could not connect to host keezin.ga: could not connect to host kellyandantony.com: could not connect to host kelm.me: could not connect to host kermadec.com: could not connect to host keshausconsulting.com: could not connect to host kevindekoninck.com: could not connect to host kevinfoley.cc: could not connect to host kevinfoley.org: could not connect to host +kevinmeijer.nl: could not connect to host keyserver.sexy: could not connect to host kgb.us: could not connect to host kidbacker.com: could not connect to host kieranweightman.me: could not connect to host kievradio.com: could not connect to host kikuzuki.org: could not connect to host kinepolis-studio.ga: could not connect to host kingbird.me: could not connect to host @@ -1322,17 +1318,16 @@ konventseliten.se: could not connect to kopfsalat.eu: could not connect to host koppelvlak.net: could not connect to host kotitesti.fi: could not connect to host kotorimusic.ga: could not connect to host kozmik.co: could not connect to host krampus-fischamend.at: could not connect to host kriegskindernothilfe.de: could not connect to host kruin.net: could not connect to host -ksero.center: could not connect to host ktube.yt: could not connect to host kubusadvocaten.nl: could not connect to host kuko-crews.org: could not connect to host kwikmed.eu: could not connect to host kwipi.com: could not connect to host kyberna.xyz: could not connect to host kyle.place: could not connect to host kylerwood.com: could not connect to host @@ -1454,16 +1449,17 @@ luxvacuos.net: could not connect to host m-generator.com: could not connect to host m4570.xyz: could not connect to host m4g.ru: could not connect to host maartenterpstra.xyz: could not connect to host mach-politik.ch: could not connect to host madeintucson.org: could not connect to host madnetwork.org: could not connect to host madusecurity.com: could not connect to host +magicball.co: could not connect to host magnacumlaude.co: could not connect to host maik-mahlow.de: could not connect to host mail4geek.com: could not connect to host mailon.ga: could not connect to host makeit-so.de: could not connect to host makeuplove.nl: could not connect to host malamutedoalasca.com.br: could not connect to host malesbdsm.com: could not connect to host @@ -1520,25 +1516,27 @@ meetings2.com: could not connect to host megadrol.com: could not connect to host meizufans.eu: could not connect to host melenchatsmelenchiens.fr: could not connect to host melhorproduto.com.br: could not connect to host melodic.com.au: could not connect to host melody-lyrics.com: could not connect to host melonstudios.net: could not connect to host melpomene.me: could not connect to host +melted.me: could not connect to host melvinlammerts.nl: could not connect to host +memdoc.org: could not connect to host memepasmal.org: could not connect to host menchez.me: could not connect to host menzaijia.com: could not connect to host mercanix.co.uk: could not connect to host metaether.net: could not connect to host +meterhost.com: could not connect to host metrix-money-ptc.com: could not connect to host metrix.design: could not connect to host -meupedido.online: could not connect to host mexior.nl: could not connect to host meyeraviation.com: could not connect to host michaelcullen.name: could not connect to host michaelkuchta.me: could not connect to host michaelsulzer.com: could not connect to host michaelsulzer.eu: could not connect to host michasfahrschule.com: could not connect to host microblading.pe: could not connect to host @@ -1601,20 +1599,18 @@ movie4k.fyi: could not connect to host movie4k.life: could not connect to host moving-pixtures.de: could not connect to host mowalls.net: could not connect to host mozzilla.cz: could not connect to host mpserver12.org: could not connect to host mrafrohead.com: could not connect to host mrizzio.com: could not connect to host mrliu.me: could not connect to host -msa-aesch.ch: could not connect to host msgallery.tk: could not connect to host msz-fotografie.de: could not connect to host -mtb.wtf: could not connect to host mtirc.co: could not connect to host mtn.cc: could not connect to host muchohentai.com: could not connect to host muj-svet.cz: could not connect to host multivpn.fr: could not connect to host munduch.cz: could not connect to host murmel.it: could not connect to host murraycoin.org: could not connect to host @@ -1623,16 +1619,17 @@ murz.tv: could not connect to host mushman.tk: could not connect to host muslimbanter.co.za: could not connect to host mxawei.cn: could not connect to host mxlife.org: could not connect to host my-demo.co: could not connect to host my-dick.ru: could not connect to host my-dns.co.il: could not connect to host my-floor.com: could not connect to host +myblockchain.cloud: could not connect to host mycamda.com: could not connect to host myfappening.org: could not connect to host myfunworld.de: could not connect to host mygreatjob.eu: could not connect to host mykeepsake.xyz: could not connect to host myndcommunication.com: could not connect to host mytravelblog.de: could not connect to host mzlog.win: could not connect to host @@ -1641,24 +1638,23 @@ naano.org: could not connect to host namaleaks.com: could not connect to host namikawatetsuji.jp: could not connect to host naphex.rocks: could not connect to host nasmocopati.com: could not connect to host nastysclaw.com: could not connect to host nataniel-perissier.fr: could not connect to host natur-udvar.hu: could not connect to host natuterra.com.br: could not connect to host -nba2k.cn: could not connect to host -nba2k.com.cn: could not connect to host ncdesigns-studio.com: could not connect to host ndtblog.com: could not connect to host necesitodinero.org: could not connect to host necio.ca: could not connect to host neer.io: could not connect to host nekoku.io: could not connect to host +nekolove.jp: could not connect to host nerdjokes.de: could not connect to host nerfroute.com: could not connect to host nestone.ru: could not connect to host netbuzz.ru: could not connect to host netica.fr: could not connect to host netscaler.expert: could not connect to host netsight.org: could not connect to host netsystems.pro: could not connect to host @@ -1672,20 +1668,22 @@ nexusconnectinternational.eu: could not nexuscorporation.in: could not connect to host nfluence.org: could not connect to host ngiemboon.net: could not connect to host nginxyii.tk: could not connect to host ngocuong.net: could not connect to host nicoleoquendo.com: could not connect to host nienfun.com: could not connect to host nikksno.io: could not connect to host +niklas.pw: could not connect to host nikobradshaw.com: could not connect to host nikolasbradshaw.com: could not connect to host nimidam.com: could not connect to host ninofink.com: could not connect to host +ninreiei.jp: could not connect to host niouininon.eu: could not connect to host nippon.fr: could not connect to host nirada.info: could not connect to host nishikino-maki.com: could not connect to host nkadvertising.online: could not connect to host nodelab-it.de: could not connect to host nodeselect.com: could not connect to host noelblog.ga: could not connect to host @@ -1707,27 +1705,27 @@ nsmail.cn: could not connect to host nudel.ninja: could not connect to host nulltime.net: could not connect to host nyanpasu.tv: could not connect to host oaksbloom.com: could not connect to host obdolbacca.ru: could not connect to host oberam.de: could not connect to host oberhof.co: could not connect to host observatory.se: could not connect to host +ocapic.com: could not connect to host ocsr.nl: could not connect to host octo.im: could not connect to host oducs.org: could not connect to host off-the-clock.us: could not connect to host offgames.pro: could not connect to host office-ruru.com: could not connect to host oinky.ddns.net: could not connect to host okusiassociates.com: could not connect to host oldtimer-trifft-flugplatz.de: could not connect to host oliverspringer.eu: could not connect to host -omarh.net: could not connect to host oneazcu.com: could not connect to host onewebdev.info: could not connect to host onsennuie.fr: could not connect to host onsite4u.de: could not connect to host onstud.com: could not connect to host onwie.fr: could not connect to host ooeste.com: could not connect to host openclub24.ru: could not connect to host @@ -1765,17 +1763,16 @@ pastie.se: could not connect to host patrickbusch.net: could not connect to host patrickneuro.de: could not connect to host paulshir.com: could not connect to host paulshir.is: could not connect to host paveljanda.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 116" data: no] pay.ubuntu.com: could not connect to host paymon.tj: could not connect to host paypod.org: could not connect to host -paytm.in: could not connect to host pbcknd.ml: could not connect to host pbscreens.com: could not connect to host pbytes.com: could not connect to host pcvirusclear.com: could not connect to host pear2pear.de: could not connect to host peerless.ae: could not connect to host peirong.me: could not connect to host pemagrid.org: could not connect to host @@ -1838,16 +1835,17 @@ potlytics.com: could not connect to host potterscraftcider.com: could not connect to host pouets.ovh: could not connect to host poupatempo.org: could not connect to host povesham.tk: could not connect to host powerentertainment.tv: could not connect to host poy-tech.com: could not connect to host ppoozl.com: could not connect to host precedecaritas.com.br: could not connect to host +prekladysanca.cz: could not connect to host premioambiente.it: could not connect to host pretty.hu: could not connect to host prettytunesapp.com: could not connect to host prifo.se: could not connect to host princessbackpack.de: could not connect to host printsos.com: could not connect to host prism-communication.com: could not connect to host privacymanatee.com: could not connect to host @@ -1896,20 +1894,20 @@ pythia.nz: could not connect to host pyzlnar.com: could not connect to host qforum.org: could not connect to host qikan.net: could not connect to host qnatek.org: could not connect to host qoqo.us: could not connect to host qqvips.com: could not connect to host qrlfinancial.com: could not connect to host qto.net: could not connect to host -queminventou.com.br: could not connect to host quietus.gq: could not connect to host quikpay.com.au: could not connect to host r-cut.fr: could not connect to host +r0t.co: could not connect to host r40.us: could not connect to host racasdecachorro.org: could not connect to host rackblue.com: could not connect to host radtke.bayern: could not connect to host rainbin.com: could not connect to host ranos.org: could not connect to host ravengergaming.net: could not connect to host ravse.dk: could not connect to host @@ -1958,17 +1956,16 @@ riceglue.com: could not connect to host richardb.me: could not connect to host richeza.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 116" data: no] rickmartensen.nl: could not connect to host righteousendeavour.com: could not connect to host riversideauto.net: could not connect to host riverstyxgame.com: could not connect to host rkc-hygrotherm.de: could not connect to host rmstudio.tw: could not connect to host -roave.com: could not connect to host robi-net.it: could not connect to host robomonkey.org: could not connect to host robust.ga: could not connect to host rodehutskors.net: could not connect to host rofrank.space: could not connect to host roguesignal.net: could not connect to host rolandszabo.com: could not connect to host romanticschemermovie.com: could not connect to host @@ -1984,16 +1981,17 @@ rotterdamjazz.info: could not connect to royzez.com: could not connect to host rozalynne-dawn.ga: could not connect to host rpasafrica.com: could not connect to host rs-devdemo.host: could not connect to host rsldb.com: could not connect to host rtc.fun: could not connect to host rubbix.net: could not connect to host rubendv.be: could not connect to host +ruflay.ru: could not connect to host ruhr3.de: could not connect to host run-forrest.run: could not connect to host runcarina.com: could not connect to host rundumcolumn.xyz: could not connect to host ruurdboomsma.nl: could not connect to host rzegroup.com: could not connect to host s0923.com: could not connect to host s16e.no: could not connect to host @@ -2027,18 +2025,20 @@ schmidttulskie.de: could not connect to schnapke.name: could not connect to host schul-bar.de: could not connect to host scib.tk: could not connect to host sciencemonster.co.uk: could not connect to host scintillating.stream: could not connect to host scitopia.me: could not connect to host scm-2017.org: could not connect to host scottainslie.me.uk: could not connect to host +scriptgates.ru: could not connect to host scripthost.org: could not connect to host scriptjunkie.us: could not connect to host +scruffymen.com: could not connect to host sctm.at: could not connect to host seanationals.org: could not connect to host seankilgarriff.com: could not connect to host searx.pw: could not connect to host sebastian-lutsch.de: could not connect to host sebi.cf: could not connect to host secitem.de: could not connect to host sectest.ml: could not connect to host @@ -2047,25 +2047,28 @@ secure-automotive-cloud.org: could not c secureindia.co: could not connect to host security.xn--q9jyb4c: could not connect to host securitymap.wiki: could not connect to host securitysoapbox.com: could not connect to host securitytalk.pl: could not connect to host securon.io: could not connect to host securoswiss.ch: could not connect to host seefirm.com: could not connect to host +seehimnaked.com: could not connect to host +seehisnudes.com: could not connect to host seekthe.net: could not connect to host seen.life: could not connect to host selent.me: could not connect to host seleondar.ru: could not connect to host selfhosters.com: could not connect to host selfmade4u.de: could not connect to host selfserverx.com: could not connect to host sellmoretires.com: could not connect to host seoscribe.net: could not connect to host +serkaneles.com: could not connect to host servecrypt.net: could not connect to host servecrypt.ru: could not connect to host serverlauget.no: could not connect to host servfefe.com: could not connect to host seryovpn.com: could not connect to host sesha.co.za: could not connect to host sexshopfacil.com.br: could not connect to host sgtsnookums.net: could not connect to host @@ -2088,16 +2091,17 @@ shh.sh: could not connect to host shinko-osaka.jp: could not connect to host shirakaba-cc.com: could not connect to host shred.ch: could not connect to host shredoptics.ch: could not connect to host shurita.org: could not connect to host shuzicai.cn: could not connect to host shymeck.pw: could not connect to host siamega.com: could not connect to host +sickfile.com: could not connect to host siebens.net: could not connect to host signosquecombinam.com.br: could not connect to host siirtutkusu.com: could not connect to host sijmenschoon.nl: could not connect to host siku.pro: could not connect to host silqueskineyeserum.com: could not connect to host silverback.is: could not connect to host silverstartup.sk: could not connect to host @@ -2140,16 +2144,17 @@ sogravatas.net.br: could not connect to sojingle.net: could not connect to host soldout-app.com: could not connect to host solymar.co: could not connect to host somali-derp.com: could not connect to host sonafe.info: could not connect to host sonja-kowa.de: could not connect to host sorenam.com: could not connect to host sortaweird.net: could not connect to host +soulema.com: could not connect to host sourcecode.love: could not connect to host sowingseasons.com: could not connect to host sowncloud.de: could not connect to host sp.rw: could not connect to host spam.lol: could not connect to host spanien.guide: could not connect to host sparkbase.cn: could not connect to host spartantheatre.org: could not connect to host @@ -2221,17 +2226,16 @@ svj-stochovska.cz: could not connect to svjvn.cz: could not connect to host swacp.com: could not connect to host swaggerdile.com: could not connect to host sweetlegs.jp: could not connect to host sweetll.me: could not connect to host sweetvanilla.jp: could not connect to host swfloshatraining.com: could not connect to host swissentreprises.ch: could not connect to host -swordfighting.net: could not connect to host sydney-sehen.com: could not connect to host syhost.at: could not connect to host syncaddict.net: could not connect to host syncmylife.net: could not connect to host synergisticsoccer.com: could not connect to host sysert.tv: could not connect to host system12.pl: could not connect to host t3rror.net: could not connect to host @@ -2252,16 +2256,17 @@ tcpweb.net: could not connect to host tdelmas.eu: could not connect to host tdelmas.ovh: could not connect to host tdsb.cf: could not connect to host tdsbhack.tk: could not connect to host teacherph.net: could not connect to host team-pancake.eu: could not connect to host tebieer.com: could not connect to host techask.it: could not connect to host +techcultivation.de: could not connect to host techiehall.com: could not connect to host technoinfogroup.it: could not connect to host techunit.org: could not connect to host tektoria.de: could not connect to host telekollektiv.org: could not connect to host tempus-aquilae.de: could not connect to host tenispopular.com: could not connect to host terlindung.com: could not connect to host @@ -2296,17 +2301,16 @@ theprincegame.com: could not connect to theprivacysolution.com: could not connect to host thequillmagazine.org: could not connect to host thermique.ch: could not connect to host thesecondsposts.com: could not connect to host thesehighsandlows.com: could not connect to host theserver201.tk: could not connect to host thetapirsmouth.com: could not connect to host thevoid.one: could not connect to host -thewebdexter.com: could not connect to host thingies.site: could not connect to host thinkcash.nl: could not connect to host thismumdoesntknowbest.com: could not connect to host threatcentral.io: could not connect to host tianxicaipiao.com: could not connect to host tianxicaipiao.win: could not connect to host tianxicp.com: could not connect to host tibbitshall.ca: could not connect to host @@ -2343,20 +2347,20 @@ track.plus: could not connect to host trackingstream.com: could not connect to host trainhornforums.com: could not connect to host trainline.io: could not connect to host transcendmotor.sg: could not connect to host transmithe.net: could not connect to host travotion.com: could not connect to host treker.us: could not connect to host triageo.com.au: could not connect to host +trickedguys.com: could not connect to host triddi.com: could not connect to host tristanfarkas.one: could not connect to host trush.in: could not connect to host -tryfm.net: could not connect to host trynowrinkleseyeserum.com: could not connect to host tryti.me: could not connect to host tsaro.io: could not connect to host tsdom.net: could not connect to host tsumi.moe: could not connect to host tsura.org: could not connect to host tsurezurematome.ga: could not connect to host tucidi.net: could not connect to host @@ -2366,19 +2370,21 @@ turismo.cl: could not connect to host turkiet.guide: could not connect to host turn-sticks.com: could not connect to host tutiendaroja.com: could not connect to host tutiendarosa.com: could not connect to host tutoragency.org: could not connect to host tuxhound.org: could not connect to host twem.ddns.net: could not connect to host twinkieman.com: could not connect to host +twinkseason.com: could not connect to host twiri.net: could not connect to host twittelzie.nl: could not connect to host twitter.ax: could not connect to host +tworaz.net: could not connect to host twotube.ie: could not connect to host twuni.org: could not connect to host tykoon.com: could not connect to host tyler.rs: could not connect to host tylerharcourt.ca: could not connect to host tylerharcourt.com: could not connect to host tylerharcourt.net: could not connect to host tylerharcourt.org: could not connect to host @@ -2522,17 +2528,16 @@ westcanal.net: could not connect to host wetthost.com: could not connect to host weyland.tech: could not connect to host wg-tools.de: could not connect to host whereisjason.com: could not connect to host whereismyorigin.cf: could not connect to host wherephoto.com: could not connect to host whilsttraveling.com: could not connect to host whiskynerd.ca: could not connect to host -whitworth.nyc: could not connect to host whoneedstobeprimaried.today: could not connect to host whyy.eu.org: could not connect to host wibuw.com: could not connect to host wilfrid-calixte.fr: could not connect to host wilhelm-nathan.de: could not connect to host willkommen-fuerstenberg.de: could not connect to host winnersports.co: could not connect to host winsufi.biz: could not connect to host @@ -2586,53 +2591,55 @@ xn--thorme-6uaf.ca: could not connect to xn--vck8crc010pu14e.biz: could not connect to host xn--y8j2eb5631a4qf5n0h.com: could not connect to host xn--yj8h0m.ws: could not connect to host xn--ykrp42k.com: could not connect to host xpwn.cz: could not connect to host xtom.io: could not connect to host xtzone.be: could not connect to host xuntaosms.com: could not connect to host -xuntier.ch: could not connect to host xwaretech.info: could not connect to host +xy1919.com: could not connect to host xyfun.net: could not connect to host y3451.com: could not connect to host yabrt.cn: could not connect to host yahoo.ax: could not connect to host yarchives.jp: could not connect to host yaucy.win: could not connect to host -ybresson.com: could not connect to host yd.io: could not connect to host yellowcar.website: could not connect to host yemalu.com: could not connect to host yemekbaz.az: could not connect to host yepbitcoin.com: could not connect to host yesfone.com.br: could not connect to host yggdar.ga: could not connect to host yhori.xyz: could not connect to host yibin0831.com: could not connect to host ying299.com: could not connect to host ying299.net: could not connect to host yinga.ga: could not connect to host ylk.io: could not connect to host yobbelwobbel.de: could not connect to host yobst.tk: could not connect to host yoga.is-an-engineer.com: could not connect to host +yogananda-roma.org: could not connect to host yolo-csgo.com: could not connect to host yoticonnections.com: could not connect to host yotilabs.com: could not connect to host yourznc.com: could not connect to host yousite.by: could not connect to host yude.ml: could not connect to host +yugege.cf: could not connect to host yum.beer: could not connect to host yumli.net: could not connect to host yux.fr: could not connect to host z-coder.com: could not connect to host z0rro.net: could not connect to host zachbolinger.com: could not connect to host +zaem.tv: could not connect to host zaoext.com: could not connect to host zbchen.com: could not connect to host zbp.at: could not connect to host zdbl.de: could not connect to host zehdenick-bleibt-bunt.de: could not connect to host zeloz.xyz: could not connect to host zenghx.tk: could not connect to host zero-x-baadf00d.com: could not connect to host @@ -2682,22 +2689,20 @@ 0x0a.net: could not connect to host 0x1337.eu: could not connect to host 0x44.net: could not connect to host 0x4b0c131e.pub: could not connect to host 0x539.pw: could not connect to host 0x90.fi: could not connect to host 0xa.in: could not connect to host 0xb612.org: could not connect to host 0xcafec0.de: did not receive HSTS header -0xdc.io: did not receive HSTS header 1017scribes.com: could not connect to host 1018hosting.nl: did not receive HSTS header 1022996493.rsc.cdn77.org: could not connect to host 1091.jp: could not connect to host -10ppm.com: did not receive HSTS header 10seos.com: did not receive HSTS header 10tacle.io: could not connect to host 12.net: did not receive HSTS header 120dayweightloss.com: could not connect to host 123.gg: could not connect to host 123movies.fyi: did not receive HSTS header 123share.org: did not receive HSTS header 123test.de: did not receive HSTS header @@ -2741,36 +2746,37 @@ 25daysof.io: could not connect to host 2859cc.com: could not connect to host 2acbi-asso.fr: did not receive HSTS header 2bizi.ru: could not connect to host 2brokegirls.org: could not connect to host 2carpros.com: did not receive HSTS header 2intermediate.co.uk: did not receive HSTS header 2or3.tk: could not connect to host 2smart4food.com: did not receive HSTS header -2ss.jp: could not connect to host +2ss.jp: did not receive HSTS header 300651.ru: did not receive HSTS header 300mbmovie24.com: could not connect to host 300mbmovies4u.cc: could not connect to host 301.website: could not connect to host 302.nyc: could not connect to host 314166.com: could not connect to host 314chan.org: did not receive HSTS header 32ph.com: could not connect to host 33836.com: did not receive HSTS header 33drugstore.com: did not receive HSTS header -341.mg: did not receive HSTS header +341.mg: could not connect to host 3555aa.com: could not connect to host 35792.de: could not connect to host 360gradus.com: did not receive HSTS header 365.or.jp: could not connect to host 368mibn.com: could not connect to host 3778xl.com: did not receive HSTS header 38sihu.com: could not connect to host 39sihu.com: could not connect to host +3ags.de: did not receive HSTS header 3chit.cf: could not connect to host 3click-loan.com: could not connect to host 3d-bastler.de: could not connect to host 3dcart.com: did not receive HSTS header 3delivered.com: could not connect to host 3dproteinimaging.com: did not receive HSTS header 3fl.com: did not receive HSTS header 3mbo.de: did not receive HSTS header @@ -3075,16 +3081,17 @@ alphagamers.net: did not receive HSTS he alphalabs.xyz: could not connect to host als-hardware.co.za: did not receive HSTS header alspolska.pl: max-age too low: 2592000 alt33c3.org: could not connect to host altailife.ru: did not receive HSTS header altamarea.se: could not connect to host alteqnia.com: could not connect to host altfire.ca: could not connect to host +altitudemoversdenver.com: did not receive HSTS header altmv.com: max-age too low: 7776000 aluminium-scaffolding.co.uk: could not connect to host alunjam.es: did not receive HSTS header alusta.co: could not connect to host am8888.top: could not connect to host amadoraslindas.com: did not receive HSTS header amandaonishi.com: could not connect to host amavis.org: did not receive HSTS header @@ -3451,16 +3458,17 @@ bakkerdesignandbuild.com: did not receiv balatoni-nyar.hu: did not receive HSTS header balcan-underground.net: could not connect to host baldwinkoo.com: could not connect to host baleares.party: could not connect to host balihai.com: did not receive HSTS header balloonphp.com: could not connect to host ballparkbuns.com: max-age too low: 86400 balnearionaturaspa.com: did not receive HSTS header +bals.org: did not receive HSTS header bambooforest.nl: could not connect to host bambumania.com.br: could not connect to host bananabandy.com: could not connect to host banbanchs.com: could not connect to host banchethai.com: could not connect to host bandb.xyz: could not connect to host bandrcrafts.com: did not receive HSTS header banduhn.com: did not receive HSTS header @@ -3633,16 +3641,17 @@ billin.net: did not receive HSTS header billkiss.com: could not connect to host billninja.com: did not receive HSTS header billrusling.com: could not connect to host bimbo.com: did not receive HSTS header bimbo.com.ar: max-age too low: 86400 bimbobakeriesusa.com: max-age too low: 86400 binaryfigments.com: max-age too low: 86400 binderapp.net: could not connect to host +binfind.com: did not receive HSTS header bingcheung.org: did not receive HSTS header bioespuna.eu: did not receive HSTS header biofam.ru: did not receive HSTS header bioknowme.com: did not receive HSTS header bionicspirit.com: could not connect to host biophysik-ssl.de: did not receive HSTS header birgitandmerlin.com: did not receive HSTS header birkman.com: could not connect to host @@ -3706,17 +3715,17 @@ blackpayment.ru: could not connect to ho blackunicorn.wtf: could not connect to host bladesmith.io: did not receive HSTS header blakerandall.xyz: could not connect to host blauwwit.be: did not receive HSTS header blendlecdn.com: could not connect to host blenheimchalcot.com: did not receive HSTS header blessnet.jp: did not receive HSTS header blha303.com.au: could not connect to host -bliesekow.net: did not receive HSTS header +bliesekow.net: could not connect to host blindsexdate.nl: did not receive HSTS header blitzprog.org: did not receive HSTS header blmiller.com: could not connect to host blocksatz-medien.de: could not connect to host blog-ritaline.com: could not connect to host blog.coffee: could not connect to host blog.cyveillance.com: did not receive HSTS header blog.torproject.org: max-age too low: 1000 @@ -3739,17 +3748,17 @@ blucas.org: did not receive HSTS header blue17.co.uk: did not receive HSTS header bluebill.net: did not receive HSTS header bluecon.eu: did not receive HSTS header bluefrag.com: did not receive HSTS header blueglobalmedia.com: could not connect to host blueliv.com: did not receive HSTS header bluescloud.xyz: could not connect to host bluetenmeer.com: did not receive HSTS header -bluketing.com: did not receive HSTS header +bluketing.com: could not connect to host bluserv.net: could not connect to host bluteklab.com: did not receive HSTS header blutroyal.de: could not connect to host bm-trading.nl: did not receive HSTS header bnhlibrary.com: did not receive HSTS header board-buy.ru: could not connect to host bobiji.com: did not receive HSTS header bodo-wolff.de: could not connect to host @@ -3784,17 +3793,16 @@ borderlinegroup.com: could not connect t boringsecurity.net: could not connect to host boris.one: did not receive HSTS header borisavstankovic.rs: could not connect to host borrelioz.com: did not receive HSTS header borscheid-wenig.com: did not receive HSTS header boschee.net: could not connect to host botox.bz: did not receive HSTS header botstack.host: did not receive HSTS header -bottineauneighborhood.org: did not receive HSTS header bounceboxspc.com: did not receive HSTS header bouncecoffee.com: did not receive HSTS header bouncelanduk.co.uk: did not receive HSTS header bouncemasters.co.uk: did not receive HSTS header bouncycastleandparty.co.uk: did not receive HSTS header bourhis.info: did not receive HSTS header bouwbedrijfpurmerend.nl: did not receive HSTS header bowlroll.net: max-age too low: 0 @@ -3848,17 +3856,17 @@ britzer-toner.de: did not receive HSTS h brix.ninja: did not receive HSTS header brks.xyz: could not connect to host broken-oak.com: could not connect to host brookechase.com: did not receive HSTS header brownlawoffice.us: did not receive HSTS header browserid.org: could not connect to host brrd.io: did not receive HSTS header brunix.net: did not receive HSTS header -brunohenc.from.hr: did not receive HSTS header +brunohenc.from.hr: could not connect to host brunoonline.co.uk: could not connect to host bryanshearer.accountant: did not receive HSTS header bryn.xyz: could not connect to host bs12v.ru: did not receive HSTS header bsagan.fr: did not receive HSTS header bsdtips.com: could not connect to host bsklabels.com: did not receive HSTS header bsohoekvanholland.nl: did not receive HSTS header @@ -3918,17 +3926,16 @@ businesshosting.nl: did not receive HSTS businessloanconnection.org: did not receive HSTS header busold.ws: could not connect to host bustimes.org.uk: did not receive HSTS header butchersworkshop.com: did not receive HSTS header butian518.com: did not receive HSTS header buttercoin.com: could not connect to host butterfieldstraining.com: could not connect to host buvinghausen.com: max-age too low: 86400 -buyaccessible.gov: did not receive HSTS header buybaby.eu: could not connect to host buyfox.de: did not receive HSTS header buynowdepot.com: did not receive HSTS header buzzconcert.com: did not receive HSTS header buzztelco.com.au: did not receive HSTS header bw81.xyz: could not connect to host bwear4all.de: could not connect to host bx-web.com: did not receive HSTS header @@ -4048,18 +4055,20 @@ casinostest.com: could not connect to ho casioshop.eu: did not receive HSTS header casjay.cloud: did not receive HSTS header casovi.cf: could not connect to host castagnonavocats.com: did not receive HSTS header cata.ga: could not connect to host catalin.pw: could not connect to host catarsisvr.com: could not connect to host catchers.cc: did not receive HSTS header +catharisme.eu: did not receive HSTS header catinmay.com: could not connect to host catnapstudios.com: could not connect to host +catuniverse.org: did not receive HSTS header cavaleria.ro: did not receive HSTS header caveclan.org: did not receive HSTS header cavedevs.de: could not connect to host cavedroid.xyz: could not connect to host cavern.tv: did not receive HSTS header cayafashion.de: did not receive HSTS header cayounglab.co.jp: did not receive HSTS header cbengineeringinc.com: max-age too low: 86400 @@ -4071,17 +4080,17 @@ cd0.us: could not connect to host cdkeyworld.de: did not receive HSTS header cdnb.co: could not connect to host cdndepo.com: could not connect to host cdreporting.co.uk: did not receive HSTS header cdt.org: did not receive HSTS header ce-agentur.de: did not receive HSTS header cecilwalker.com.au: did not receive HSTS header celeirorural.com.br: did not receive HSTS header -celina-reads.de: did not receive HSTS header +celina-reads.de: could not connect to host cellsites.nz: could not connect to host centennialrewards.com: did not receive HSTS header centralpoint.be: did not receive HSTS header centralpoint.nl: did not receive HSTS header centralvacsunlimited.net: did not receive HSTS header centralync.com: could not connect to host centrepoint-community.com: could not connect to host centsforchange.net: could not connect to host @@ -4304,17 +4313,17 @@ codepoet.de: did not receive HSTS header codepx.com: did not receive HSTS header codewiththepros.org: could not connect to host codigosddd.com.br: did not receive HSTS header coding.net: did not receive HSTS header coffeeetc.co.uk: max-age too low: 7889238 coffeestrategies.com: max-age too low: 5184000 cogniflex.com: did not receive HSTS header cohesive.io: did not receive HSTS header -coinbit.trade: could not connect to host +coinbit.trade: did not receive HSTS header coindam.com: could not connect to host coisasdaterra.com: max-age too low: 0 colasjourdain.fr: did not receive HSTS header coldlostsick.net: could not connect to host colearnr.com: could not connect to host collablynk.com: did not receive HSTS header collabra.email: did not receive HSTS header collard.tk: did not receive HSTS header @@ -4372,16 +4381,18 @@ connectingconcepts.com: did not receive conrail.blue: did not receive HSTS header consciousandglamorous.com: could not connect to host consciousbrand.org.au: could not connect to host consciousbranding.org.au: could not connect to host consciousbrands.net.au: could not connect to host consejosdehogar.com: did not receive HSTS header console.python.org: did not receive HSTS header console.support: did not receive HSTS header +construct-trust.com: did not receive HSTS header +consultorcr.net: did not receive HSTS header contactbig.com: did not receive HSTS header contaimo.com: did not receive HSTS header container-lion.com: did not receive HSTS header containerstatistics.com: could not connect to host contarkos.xyz: could not connect to host content-design.de: did not receive HSTS header continuumgaming.com: could not connect to host controlcenter.gigahost.dk: did not receive HSTS header @@ -4389,17 +4400,16 @@ controleer-maar-een-ander.nl: did not re convergemagazine.com: did not receive HSTS header convert.zone: did not receive HSTS header cooink.net: could not connect to host coolaj86.com: did not receive HSTS header coolbutbroken.com: did not receive HSTS header coolchevy.org.ua: did not receive HSTS header coole-meister.de: could not connect to host coolkidsbouncycastles.co.uk: did not receive HSTS header -coolvox.com: did not receive HSTS header coonelnel.net: did not receive HSTS header cooxa.com: did not receive HSTS header copshop.com.br: could not connect to host cor-ser.es: could not connect to host coralproject.net: did not receive HSTS header coralrosado.com.br: did not receive HSTS header coramcdaniel.com: did not receive HSTS header corderoscleaning.com: did not receive HSTS header @@ -4488,16 +4498,17 @@ cryptobin.org: could not connect to host cryptodash.net: could not connect to host cryptojar.io: could not connect to host cryptolab.pro: could not connect to host cryptolab.tk: could not connect to host cryptopartyatx.org: could not connect to host cryptopush.com: did not receive HSTS header crysadm.com: could not connect to host crystalclassics.co.uk: did not receive HSTS header +crystalmachine.net: did not receive HSTS header crystalmate.eu: did not receive HSTS header cs-ubladego.pl: could not connect to host csapak.com: did not receive HSTS header csawctf.poly.edu: could not connect to host csfs.org.uk: could not connect to host csgf.ru: did not receive HSTS header csgodicegame.com: did not receive HSTS header csgoelemental.com: could not connect to host @@ -4510,19 +4521,19 @@ cssu.in: did not receive HSTS header csvape.com: did not receive HSTS header ct-status.org: could not connect to host ct-watches.dk: did not receive HSTS header cthulhuden.com: could not connect to host ctrl.blog: did not receive HSTS header cu247secure.ie: did not receive HSTS header cuanhua3s.com: did not receive HSTS header cubecart.net: could not connect to host -cubekrowd.net: did not receive HSTS header cubeserver.eu: could not connect to host cubewano.com: could not connect to host +cubia.de: did not receive HSTS header cubix.host: did not receive HSTS header cucc.date: did not receive HSTS header cuecamania.com.br: could not connect to host cujanovic.com: did not receive HSTS header cujba.com: could not connect to host culinae.nl: could not connect to host cumparama.com: did not receive HSTS header cumshots-video.ru: could not connect to host @@ -4537,19 +4548,17 @@ custe.rs: could not connect to host customadesign.com: did not receive HSTS header cutelariafiveladeouro.com.br: did not receive HSTS header cutorrent.com: could not connect to host cuvva.insure: did not receive HSTS header cvjm-memmingen.de: did not receive HSTS header cvtparking.co.uk: did not receive HSTS header cwage.com: could not connect to host cyanogenmod.xxx: could not connect to host -cyber-konzept.de: did not receive HSTS header cybercecurity.com: did not receive HSTS header -cyberfrancais.ro: did not receive HSTS header cyberlab.kiev.ua: did not receive HSTS header cyberlab.team: did not receive HSTS header cyberpunk.ca: could not connect to host cybersafesolutions.com: did not receive HSTS header cybershambles.com: could not connect to host cycleluxembourg.lu: did not receive HSTS header cyclingjunkies.com: could not connect to host cydia-search.io: could not connect to host @@ -4644,17 +4653,16 @@ davidreinhardt.de: could not connect to day.vip: did not receive HSTS header daylightcompany.com: did not receive HSTS header daytonaseaside.com: could not connect to host db.gy: could not connect to host dbx.ovh: could not connect to host dbyz.co.uk: max-age too low: 43200 dcaracing.nl: could not connect to host dcbouncycastles.co.uk: did not receive HSTS header -dcc.cat: did not receive HSTS header dccode.gov: could not connect to host dccoffeeproducts.com: did not receive HSTS header dccraft.net: could not connect to host dctxf.com: did not receive HSTS header dcuofriends.net: could not connect to host dcurt.is: did not receive HSTS header dcw.io: did not receive HSTS header ddatsh.com: did not receive HSTS header @@ -4748,20 +4756,20 @@ devistravaux.org: did not receive HSTS h devlux.ch: did not receive HSTS header devmsg.com: did not receive HSTS header devnsec.com: could not connect to host devnull.team: could not connect to host devopps.me: did not receive HSTS header devopsconnected.com: could not connect to host devtub.com: did not receive HSTS header devuan.org: did not receive HSTS header +dewebwerf.nl: did not receive HSTS header dewin.io: could not connect to host dfrance.com.br: did not receive HSTS header dfviana.com.br: max-age too low: 2592000 -dggm.ru: did not receive HSTS header dhaynes.xyz: max-age too low: 2592000 dhpcs.com: did not receive HSTS header dhpiggott.net: did not receive HSTS header diablotine.rocks: could not connect to host diagnosia.com: did not receive HSTS header diagonale-deco.fr: did not receive HSTS header diamondcare.com.br: could not connect to host diamondt.us: did not receive HSTS header @@ -4893,31 +4901,32 @@ doridian.de: could not connect to host doridian.net: did not receive HSTS header doridian.org: could not connect to host doriginal.es: did not receive HSTS header dorkfarm.com: did not receive HSTS header dormebebe.com.br: could not connect to host dosenbierrepublik.com: did not receive HSTS header dot42.no: could not connect to host dotadata.me: could not connect to host +dotbrick.co.th: did not receive HSTS header dotspaperie.com: could not connect to host doublethink.online: could not connect to host doubleyummy.uk: did not receive HSTS header dovecotadmin.org: could not connect to host doveholesband.co.uk: did not receive HSTS header dovetailnow.com: could not connect to host dowc.org: did not receive HSTS header download.jitsi.org: did not receive HSTS header downsouthweddings.com.au: could not connect to host doxcelerate.com: max-age too low: 69 dps.srl: did not receive HSTS header dr-becarelli-philippe.chirurgiens-dentistes.fr: did not receive HSTS header drabim.org: did not receive HSTS header drach.xyz: did not receive HSTS header -draghive.club: could not connect to host +draghive.club: did not receive HSTS header draghive.com: did not receive HSTS header draghive.net: did not receive HSTS header draghive.photos: did not receive HSTS header dragonisles.net: could not connect to host dragons-of-highlands.cz: did not receive HSTS header dragonsmoke.cloud: could not connect to host dragonstower.net: could not connect to host dragonteam.ninja: could not connect to host @@ -4973,16 +4982,17 @@ duelysthub.com: could not connect to hos dukec.me: did not receive HSTS header dukefox.com: did not receive HSTS header dullsir.com: did not receive HSTS header dune.io: did not receive HSTS header dunea.nl: did not receive HSTS header duole30.com: did not receive HSTS header duongpho.com: did not receive HSTS header duskopy.top: could not connect to host +dutchessuganda.com: did not receive HSTS header dutchrank.com: did not receive HSTS header duuu.ch: could not connect to host duyao.de: max-age too low: 86400 dv189.com: did not receive HSTS header dycem-ns.com: did not receive HSTS header dycontrol.de: could not connect to host dylanscott.com.au: did not receive HSTS header dymersion.com: did not receive HSTS header @@ -5028,16 +5038,17 @@ ebp2p.com: did not receive HSTS header ebpglobal.com: did not receive HSTS header ebraph.com: could not connect to host ecake.in: did not receive HSTS header ecc-kaufbeuren.de: could not connect to host ecchidreams.com: did not receive HSTS header ecfs.link: could not connect to host ecg.fr: could not connect to host echipstore.com: did not receive HSTS header +echoteam.gq: did not receive HSTS header eckro.com: did not receive HSTS header ecoheatcool.co.uk: did not receive HSTS header ecole-en-danger.fr: could not connect to host ecole-maternelle-saint-joseph.be: could not connect to host ecolesrec.ch: did not receive HSTS header ecology-21.ru: did not receive HSTS header ecomlane.com: could not connect to host ecomparemo.com: did not receive HSTS header @@ -5060,16 +5071,17 @@ edissecurity.sk: did not receive HSTS he edited.de: did not receive HSTS header edix.ru: could not connect to host edk.com.tr: did not receive HSTS header edmodo.com: did not receive HSTS header edpubs.gov: did not receive HSTS header edsh.de: did not receive HSTS header educatio.tech: could not connect to host educourse.ga: could not connect to host +edudrugs.com: did not receive HSTS header eduvance.in: did not receive HSTS header eengezinswoning-in-alphen-aan-den-rijn-kopen.nl: could not connect to host eengezinswoning-in-de-friese-meren-kopen.nl: could not connect to host eengezinswoning-in-friesland-kopen.nl: could not connect to host eengezinswoning-in-leeuwarden-kopen.nl: could not connect to host eengezinswoning-in-pekela-kopen.nl: could not connect to host eengezinswoning-in-rijnwaarden-kopen.nl: could not connect to host eengezinswoning-in-sudwest-fryslan-kopen.nl: could not connect to host @@ -5221,25 +5233,26 @@ ericyl.com: could not connect to host eriel.com.br: could not connect to host erikwalther.eu: could not connect to host eriser.fr: did not receive HSTS header ernaehrungsberatung-zurich.ch: could not connect to host ernesto.at: could not connect to host eromixx.com: could not connect to host erotalia.es: could not connect to host erotic4me.ch: did not receive HSTS header -eroticforce.com: did not receive HSTS header +eroticforce.com: could not connect to host erotische-aanbiedingen.nl: could not connect to host errolz.com: could not connect to host errors.zenpayroll.com: could not connect to host ersindemirtas.com: did not receive HSTS header eru.me: did not receive HSTS header erwinvanlonden.net: did not receive HSTS header esbuilders.co.nz: did not receive HSTS header escalate.eu: could not connect to host +escapees.com: did not receive HSTS header escolaengenharia.com.br: did not receive HSTS header escortshotsexy.com: max-age too low: 2592000 escotour.com: could not connect to host escueladewordpress.com: did not receive HSTS header esec.rs: did not receive HSTS header esko.bar: could not connect to host esln.org: did not receive HSTS header esn-ypci.com: did not receive HSTS header @@ -5297,33 +5310,32 @@ evafojtova.cz: did not receive HSTS head evanhandgraaf.nl: did not receive HSTS header evdenevenakliyatankara.pw: could not connect to host evecalm.com: did not receive HSTS header evegalaxy.net: did not receive HSTS header events12.com: did not receive HSTS header eventsafrica.net: did not receive HSTS header everybooks.com: could not connect to host everydaytherich.com: max-age too low: 7776000 -everygayporn.xyz: did not receive HSTS header +everygayporn.xyz: could not connect to host everylab.org: could not connect to host everything.place: did not receive HSTS header eveseat.net: could not connect to host evi.be: did not receive HSTS header evilnerd.de: did not receive HSTS header evilsay.com: could not connect to host evin.ml: could not connect to host evites.me: could not connect to host evoludis.net: did not receive HSTS header evomon.com: could not connect to host evossd.tk: could not connect to host evowl.com: could not connect to host ewallet-optimizer.com: did not receive HSTS header ewex.org: could not connect to host excelgum.ca: did not receive HSTS header -exembit.com: did not receive HSTS header exfiles.cz: did not receive HSTS header exgravitus.com: could not connect to host exno.co: could not connect to host exoscale.ch: did not receive HSTS header exousiakaidunamis.xyz: could not connect to host experticon.com: did not receive HSTS header expertmile.com: did not receive HSTS header exploit.cz: did not receive HSTS header @@ -5353,16 +5365,17 @@ f-rickroll-g.pw: could not connect to ho f-s-u.co.uk: could not connect to host f00.ca: did not receive HSTS header f2f.cash: could not connect to host faber.io: could not connect to host fabhub.io: could not connect to host fabianfischer.de: did not receive HSTS header fabianmunoz.com: did not receive HSTS header fabriko.fr: did not receive HSTS header +facebattle.com: did not receive HSTS header facebooktsukaikata.net: did not receive HSTS header fachschaft-informatik.de: did not receive HSTS header factorable.net: did not receive HSTS header factorygw.com: did not receive HSTS header fadilus.com: could not connect to host faesser.com: did not receive HSTS header fahmed.de: did not receive HSTS header faidanoi.it: did not receive HSTS header @@ -5375,17 +5388,16 @@ faizan.net: did not receive HSTS header faizan.xyz: did not receive HSTS header fakeletters.org: did not receive HSTS header faktura.pl: did not receive HSTS header falcibiosystems.org: did not receive HSTS header falconwiz.com: did not receive HSTS header falkhusemann.de: did not receive HSTS header falkp.no: did not receive HSTS header fallenangelspirits.uk: could not connect to host -fallofthecitadel.com: did not receive HSTS header faluninfo.ba: did not receive HSTS header fame-agency.net: could not connect to host familie-sprink.de: could not connect to host familie-zimmermann.at: could not connect to host famio.cn: could not connect to host fanboi.ch: did not receive HSTS header fanflow.com: did not receive HSTS header fant.dk: did not receive HSTS header @@ -5421,16 +5433,17 @@ fbox.li: could not connect to host fdj.im: could not connect to host fdt.name: did not receive HSTS header feard.space: could not connect to host fedemo.top: did not receive HSTS header federalregister.gov: did not receive HSTS header fedo.moe: could not connect to host feedthebot.com: did not receive HSTS header feedthefuture.gov: did not receive HSTS header +feeriedesign-event.com: did not receive HSTS header feezmodo.com: did not receive HSTS header fefore.com: did not receive HSTS header fegans.org.uk: did not receive HSTS header feitobrasilcosmeticos.com.br: did not receive HSTS header feliwyn.fr: did not receive HSTS header felixrr.pro: could not connect to host femaledom.xyz: could not connect to host feminists.co: could not connect to host @@ -5555,27 +5568,25 @@ fluidojobs.com: could not connect to hos flukethoughts.com: did not receive HSTS header flurrybridge.com: did not receive HSTS header flushstudios.com: did not receive HSTS header flyaces.com: could not connect to host flybunnyfly.dk: did not receive HSTS header flygpost.com: did not receive HSTS header fm83.nl: could not connect to host fm992.com: could not connect to host -fmi.gov: did not receive HSTS header fnncat.com: did not receive HSTS header fnvsecurity.com: could not connect to host fobc-usa.org: did not receive HSTS header foerster-kunststoff.de: did not receive HSTS header fojtova.cz: did not receive HSTS header fojtovi.cz: did not receive HSTS header fokan.ch: did not receive HSTS header foliekonsulenten.dk: did not receive HSTS header folioapp.io: did not receive HSTS header -follandviolins.com: did not receive HSTS header followback.net: did not receive HSTS header fonetiq.io: could not connect to host food4health.guide: could not connect to host foodbuddy.ch: could not connect to host foodiebox.no: did not receive HSTS header foodies.my: did not receive HSTS header foodievenues.com: could not connect to host foodsafetyworkinggroup.gov: could not connect to host @@ -5592,17 +5603,16 @@ foreveralone.io: could not connect to ho forewordreviews.com: did not receive HSTS header forex-dan.com: did not receive HSTS header forgix.com: could not connect to host forlagetmarx.dk: did not receive HSTS header formazioneopen.it: could not connect to host formersessalaries.com: did not receive HSTS header formula.cf: could not connect to host forplanetsake.com: could not connect to host -fortran.io: did not receive HSTS header forty2.eu: did not receive HSTS header forus.be: could not connect to host fossewaygardencentre.co.uk: did not receive HSTS header fotiu.com: could not connect to host fotoallerlei.com: did not receive HSTS header fotocerita.net: could not connect to host fotogiraffe.ru: did not receive HSTS header fotografosexpertos.com: did not receive HSTS header @@ -5647,17 +5657,16 @@ fridaperfumaria.com.br: could not connec fridolinka.cz: could not connect to host friendica.ch: could not connect to host friendlyfiregameshow.com: could not connect to host frimons.com: could not connect to host froggstack.de: could not connect to host front-end.dog: could not connect to host frontisme.nl: did not receive HSTS header frontmin.com: did not receive HSTS header -fropky.com: did not receive HSTS header frost-ci.xyz: could not connect to host frostbytes.net: did not receive HSTS header froxlor.support: max-age too low: 0 frsis2017.com: could not connect to host fruitusers.com: could not connect to host frumious.fyi: could not connect to host fsapubs.gov: did not receive HSTS header fsinf.at: did not receive HSTS header @@ -5702,17 +5711,16 @@ futuristarchitecture.com: did not receiv fuvpn.com: could not connect to host fws.gov: did not receive HSTS header fyfywka.com: max-age too low: 86400 fyodorpi.com: did not receive HSTS header fysiohaenraets.nl: did not receive HSTS header fzn.io: did not receive HSTS header fzslm.me: could not connect to host g-i-s.vn: did not receive HSTS header -g-marketing.ro: did not receive HSTS header g-rickroll-o.pw: could not connect to host g2-inc.com: max-age too low: 600 g2a.co: did not receive HSTS header g2g.com: did not receive HSTS header g5led.nl: could not connect to host g77.ca: could not connect to host gabber.scot: could not connect to host gabi.com.es: could not connect to host @@ -5775,19 +5783,21 @@ gebn.co.uk: did not receive HSTS header gebn.uk: could not connect to host gedankenbude.info: could not connect to host geekbaba.com: could not connect to host geekcast.co.uk: did not receive HSTS header geekmind.org: max-age too low: 172800 geeks.lgbt: could not connect to host geeky.software: could not connect to host geemo.top: could not connect to host +geiser.io: did not receive HSTS header geli-graphics.com: did not receive HSTS header gemsoftheworld.org: could not connect to host gemuplay.com: could not connect to host +generalpants.com.au: did not receive HSTS header genesischangelog.com: did not receive HSTS header genneve.com: did not receive HSTS header genshiken.org: could not connect to host genuu.com: could not connect to host genuxation.com: could not connect to host genyaa.com: could not connect to host genyhitch.com: did not receive HSTS header geoffdev.com: could not connect to host @@ -5856,17 +5866,16 @@ gigacog.com: could not connect to host gigin.me: did not receive HSTS header gilcloud.com: could not connect to host gilgaz.com: did not receive HSTS header gillet-cros.fr: could not connect to host gilly.berlin: did not receive HSTS header gilroywestwood.org: did not receive HSTS header gincher.net: did not receive HSTS header gingali.de: did not receive HSTS header -ginie.de: did not receive HSTS header ginijony.com: did not receive HSTS header gintenreiter-photography.com: did not receive HSTS header giogadesign.com: did not receive HSTS header gipsamsfashion.com: could not connect to host gipsic.com: did not receive HSTS header gis3m.org: did not receive HSTS header gistfy.com: could not connect to host git-stuff.tk: could not connect to host @@ -5917,16 +5926,17 @@ goldendata.io: could not connect to host goldminer.ga: could not connect to host goldpros.com: did not receive HSTS header golocal-media.de: could not connect to host gomiblog.com: did not receive HSTS header gong8.win: could not connect to host gonzalosanchez.mx: could not connect to host goodfurday.ca: did not receive HSTS header goodmengroup.de: did not receive HSTS header +goods-memo.net: did not receive HSTS header goodtech.com.br: could not connect to host goodwin43.ru: could not connect to host googley.fr: max-age too low: 0 goolok.com: could not connect to host gootax.pro: did not receive HSTS header goozz.nl: did not receive HSTS header gopay.cz: did not receive HSTS header gopokego.cz: could not connect to host @@ -6026,25 +6036,25 @@ gts-schulsoftware.de: did not receive HS guarajubaimoveis.com.br: did not receive HSTS header guava.studio: did not receive HSTS header guentherhouse.com: did not receive HSTS header guenthernoack.de: could not connect to host guffrits.com: could not connect to host guge.gq: could not connect to host gugga.dk: could not connect to host guguke.net: did not receive HSTS header -guidetoiceland.is: did not receive HSTS header guilde-vindicta.fr: did not receive HSTS header guillaume-leduc.fr: did not receive HSTS header guillaumematheron.fr: did not receive HSTS header guineafruitcorp.com: could not connect to host gulch.in.ua: did not receive HSTS header gulenet.com: could not connect to host gulfcoast-sandbox.com: could not connect to host gumannp.de: did not receive HSTS header +gummibande.noip.me: did not receive HSTS header gunnarhafdal.com: did not receive HSTS header gunnaro.com: could not connect to host guntbert.net: could not connect to host guoqiang.info: did not receive HSTS header gurom.lv: could not connect to host gurusupe.com: could not connect to host guso.gq: could not connect to host guso.ml: could not connect to host @@ -6305,16 +6315,18 @@ homeyantra.com: did not receive HSTS hea homezhi.com.tw: did not receive HSTS header hongyd.online: could not connect to host hongzhaxiaofendui.com: could not connect to host honoo.com: could not connect to host hookandloom.com: did not receive HSTS header hoopsacademyusa.com: could not connect to host hoorr.com: did not receive HSTS header hoovism.com: did not receive HSTS header +hopewellproperties.co.uk: did not receive HSTS header +horizonmoto.fr: did not receive HSTS header horizonshypnosis.ca: did not receive HSTS header horning.co: did not receive HSTS header horosho.in: could not connect to host horseboners.xxx: did not receive HSTS header hortifarm.ro: did not receive HSTS header horvathtom.com: could not connect to host hosteasy.nl: did not receive HSTS header hostelite.com: did not receive HSTS header @@ -6376,17 +6388,17 @@ humpi.at: could not connect to host humpteedumptee.in: did not receive HSTS header huodongweb.com: could not connect to host hup.blue: could not connect to host huskybutt.dog: could not connect to host huzu.com: did not receive HSTS header hwcine.com: did not receive HSTS header hwpkasse.de: max-age too low: 2592000 hyakumachi.com: did not receive HSTS header -hyatt.com: could not connect to host +hyatt.com: did not receive HSTS header hydra.ws: could not connect to host hydrodipcenter.nl: did not receive HSTS header hydronium.cf: could not connect to host hydronium.ga: could not connect to host hydronium.me: could not connect to host hydronium.ml: could not connect to host hydronium.tk: could not connect to host hypa.net.au: did not receive HSTS header @@ -6510,16 +6522,17 @@ immunicity.works: could not connect to h immunicity.world: could not connect to host imolug.org: did not receive HSTS header imoni-blog.net: could not connect to host imoto.me: could not connect to host imperialonlinestore.com: did not receive HSTS header imperialwebsolutions.com: did not receive HSTS header imu.li: did not receive HSTS header imusic.dk: did not receive HSTS header +imy.life: did not receive HSTS header inb4.us: could not connect to host inbox.li: did not receive HSTS header incendiary-arts.com: could not connect to host inche-ali.com: did not receive HSTS header inchomatic.com: did not receive HSTS header inderagamono.net: could not connect to host indiecert.net: could not connect to host indiemods.com: could not connect to host @@ -6545,16 +6558,17 @@ info-sys.tk: could not connect to host infoduv.fr: did not receive HSTS header inforichjapan.com: did not receive HSTS header informaticapremium.com: did not receive HSTS header infosec.rip: could not connect to host infosoph.org: could not connect to host infotics.es: did not receive HSTS header infranix.eu: max-age too low: 7360000 infura.co.th: could not connect to host +ingenius.ws: did not receive HSTS header ingesol.fr: did not receive HSTS header inhelix.com: could not connect to host inhive.group: did not receive HSTS header injertoshorticolas.com: did not receive HSTS header injigo.com: did not receive HSTS header injust.cf: could not connect to host injust.ga: could not connect to host injust.gq: could not connect to host @@ -6727,17 +6741,17 @@ izolight.ch: could not connect to host izoox.com: did not receive HSTS header izzzorgconcerten.nl: could not connect to host j-eck.nl: did not receive HSTS header j-lsolutions.com: could not connect to host j-rickroll-a.pw: could not connect to host ja-publications.com: did not receive HSTS header jaan.su: could not connect to host jackalworks.com: could not connect to host -jackdoan.com: did not receive HSTS header +jackdoan.com: could not connect to host jackfahnestock.com: could not connect to host jacobparry.ca: did not receive HSTS header jacobsenarquitetura.com: max-age too low: 5184000 jagido.de: did not receive HSTS header jahliveradio.com: could not connect to host jaksi.io: did not receive HSTS header jamanji.com.ng: could not connect to host james-parker.com: did not receive HSTS header @@ -6820,18 +6834,18 @@ jenjoit.de: could not connect to host jennifercherniack.com: did not receive HSTS header jens-prangenberg.de: did not receive HSTS header jensenbanden.no: could not connect to host jenssen.org: did not receive HSTS header jeremye77.com: did not receive HSTS header jermann.biz: did not receive HSTS header jeroenseegers.com: could not connect to host jesorsenville.com: did not receive HSTS header -jessicabenedictus.nl: did not receive HSTS header jessicah.org: could not connect to host +jesuisadmin.fr: did not receive HSTS header jesuisformidable.nl: could not connect to host jesuslucas.com: did not receive HSTS header jet-code.com: could not connect to host jetaprices.com: max-age too low: 0 jetlagphotography.com: could not connect to host jeton.com: did not receive HSTS header jetsetcharge.com: could not connect to host jetsetpay.com: could not connect to host @@ -6852,17 +6866,17 @@ jief.me: did not receive HSTS header jikken.de: could not connect to host jimas.eu: did not receive HSTS header jimenacocina.com: did not receive HSTS header jimgao.tk: did not receive HSTS header jimmehcai.com: could not connect to host jimmycai.org: could not connect to host jimmycn.com: did not receive HSTS header jingyuesi.com: could not connect to host -jinmaguoji.com: could not connect to host +jinmaguoji.com: did not receive HSTS header jinshavip.com: could not connect to host jiosongs.com: did not receive HSTS header jira.com: did not receive HSTS header jirav.io: could not connect to host jisaku-homepage.com: did not receive HSTS header jitsi.org: did not receive HSTS header jiyue.com: did not receive HSTS header jjf.org.au: did not receive HSTS header @@ -7090,17 +7104,17 @@ kipin.fr: did not receive HSTS header kipira.com: could not connect to host kirainmoe.com: max-age too low: 233000 kirara.eu: could not connect to host kirkforcongress.com: did not receive HSTS header kirkforsenate.com: could not connect to host kirkpatrickdavis.com: could not connect to host kirslis.com: did not receive HSTS header kisa.io: could not connect to host -kisalt.im: could not connect to host +kisalt.im: did not receive HSTS header kiss-register.org: could not connect to host kissart.net: could not connect to host kisstyle.ru: did not receive HSTS header kita.id: did not receive HSTS header kitabgaul.com: did not receive HSTS header kitakemon.com: could not connect to host kitashop.com.br: did not receive HSTS header kitatec.com.br: could not connect to host @@ -7272,17 +7286,17 @@ land-links.org: did not receive HSTS hea landbetweenthelakes.us: did not receive HSTS header landgoedverkopen.nl: could not connect to host landhuisverkopen.nl: could not connect to host landscape.canonical.com: max-age too low: 2592000 landscapingmedic.com: did not receive HSTS header langenbach.rocks: could not connect to host langendries.eu: could not connect to host langhun.me: did not receive HSTS header -laniakean.com: could not connect to host +laniakean.com: did not receive HSTS header lansinoh.co.uk: did not receive HSTS header lanzainc.xyz: did not receive HSTS header laobox.fr: could not connect to host laplaceduvillage.net: could not connect to host laquack.com: could not connect to host laredsemanario.com: could not connect to host lasepiataca.com: did not receive HSTS header lasercloud.ml: could not connect to host @@ -7393,16 +7407,17 @@ lichess4545.com: did not receive HSTS he lichess4545.tv: did not receive HSTS header liebach.me: did not receive HSTS header liebestarot.at: did not receive HSTS header liemen.net: did not receive HSTS header life-time.nl: did not receive HSTS header lifecoachproviders.com: did not receive HSTS header lifeguard.aecom.com: did not receive HSTS header lifeinitsownway.com: could not connect to host +lifemarque.co.uk: did not receive HSTS header lifeng.us: did not receive HSTS header lifeskillsdirect.com: did not receive HSTS header lifetimemoneymachine.com: did not receive HSTS header lifeventure.co.uk: did not receive HSTS header lightarmory.com: could not connect to host lightning-ashe.com: did not receive HSTS header lightnovelsekai.com: could not connect to host lightpaste.com: could not connect to host @@ -7477,32 +7492,31 @@ localnetwork.nz: could not connect to ho locksmithrandburg24-7.co.za: could not connect to host locktheirphone.com: could not connect to host lockyourcomputer.pw: did not receive HSTS header locomotive.ca: did not receive HSTS header locvis.ru: did not receive HSTS header lodgesdureynou.fr: did not receive HSTS header loftboard.eu: could not connect to host log2n.uk: could not connect to host -loganparkneighborhood.org: did not receive HSTS header logario.com.br: could not connect to host logfile.ch: did not receive HSTS header logicaladvertising.com: could not connect to host login.persona.org: could not connect to host loginseite.com: could not connect to host logistify.com.mx: did not receive HSTS header lognot.net: could not connect to host logymedia.com: could not connect to host loisircreatif.net: did not receive HSTS header lojadocristaozinho.com.br: did not receive HSTS header lojashowdecozinha.com.br: could not connect to host lojasviavento.com.br: could not connect to host lojavalcapelli.com.br: could not connect to host loli.bz: did not receive HSTS header -loli.ski: did not receive HSTS header +loli.ski: could not connect to host lolicore.ch: could not connect to host lolidunno.com: could not connect to host loma.ml: did not receive HSTS header londoncalling.co: did not receive HSTS header londonlanguageexchange.com: could not connect to host lonerwolf.com: did not receive HSTS header longboarding-ulm.de: could not connect to host look-at-my.site: could not connect to host @@ -7553,16 +7567,17 @@ lucas-garte.com: did not receive HSTS he lucaterzini.com: could not connect to host luclu7.pw: could not connect to host lucyparsonslabs.com: did not receive HSTS header ludwig.click: did not receive HSTS header lufthansaexperts.com: max-age too low: 2592000 luis-checa.com: could not connect to host lukaszdolan.com: did not receive HSTS header lukeng.me: could not connect to host +lukeng.net: did not receive HSTS header lukonet.com: did not receive HSTS header luludapomerania.com: could not connect to host lumd.me: could not connect to host lumi.do: did not receive HSTS header lunarift.com: could not connect to host lunarrift.net: could not connect to host luneta.nearbuysystems.com: could not connect to host luno.io: could not connect to host @@ -7572,17 +7587,16 @@ luoxiao.im: could not connect to host luripump.se: could not connect to host lusis.fr: did not receive HSTS header lusis.net: did not receive HSTS header lustrumxi.nl: could not connect to host luther.fi: did not receive HSTS header luxinmo.com: did not receive HSTS header luxus-russen.de: did not receive HSTS header luzeshomologadas.com.br: could not connect to host -luzfaltex.com: did not receive HSTS header lycly.top: could not connect to host lydia-und-simon.de: could not connect to host lydiagorstein.com: could not connect to host lyonelkaufmann.ch: did not receive HSTS header lyoness.digital: did not receive HSTS header lyonl.com: did not receive HSTS header lyuba.fr: could not connect to host lzahq.tech: did not receive HSTS header @@ -7728,17 +7742,17 @@ markusweimar.de: did not receive HSTS he marlen.cz: did not receive HSTS header marleyresort.com: did not receive HSTS header maroc-bivouac.com: did not receive HSTS header marriottvetcareers.com: could not connect to host marshut.net: could not connect to host martialc.be: could not connect to host martiert.com: could not connect to host martijnvhoof.nl: could not connect to host -martin-arend.de: did not receive HSTS header +martin-arend.de: could not connect to host martinec.co.uk: could not connect to host martinestyle.com: could not connect to host martineve.com: did not receive HSTS header martinp.no: could not connect to host martinreed.net: did not receive HSTS header martinrogalla.com: did not receive HSTS header marumagic.com: did not receive HSTS header marvinkeller.de: did not receive HSTS header @@ -7821,23 +7835,21 @@ mecenat-cassous.com: did not receive HST mechmk1.me: did not receive HSTS header medallia.io: could not connect to host media-access.online: did not receive HSTS header mediacru.sh: could not connect to host mediafinancelab.org: did not receive HSTS header mediamag.am: max-age too low: 0 mediawikicn.org: could not connect to host medienservice-fritz.de: did not receive HSTS header -medifab.online: did not receive HSTS header medirich.co: could not connect to host meditek-dv.ru: could not connect to host mediterenopmaandag.nl: did not receive HSTS header medm-test.com: could not connect to host medzinenews.com: did not receive HSTS header -meedoennoordkop.nl: could not connect to host meedoenzaanstad.nl: did not receive HSTS header meetfinch.com: could not connect to host meetingmanage.nl: did not receive HSTS header meetingmanager.ovh: did not receive HSTS header meetscompany.jp: did not receive HSTS header megakiste.de: could not connect to host megashur.se: did not receive HSTS header meghudson.com: could not connect to host @@ -7857,17 +7869,16 @@ melodiouscode.net: did not receive HSTS melted.pw: could not connect to host melvinlow.com: did not receive HSTS header memberpress.com: did not receive HSTS header members.mayfirst.org: did not receive HSTS header memeblast.ninja: could not connect to host memory-plus-180.com: could not connect to host memorygame.io: did not receive HSTS header memorytrace.space: could not connect to host -menotag.com: did not receive HSTS header mensachterdepatient.nl: max-age too low: 2592000 mensmaximus.de: did not receive HSTS header mentax.net: did not receive HSTS header menthix.net: could not connect to host menudrivetest.com: could not connect to host meow.cloud: could not connect to host meozcraft.com: could not connect to host mercamaris.es: did not receive HSTS header @@ -7918,17 +7929,17 @@ michaelscrivo.com: did not receive HSTS michaelwaite.org: could not connect to host michal-kral.cz: could not connect to host michalborka.cz: could not connect to host michel.pt: did not receive HSTS header michelledonelan.co.uk: did not receive HSTS header michiganmetalartwork.com: max-age too low: 7889238 miconware.de: could not connect to host micro-dv.ru: could not connect to host -micro-rain-systems.com: did not receive HSTS header +micro-rain-systems.com: could not connect to host microme.ga: could not connect to host micropple.net: could not connect to host microtalk.org: could not connect to host midirs.org: did not receive HSTS header midonet.org: did not receive HSTS header midriversmotorsllc.com: did not receive HSTS header midwestwomenworkers.org: could not connect to host miegl.cz: could not connect to host @@ -7990,17 +8001,16 @@ minh.at: did not receive HSTS header mini-piraten.de: did not receive HSTS header minikneet.nl: could not connect to host minimoo.se: could not connect to host minis-hip.de: max-age too low: 172800 minkondom.nu: could not connect to host minnesotadata.com: could not connect to host minora.io: could not connect to host minoris.se: could not connect to host -mintea-noua.ro: did not receive HSTS header mipiaci.co.nz: did not receive HSTS header mipiaci.com.au: did not receive HSTS header miragrow.com: could not connect to host mirindadomo.ru: did not receive HSTS header mironized.com: did not receive HSTS header mirrorx.com: did not receive HSTS header misericordiasegrate.org: did not receive HSTS header misgluteosperfectos.com: did not receive HSTS header @@ -8152,21 +8162,22 @@ mrdani.net: could not connect to host mrdleisure.co.uk: did not receive HSTS header mredsanders.net: did not receive HSTS header mrettich.org: did not receive HSTS header mrhee.com: did not receive HSTS header mrning.com: did not receive HSTS header mrnonz.com: max-age too low: 0 mrparker.pw: did not receive HSTS header mrpopat.in: did not receive HSTS header -mrs-shop.com: did not receive HSTS header +mrs-shop.com: could not connect to host mrsbairds.com: max-age too low: 86400 msc-seereisen.net: max-age too low: 0 mstd.tokyo: did not receive HSTS header mstdn-tech.jp: could not connect to host +mstdn.nl: did not receive HSTS header mszaki.com: did not receive HSTS header mt.me.uk: could not connect to host mtamaki.com: could not connect to host mtcgf.com: did not receive HSTS header mtdn.jp: could not connect to host mtg-esport.de: did not receive HSTS header muevetumundo.com.mx: max-age too low: 86400 mujadin.se: did not receive HSTS header @@ -8280,17 +8291,17 @@ namacindia.com: did not receive HSTS hea namaho.com: could not connect to host named.ga: could not connect to host nameme.xyz: could not connect to host nametaken-cloud.duckdns.org: could not connect to host namethatbone.com: could not connect to host namorico.me: could not connect to host nan.ci: did not receive HSTS header nan.zone: could not connect to host -naniki.co.uk: did not receive HSTS header +naniki.co.uk: could not connect to host nanogeneinc.com: could not connect to host nanokamo.com: did not receive HSTS header nanrenba.net: could not connect to host nansay.cn: could not connect to host nanto.eu: could not connect to host narodniki.com: did not receive HSTS header narviz.com: did not receive HSTS header nashira.cz: did not receive HSTS header @@ -8471,17 +8482,16 @@ nopol.de: could not connect to host norandom.com: could not connect to host norb.at: could not connect to host nordic-survival.de: did not receive HSTS header nordiccasinocommunity.com: did not receive HSTS header nordlicht.photography: did not receive HSTS header norge.guide: could not connect to host northcutt.com: did not receive HSTS header northernpage.com: did not receive HSTS header -northfieldyarn.com: did not receive HSTS header northpennvwparts.com: max-age too low: 300 northwest-events.co.uk: did not receive HSTS header nosecretshop.com: could not connect to host nostraspace.com: did not receive HSTS header notadd.io: could not connect to host notarankastojkovic.me: could not connect to host notarobot.fr: did not receive HSTS header notenoughtime.de: could not connect to host @@ -8766,16 +8776,17 @@ oxymc.com: did not receive HSTS header oxynux.fr: could not connect to host oyste.in: could not connect to host ozoz.cc: could not connect to host p-rickroll-o.pw: could not connect to host p.linode.com: could not connect to host p1c.pw: could not connect to host p3.marketing: did not receive HSTS header p3in.com: could not connect to host +p3ter.fr: did not receive HSTS header p8r.de: could not connect to host paavolastudio.com: did not receive HSTS header pablocamino.tk: could not connect to host packlane.com: did not receive HSTS header pactocore.org: could not connect to host paestbin.com: could not connect to host pagedesignshop.com: did not receive HSTS header pagerate.io: could not connect to host @@ -8828,17 +8839,16 @@ parodybit.net: did not receive HSTS head parpaing-paillette.net: could not connect to host particonpsplus.it: could not connect to host partiono.com: did not receive HSTS header partirkyoto.jp: did not receive HSTS header partnercardservices.com: did not receive HSTS header partnersfcu.org: did not receive HSTS header partyhaus.ovh: could not connect to host partyhireformby.co.uk: did not receive HSTS header -partyspecialists.com: did not receive HSTS header partyvan.eu: could not connect to host partyvan.it: could not connect to host partyvan.moe: could not connect to host partyvan.nl: could not connect to host partyvan.se: could not connect to host pascalchristen.ch: did not receive HSTS header pascaline-jouis.fr: did not receive HSTS header passpilot.co.uk: did not receive HSTS header @@ -8902,16 +8912,17 @@ peliculasaudiolatinoonline.com: could no peliseries24.com: did not receive HSTS header pemberton.at: did not receive HSTS header penablog.com: did not receive HSTS header pencillab.cn: did not receive HSTS header pengui.uk: could not connect to host penguinclientsystem.com: did not receive HSTS header pennylane.me.uk: did not receive HSTS header pensanisso.com: max-age too low: 2592000 +pensionpilot.ca: did not receive HSTS header pentagram.me: max-age too low: 2592000 pentano.net: could not connect to host people-mozilla.org: could not connect to host peperiot.com: did not receive HSTS header pepper.dog: did not receive HSTS header pepperhead.com: did not receive HSTS header pepperworldhotshop.de: did not receive HSTS header pepsicoemployeepreferencesurvey.com: could not connect to host @@ -9027,17 +9038,16 @@ pixelhero.co.uk: did not receive HSTS he pixi.chat: could not connect to host pixi.me: did not receive HSTS header pizzadoc.ch: could not connect to host pjbet.mg: did not receive HSTS header pkautodesign.com: did not receive HSTS header pkschat.com: could not connect to host placollection.org: could not connect to host plaettliaktion.ch: did not receive HSTS header -planete-lira.fr: did not receive HSTS header planpharmacy.com: could not connect to host plant.ml: did not receive HSTS header plantroon.com: could not connect to host plass.hamburg: could not connect to host plasvilledescartaveis.com.br: could not connect to host plataformadeinformacion.es: max-age too low: 30000 platform.lookout.com: could not connect to host platomania.eu: did not receive HSTS header @@ -9055,16 +9065,17 @@ plirt.ru: could not connect to host plixer.com: did not receive HSTS header plogable.co: could not connect to host plombirator.kz: did not receive HSTS header plothost.com: did not receive HSTS header ploup.net: could not connect to host pluff.nl: did not receive HSTS header plus-digital.net: did not receive HSTS header plus-u.com.au: did not receive HSTS header +plustech.id: did not receive HSTS header plut.org: did not receive HSTS header plymouthsoftplay.co.uk: could not connect to host pm13-media.cz: could not connect to host pmac.pt: could not connect to host pmemanager.fr: did not receive HSTS header pmnts.io: could not connect to host pneusgppremium.com.br: did not receive HSTS header pnukee.com: did not receive HSTS header @@ -9229,17 +9240,16 @@ ps-w.ru: did not receive HSTS header ps-x.ru: did not receive HSTS header pscleaningsolutions.co.uk: could not connect to host pshostpk.com: did not receive HSTS header psicologia.co.ve: could not connect to host psicologoforensebarcelona.com: did not receive HSTS header pstudio.me: did not receive HSTS header psw.academy: could not connect to host psw.consulting: could not connect to host -psylab.cc: did not receive HSTS header ptn.moscow: could not connect to host ptonet.com: could not connect to host ptrujillo.com: did not receive HSTS header pubkey.is: could not connect to host publications.qld.gov.au: did not receive HSTS header publicidadnovagrass.com.mx: could not connect to host puentes.info: did not receive HSTS header pugliese.fr: could not connect to host @@ -9347,17 +9357,16 @@ rainbowbarracuda.com: could not connect ramarka.de: could not connect to host ramon-c.nl: could not connect to host ramonj.nl: could not connect to host randomcage.com: did not receive HSTS header randomcloud.net: could not connect to host randomhero.cloud: could not connect to host randomwinpicker.de: could not connect to host randy.pw: could not connect to host -randy.su: could not connect to host ranegroup.hosting: could not connect to host rankthespot.com: could not connect to host ranktopay.com: did not receive HSTS header rannseier.org: did not receive HSTS header rany.duckdns.org: could not connect to host rany.io: could not connect to host rany.pw: could not connect to host rapidresearch.me: could not connect to host @@ -9608,17 +9617,16 @@ roundtheme.com: did not receive HSTS hea rous.se: could not connect to host rouvray.org: could not connect to host royal-forest.org: max-age too low: 0 royal-mangal.ch: could not connect to host royalhop.co: could not connect to host royalpub.net: did not receive HSTS header royalsignaturecruise.com: could not connect to host roychan.org: max-age too low: 0 -rozalisbengal.ro: did not receive HSTS header rozeapp.nl: could not connect to host rr.in.th: could not connect to host rrke.cc: did not receive HSTS header rsajeey.info: could not connect to host rsampaio.info: did not receive HSTS header rsblake.net: could not connect to host rsf.io: could not connect to host rsi.im: did not receive HSTS header @@ -9633,16 +9641,17 @@ rubysecurity.org: did not receive HSTS h rubyshop.nl: max-age too low: 604800 rudeotter.com: did not receive HSTS header rue-de-la-vieille.fr: max-age too low: 0 rugirlfriend.com: could not connect to host rugs.ca: did not receive HSTS header rugstorene.co.uk: did not receive HSTS header ruig.jp: could not connect to host ruitershoponline.nl: did not receive HSTS header +ruja.dk: did not receive HSTS header rumoterra.com.br: could not connect to host runawebinar.nl: could not connect to host runhardt.eu: did not receive HSTS header runtl.com: did not receive HSTS header 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 @@ -9705,31 +9714,33 @@ sanik.my: did not receive HSTS header sanissimo.com.mx: max-age too low: 86400 sansage.com.br: could not connect to host sansdev.com: could not connect to host sansemea.com: did not receive HSTS header santi.eu: did not receive HSTS header santing.net: could not connect to host santorinibbs.com: did not receive HSTS header santouri.be: could not connect to host +saoneth.pl: max-age too low: 2592000 saotn.org: did not receive HSTS header sarah-beckett-harpist.com: did not receive HSTS header sarahsweetlife.com: could not connect to host sarahsweger.com: could not connect to host sarakas.com: could not connect to host saraleebread.com: max-age too low: 86400 sarangsemutbandung.com: could not connect to host sarisonproductions.com: did not receive HSTS header sarkarischeme.in: could not connect to host saruwebshop.co.za: could not connect to host sat.rent: did not receive HSTS header satanichia.moe: could not connect to host satmep.com: did not receive HSTS header satoshicrypt.com: did not receive HSTS header satragreen.com: did not receive HSTS header +satrent.com: did not receive HSTS header satrent.se: did not receive HSTS header satriyowibowo.my.id: did not receive HSTS header satsukii.moe: did not receive HSTS header saturne.tk: could not connect to host saturngames.co.uk: could not connect to host saucyfox.net: did not receive HSTS header saudeeconforto.com.br: did not receive HSTS header saumon.xyz: could not connect to host @@ -9737,17 +9748,17 @@ saunasandstuff.ca: did not receive HSTS saunasandstuff.com: did not receive HSTS header savacloud.com: did not receive HSTS header save.gov: could not connect to host saveaward.gov: could not connect to host savemoneyonenergy.com: max-age too low: 2592000 saveyour.biz: could not connect to host savisasolutions.co.za: did not receive HSTS header savvysuit.com: did not receive HSTS header -sawamura-rental.com: did not receive HSTS header +sawamura-rental.com: max-age too low: 0 say-hanabi.com: could not connect to host sayhanabi.com: could not connect to host sazima.ru: did not receive HSTS header sbobetfun.com: could not connect to host sbox-archives.com: could not connect to host sby.de: did not receive HSTS header sc4le.com: could not connect to host scala.click: did not receive HSTS header @@ -9773,17 +9784,19 @@ schulterglatzen-altenwalde.de: could not schultzflorists.com: could not connect to host schwarzkopfforyou.de: did not receive HSTS header schweiz.guide: could not connect to host schweizerbolzonello.net: could not connect to host schwetz.net: could not connect to host scicasts.com: max-age too low: 7776000 scienceathome.org: did not receive HSTS header sciencebase.gov: did not receive HSTS header +scionasset.com: did not receive HSTS header scivillage.com: did not receive HSTS header +sckc.stream: did not receive HSTS header sclgroup.cc: did not receive HSTS header scooshonline.co.uk: did not receive HSTS header scopea.fr: max-age too low: 0 score-savers.com: max-age too low: 10540800 scores4schools.com: could not connect to host scotbirchfield.com: did not receive HSTS header scottdial.com: did not receive HSTS header scottferguson.com.au: did not receive HSTS header @@ -9799,17 +9812,16 @@ screenresolution.space: could not connec screensaversplanet.com: did not receive HSTS header scribbleserver.com: could not connect to host scribe.systems: could not connect to host scrion.com: could not connect to host scriptenforcer.net: did not receive HSTS header scriptict.nl: could not connect to host scrollstory.com: did not receive HSTS header sdhmanagementgroup.com: could not connect to host -sdho.org: did not receive HSTS header sdia.ru: could not connect to host sdmoscow.ru: could not connect to host sdrobs.com: did not receive HSTS header sdsl-speedtest.de: could not connect to host se7ensins.com: did not receive HSTS header seans.cc: did not receive HSTS header searchgov.gov.il: did not receive HSTS header seavancouver.com: could not connect to host @@ -9852,17 +9864,17 @@ securityinet.net: did not receive HSTS h securityinet.org.il: could not connect to host securiviera.ch: did not receive HSTS header sedoexpert.nl: could not connect to host sedoexperts.nl: could not connect to host sedrubal.de: could not connect to host sedziapilkarski.pl: did not receive HSTS header seedboxers.net: could not connect to host seefunk.net: did not receive HSTS header -seehimnude.com: max-age too low: 0 +seehimnude.com: could not connect to host seele.ca: could not connect to host sehenderson.com: did not receive HSTS header seiler-bad.de: did not receive HSTS header seizoushokoyuubangou.com: did not receive HSTS header sektor.team: could not connect to host selecadm.name: could not connect to host selectary.com: could not connect to host selectcertifiedautos.com: did not receive HSTS header @@ -10097,16 +10109,17 @@ skyrunners.ch: could not connect to host skyveo.ml: did not receive HSTS header skyway.capital: did not receive HSTS header sl1pkn07.wtf: max-age too low: 2592000 slanterns.net: could not connect to host slash-dev.de: did not receive HSTS header slashand.co: could not connect to host slashdesign.it: did not receive HSTS header slashem.me: could not connect to host +slatop.org: did not receive HSTS header slattery.co: could not connect to host slauber.de: did not receive HSTS header sleeklounge.com: did not receive HSTS header sleep10.com: could not connect to host sleepstar.com.mt: did not receive HSTS header slicketl.com: did not receive HSTS header slightfuture.click: could not connect to host slightfuture.com: did not receive HSTS header @@ -10114,16 +10127,17 @@ slix.io: could not connect to host slope.haus: could not connect to host slovakiana.sk: did not receive HSTS header slovoice.org: could not connect to host slowsociety.org: could not connect to host sluplift.com: did not receive HSTS header slycurity.de: did not receive HSTS header smablo.com: did not receive HSTS header smallcdn.rocks: could not connect to host +smalldogbreeds.net: did not receive HSTS header smallshopit.com: did not receive HSTS header smart-mirror.de: did not receive HSTS header smart-ov.nl: could not connect to host smartbuyelectric.com: could not connect to host smartcoin.com.br: could not connect to host smartfon4you.ru: max-age too low: 0 smarthomedna.com: did not receive HSTS header smartit.pro: did not receive HSTS header @@ -10218,25 +10232,26 @@ southside-crew.club: could not connect t southworcestershiregpservices.co.uk: could not connect to host souvik.me: did not receive HSTS header souyar.de: could not connect to host 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 soz6.com: did not receive HSTS header +spacecafe.org: did not receive HSTS header spacedust.xyz: could not connect to host spacefish.biz: could not connect to host spacehq.org: could not connect to host spacemo.com: did not receive HSTS header spacountryexplorer.org.au: did not receive HSTS header spaggel.nl: did not receive HSTS header spamloco.net: did not receive HSTS header spangehlassociates.com: did not receive HSTS header -sparelib.com: max-age too low: 3650 +sparelib.com: could not connect to host spark.team: could not connect to host sparklingsparklers.com: did not receive HSTS header sparmedo.de: did not receive HSTS header sparsa.army: could not connect to host sparta-trade.com: could not connect to host spauted.com: could not connect to host spdysync.com: could not connect to host specialedesigns.com: could not connect to host @@ -10296,19 +10311,18 @@ ssn1.ru: did not receive HSTS header sspanda.com: could not connect to host ssworld.ga: could not connect to host staack.com: could not connect to host stabletoken.com: could not connect to host stackfiles.io: could not connect to host stadjerspasonline.nl: could not connect to host stadtbauwerk.at: did not receive HSTS header staffjoy.com: did not receive HSTS header -staffjoystaging.com: could not connect to host +staffjoystaging.com: did not receive HSTS header stahl.xyz: could not connect to host -staklim-malang.info: did not receive HSTS header stalkerhispano.com: max-age too low: 0 stalkerteam.pl: did not receive HSTS header stalschermer.nl: could not connect to host stamparmakarije.me: did not receive HSTS header standardssuck.org: did not receive HSTS header standingmist.com: did not receive HSTS header stannahtrapliften.nl: did not receive HSTS header starandshield.com: did not receive HSTS header @@ -10421,17 +10435,16 @@ sudo.li: did not receive HSTS header sugarcitycon.com: could not connect to host sugarsweetorsour.com: did not receive HSTS header suian.or.jp: max-age too low: 86400 suite73.org: could not connect to host summitbankofkc.com: did not receive HSTS header summitmasters.net: did not receive HSTS header sumoatm.com: did not receive HSTS header sumoscout.de: could not connect to host -sun-wellness-online.com.vn: did not receive HSTS header suncountrymarine.com: did not receive HSTS header sundaycooks.com: max-age too low: 2592000 sunflyer.cn: did not receive HSTS header sunlandsg.vn: did not receive HSTS header sunnyfruit.ru: could not connect to host sunshinepress.org: could not connect to host sunyanzi.tk: could not connect to host suos.io: could not connect to host @@ -10514,17 +10527,16 @@ szongott.net: did not receive HSTS heade t-complex.space: could not connect to host t-ken.xyz: could not connect to host t-point.eu: did not receive HSTS header t-tz.com: could not connect to host t0dd.eu: could not connect to host t4c-rebirth.com: could not connect to host t4x.org: could not connect to host taabe.xyz: could not connect to host -taartenfeesies.nl: did not receive HSTS header taberu-fujitsubo.com: did not receive HSTS header tabitatsu.jp: did not receive HSTS header tacotown.tk: did not receive HSTS header tadigitalstore.com: could not connect to host tafoma.com: did not receive HSTS header tageau.com: could not connect to host taglondon.org: did not receive HSTS header tahakomat.cz: could not connect to host @@ -10772,17 +10784,16 @@ thesearchnerds.co.uk: did not receive HS thesecurityteam.net: could not connect to host theshopally.com: did not receive HSTS header thesplit.is: could not connect to host thestack.xyz: could not connect to host thestagchorleywood.co.uk: did not receive HSTS header thethirdroad.com: did not receive HSTS header thetradinghall.com: could not connect to host theurbanyoga.com: did not receive HSTS header -theuucc.org: did not receive HSTS header thevintagenews.com: did not receive HSTS header thewallset.com: did not receive HSTS header thewebfellas.com: did not receive HSTS header theweilai.com: did not receive HSTS header theworkingeye.nl: could not connect to host thewp.pro: could not connect to host thezonders.com: did not receive HSTS header thgros.fr: could not connect to host @@ -10868,17 +10879,16 @@ titouan.co: did not receive HSTS header tittarpuls.se: could not connect to host titties.ml: could not connect to host tjc.wiki: could not connect to host tjeckien.guide: could not connect to host tkappertjedemetamorfose.nl: could not connect to host tkarstens.de: did not receive HSTS header tkjg.fi: did not receive HSTS header tkonstantopoulos.tk: could not connect to host -tlach.cz: did not receive HSTS header tlcdn.net: could not connect to host tlo.hosting: could not connect to host tlo.link: could not connect to host tlo.network: could not connect to host tls.li: could not connect to host tlsbv.nl: did not receive HSTS header tlshost.net: could not connect to host tm-solutions.eu: could not connect to host @@ -11034,16 +11044,17 @@ troo.ly: could not connect to host trouter.io: could not connect to host true.ink: did not receive HSTS header truebred-labradors.com: did not receive HSTS header trunkjunk.co: did not receive HSTS header trustedinnovators.com: did not receive HSTS header trusteecar.com: did not receive HSTS header trustmeimfancy.com: could not connect to host trybind.com: could not connect to host +tryfm.net: did not receive HSTS header tryoneday.co: did not receive HSTS header ts2.se: could not connect to host ts3.consulting: could not connect to host tsecy.com: could not connect to host tsgoc.com: did not receive HSTS header tsrstore.gq: could not connect to host tssouthernpower.com: max-age too low: 0 tsumegumi.net: could not connect to host @@ -11132,17 +11143,16 @@ ubuntuhot.com: could not connect to host uefeng.com: did not receive HSTS header uega.net: did not receive HSTS header ufgaming.com: did not receive HSTS header ufotable.uk: did not receive HSTS header ugisgutless.com: could not connect to host ugo.ninja: could not connect to host ugosadventures.com: could not connect to host uhm.io: did not receive HSTS header -uitslagensoftware.nl: did not receive HSTS header ukas.com: did not receive HSTS header ukdropshipment.co.uk: did not receive HSTS header ukdropshipment.com: did not receive HSTS header ukk.dk: did not receive HSTS header ukrgadget.com: could not connect to host ulabox.cat: did not receive HSTS header ulabox.es: did not receive HSTS header ullamodaintima.com.br: could not connect to host @@ -11185,17 +11195,17 @@ under30stravelinsurance.com.au: did not underkin.com: could not connect to host unfiltered.nyc: could not connect to host ungern.guide: could not connect to host uni-games.com: could not connect to host unicefkaarten.be: did not receive HSTS header unicooo.com: could not connect to host unifei.edu.br: did not receive HSTS header uniformecomgas.com.br: could not connect to host -uniformehope.com.br: did not receive HSTS header +uniformehope.com.br: could not connect to host uniformehumboldt.com.br: did not receive HSTS header unikitty-on-tour.com: could not connect to host unionstationapp.com: could not connect to host unison.com: did not receive HSTS header unisyssecurity.com: did not receive HSTS header uniteasia.org: did not receive HSTS header unitlabs.net: could not connect to host unitrade-425.co.za: did not receive HSTS header @@ -11432,16 +11442,17 @@ vliegensvlug.services: max-age too low: vlora.city: could not connect to host vm0.eu: could not connect to host vmrdev.com: could not connect to host voceinveste.com: did not receive HSTS header voicesuk.co.uk: did not receive HSTS header voidserv.net: could not connect to host volbyzive.cz: did not receive HSTS header volcrado.com: did not receive HSTS header +voliere-info.nl: did not receive HSTS header volkden.com: could not connect to host volkerwesselswave.nl: did not receive HSTS header voltotc.com: did not receive HSTS header vonavy-cukor.sk: could not connect to host vonavycukor.sk: could not connect to host vonedelmann.de: did not receive HSTS header vonterra.us: did not receive HSTS header vooreenveiligthuis.nl: did not receive HSTS header @@ -11482,22 +11493,22 @@ vyvybean.cf: could not connect to host vyvygen.com: did not receive HSTS header vzk.io: could not connect to host w2gshop.com.br: could not connect to host w4a.fr: could not connect to host w4xzr.top: could not connect to host w4xzr.xyz: could not connect to host w9rld.com: did not receive HSTS header wachtwoordencheck.nl: could not connect to host -wafairhaven.com.au: did not receive HSTS header wait.moe: could not connect to host waixingrenfuli7.vip: could not connect to host wakapp.de: could not connect to host wakened.net: did not receive HSTS header walkeryoung.ca: could not connect to host +walkingforhealth.org.uk: did not receive HSTS header wallabag.it: did not receive HSTS header wallabag.org: did not receive HSTS header wallsblog.dk: could not connect to host walnutgaming.co.uk: could not connect to host walterlynnmosley.com: did not receive HSTS header wanban.io: could not connect to host wangjun.me: did not receive HSTS header wangkezun.com: could not connect to host @@ -11514,16 +11525,17 @@ warekit.io: did not receive HSTS header warhistoryonline.com: did not receive HSTS header warped.com: did not receive HSTS header warrencreative.com: did not receive HSTS header warsentech.com: could not connect to host warsh.moe: did not receive HSTS header warumsuchen.at: did not receive HSTS header wasatchcrest.com: did not receive HSTS header wasi-net.de: did not receive HSTS header +wasielewski.com.de: did not receive HSTS header watchium.com: did not receive HSTS header waterforlife.net.au: did not receive HSTS header waterpoint.com.br: could not connect to host watersportmarkt.net: did not receive HSTS header watsonhall.uk: could not connect to host wattechweb.com: did not receive HSTS header wavefloatrooms.com: did not receive HSTS header wavefrontsystemstech.com: could not connect to host @@ -11553,17 +11565,16 @@ webeconomia.it: did not receive HSTS hea webelement.sk: did not receive HSTS header weberjulia.com: could not connect to host webfronten.dk: did not receive HSTS header webhelyesarcu.hu: did not receive HSTS header webhosting4.net: did not receive HSTS header webhostingpros.ml: could not connect to host webies.ro: did not receive HSTS header webm.to: could not connect to host -webmail.info: did not receive HSTS header webmail.mayfirst.org: did not receive HSTS header webmaniabr.com: did not receive HSTS header webmarketingfestival.it: did not receive HSTS header webninja.work: could not connect to host webnosql.com: could not connect to host webperformance.ru: could not connect to host webproshosting.tk: could not connect to host webpublica.pt: could not connect to host @@ -11626,17 +11637,16 @@ wewillgo.org: did not receive HSTS heade wewlad.me: did not receive HSTS header wftda.com: did not receive HSTS header whatnext.limited: did not receive HSTS header whats.io: could not connect to host whatsstalk.me: could not connect to host whatsyouroffer.co.uk: did not receive HSTS header wheresben.today: could not connect to host whisker.network: could not connect to host -whistler-transfers.com: did not receive HSTS header whitehat.id: did not receive HSTS header whiterabbit.org: did not receive HSTS header whiterabbitcakery.com: could not connect to host whitestagforge.com: could not connect to host whoclicks.net: could not connect to host whoisapi.online: could not connect to host wholebites.com: max-age too low: 7889238 wholesomeharvestbread.com: max-age too low: 86400 @@ -11839,17 +11849,17 @@ xiliant.com: did not receive HSTS header ximage.me: did not receive HSTS header ximens.me: could not connect to host xinbiji.cn: could not connect to host xinghuokeji.xin: could not connect to host xisa.it: could not connect to host xivpn.com: could not connect to host xiyu.it: did not receive HSTS header xiyu.moe: did not receive HSTS header -xlfblog.com: could not connect to host +xlfblog.com: did not receive HSTS header xlinar.com: did not receive HSTS header xmr.my: could not connect to host xmv.cz: could not connect to host xn--3lqp21gwna.xn--fiqs8s: could not connect to host xn--3lqp21gwna.xn--fiqz9s: could not connect to host xn--3lqt7ir4md4tzwa.cn: did not receive HSTS header xn--3lqt7ir4md4tzwa.xn--fiqs8s: did not receive HSTS header xn--3px.jp: could not connect to host @@ -11892,16 +11902,17 @@ xoda.pw: did not receive HSTS header xoffy.com: did not receive HSTS header xom.party: could not connect to host xor-a.net: could not connect to host xperiacodes.com: could not connect to host xpi.fr: could not connect to host xpj.sx: could not connect to host xpressprint.com.br: did not receive HSTS header xrp.pw: could not connect to host +xscapers.com: did not receive HSTS header xsyds.cn: did not receive HSTS header xtom.email: could not connect to host xtream-hosting.com: could not connect to host xtream-hosting.de: could not connect to host xtream-hosting.eu: could not connect to host xtreamhosting.eu: could not connect to host xtrim.ru: did not receive HSTS header xuexb.com: did not receive HSTS header @@ -12090,16 +12101,17 @@ zoners.si: did not receive HSTS header zonky.io: could not connect to host zoo24.de: did not receive HSTS header zoofaeth.de: did not receive HSTS header zoomingin.net: max-age too low: 5184000 zoommailing.com: did not receive HSTS header zoorigin.com: did not receive HSTS header zorasvobodova.cz: did not receive HSTS header zortium.report: could not connect to host +zotero.org: did not receive HSTS header zoznamrealit.sk: did not receive HSTS header zqhong.com: could not connect to host zqjs.tk: could not connect to host ztan.tk: could not connect to host ztcaoll222.cn: did not receive HSTS header ztytian.com: could not connect to host zubel.it: did not receive HSTS header zuckerfloh.de: did not receive HSTS header
--- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -3,17 +3,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*****************************************************************************/ /* This is an automatically generated file. If you're not */ /* nsSiteSecurityService.cpp, you shouldn't be #including it. */ /*****************************************************************************/ #include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1532462824852000); +const PRTime gPreloadListExpirationTime = INT64_C(1532549205674000); %% 0-1.party, 1 0.me.uk, 1 0005pay.com, 1 00100010.net, 1 0010100.net, 1 00120012.net, 1 00130013.net, 1 @@ -147,16 +147,17 @@ 0x65.net, 1 0x7d.com, 1 0x7fffffff.net, 1 0x90.in, 1 0x90.io, 1 0xaa55.me, 1 0xabe.io, 1 0xacab.org, 1 0xda.de, 1 +0xdc.io, 0 0xdefaced.de, 1 0xee.eu, 1 0xf00.ch, 1 0xfc.de, 1 0xn.de, 1 0yen.org, 1 1-2-3bounce.co.uk, 1 100-downloads.com, 1 @@ -186,16 +187,17 @@ 10453.net, 1 10495.net, 1 1066.io, 1 10774.net, 1 10840.net, 1 10gb.io, 1 10gbit.ovh, 1 10hz.de, 1 10og.de, 1 +10ppm.com, 1 10v2.com, 1 10x.ooo, 1 1100.so, 1 110110110.net, 1 1116pay.com, 1 112112112.net, 1 112app.nl, 1 112hz.com, 1 @@ -552,17 +554,16 @@ 393422.com, 1 394022.com, 1 394122.com, 1 394322.com, 1 394522.com, 1 394622.com, 1 394922.com, 1 396422.com, 1 398.info, 1 -3ags.de, 1 3bakayottu.com, 1 3bigking.com, 1 3c-d.de, 1 3chat.org, 1 3circlefunding.ch, 1 3countiescastlehire.co.uk, 1 3cs.ch, 1 3dm.audio, 1 @@ -921,17 +922,17 @@ 789zr.com, 1 7bwin.com, 1 7careconnect.com, 1 7delights.com, 1 7delights.in, 1 7geese.com, 1 7graus.pt, 1 7kicks.com, 1 7links.com.br, 1 -7nw.eu, 0 +7nw.eu, 1 7proxies.com, 1 7sons.de, 1 7thcircledesigns.com, 1 7trade8.com, 1 7x24servis.com, 1 8003pay.com, 1 804322.com, 1 809422.com, 1 @@ -2095,17 +2096,16 @@ altered.network, 1 alternador.com.br, 1 alternative.bike, 1 alternativebit.fr, 1 alternativedev.ca, 1 alternativet.party, 1 alterspalter.de, 1 altesses.eu, 1 altestore.com, 1 -altitudemoversdenver.com, 1 altkremsmuensterer.at, 1 altonblom.com, 1 altopartners.com, 1 altopia.com, 1 altphotos.com, 1 altporn.xyz, 1 altruistgroup.net, 1 altstipendiaten.de, 1 @@ -3708,17 +3708,16 @@ ballbusting-cbt.com, 1 ballejaune.com, 1 ballinarsl.com.au, 1 ballmerpeak.org, 1 ballonsportclub-erlangen.de, 1 ballotapi.com, 1 ballothero.com, 1 ballroom.info, 1 balonmano.co, 1 -bals.org, 1 balslev.io, 1 balticnetworks.com, 1 bambambaby.com.br, 1 bamboorelay.com, 1 bamtoki.com, 1 bananensap.nl, 1 bananium.fr, 1 banburybid.com, 1 @@ -4528,17 +4527,16 @@ binaryapparatus.com, 1 binaryappdev.com, 1 binarycreations.scot, 1 binarydream.fi, 1 binaryevolved.com, 1 binarystud.io, 1 binbin9.com, 1 binbin9.net, 1 binding-problem.com, 1 -binfind.com, 1 bing.com, 1 bingcheung.com, 1 bingo-wear.com, 1 bingo9.net, 1 bingobank.org, 1 bingofriends.com, 1 bingostars.com, 1 binhex.net, 1 @@ -5128,16 +5126,17 @@ boss.az, 1 bostadsportal.se, 1 bosufitness.cz, 1 bosun.io, 1 bosworthdental.co.uk, 1 botlab.ch, 1 botmanager.pl, 1 botserver.de, 1 bottaerisposta.net, 1 +bottineauneighborhood.org, 1 bottke.berlin, 1 bou.lt, 1 bouah.net, 1 bouchard-mathieux.com, 1 bouchonville-knifemaker.com, 1 bouckaert-usedcars.be, 1 boudah.pl, 1 boueki.jp, 1 @@ -5746,16 +5745,17 @@ butikvip.ru, 1 butt.repair, 1 buttercupstraining.co.uk, 1 buttermilk.cf, 1 buttonline.ch, 1 buturyu.net, 1 buturyu.org, 1 buxum-communication.ch, 1 buy-thing.com, 1 +buyaccessible.gov, 1 buybike.shop, 1 buycarpet.shop, 1 buycook.shop, 1 buydesired.com, 1 buydissertations.com, 1 buyerdocs.com, 1 buyessay.org, 1 buyessays.net, 1 @@ -6287,31 +6287,29 @@ catchfotografie.nl, 1 catchief.com, 1 catcontent.cloud, 1 catdecor.ru, 1 catenacondos.com, 1 catfooddispensersreviews.com, 1 catgirl.me, 1 catgirl.pics, 1 catharinesomerville.com, 1 -catharisme.eu, 1 catharisme.net, 1 catharisme.org, 1 catherineidylle.com, 1 catherinesarasin.com, 1 catherinescastles.co.uk, 1 catholics.dating, 1 cathosa.nl, 1 cativa.net, 1 catmoose.ca, 1 catnet.dk, 0 catnmeow.com, 1 catsmagic.pp.ua, 1 cattivo.nl, 0 -catuniverse.org, 1 catveteran.com, 1 caughtredhanded.co.nz, 1 caulfieldeastapartments.com.au, 1 caulfieldracecourseapartments.com.au, 1 caulong-ao.net, 1 causae-fincas.es, 1 causae.es, 1 cav.ac, 1 @@ -7004,17 +7002,17 @@ circulatedigital.com, 1 cirfi.com, 1 ciri.com.co, 1 cirope.com, 1 cirrus0.de, 1 cirugiasplasticas.com.mx, 1 cirujanooral.com, 1 cirurgicagervasio.com.br, 1 cirurgicalucena.com.br, 1 -ciscodude.net, 1 +ciscodude.net, 0 cisoaid.com, 1 ciss.ltd, 1 cisy.me, 1 citationgurus.com, 1 citcuit.in, 1 citimarinestore.com, 1 citizen-cam.de, 1 citizensbankal.com, 1 @@ -7708,23 +7706,21 @@ consiliumvitae.ch, 1 consill.com, 1 console.ninja, 1 console.rest, 1 consommateuraverti.com, 1 consonare.de, 1 constancechen.me, 1 constant-rough.de, 1 constares.de, 1 -construct-trust.com, 1 constructionjobs.com, 1 constructive.men, 1 consul.io, 1 consultcelerity.com, 1 consultingroupitaly.com, 1 -consultorcr.net, 1 consultpetkov.com, 1 consumer.gov, 1 consumeractionlawgroup.com, 1 consumerfiles.com, 1 consumersentinel.gov, 1 consumidor.gov, 1 consuwijzer.nl, 1 contactsingapore.sg, 1 @@ -7784,16 +7780,17 @@ cooldan.com, 1 coole-fete.de, 1 coolerssr.space, 1 coolgifs.de, 1 cooljs.me, 1 coolpickz.com, 1 coolprylar.se, 1 coolrc.me, 1 coolviewthermostat.com, 1 +coolvox.com, 1 coopens.com, 1 coore.jp, 1 coorpacademy.com, 1 copdfoundation.org, 1 copperhead.co, 1 copperheados.com, 1 coptic-treasures.com, 1 coptkm.cz, 1 @@ -8178,17 +8175,16 @@ cryptoparty.tv, 1 cryptopartynewcastle.org, 1 cryptopartyutah.org, 1 cryptophobia.nl, 1 cryptorival.com, 1 cryptoseb.pw, 1 cryptoshot.pw, 1 cryptract.co, 1 crystalchandelierservices.com, 1 -crystalmachine.net, 0 crystone.me, 1 cryz.ru, 1 cs-colorscreed-betongulve.dk, 1 cs2016.ch, 1 csabg.org, 1 csacongress.org, 1 csbs.fr, 1 cscau.com, 1 @@ -8245,18 +8241,18 @@ ctyi.me, 1 cub-bouncingcastles.co.uk, 1 cube-cloud.com, 1 cube.de, 1 cubecart-demo.co.uk, 1 cubecart-hosting.co.uk, 1 cubecraft.net, 1 cubecraftstore.com, 1 cubecraftstore.net, 1 +cubekrowd.net, 1 cubela.tech, 1 -cubia.de, 1 cubia3.com, 1 cubia4.com, 1 cubile.xyz, 1 cublick.com, 1 cubos.io, 0 cubostecnologia.com, 0 cubostecnologia.com.br, 0 cubua.com, 1 @@ -8366,25 +8362,27 @@ cw.center, 1 cwagner.me, 1 cwbrtrust.ca, 1 cwmart.in, 1 cwningen.cymru, 0 cwrcoding.com, 1 cy.technology, 1 cybbh.space, 1 cyber-computer.club, 1 +cyber-konzept.de, 1 cyber-perikarp.eu, 1 cyber.cafe, 1 cyberatlantis.com, 1 cybercareers.gov, 1 cybercloud.cc, 1 cybercrew.cc, 1 cybercrime-forschung.de, 1 cyberdos.de, 1 cyberduck.io, 1 +cyberfrancais.ro, 1 cybergrx.com, 1 cyberguerrilla.info, 1 cyberguerrilla.org, 1 cyberianhusky.com, 1 cyberkov.com, 1 cyberlightapp.com, 1 cybermeldpunt.nl, 1 cyberoptic.de, 1 @@ -8750,17 +8748,17 @@ datorb.com, 1 datovyaudit.cz, 1 datsound.ru, 1 datsumou-q.com, 1 datumou-osusume.com, 1 datumou-recipe.com, 1 daubecity.de, 1 daubehosting.de, 1 dave-pearce.com, 1 -daveaglick.com, 1 +daveaglick.com, 0 davecardwell.com, 1 davelynes.com, 1 daveoc64.co.uk, 1 davepage.me.uk, 1 davepearce.com, 1 daverandom.com, 1 davescomputertips.com, 1 davesinclair.com.au, 1 @@ -8839,16 +8837,17 @@ dbpmedia.se, 1 dbq.com, 1 dbrgn.ch, 1 dbtsai.com, 1 dc-occasies.be, 1 dc562.org, 1 dc585.info, 1 dcards.in.th, 1 dcautomacao.com.br, 1 +dcc.cat, 1 dcc.moe, 1 dcepler.net, 1 dchatelain.ch, 1 dchest.org, 1 dckd.nl, 1 dcl.re, 1 dclaisse.fr, 1 dcmt.co, 1 @@ -9276,17 +9275,16 @@ devpsy.info, 1 devrandom.net, 1 devstaff.gr, 1 devtestfan1.gov, 1 devyn.ca, 1 devzero.io, 1 dewaard.de, 1 dewalch.net, 1 dewapress.com, 1 -dewebwerf.nl, 1 dewinter.com, 1 dexalo.de, 1 dezeregio.nl, 1 dezet-ev.de, 1 dezintranet.com, 1 dezmembrariromania.ro, 1 dezshop24.de, 1 df1paw.de, 1 @@ -9297,16 +9295,17 @@ dfixit.com, 1 dfl.mn, 1 dflcares.com, 1 dfmn.berlin, 1 dfranke.com, 1 dgblaw.com.au, 1 dgbouncycastlehire.com, 1 dgby.org, 1 dgeex.eu, 1 +dggm.ru, 1 dggwp.de, 1 dgitup.com, 1 dgportals.co.uk, 1 dgpot.com, 1 dgt-portal.de, 1 dgx.io, 1 dharamkot.com, 1 dhautefeuille.eu, 1 @@ -9919,17 +9918,16 @@ dossplumbing.co.za, 1 dostavkakurierom.ru, 1 dosvientoselectrical.com, 1 dosyauzantisi.com, 1 dot.ro, 1 dotacni-parazit.cz, 1 dotb.dn.ua, 0 dotbigbang.com, 1 dotbox.org, 1 -dotbrick.co.th, 1 dotconnor.com, 1 dotgov.gov, 1 dothebangthingsalon.com, 1 dothydesign.com, 1 dotjs.party, 1 dotkniseandroida.cz, 1 dotkod.com, 1 dotkod.pl, 1 @@ -10264,17 +10262,16 @@ dusmomente.com, 1 dusnan.com, 1 dustplanet.de, 1 dustri.org, 1 dustycloth.com, 1 dustygroove.com, 1 dustyspokesbnb.ca, 1 dutch.desi, 1 dutch1.nl, 1 -dutchessuganda.com, 1 dutchrank.nl, 1 dutchwanderers.nl, 1 dutchweballiance.nl, 1 dutyfreeonboard.com, 1 dvbris.co.uk, 1 dvbris.com, 1 dvdland.com.au, 1 dvhosting.be, 1 @@ -10492,17 +10489,16 @@ echoactive.com, 1 echoanalytics.com, 1 echodio.com, 1 echofoxtrot.co, 1 echomanchester.net, 1 echopaper.com, 1 echosim.io, 1 echosixmonkey.com, 1 echosystem.fr, 1 -echoteam.gq, 1 echoteen.com, 1 echoworld.ch, 1 ecirtam.net, 1 eckel.co, 1 eclipse.ws, 1 ecnetworker.com, 1 eco-derattizzazione.it, 1 eco-work.it, 1 @@ -10600,17 +10596,16 @@ educaid.be, 1 educationevolving.org, 1 educationfutures.com, 1 educationunlimited.com, 1 educator-one.com, 1 educators.co.nz, 1 educatoys.com.br, 1 educatweb.de, 1 eductf.org, 1 -edudrugs.com, 1 eduid.se, 1 eduif.nl, 0 edumundo.nl, 1 eduroam.no, 1 edusanjal.com, 1 edusantorini.com, 1 eduvpn.no, 1 edv-bv.de, 1 @@ -10871,17 +10866,17 @@ elinvention.ovh, 1 eliolita.com, 1 eliott.be, 0 elisa.ee, 0 elisabeth-kostecki.de, 1 elisabeth-strunz.de, 1 elisabethkostecki.de, 1 elisabethrene.com, 1 elisechristie.com, 1 -elistor6100.xyz, 0 +elistor6100.xyz, 1 elite-box.com, 1 elite-box.org, 1 elite-porno.ru, 1 elite12.de, 1 elitebouncingfun.com, 1 elitegameservers.net, 1 elitehosting.de, 1 elitesensual.com.br, 1 @@ -11459,17 +11454,16 @@ esbfun.net, 1 esbgood.com, 1 esbin.net, 1 esbjon.com, 1 esbjon.net, 1 esbm4.net, 1 esbm5.net, 1 esc.chat, 1 escael.org, 1 -escapees.com, 1 escapeplaza.de, 1 escapetalk.nl, 1 escargotbistro.com, 1 escavador.com, 1 esclear.de, 1 escontact.ch, 1 escort-byuro.net, 1 escort-fashion.com, 1 @@ -11820,16 +11814,17 @@ exchangeworks.co, 1 exchaser.com, 1 exclusivebouncycastles.co.uk, 1 exdamo.de, 0 exe-boss.tech, 1 exebouncycastles.co.uk, 1 exehack.net, 1 exeintel.com, 1 exekutori.com, 1 +exembit.com, 1 exemples-de-stands.com, 1 exeria.de, 1 exgaywatch.com, 1 exgen.io, 1 exhalespa.com, 1 exhibityour.com, 1 exiahost.com, 1 exit9wineandliquor.com, 1 @@ -11896,17 +11891,17 @@ extensia.it, 1 extensiblewebmanifesto.org, 1 extensiblewebreportcard.org, 1 extensiblewebsummit.org, 1 extensiontree.com, 1 exteriorservices.io, 1 extradesktops.com, 0 extranetpuc.com.br, 1 extrapagetab.com, 1 -extratorrent.cool, 1 +extratorrent.cool, 0 extratorrent.fyi, 1 extratorrent.red, 1 extratorrent.world, 1 extreme-gaming.de, 1 extreme-gaming.us, 1 extreme-players.com, 1 extreme-players.de, 1 extreme.co.th, 1 @@ -11976,17 +11971,16 @@ fabriziorocca.it, 1 fabrysociety.org, 1 fabse.net, 1 fabulouslyyouthfulskin.com, 1 fabulouslyyouthfulskineyeserum.com, 1 facanabota.com, 1 facanabota.com.br, 1 facciadastile.it, 1 facealacrise.fr, 1 -facebattle.com, 1 facebook-atom.appspot.com, 1 facebook.ax, 1 facebook.com, 0 facebydrh.com, 1 facebylouise.co.uk, 1 facekungfu.com, 1 facepalmsecurity.com, 1 facepunch.org, 1 @@ -12054,16 +12048,17 @@ falegname-roma.it, 1 falkus.net, 1 falldennismarketing.com, 1 fallenangeldrinks.co.uk, 1 fallenangeldrinks.com, 1 fallenangeldrinks.eu, 1 fallenangelspirits.co.uk, 1 fallenangelspirits.com, 1 fallenspirits.co.uk, 1 +fallofthecitadel.com, 1 falsum.net, 1 fam-kreibich.de, 1 fam-stemmer.de, 0 fam-weyer.de, 1 famcloud.de, 1 famdouma.nl, 1 fameng.nl, 1 famep.gov, 1 @@ -12254,17 +12249,16 @@ feedhq.org, 1 feedkovacs.hu, 1 feedough.com, 1 feedstringer.com, 1 feegg.com.br, 1 feel.aero, 1 feelgood-workouts.de, 1 feeltennis.net, 1 feen.us, 1 -feeriedesign-event.com, 1 feetpa.ws, 1 fefelovalex.ru, 1 fegli.gov, 1 fehngarten.de, 1 fehnladen.de, 1 feigling.net, 1 feilen.de, 1 feirlane.org, 0 @@ -12741,16 +12735,17 @@ flyss.net, 1 flyssh.net, 1 flyt.online, 1 flytoadventures.com, 1 fm-cdn.de, 1 fm.ie, 1 fmapplication.com, 1 fmarchal.fr, 1 fmdance.cl, 1 +fmi.gov, 1 fminsight.net, 1 fmodoux.biz, 1 fmovies.fyi, 1 fmovies.life, 1 fmussatmd.com, 1 fnb-griffinonline.com, 1 fnbnokomis.com, 1 fndout.com, 1 @@ -12774,16 +12769,17 @@ foiaonline.gov, 1 fojing.com, 1 fokan.be, 1 fokep.no, 1 fokkusu.fi, 1 fol.tf, 1 foljeton.dk, 1 folkadelic.de, 1 folkfests.org, 1 +follandviolins.com, 1 followerrocket.com, 1 followersya.com, 1 followthatpage.com, 1 followthedog.co.uk, 1 foluomeng.net, 1 folv.es, 1 fomopop.com, 1 fondanastasia.ru, 1 @@ -12873,16 +12869,17 @@ forsakringsarkivet.se, 1 forschbach-janssen.de, 1 forsec.nl, 1 forstbetrieb-hennecke.de, 1 forstprodukte.de, 1 forsyththeatre.com, 1 forteggz.nl, 1 fortesanshop.it, 1 fortnine.ca, 1 +fortran.io, 1 fortress.no, 1 fortress.sk, 1 fortricks.in, 1 fortuna-loessnitz.de, 1 fortuna-s.com, 1 fortworth.ch, 1 forty-two.nl, 1 forty8creates.com, 1 @@ -13186,16 +13183,17 @@ frolov.net, 1 frolova.org, 1 fromix.de, 1 fromlemaytoz.com, 1 fromscratch.rocks, 1 fromthesoutherncross.com, 1 fronteers.nl, 0 frontline.cloud, 1 frontline6.com, 1 +fropky.com, 1 frosthall.com, 1 frostprotection.co.uk, 1 frostwarning.com, 1 frosty-gaming.xyz, 1 frothy.coffee, 1 froufe.com, 1 frowin-stemmer.de, 0 frozen-geek.net, 1 @@ -13406,16 +13404,17 @@ fysesbjerg.dk, 1 fysio123.nl, 1 fysiotherapieholtenbroek.nl, 1 fysiotherapierossum.nl, 1 fysiovdberg.nl, 1 fysuite.com, 1 fzbrweb.cz, 1 fzx750.ru, 1 g-m-w.eu, 1 +g-marketing.ro, 1 g-o.pl, 1 g-rom.net, 1 g01.in.ua, 1 g1.ie, 1 g10e.ch, 1 g1jeu.com, 1 g2links.com, 1 g2pla.net, 1 @@ -13691,17 +13690,16 @@ geh.li, 1 gehaowu.com, 1 gehopft.de, 1 gehreslaw.com, 1 gehrke.in, 1 gehrke.nrw, 1 gehsicht.de, 1 geigr.de, 1 geiser-family.ch, 1 -geiser.io, 1 gelb-computer.de, 1 geld-im-blick.de, 1 geld24.nl, 1 geldimblick.de, 1 geldteveel.eu, 1 geleenbeekdal.nl, 1 geleia-real.com, 1 gelis.ch, 1 @@ -13726,17 +13724,16 @@ geneau.net, 1 genehightower.com, 1 genehome.com.au, 1 genemesservwparts.com, 1 general-anaesthesia.com, 1 general-anaesthetics.com, 1 general-anesthesia.com, 1 generali-worldwide.com, 1 generalinsuranceservices.com, 1 -generalpants.com.au, 1 generationgoat.com, 1 generationnext.pl, 1 generationsweldom.com, 1 generator.creditcard, 1 generic.cx, 1 genesiseureka.com, 1 genesismachina.ca, 1 genesistrading.com, 1 @@ -13982,16 +13979,17 @@ gileadpac.com, 1 giliamor.com, 1 gillesdesnoyers.com, 1 gillesmorelle.com, 1 gillmanandsoame.co.uk, 1 gillyscastles.co.uk, 1 gilmoreid.com.au, 1 gilnet.be, 1 gina-architektur.design, 1 +ginie.de, 1 ginionusedcars.be, 1 ginja.co.th, 1 ginkel.com, 1 ginnegappen.nl, 1 ginniemae.gov, 1 ginza-luce.net, 1 ginzadelunch.jp, 1 giochi-online.ws, 1 @@ -14240,17 +14238,16 @@ gonkar.com, 1 gonx.dk, 1 goo.gl, 1 good-tips.pro, 1 gooday.life, 1 gooddomainna.me, 1 goodeats.nyc, 1 goodenough.nz, 0 goodfeels.net, 1 -goods-memo.net, 1 goodsex4all.com.br, 1 goodvibesblog.com, 1 goodyearsotn.co.uk, 1 google, 1 google-analytics.com, 1 google.ax, 1 googleandroid.cz, 1 googlemail.com, 0 @@ -14632,16 +14629,17 @@ guid2steamid.pw, 1 guide-peche-cantal.com, 1 guidechecking.com, 1 guidedselling.net, 1 guideline.gov, 1 guidelines.gov, 1 guideo.ch, 1 guides-et-admin.com, 1 guides-peche64.com, 1 +guidetoiceland.is, 0 guildbase.de, 1 guildgearscore.cf, 0 guildofmusicsupervisors.co.uk, 1 guillaume-briand.fr, 1 guillaumecote.me, 1 guillaumeperrin.io, 1 guillemaud.me, 0 guiltypleasuresroleplaying.com, 1 @@ -14652,17 +14650,16 @@ guishem.com, 1 gulchuk.com, 1 gulenbase.no, 1 gulfstream.ru, 1 gulleyperformancecenter.com, 1 gulshankumar.net, 1 gumballs.com, 1 gume4you.com, 1 gumi.ca, 1 -gummibande.noip.me, 1 gunhunter.com, 1 guniram.com, 1 gunwatch.co.uk, 1 guochang.xyz, 1 guoliang.me, 1 guozeyu.com, 1 gupfen.ch, 1 guphi.net, 0 @@ -15685,32 +15682,30 @@ hooowl.com, 1 hoopertechnicalsolutions.com, 1 hooray.beer, 1 hootworld.net, 1 hoowhen.cn, 1 hopconseils.ch, 1 hopconseils.com, 1 hope-line-earth.jp, 1 hopesb.org, 1 -hopewellproperties.co.uk, 1 hopglass.eu, 1 hopglass.net, 1 hoplongtech.com, 1 hopps.me, 1 hoppyx.com, 1 horace.li, 1 horaceli.com, 1 horackova.info, 1 hord.ca, 1 horecaapparatuurkobezuijen.nl, 1 horeizai.net, 1 horisonttimedia.fi, 1 horizonhomes-samui.com, 1 horizonlawncare.tk, 1 -horizonmoto.fr, 1 horkel.cf, 1 hornyforhanzo.com, 1 horodance.dk, 1 horrell.ca, 1 horrendous-servers.com, 1 horror-forum.de, 1 horsehunter.co.uk, 1 horstmanshof.eu, 1 @@ -16498,17 +16493,16 @@ impulsionsa.com, 1 impyus.com, 1 imququ.com, 1 imreh.net, 1 imrejonk.nl, 1 imrunner.com, 1 imrunner.ru, 1 ims-sargans.ch, 1 imscompany.com, 1 -imy.life, 1 imydl.com, 1 imydl.tech, 1 imyvm.com, 1 imyz.tw, 1 in-depthoutdoors.com, 1 in-flames.com, 1 in.search.yahoo.com, 0 in.xero.com, 0 @@ -16646,17 +16640,16 @@ ing89.cc, 1 ing89.com, 1 ingalabs.hu, 1 ingalls.run, 1 ingatlanneked.hu, 1 ingber.com, 1 inge-r.nl, 1 ingeeibach.de, 1 ingenium.si, 1 -ingenius.ws, 1 ingerhy.com, 1 ingi.ga, 1 ingjobs.ch, 1 inglesnarede.com.br, 1 ingo-schlueter.de, 1 ingoschlueter.de, 1 ingresscode.cn, 1 inhaltsangabe.de, 1 @@ -17642,18 +17635,18 @@ jerseybikehire.co.uk, 1 jerseyjumpingbeans.co.uk, 1 jerseylvi2013.org, 1 jesse3.com, 1 jesseerbach.com, 1 jessekaufman.com, 1 jessesjumpingcastles.co.uk, 1 jessevictors.com, 1 jessgranger.com, 1 +jessicabenedictus.nl, 0 jesters-court.net, 1 -jesuisadmin.fr, 1 jet-stream.fr, 1 jetapi.org, 1 jetbbs.com, 1 jetbrains.pw, 1 jetflex.de, 1 jetkittens.co.uk, 1 jetmirshatri.com, 1 jetsetboyz.net, 1 @@ -20072,17 +20065,16 @@ lifanov.com, 1 lifebetweenlives.com.au, 1 lifecism.com, 1 lifecoach.tw, 0 lifeinhex.com, 1 lifeinsurancepro.org, 1 lifeinsurances.pro, 1 lifeinsurances24.com, 1 lifekiss.ru, 1 -lifemarque.co.uk, 1 lifematenutrition.com, 1 lifemstyle.com, 1 lifenexto.com, 1 lifeqa.net, 1 lifequotes-uk.co.uk, 1 lifesafety.com.br, 1 lifescience-japan.com, 1 lifestylefinancial.ca, 1 @@ -20425,16 +20417,17 @@ lode.li, 1 loeildansledoigt.fr, 1 loenshotel.de, 1 loew.de, 1 loforo.com, 1 lofttravel.com, 1 log.my, 0 logaldeveloper.com, 1 loganmarchione.com, 1 +loganparkneighborhood.org, 1 logbook.ch, 1 logbot.info, 1 logcat.info, 1 logement-saisonnier.com, 1 logement.com, 1 logentries.com, 0 logexplorer.net, 1 logfile.at, 1 @@ -20734,17 +20727,16 @@ lukasschauer.de, 1 lukasschick.de, 0 lukasunger.cz, 1 lukasunger.net, 1 lukaszorn.de, 1 lukasztkacz.com, 1 lukatz.de, 1 luke.ch, 1 lukeistschuld.de, 1 -lukeng.net, 1 lukesbouncycastlehire.com, 1 lukestebbing.com, 1 lukmanulhakim.id, 1 lukull-pizza.de, 1 lumer.tech, 1 lumi.pw, 1 lumiere.com, 1 luminancy.com, 1 @@ -20796,16 +20788,17 @@ luxonetwork.com, 1 luxsci.com, 1 luxurynsight.net, 1 luxuryweddingsindonesia.com, 1 luxusnivoucher.cz, 1 luxusnyvoucher.sk, 1 luxvacuos.net, 1 luxwatch.com, 1 luzat.com, 1 +luzfaltex.com, 1 lv.search.yahoo.com, 0 lv0.it, 1 lv5.top, 1 lvmoo.com, 1 lvrsystems.com, 1 lwl-foej-bewerbung.de, 0 lwl.moe, 1 lwl12.com, 1 @@ -21737,16 +21730,17 @@ medicare-providers.net, 1 medicarecoveragefinder.com, 1 medicareinfo.org, 1 medicinesfast.com, 0 medicinia.com.br, 1 medicinskavranje.edu.rs, 1 medicocompetente.it, 1 medicoresponde.com.br, 1 medienweite.de, 1 +medifab.online, 1 medifi.com, 1 medigap-quote.net, 1 medinside.ch, 1 medinside.li, 1 medinsider.ch, 1 medinsider.li, 1 medireport.fr, 1 mediter-simplement.com, 1 @@ -21764,16 +21758,17 @@ medtankers.management, 1 medtehnika.ua, 1 medusa.wtf, 1 meduza.io, 1 medvet.com.es, 1 medwaybouncycastlehire.co.uk, 1 medy-me.com, 1 medyotan.ga, 1 meedoenhartvanwestbrabant.nl, 1 +meedoennoordkop.nl, 0 meehle.com, 1 meeko.cc, 1 meerutcake.com, 1 meet.google.com, 1 meetbot.fedoraproject.org, 1 meetingapplication.com, 1 meetingfriends.ch, 1 meetings2.com, 1 @@ -21895,16 +21890,17 @@ mendozagenevieve.com, 1 mendy.jp, 1 menielias.com, 1 menkyo-blog.com, 1 mennace.com, 1 menntagatt.is, 1 menole.com, 1 menole.de, 1 menole.net, 1 +menotag.com, 1 mensagemaniversario.com.br, 1 mensagemdaluz.com, 1 mensagensaniversario.com.br, 1 mensagensdeconforto.com.br, 1 mensagensperfeitas.com.br, 1 mensch-peter.me, 1 mentalhealth.gov, 1 mentalhealthmn.org, 1 @@ -22290,16 +22286,17 @@ minnesotamathcorps.org, 1 minnesotareadingcorps.org, 1 minnit.chat, 1 minobar.com, 1 minor.news, 1 minorshadows.net, 1 minpingvin.dk, 1 minschuns.ch, 1 mintclass.com, 1 +mintea-noua.ro, 1 minto.cc, 1 mintosherbs.com, 1 mintrak2.com, 1 minu.link, 1 minube.co.cr, 1 minux.info, 1 mipapo.de, 1 mipla.ch, 1 @@ -22891,17 +22888,16 @@ msp66.de, 0 mspnocsupport.com, 1 mspsocial.net, 1 msquadrat.de, 1 mssys.de, 1 mstdn.blue, 1 mstdn.club, 1 mstdn.fr, 1 mstdn.io, 1 -mstdn.nl, 1 mstdn.onl, 0 mstiles92.com, 1 msuess.me, 1 msuna.net, 1 msv-limpezas.pt, 1 msx.org, 1 msz-fotografie.de, 1 mszavodumiru.cz, 1 @@ -24298,16 +24294,17 @@ northconsulting.fr, 1 northcountykiaparts.com, 1 northdevonbouncycastles.co.uk, 1 northeastcdc.org, 1 northeastrodeo.co.uk, 1 northern-lakes.com, 1 northernhamsterclub.com, 1 northernmuscle.ca, 1 northernselfstorage.co.za, 1 +northfieldyarn.com, 1 northokanaganbookkeeping.com, 1 northpole.dance, 1 northridgeelectrical.com, 1 northumbriagames.co.uk, 1 northwoodsfish.com, 1 norys-escape.de, 1 nos-medias.fr, 1 nos-oignons.net, 1 @@ -25265,17 +25262,16 @@ ozonytron.eu, 1 ozvolvo.org, 1 p-pc.de, 1 p-s-b.com, 1 p-t.io, 1 p.ki, 1 p1984.nl, 0 p1ratrulezzz.me, 1 p22.co, 1 -p3ter.fr, 1 p4chivtac.com, 1 p5r.uk, 1 pa-w.de, 1 pa.search.yahoo.com, 0 paarberatung-hn.de, 1 paass.net, 1 paazmaya.fi, 1 pablo.im, 1 @@ -25530,16 +25526,17 @@ partybounceplay.co.uk, 1 partycentrumdebinnenhof.nl, 1 partycentrumopenhuis.nl, 1 partyhireisleofwight.co.uk, 1 partyhireliverpool.co.uk, 1 partypearl.de, 1 partyrocksbounce.co.uk, 1 partyschnaps.com, 1 partyspaces.co.uk, 1 +partyspecialists.com, 1 partytime-uk.co.uk, 1 partytimeltd.ie, 1 partytownireland.co.uk, 1 partytownmarquees.co.uk, 1 partyvan.io, 1 partyzone.ie, 1 parvaneh.fr, 1 pasadenapooch.org, 1 @@ -25848,17 +25845,16 @@ penrithapartments.com.au, 1 pens.com, 1 pensacolawinterfest.org, 1 pensador.com, 1 pensador.info, 1 penser-electronique.com, 1 pensioenfonds-ey.nl, 1 pension-veldzigt.nl, 1 pension-waldesruh.de, 1 -pensionpilot.ca, 1 pensiunealido.ro, 1 pentandra.com, 1 pentest.blog, 1 pentest.nl, 1 pentesterlab.com, 1 penticton.photography, 1 pentofun.ch, 1 penz.media, 1 @@ -26339,16 +26335,17 @@ planbox.info, 1 planer.me, 1 planet-work.com, 1 planetanim.fr, 1 planetasuboficial.com.br, 1 planetau2.com, 1 planetbeauty.com, 1 planetbreath.ch, 1 planete-cocoon.com, 0 +planete-lira.fr, 1 planete-secu.com, 1 planeteroliste.com, 1 planeteroliste.fr, 1 planetknauer.net, 1 planetromeo.com, 1 planetromeofoundation.org, 1 planformation.com, 1 planify.io, 1 @@ -26453,17 +26450,16 @@ plural.cafe, 1 plus-5.com, 1 plus.google.com, 1 plus.sandbox.google.com, 1 plus1s.tk, 1 plushev.com, 1 pluslink.co.jp, 1 plussizereviews.com, 1 plusstreamfeed.appspot.com, 1 -plustech.id, 1 pluta.net, 1 pluto.life, 1 plutokorea.com, 1 plutopia.ch, 1 plymouthbouncycastles.co.uk, 1 plymouthglassgallery.com, 1 plzdontpwn.me, 1 plzenskybarcamp.cz, 1 @@ -27227,16 +27223,17 @@ psychicsource.com, 1 psychintervention.com, 1 psycho-lobby.com, 1 psycho.space, 1 psychoactive.com, 1 psychoco.net, 1 psychotherapie-kp.de, 1 psydix.org, 1 psyk.yt, 1 +psylab.cc, 1 psylab.re, 1 psylab.vip, 1 psynapse.net.au, 1 psytrance-pro.com, 1 pt-server.de, 1 ptal.eu, 1 ptbi.org.pl, 1 ptbx.co, 1 @@ -27683,16 +27680,17 @@ randc.org, 1 random-samplings.org, 1 randomadversary.com, 1 randombit.eu, 0 randomcode.org, 1 randomdysfunctions.com, 1 randomkoalafacts.com, 1 randomprecision.co.uk, 1 randomquotesapp.com, 1 +randy.su, 1 rangde.org, 1 rangsmo.se, 1 rank-net.de, 1 ranking-deli.jp, 1 ranos.org, 1 ranson.com.au, 1 rantanda.com, 1 ranyeh.co, 1 @@ -28716,16 +28714,17 @@ royalcitytaxi.ca, 1 royalcitytaxi.com, 1 royalmarinesassociation.org.uk, 1 royalnissanparts.com, 1 royalpalacenogent.fr, 1 royalrangers.fi, 1 royalty-market.com, 1 royalvisiongroup.com, 1 royzez.com, 1 +rozalisbengal.ro, 1 rozalynne-dawn.ga, 1 rozhodce.cz, 1 rpadovani.com, 1 rpasafrica.com, 1 rpgmaker.es, 1 rpherbig.com, 1 rphl.net, 1 rpine.net, 1 @@ -28823,17 +28822,16 @@ rugby.video, 1 rugk.dedyn.io, 1 ruh-veit.de, 1 ruhr3.de, 1 ruhrmobil-e.de, 1 ruhrnalist.de, 1 ruht.ro, 1 ruigomes.me, 1 ruiming.me, 1 -ruja.dk, 1 ruk.ca, 1 rukhaiyar.com, 1 rullzer.com, 1 rulu.co, 1 rulu.tv, 1 rulutv.com, 1 rumlager.de, 1 rummel-platz.de, 1 @@ -29173,17 +29171,16 @@ santmark.com, 1 santmark.eu, 1 santmark.fi, 1 santmark.info, 1 santmark.net, 1 santmark.org, 1 santodomingocg.org, 1 santojuken.co.jp, 1 sanvitolocapobus.com, 1 -saoneth.pl, 1 saorsat.com, 1 saorsat.ie, 1 saorview.com, 1 saorviewconnect.ie, 1 saorviewconnected.ie, 1 sapac.es, 1 sapereaude.com.pl, 1 sapien-ci.com, 1 @@ -29228,17 +29225,16 @@ sasyabapi.com, 1 sat4all.com, 1 sat7a-riyadh.com, 1 satai.dk, 1 saterdalen.net, 1 satimagingcorp.com, 1 satinn.pl, 1 sativatunja.com, 1 satmd.de, 1 -satrent.com, 1 saturn.pl, 1 saudavel.com.vc, 1 saudeealimentos.com, 1 saudeintimadamulher.com.br, 1 saudenoclique.com.br, 1 sauenytt.no, 1 sauer-systems.net, 1 sauerbrey.eu, 1 @@ -29467,22 +29463,20 @@ scienceminnesota.com, 1 sciencemonster.co.uk, 1 sciencesolutions.eu, 1 sciencex.com, 1 scifi.fyi, 1 scijinks.gov, 1 scimage.com, 1 scintilla.nl, 1 scintillating.stream, 1 -scionasset.com, 1 scis.com.ua, 1 scistarter.com, 1 scitopia.me, 1 scitopia.net, 1 -sckc.stream, 1 scm-2017.org, 1 scoolcode.com, 1 scoop6.co.uk, 1 scootaloo.co.uk, 1 scooterservis.com, 1 scootfleet.com, 1 scorobudem.ru, 1 scorocode.ru, 1 @@ -29540,16 +29534,17 @@ sculpture.support, 1 scuolaguidalame.ch, 1 scw.com, 1 scw.nz, 1 scwilliams.co.uk, 1 scwilliams.uk, 1 sd.af, 1 sdcardrecovery.de, 1 sdg-tracker.org, 1 +sdho.org, 1 sdns.fr, 1 sdsi.us, 1 sdsmanagement.me, 1 sdsmt.engineering, 1 sdvigpress.org, 1 sdvx.net, 1 sdxcentral.com, 1 se.search.yahoo.com, 0 @@ -30710,17 +30705,16 @@ slapen17.nl, 1 slaps.be, 1 slash32.co.uk, 1 slash64.co.uk, 1 slash64.com, 1 slash64.uk, 1 slashbits.no, 1 slashcrypto.org, 1 slatemc.fun, 1 -slatop.org, 0 slaughter.com, 1 slaughterhouse.fr, 1 slavasveta.info, 1 slaws.io, 1 sleeplessbeastie.eu, 1 sleepmap.de, 1 sleepstar.co.uk, 1 sleepstar.de, 1 @@ -30775,17 +30769,16 @@ slytech.ch, 1 sm-supplements.gr, 1 sm.ms, 1 sm2016.ch, 1 sma-gift.com, 1 smackhappy.com, 1 smadav.ml, 1 smallchat.nl, 1 smalldata.tech, 1 -smalldogbreeds.net, 1 smalle-voet.de, 1 smallhadroncollider.com, 1 smallpath.me, 1 smallplanet.ch, 1 smalltalkconsulting.com, 1 smaltimento-rifiuti.org, 1 smaltimento.caserta.it, 1 smaltimento.napoli.it, 1 @@ -31214,17 +31207,16 @@ soybase.org, 1 sozai-good.com, 1 sozialy.com, 1 sozon.ca, 1 sp-sephiroth.jp, 1 sp.com.pl, 1 sp.rw, 1 space-it.de, 1 spacebaseapp.com, 1 -spacecafe.org, 1 spacedirectory.org, 1 spacedots.net, 1 spacehighway.ms, 1 spacehost.de, 0 spacelabs.io, 1 spacepage.be, 1 spaceweather.live, 1 spaceweatherlive.com, 1 @@ -31542,16 +31534,17 @@ stageirites.fr, 1 stageirites.org, 1 stagingjobshq.com, 1 stagstickets.co.uk, 1 stahlfors.com, 1 stainedglass.net.au, 1 stair.ch, 1 stairfallgames.com, 1 stairlin.com, 1 +staklim-malang.info, 1 staktrace.com, 1 stalder.work, 1 stalker-shop.com, 1 stalkr.net, 1 stalkthe.net, 1 stall-zur-linde.de, 1 stamboommuller.nl, 1 stamboomvanderwal.nl, 1 @@ -32064,16 +32057,17 @@ suluvir.com, 1 sumguy.com, 1 summa-prefis.com, 1 summa.eu, 0 summer.ga, 1 summercampthailand.com, 1 summershomes.com, 1 sumthing.com, 1 sun-leo.co.jp, 1 +sun-wellness-online.com.vn, 1 sunboxstore.jp, 1 sunbritetv.com, 1 sunchasercats.com, 1 sundanceusa.com, 1 sundayfundayjapan.com, 1 suneilpatel.com, 1 sunfeathers.net, 1 sunfireshop.com.br, 1 @@ -32404,16 +32398,17 @@ t2i.nl, 1 t3rror.net, 1 t47.io, 1 t7e.de, 0 ta-65.com, 1 ta-sports.net, 1 ta65.com, 1 taabe.net, 1 taartbesteld.nl, 1 +taartenfeesies.nl, 1 tab.watch, 1 tabarnak.ga, 1 tabernadovinho.com.br, 1 tabino.top, 1 tabithawebb.co.uk, 1 tabla-periodica.com, 1 tabledusud.be, 1 tabledusud.nl, 1 @@ -33288,16 +33283,17 @@ theswissbay.ch, 1 thetapirsmouth.com, 1 thetechnical.me, 1 thetenscrolls.com, 1 thetomharling.com, 1 thetrendspotter.net, 1 thetruthhurvitz.com, 1 thetuxkeeper.de, 0 theunitedstates.io, 1 +theuucc.org, 1 thevacweb.com, 1 thevalentineconstitution.com, 1 thevgg.com, 0 thevoid.one, 1 thewarrencenter.org, 1 thewebdexter.com, 1 thewebflash.com, 1 thewebsitedoctors.co.uk, 1 @@ -33613,16 +33609,17 @@ tkanemoto.com, 1 tkat.ch, 1 tkeycoin.com, 1 tkgpm.com, 1 tkn.me, 1 tkn.tokyo, 1 tkts.cl, 1 tkusano.jp, 1 tkw01536.de, 1 +tlach.cz, 1 tlca.org, 1 tlcnet.info, 1 tlehseasyads.com, 1 tleng.de, 1 tlo.xyz, 1 tloxygen.com, 1 tls-proxy.de, 1 tls.builders, 1 @@ -34298,17 +34295,16 @@ trustfield.ch, 1 trustserv.de, 1 truthmessages.pw, 1 trw-reseller.com, 1 trybabyschoice.com, 1 trybooking.com, 1 tryfabulousdiet.com, 1 tryfabulousskincream.com, 1 tryfabulousskinserum.com, 1 -tryfm.net, 1 trygarciniaslimdiet.com, 1 tryhard.cz, 1 trymegadrol.com, 1 trynowrinkleseyeserum.com, 1 trynta.com, 1 trynta.net, 1 tryretool.com, 1 tryti.me, 1 @@ -34623,16 +34619,17 @@ uhc.gg, 1 uhlhosting.ch, 1 uhrenlux.de, 1 uhuru-market.com, 1 ui8.net, 1 uiberlay.cz, 1 uicchy.com, 1 uiop.link, 1 uitgeverij-deviant.nl, 1 +uitslagensoftware.nl, 1 ujob.com.cn, 1 uk.dating, 1 uk.search.yahoo.com, 0 ukbc.london, 1 ukchemicalresearch.org, 0 ukclimbing.com, 1 ukdefencejournal.org.uk, 1 ukhas.net, 1 @@ -35618,17 +35615,16 @@ voidshift.com, 1 voipkb.com, 1 voipsun.com, 1 vokativy.cz, 0 vokeapp.com, 1 volcain.io, 1 volcanconcretos.com, 1 volga.us, 1 volgavibes.ru, 0 -voliere-info.nl, 0 volker-gropp.de, 1 volkergropp.de, 1 volkerwesselstransfer.nl, 1 volkswurst.de, 1 vollans.id.au, 1 voloevents.com, 1 volta.io, 1 voltimax.com, 1 @@ -35775,16 +35771,17 @@ wacky.one, 1 wadidi.com, 1 wadsworth.gallery, 1 wadvisor.com, 1 waelisch.de, 1 waelti.xxx, 1 waf.ninja, 1 waf.sexy, 1 wafa4hw.com, 1 +wafairhaven.com.au, 1 wafelland.be, 1 waffle.at, 1 wafni.com, 1 wahhoi.net, 1 wahidhasan.com, 1 wahlman.org, 1 wahrnehmungswelt.de, 1 wahrnehmungswelten.de, 1 @@ -35804,17 +35801,16 @@ waka88.com, 1 waka88.net, 1 wakamiyasumiyosi.com, 1 wakatime.com, 1 wakfu.cc, 1 wakiminblog.com, 1 wala-floor.de, 1 walk.onl, 1 walkhighlandsandislands.com, 1 -walkingforhealth.org.uk, 1 walkingrehabilitation.com, 1 walksedona.com, 1 wallabies.org, 1 wallace-group.net, 1 wallacehigh.org.uk, 1 wallacequinn.co.uk, 1 wallet.google.com, 1 wallet.pp.ua, 1 @@ -35878,17 +35874,16 @@ warringtonkidsbouncycastles.co.uk, 1 warschild.org, 1 wartorngalaxy.com, 1 wasatchconstables.com, 1 waschpark-hantschel.de, 1 wasema.com, 1 wasfestes.de, 1 washingtonregisteredagent.io, 1 washingtonviews.com, 1 -wasielewski.com.de, 1 wasil.org, 1 waslh.com, 1 wasserburg.dk, 1 wasserspucker.de, 1 wassibauer.com, 1 wassim.is, 1 wastrel.ch, 1 watashi.bid, 1 @@ -36033,16 +36028,17 @@ webjobposting.com, 1 webkeks.org, 1 weblagring.se, 1 weblate.org, 1 webless.com, 1 webliberty.ru, 1 weblogic.pl, 1 weblogzwolle.nl, 1 webmail.gigahost.dk, 0 +webmail.info, 0 webmail.onlime.ch, 0 webmail.schokokeks.org, 0 webmail.xalqbank.az, 1 webmandesign.eu, 1 webmax.com.tr, 1 webmedpharmacy.co.uk, 1 webmel.com, 1 webmetering.at, 1 @@ -36103,17 +36099,17 @@ webtobesocial.de, 1 webtorrent.io, 1 webtrh.cz, 1 webtropia.com, 0 webukhost.com, 1 webwednesday.nl, 1 webwinkelwestland.nl, 1 webwit.nl, 1 webwolf.co.za, 1 -webworkshop.ltd, 1 +webworkshop.ltd, 0 webyazilimankara.com, 1 webzanem.com, 1 wecanvisit.com, 1 wechatify.com, 1 wecleanbins.com, 1 wecobble.com, 1 wedding-m.jp, 1 weddingfantasy.ru, 1 @@ -36355,16 +36351,17 @@ whisky-circle.info, 1 whiskyglazen.nl, 1 whiskynerd.ca, 1 whisp.ly, 0 whispeer.de, 1 whisperinghoperanch.org, 1 whisperlab.org, 1 whistleb.com, 1 whistleblower.gov, 1 +whistler-transfers.com, 1 whitby-brewery.com, 1 whitealps.at, 1 whitealps.be, 1 whitealps.ch, 1 whitealps.de, 1 whitealps.fr, 1 whitealps.net, 1 whitebear.cloud, 1 @@ -37303,17 +37300,16 @@ xps2pdf.co.uk, 1 xpwn.cz, 1 xqin.net, 1 xr.cx, 1 xrippedhd.com, 1 xrockx.de, 1 xroot.org, 1 xs2a.no, 1 xscancun.com, 1 -xscapers.com, 1 xsec.me, 1 xsmobile.de, 1 xss.ht, 1 xss.sk, 1 xsstime.nl, 1 xsz.jp, 1 xt.om, 1 xtarget.ru, 1 @@ -37393,17 +37389,17 @@ yal.sh, 1 yalla.jp, 1 yallamotor.com, 1 yalook.com, 1 yama.su, 1 yamadaya.tv, 1 yamaken.jp, 1 yamashita-clinic.org, 1 yame2.com, 1 -yamm.io, 1 +yamm.io, 0 yanaduday.com, 1 yandere.moe, 1 yangjingwen.cn, 1 yanngraf.ch, 1 yanngraf.com, 1 yannick.cloud, 1 yanovich.net, 1 yanqiyu.info, 1 @@ -38044,17 +38040,16 @@ zopy.com.br, 1 zopyx.com, 1 zor.com, 1 zorgclustertool.nl, 1 zorig.ch, 1 zorium.org, 1 zorki.nl, 1 zorntt.fr, 1 zorz.info, 1 -zotero.org, 1 zouk.info, 1 zouyaoji.top, 1 zravypapir.cz, 1 zrn.in, 0 zrniecka-pre-sny.sk, 1 zrnieckapresny.sk, 1 zrt.io, 1 zs-reporyje.cz, 1
--- a/services/sync/locales/en-US/sync.properties +++ b/services/sync/locales/en-US/sync.properties @@ -1,16 +1,16 @@ # 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/. # %1: the user name (Ed), %2: the app name (Firefox), %3: the operating system (Android) client.name2 = %1$S’s %2$S on %3$S -# %S is the date and time at which the last sync successfully completed +# %S is the relative time at which the last sync successfully completed (e.g. 5 min. ago) lastSync2.label = Last sync: %S # signInToSync.description is the tooltip for the Sync buttons when Sync is # not configured. signInToSync.description = Sign In To Sync syncnow.label = Sync Now syncingtabs.label = Syncing Tabs…
--- a/servo/Cargo.lock +++ b/servo/Cargo.lock @@ -981,17 +981,17 @@ dependencies = [ "atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)", "cstr 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "malloc_size_of 0.0.1", "nsstring 0.1.0", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.19.0", "servo_arc 0.1.1", "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "style 0.0.1", "style_traits 0.0.1", ] [[package]] @@ -1401,17 +1401,17 @@ dependencies = [ "html5ever 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "malloc_size_of 0.0.1", "msg 0.0.1", "net_traits 0.0.1", "ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "profile_traits 0.0.1", "range 0.0.1", "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "script_layout_interface 0.0.1", "script_traits 0.0.1", "selectors 0.19.0", "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1446,17 +1446,17 @@ dependencies = [ "layout_traits 0.0.1", "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "malloc_size_of 0.0.1", "metrics 0.0.1", "msg 0.0.1", "net_traits 0.0.1", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "profile_traits 0.0.1", "range 0.0.1", "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "script 0.0.1", "script_layout_interface 0.0.1", "script_traits 0.0.1", "selectors 0.19.0", "serde_json 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2118,33 +2118,32 @@ name = "owning_ref" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot" -version = "0.4.8" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot_core" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2494,17 +2493,17 @@ dependencies = [ "mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "mitochondria 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "mozangle 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "mozjs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "net_traits 0.0.1", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "offscreen_gl_context 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "profile_traits 0.0.1", "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "ref_slice 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "script_layout_interface 0.0.1", @@ -2999,17 +2998,17 @@ dependencies = [ "malloc_size_of_derive 0.0.1", "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "nsstring 0.1.0", "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.19.0", "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "servo_arc 0.1.1", "servo_atoms 0.0.1", "servo_config 0.0.1", @@ -3042,17 +3041,17 @@ dependencies = [ name = "style_tests" version = "0.0.1" dependencies = [ "app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)", "euclid 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "selectors 0.19.0", "serde_json 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "servo_arc 0.1.1", "servo_atoms 0.0.1", "servo_config 0.0.1", "servo_url 0.0.1", "size_of_test 0.0.1", @@ -3917,18 +3916,18 @@ dependencies = [ "checksum ogg_metadata 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fc665717454399cba557c55ad226148996e9266ee291f8a37a98bb2cded0a490" "checksum openssl 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "419ef26bb651d72b6c5a603bcc4e4856a362460e62352dfffa53de91d2e81181" "checksum openssl-sys 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5483bdc56756041ba6aa37c9cb59cc2219f012a2a1377d97ad35556ac6676ee7" "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8" "checksum osmesa-src 17.3.1-devel (git+https://github.com/servo/osmesa-src)" = "<none>" "checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" "checksum ovr-mobile-sys 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a69b517feac6fc640f0679625defa0998bbcb32871a6901e63063c2abf9c4cbe" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" -"checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" -"checksum parking_lot_core 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6c677d78851950b3aec390e681a411f78cc250cba277d4f578758a377f727970" +"checksum parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9fd9d732f2de194336fb02fe11f9eed13d9e76f13f4315b4d88a14ca411750cd" +"checksum parking_lot_core 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "538ef00b7317875071d5e00f603f24d16f0b474c1a5fc0ccb8b454ca72eafa79" "checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" "checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356" "checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" "checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" "checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" "checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" "checksum plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "69c557e11e3a1533bc969fa596e5011e1d9f76dd61cd102ef942c9f8654b17a2"
--- a/servo/components/layout/Cargo.toml +++ b/servo/components/layout/Cargo.toml @@ -23,17 +23,17 @@ gfx_traits = {path = "../gfx_traits"} html5ever = "0.22" ipc-channel = "0.10" libc = "0.2" log = "0.3.5" malloc_size_of = { path = "../malloc_size_of" } msg = {path = "../msg"} net_traits = {path = "../net_traits"} ordered-float = "0.4" -parking_lot = "0.4" +parking_lot = "0.5" profile_traits = {path = "../profile_traits"} range = {path = "../range"} rayon = "1" script_layout_interface = {path = "../script_layout_interface"} script_traits = {path = "../script_traits"} selectors = { path = "../selectors" } serde = "1.0" servo_arc = {path = "../servo_arc"}
--- a/servo/components/layout_thread/Cargo.toml +++ b/servo/components/layout_thread/Cargo.toml @@ -25,17 +25,17 @@ layout = {path = "../layout"} layout_traits = {path = "../layout_traits"} lazy_static = "1" libc = "0.2" log = "0.3.5" malloc_size_of = { path = "../malloc_size_of" } metrics = {path = "../metrics"} msg = {path = "../msg"} net_traits = {path = "../net_traits"} -parking_lot = "0.4" +parking_lot = "0.5" profile_traits = {path = "../profile_traits"} range = {path = "../range"} rayon = "1" script = {path = "../script"} script_layout_interface = {path = "../script_layout_interface"} script_traits = {path = "../script_traits"} selectors = { path = "../selectors" } serde_json = "1.0"
--- a/servo/components/script/Cargo.toml +++ b/servo/components/script/Cargo.toml @@ -62,17 +62,17 @@ metrics = {path = "../metrics"} mitochondria = "1.1.2" mime = "0.2.1" mime_guess = "1.8.0" mozjs = { version = "0.3", features = ["promises"]} msg = {path = "../msg"} net_traits = {path = "../net_traits"} num-traits = "0.1.32" offscreen_gl_context = { version = "0.15", features = ["serde"] } -parking_lot = "0.4" +parking_lot = "0.5" phf = "0.7.18" profile_traits = {path = "../profile_traits"} ref_filter_map = "1.0.1" ref_slice = "1.0" regex = "0.2" script_layout_interface = {path = "../script_layout_interface"} script_plugins = {path = "../script_plugins"} script_traits = {path = "../script_traits"}
--- a/servo/components/style/Cargo.toml +++ b/servo/components/style/Cargo.toml @@ -47,17 +47,17 @@ malloc_size_of = { path = "../malloc_siz malloc_size_of_derive = { path = "../malloc_size_of_derive" } matches = "0.1" nsstring = {path = "../../support/gecko/nsstring", optional = true} num_cpus = {version = "1.1.0", optional = true} num-integer = "0.1.32" num-traits = "0.1.32" ordered-float = "0.4" owning_ref = "0.3.3" -parking_lot = "0.4" +parking_lot = "0.5" precomputed-hash = "0.1.1" rayon = "1" selectors = { path = "../selectors" } serde = {version = "1.0", optional = true, features = ["derive"]} servo_arc = { path = "../servo_arc" } servo_atoms = {path = "../atoms", optional = true} servo_config = {path = "../config", optional = true} smallbitvec = "1.0.6"
--- a/servo/ports/geckolib/Cargo.toml +++ b/servo/ports/geckolib/Cargo.toml @@ -17,14 +17,14 @@ gecko_debug = ["style/gecko_debug"] atomic_refcell = "0.1" cssparser = "0.23.0" cstr = "0.1.2" env_logger = {version = "0.4", default-features = false} # disable `regex` to reduce code size libc = "0.2" log = {version = "0.3.5", features = ["release_max_level_info"]} malloc_size_of = {path = "../../components/malloc_size_of"} nsstring = {path = "../../support/gecko/nsstring"} -parking_lot = "0.4" +parking_lot = "0.5" selectors = {path = "../../components/selectors"} servo_arc = {path = "../../components/servo_arc"} smallvec = "0.6" style = {path = "../../components/style", features = ["gecko"]} style_traits = {path = "../../components/style_traits"}
--- a/servo/tests/unit/style/Cargo.toml +++ b/servo/tests/unit/style/Cargo.toml @@ -10,17 +10,17 @@ path = "lib.rs" doctest = false [dependencies] byteorder = "1.0" app_units = "0.6" cssparser = "0.23.0" euclid = "0.17" html5ever = "0.22" -parking_lot = "0.4" +parking_lot = "0.5" rayon = "1" serde_json = "1.0" selectors = {path = "../../../components/selectors"} servo_arc = {path = "../../../components/servo_arc"} servo_atoms = {path = "../../../components/atoms"} servo_config = {path = "../../../components/config"} servo_url = {path = "../../../components/url"} size_of_test = {path = "../../../components/size_of_test"}
--- a/testing/marionette/element.js +++ b/testing/marionette/element.js @@ -436,34 +436,36 @@ element.findByXPathAll = function* (docu * Where in the DOM hierarchy to begin searching. * @param {string} linkText * Link text to search for. * * @return {Iterable.<HTMLAnchorElement>} * Sequence of link elements which text is <var>s</var>. */ element.findByLinkText = function(startNode, linkText) { - return filterLinks(startNode, link => link.text.trim() === linkText); + return filterLinks(startNode, + link => atom.getElementText(link).trim() === linkText); }; /** * Find all hyperlinks descendant of <var>startNode</var> which * link text contains <var>linkText</var>. * * @param {Element} startNode * Where in the DOM hierachy to begin searching. * @param {string} linkText * Link text to search for. * * @return {Iterable.<HTMLAnchorElement>} * Iterator of link elements which text containins * <var>linkText</var>. */ element.findByPartialLinkText = function(startNode, linkText) { - return filterLinks(startNode, link => link.text.includes(linkText)); + return filterLinks(startNode, + link => atom.getElementText(link).includes(linkText)); }; /** * Find anonymous nodes of <var>node</var>. * * @param {XULDocument} document * Root node of the document. * @param {XULElement} node @@ -546,25 +548,25 @@ function findElement(strategy, selector, case element.Strategy.TagName: return startNode.getElementsByTagName(selector)[0]; case element.Strategy.XPath: return element.findByXPath(document, startNode, selector); case element.Strategy.LinkText: for (let link of startNode.getElementsByTagName("a")) { - if (link.text.trim() === selector) { + if (atom.getElementText(link).trim() === selector) { return link; } } return undefined; case element.Strategy.PartialLinkText: for (let link of startNode.getElementsByTagName("a")) { - if (link.text.includes(selector)) { + if (atom.getElementText(link).includes(selector)) { return link; } } return undefined; case element.Strategy.Selector: try { return startNode.querySelector(selector);
--- a/testing/marionette/harness/marionette_harness/tests/unit/test_element_retrieval.py +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_element_retrieval.py @@ -37,19 +37,16 @@ id_xhtml = inline('<p id="foo"></p>', do parent_child_html = inline("<div id=parent><p id=child></p></div>", doctype="html") parent_child_xhtml = inline('<div id="parent"><p id="child"></p></div>', doctype="xhtml") children_html = inline("<div><p>foo <p>bar</div>", doctype="html") children_xhtml = inline("<div><p>foo</p> <p>bar</p></div>", doctype="xhtml") class_html = inline("<p class='foo bar'>", doctype="html") class_xhtml = inline('<p class="foo bar"></p>', doctype="xhtml") name_html = inline("<p name=foo>", doctype="html") name_xhtml = inline('<p name="foo"></p>', doctype="xhtml") -link_html = inline("<p><a href=#>foo bar</a>", doctype="html") -link_html_with_trailing_space = inline("<p><a href=#>a link with a trailing space </a>") -link_xhtml = inline('<p><a href="#">foo bar</a></p>', doctype="xhtml") class TestFindElementHTML(MarionetteTestCase): def setUp(self): MarionetteTestCase.setUp(self) self.marionette.timeout.implicit = 0 def test_id(self): @@ -95,37 +92,16 @@ class TestFindElementHTML(MarionetteTest found = self.marionette.find_element(By.CSS_SELECTOR, "p") self.assertIsInstance(found, HTMLElement) self.assertEqual(el, found) def test_invalid_css_selector_should_throw(self): with self.assertRaises(InvalidSelectorException): self.marionette.find_element(By.CSS_SELECTOR, "#") - def test_link_text(self): - self.marionette.navigate(link_html) - el = self.marionette.execute_script("return document.querySelector('a')") - found = self.marionette.find_element(By.LINK_TEXT, "foo bar") - self.assertIsInstance(found, HTMLElement) - self.assertEqual(el, found) - - def test_link_text_with_trailing_space(self): - self.marionette.navigate(link_html_with_trailing_space) - el = self.marionette.execute_script("return document.querySelector('a')") - found = self.marionette.find_element(By.LINK_TEXT, "a link with a trailing space") - self.assertIsInstance(found, HTMLElement) - self.assertEqual(el, found) - - def test_partial_link_text(self): - self.marionette.navigate(link_html) - el = self.marionette.execute_script("return document.querySelector('a')") - found = self.marionette.find_element(By.PARTIAL_LINK_TEXT, "foo") - self.assertIsInstance(found, HTMLElement) - self.assertEqual(el, found) - def test_xpath(self): self.marionette.navigate(id_html) el = self.marionette.execute_script("return document.querySelector('#foo')") found = self.marionette.find_element(By.XPATH, "id('foo')") self.assertIsInstance(found, HTMLElement) self.assertEqual(el, found) def test_not_found(self): @@ -259,30 +235,16 @@ class TestFindElementXHTML(MarionetteTes def test_css_selector(self): self.marionette.navigate(children_xhtml) el = self.marionette.execute_script("return document.querySelector('p')") found = self.marionette.find_element(By.CSS_SELECTOR, "p") self.assertIsInstance(found, HTMLElement) self.assertEqual(el, found) - def test_link_text(self): - self.marionette.navigate(link_xhtml) - el = self.marionette.execute_script("return document.querySelector('a')") - found = self.marionette.find_element(By.LINK_TEXT, "foo bar") - self.assertIsInstance(found, HTMLElement) - self.assertEqual(el, found) - - def test_partial_link_text(self): - self.marionette.navigate(link_xhtml) - el = self.marionette.execute_script("return document.querySelector('a')") - found = self.marionette.find_element(By.PARTIAL_LINK_TEXT, "foo") - self.assertIsInstance(found, HTMLElement) - self.assertEqual(el, found) - def test_xpath(self): self.marionette.navigate(id_xhtml) el = self.marionette.execute_script("return document.querySelector('#foo')") found = self.marionette.find_element(By.XPATH, "id('foo')") self.assertIsInstance(found, HTMLElement) self.assertEqual(el, found) def test_css_selector_scope_does_not_start_at_rootnode(self): @@ -342,38 +304,16 @@ class TestFindElementsHTML(MarionetteTes found = self.marionette.find_elements(By.CSS_SELECTOR, "p") self.assertItemsIsInstance(found, HTMLElement) self.assertSequenceEqual(els, found) def test_invalid_css_selector_should_throw(self): with self.assertRaises(InvalidSelectorException): self.marionette.find_elements(By.CSS_SELECTOR, "#") - def test_link_text(self): - self.marionette.navigate(link_html) - els = self.marionette.execute_script("return document.querySelectorAll('a')") - found = self.marionette.find_elements(By.LINK_TEXT, "foo bar") - self.assertItemsIsInstance(found, HTMLElement) - self.assertSequenceEqual(els, found) - - def test_link_text_with_trailing_space(self): - self.marionette.navigate(link_html_with_trailing_space) - els = self.marionette.execute_script("return document.querySelectorAll('a')") - found = self.marionette.find_elements(By.LINK_TEXT, "a link with a trailing space") - self.assertItemsIsInstance(found, HTMLElement) - self.assertSequenceEqual(els, found) - - - def test_partial_link_text(self): - self.marionette.navigate(link_html) - els = self.marionette.execute_script("return document.querySelectorAll('a')") - found = self.marionette.find_elements(By.PARTIAL_LINK_TEXT, "foo") - self.assertItemsIsInstance(found, HTMLElement) - self.assertSequenceEqual(els, found) - def test_xpath(self): self.marionette.navigate(children_html) els = self.marionette.execute_script("return document.querySelectorAll('p')") found = self.marionette.find_elements(By.XPATH, ".//p") self.assertItemsIsInstance(found, HTMLElement) self.assertSequenceEqual(els, found) def test_css_selector_scope_doesnt_start_at_rootnode(self): @@ -450,30 +390,16 @@ class TestFindElementsXHTML(MarionetteTe def test_css_selector(self): self.marionette.navigate(children_xhtml) els = self.marionette.execute_script("return document.querySelectorAll('p')") found = self.marionette.find_elements(By.CSS_SELECTOR, "p") self.assertItemsIsInstance(found, HTMLElement) self.assertSequenceEqual(els, found) - def test_link_text(self): - self.marionette.navigate(link_xhtml) - els = self.marionette.execute_script("return document.querySelectorAll('a')") - found = self.marionette.find_elements(By.LINK_TEXT, "foo bar") - self.assertItemsIsInstance(found, HTMLElement) - self.assertSequenceEqual(els, found) - - def test_partial_link_text(self): - self.marionette.navigate(link_xhtml) - els = self.marionette.execute_script("return document.querySelectorAll('a')") - found = self.marionette.find_elements(By.PARTIAL_LINK_TEXT, "foo") - self.assertItemsIsInstance(found, HTMLElement) - self.assertSequenceEqual(els, found) - @skip("XHTML namespace not yet supported") def test_xpath(self): self.marionette.navigate(children_xhtml) els = self.marionette.execute_script("return document.querySelectorAll('p')") found = self.marionette.find_elements(By.XPATH, "//xhtml:p") self.assertItemsIsInstance(found, HTMLElement) self.assertSequenceEqual(els, found)
--- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -500889,37 +500889,37 @@ "a736f68dc602c0fccab56ec5cc6234cb3298c88d", "support" ], "css/css-scoping/shadow-cascade-order-001.html": [ "46913ea7e47811b11be898de5c3bd0a330ea6637", "testharness" ], "css/css-scoping/shadow-disabled-sheet-001.html": [ - "a3ddf0fe7fa422f5e712b8771669be76b0e3a798", + "3de2d23c1b3339b964ec2c009832a3207a3b9dc4", "reftest" ], "css/css-scoping/shadow-fallback-dynamic-001.html": [ - "062c99df18077a0205d0170d641b1d1e61199657", + "741cd9e29067a4634aa5beb6bd06afa540895d22", "reftest" ], "css/css-scoping/shadow-fallback-dynamic-002.html": [ - "2f66c8bca48c2ce5c9e82c5d67b152e2d143f4c6", + "e9a0d8178387901404030dde1b7ae7b2842f2eca", "reftest" ], "css/css-scoping/shadow-fallback-dynamic-003.html": [ - "f054b0974277fbee38a96a26559c9a15400266db", + "0b75fadbaee366349576e2d6f3ca8d6a49069f66", "reftest" ], "css/css-scoping/shadow-fallback-dynamic-004.html": [ - "fc33527eaaa7711ecb2c7cd9523e793bce2503f2", + "71dcc60c4ff59690927c1575fff2eecf85ee558f", "reftest" ], "css/css-scoping/shadow-fallback-dynamic-005.html": [ - "46d78b6d6931505bbc4bfc2f83e2bd0bac0d3472", + "ab3c3d205e59df800ba5b4217245b83685521c31", "reftest" ], "css/css-scoping/shadow-root-insert-into-document.html": [ "2cee9fff35c9222074f4ef78dcfcb8a3e02bbc98", "reftest" ], "css/css-scoping/slotted-invalidation.html": [ "c500e1ceba1b293d45df5f66fd89d4a5d9ceb952", @@ -593509,29 +593509,29 @@ "37af63203540dfe11d36fe05d74694f05c6505f2", "wdspec" ], "webdriver/tests/element_retrieval/__init__.py": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], "webdriver/tests/element_retrieval/find_element.py": [ - "699b97bd31eed625e2f0bed145aaf94c3e646853", + "8c9ed3ac2169f4b65a2e172a6e77b9586d83afa2", "wdspec" ], "webdriver/tests/element_retrieval/find_element_from_element.py": [ - "34f356f2579391289edb31adf5b4d4eb88ffc643", + "ecb74fc793a35481e2aa2456544b8b8f32d08546", "wdspec" ], "webdriver/tests/element_retrieval/find_elements.py": [ - "284ae53c5c94d02fb46b26dcd70af02d7917e7b4", + "fa8c2de1ffd12432bf14368b9c72000567ab8d20", "wdspec" ], "webdriver/tests/element_retrieval/find_elements_from_element.py": [ - "b062b9f044268f0d9e092def81afae1277a91cd8", + "6099bab098d03c0ac17134014b0acaf0b977731a", "wdspec" ], "webdriver/tests/element_retrieval/get_active_element.py": [ "7d40a7641dbf04cd78f1dba630afa2e8d80dad13", "wdspec" ], "webdriver/tests/element_send_keys/__init__.py": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", @@ -594653,17 +594653,17 @@ "f3255ca1da5c8e81c37e658cb2dc83e1a7dc2e63", "testharness" ], "websockets/Create-nonAscii-protocol-string.htm": [ "f556c52a5ba7370dfd94f57331d606b147b0932f", "testharness" ], "websockets/Create-on-worker-shutdown.html": [ - "75112264efdc3b310f4ba2ab4517b7608aacf2f2", + "213d7b23d154b930cc20985c2a86509fcdc09a9a", "testharness" ], "websockets/Create-protocol-with-space.htm": [ "923fd2681d86812d63347f995f91747ebec18a44", "testharness" ], "websockets/Create-protocols-repeated-case-insensitive.htm": [ "55a3dbf713cf45900f8af2e9c9bc2f41bb447141",
--- a/testing/web-platform/tests/webdriver/tests/element_retrieval/find_element.py +++ b/testing/web-platform/tests/webdriver/tests/element_retrieval/find_element.py @@ -46,31 +46,65 @@ def test_closed_context(session, create_ def test_find_element(session, using, value): # Step 8 - 9 session.url = inline("<a href=# id=linkText>full link text</a>") response = find_element(session, using, value) assert_success(response) +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_element_link_text(session, document, value): + # Step 8 - 9 + session.url = inline(document) + + response = find_element(session, "link text", value) + assert_success(response) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_element_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline(document) + + response = find_element(session, "partial link text", value) + assert_success(response) + + @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 response = find_element(session, using, value) assert_error(response, "no such element") @pytest.mark.parametrize("using,value", [("css selector", "#linkText"), ("link text", "full link text"), ("partial link text", "link text"), ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<a href="#" id="linkText">full link text</a>""", doctype="xhtml") + session.url = inline("""<a href="#" id="linkText">full link text</a>""", + doctype="xhtml") expected = session.execute_script("return document.links[0]") response = find_element(session, using, value) value = assert_success(response) assert_same_element(session, value, expected) @pytest.mark.parametrize("using,value",
--- a/testing/web-platform/tests/webdriver/tests/element_retrieval/find_element_from_element.py +++ b/testing/web-platform/tests/webdriver/tests/element_retrieval/find_element_from_element.py @@ -26,17 +26,16 @@ def test_invalid_selector_argument(sessi def test_closed_context(session, create_window): # Step 5 new_window = create_window() session.window_handle = new_window session.close() response = find_element(session, "notReal", "css selector", "foo") - assert_error(response, "no such window") @pytest.mark.parametrize("using,value", [("css selector", "#linkText"), ("link text", "full link text"), ("partial link text", "link text"), ("tag name", "a"), @@ -44,33 +43,69 @@ def test_closed_context(session, create_ def test_find_element(session, using, value): # Step 8 - 9 session.url = inline("<div><a href=# id=linkText>full link text</a></div>") element = session.find.css("div", all=False) response = find_element(session, element.id, using, value) assert_success(response) +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_element_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div>{0}</div>".format(document)) + element = session.find.css("div", all=False) + + response = find_element(session, element.id, "link text", value) + assert_success(response) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_element_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div>{0}</div>".format(document)) + element = session.find.css("div", all=False) + + response = find_element(session, element.id, "partial link text", value) + assert_success(response) + + @pytest.mark.parametrize("using,value",[("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 session.url = inline("<div></div>") element = session.find.css("div", all=False) response = find_element(session, element.id, using, value) assert_error(response, "no such element") @pytest.mark.parametrize("using,value", [("css selector", "#linkText"), ("link text", "full link text"), ("partial link text", "link text"), ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") + session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", + doctype="xhtml") from_element = session.execute_script("""return document.querySelector("p")""") expected = session.execute_script("return document.links[0]") response = find_element(session, from_element.id, using, value) value = assert_success(response) assert_same_element(session, value, expected)
--- a/testing/web-platform/tests/webdriver/tests/element_retrieval/find_elements.py +++ b/testing/web-platform/tests/webdriver/tests/element_retrieval/find_elements.py @@ -25,20 +25,17 @@ def test_invalid_selector_argument(sessi def test_closed_context(session, create_window): # Step 5 new_window = create_window() session.window_handle = new_window session.close() - response = session.transport.send("POST", - "session/%s/elements" % session.session_id, - {"using": "css selector", "value": "foo"}) - + response = find_elements(session, "css selector", "foo") assert_error(response, "no such window") @pytest.mark.parametrize("using,value", [("css selector", "#linkText"), ("link text", "full link text"), ("partial link text", "link text"), ("tag name", "a"), @@ -47,33 +44,79 @@ def test_find_elements(session, using, v # Step 8 - 9 session.url = inline("<a href=# id=linkText>full link text</a>") response = find_elements(session, using, value) assert_success(response) assert len(response.body["value"]) == 1 +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_elements_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<a href=#>not wanted</a><br/>{0}".format(document)) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, "link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_elements_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<a href=#>not wanted</a><br/>{0}".format(document)) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, "partial link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 response = find_elements(session, using, value) assert_success(response) assert response.body["value"] == [] @pytest.mark.parametrize("using,value", [("css selector", "#linkText"), ("link text", "full link text"), ("partial link text", "link text"), ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") - expected = session.execute_script("return document.links[0]") + session.url = inline("""<a href="#" id="linkText">full link text</a>""", + doctype="xhtml") + expected = session.execute_script("return document.links[0];") response = find_elements(session, using, value) value = assert_success(response) assert isinstance(value, list) assert len(value) == 1 found_element = value[0] assert_same_element(session, found_element, expected)
--- a/testing/web-platform/tests/webdriver/tests/element_retrieval/find_elements_from_element.py +++ b/testing/web-platform/tests/webdriver/tests/element_retrieval/find_elements_from_element.py @@ -43,33 +43,81 @@ def test_closed_context(session, create_ def test_find_elements(session, using, value): # Step 8 - 9 session.url = inline("<div><a href=# id=linkText>full link text</a></div>") element = session.find.css("div", all=False) response = find_elements(session, element.id, using, value) assert_success(response) +@pytest.mark.parametrize("document,value", [ + ("<a href=#>link text</a>", "link text"), + ("<a href=#> link text </a>", "link text"), + ("<a href=#>link<br>text</a>", "link\ntext"), + ("<a href=#>link&text</a>", "link&text"), + ("<a href=#>LINK TEXT</a>", "LINK TEXT"), + ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"), +]) +def test_find_elements_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document)) + element = session.find.css("div", all=False) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, element.id, "link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + +@pytest.mark.parametrize("document,value", [ + ("<a href=#>partial link text</a>", "link"), + ("<a href=#> partial link text </a>", "link"), + ("<a href=#>partial link text</a>", "k t"), + ("<a href=#>partial link<br>text</a>", "k\nt"), + ("<a href=#>partial link&text</a>", "k&t"), + ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"), + ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"), +]) +def test_find_elements_partial_link_text(session, document, value): + # Step 8 - 9 + session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document)) + element = session.find.css("div", all=False) + expected = session.execute_script("return document.links[1];") + + response = find_elements(session, element.id, "partial link text", value) + value = assert_success(response) + assert isinstance(value, list) + assert len(value) == 1 + + found_element = value[0] + assert_same_element(session, found_element, expected) + + @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) def test_no_element(session, using, value): # Step 8 - 9 session.url = inline("<div></div>") element = session.find.css("div", all=False) response = find_elements(session, element.id, using, value) assert response.body["value"] == [] @pytest.mark.parametrize("using,value", [("css selector", "#linkText"), ("link text", "full link text"), ("partial link text", "link text"), ("tag name", "a"), ("xpath", "//*[name()='a']")]) def test_xhtml_namespace(session, using, value): - session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") + session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", + doctype="xhtml") from_element = session.execute_script("""return document.querySelector("p")""") expected = session.execute_script("return document.links[0]") response = find_elements(session, from_element.id, using, value) value = assert_success(response) assert isinstance(value, list) assert len(value) == 1
--- a/third_party/rust/parking_lot/.cargo-checksum.json +++ b/third_party/rust/parking_lot/.cargo-checksum.json @@ -1,1 +1,1 @@ -{"files":{".travis.yml":"8e424960f1e47843f45cae205873e9590e4317b5b2316090f9f94cf2f5d704e8","Cargo.toml":"a31940ea072ae30f6df4c28f4fcbae206929a9e7e8adf19956dd9ed75fa7e75d","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"0c248175303f7dc19ce2cb30882c950a55a49da6b8c765c5ba49feb3e6eb7553","appveyor.yml":"cc608360622923f6f693cd68b4d7c1f64daa55f6b38f0df90f270825c6c276bc","src/condvar.rs":"962a3838e95cb664b261a44f536b003a284fe7bfdcb94a80c9a07c7679cae3dd","src/elision.rs":"0fef04d2991afeabafb041e81afeec74e89095d0eca49e5516bdcd5bc90c086f","src/lib.rs":"50951210148941266ce3a7d4017c339f8ad4419a9a8db6f915023890ed27d638","src/mutex.rs":"59cd61dd8deeaacceabd05e15b7fd6d2942e3f6c3c592221898d84a2ca804a6e","src/once.rs":"eada2e82bd8dcb9ed68d4fb2d9f8c336878eeb122f0bf8dde3feb2d77adfb598","src/raw_mutex.rs":"225cbf0ef951be062866da674e5eea8245fcc43ecd8a26da7097dea03b770bf5","src/raw_remutex.rs":"6c6d2aa83abe8f45db04de0efc04c70564cd0c55b6655da8ef4afe841c0add95","src/raw_rwlock.rs":"a7aebf70b8f7a43f96136388be1a54e5ca5b565c9da623f23434c99fb4c0b147","src/remutex.rs":"7f1640fa5a6eb43b592db47d9afa63904895030d246708ec8eac413dc8093514","src/rwlock.rs":"87d648c5fcccda784da165801b888a3592b6a85ddb605c1df3ae0e881dd22417","src/stable.rs":"cc18c58404dc6017924d88fb9f4ed94e5320b8cb0a36985162b23130b8cd7480","src/util.rs":"2d07c0c010a857790ae2ed6a1215eeed8af76859e076797ea1ba8dec82169e84"},"package":"37f364e2ce5efa24c7d0b6646d5bb61145551a0112f107ffd7499f1a3e322fbd"} \ No newline at end of file +{"files":{".travis.yml":"04d3d7425ce24e59d25df35da9c54f3ccd429c62ed8c9cf37b5ed2757afe96f1","Cargo.toml":"9e6a70c63617696e07a9130c27a80203180c1f240eb4ebdddde4429570da0c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"9d1e4237f1063e54aca1f65fc00a87ad53f75fcc73d054f8dd139f62f4a0b15e","appveyor.yml":"cfa9c3ae2476c879fe4240c306d45de6c2c04025212d8217fa76690888117594","src/condvar.rs":"1a3de60460e832d7ff76a82d5dac3f387fe2255e6a8ad4a686fe37f134c088c7","src/deadlock.rs":"82de990ef5966c852f8019b511e3c60471b562e56fd7ed0ca340399968b44a2d","src/elision.rs":"89072fe0aca87d53abc0f56490ae77bcf9d77e28e291bd13e861b1924bbb079f","src/lib.rs":"02d5716f4f43c2598afa57234e53d1a4c5db4f91ede937a226ee34eabbdc4da5","src/mutex.rs":"d8f557d40c3aab3e36f81961db9eb32831580a3a6a4b2a59674cafe6621e4772","src/once.rs":"1f408083854f918e896fdba8a9ecf25ae79ee06613d8daec75b800fb78dfd3a8","src/raw_mutex.rs":"f98ddd76e1491bc239b7c24e94f3f6a94ae0f5828873e78e1245ef19621a257b","src/raw_remutex.rs":"86e1e339567c12f91e3274ca3126c4af004fd30dff88a6cd261fc67680e33798","src/raw_rwlock.rs":"d3c71098df5e8b22cdfd7f8d7c3f287951d0bac1ac9ede83a94f809576ed9d41","src/remutex.rs":"d73f4a0f22f4a5e8c6126b784c03157f34456b0c1b90570b98db9f1c6b1f4046","src/rwlock.rs":"28e6c3a3d1aea9add4950fa5c67ba79f4aeb2e72830ff4d4a66adc2a9afa12dc","src/util.rs":"2d07c0c010a857790ae2ed6a1215eeed8af76859e076797ea1ba8dec82169e84"},"package":"9fd9d732f2de194336fb02fe11f9eed13d9e76f13f4315b4d88a14ca411750cd"} \ No newline at end of file
--- a/third_party/rust/parking_lot/.travis.yml +++ b/third_party/rust/parking_lot/.travis.yml @@ -1,38 +1,40 @@ language: rust sudo: false rust: -- 1.13.0 +- 1.18.0 - stable - beta - nightly before_script: - | pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH script: - cd core; - travis-cargo build; - cd ..; - travis-cargo build - travis-cargo test -- travis-cargo doc -- --no-deps -p parking_lot -p parking_lot_core +- travis-cargo test -- --features=deadlock_detection +- travis-cargo --only nightly doc -- --all-features --no-deps -p parking_lot -p parking_lot_core - if [ "$TRAVIS_RUST_VERSION" != "1.8.0" ]; then cd benchmark; travis-cargo build; travis-cargo run -- --release --bin mutex 2 1 0 1; travis-cargo run -- --release --bin rwlock 1 1 1 0 1; cd ..; fi after_success: - travis-cargo --only nightly doc-upload env: global: - TRAVIS_CARGO_NIGHTLY_FEATURE=nightly + - RUST_TEST_THREADS=1 notifications: email: false
--- a/third_party/rust/parking_lot/Cargo.toml +++ b/third_party/rust/parking_lot/Cargo.toml @@ -7,30 +7,29 @@ # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] name = "parking_lot" -version = "0.4.4" +version = "0.5.4" authors = ["Amanieu d'Antras <amanieu@gmail.com>"] description = "More compact and efficient implementations of the standard synchronization primitives." documentation = "https://amanieu.github.io/parking_lot/parking_lot/index.html" readme = "README.md" keywords = ["mutex", "condvar", "rwlock", "once", "thread"] license = "Apache-2.0/MIT" repository = "https://github.com/Amanieu/parking_lot" [dependencies.owning_ref] version = "0.3" optional = true [dependencies.parking_lot_core] version = "0.2" [dev-dependencies.rand] -version = "0.3" +version = "0.4" [features] +deadlock_detection = ["parking_lot_core/deadlock_detection"] default = ["owning_ref"] nightly = ["parking_lot_core/nightly"] -[target."cfg(not(target_os = \"emscripten\"))".dependencies.thread-id] -version = "3.0"
--- a/third_party/rust/parking_lot/README.md +++ b/third_party/rust/parking_lot/README.md @@ -42,32 +42,35 @@ 4. Microcontention (a contended lock wit lock. 5. The locks are adaptive and will suspend a thread after a few failed spin attempts. This makes the locks suitable for both long and short critical sections. 6. `Condvar`, `RwLock` and `Once` work on Windows XP, unlike the standard library versions of those types. 7. `RwLock` takes advantage of hardware lock elision on processors that support it, which can lead to huge performance wins with many readers. -8. `MutexGuard` (and the `RwLock` equivalents) is `Send`, which means it can - be unlocked by a different thread than the one that locked it. -9. `RwLock` uses a task-fair locking policy, which avoids reader and writer +8. `RwLock` uses a task-fair locking policy, which avoids reader and writer starvation, whereas the standard library version makes no guarantees. -10. `Condvar` is guaranteed not to produce spurious wakeups. A thread will +9. `Condvar` is guaranteed not to produce spurious wakeups. A thread will only be woken up if it timed out or it was woken up by a notification. -11. `Condvar::notify_all` will only wake up a single thread and requeue the +10. `Condvar::notify_all` will only wake up a single thread and requeue the rest to wait on the associated `Mutex`. This avoids a thundering herd problem where all threads try to acquire the lock at the same time. -12. `RwLock` supports atomically downgrading a write lock into a read lock. -13. `Mutex` and `RwLock` allow raw unlocking without a RAII guard object. -14. `Mutex<()>` and `RwLock<()>` allow raw locking without a RAII guard +11. `RwLock` supports atomically downgrading a write lock into a read lock. +12. `Mutex` and `RwLock` allow raw unlocking without a RAII guard object. +13. `Mutex<()>` and `RwLock<()>` allow raw locking without a RAII guard object. -15. `Mutex` and `RwLock` support [eventual fairness](https://trac.webkit.org/changeset/203350) +14. `Mutex` and `RwLock` support [eventual fairness](https://trac.webkit.org/changeset/203350) which allows them to be fair on average without sacrificing performance. -16. A `ReentrantMutex` type which supports recursive locking. +15. A `ReentrantMutex` type which supports recursive locking. +16. An *experimental* deadlock detector that works for `Mutex`, + `RwLock` and `ReentrantMutex`. This feature is disabled by default and + can be enabled via the `deadlock_detection` feature. +17. `RwLock` supports atomically upgrading an "upgradable" read lock into a + write lock. ## The parking lot To keep these primitives small, all thread queuing and suspending functionality is offloaded to the *parking lot*. The idea behind this is based on the Webkit [`WTF::ParkingLot`](https://webkit.org/blog/6161/locking-in-webkit/) class, which essentially consists of a hash table mapping of lock addresses to queues of parked (sleeping) threads. The Webkit parking lot was itself @@ -82,38 +85,44 @@ There are a few restrictions when using - `Mutex` and `Once` will use 1 word of space instead of 1 byte. - You will have to use `lazy_static!` to statically initialize `Mutex`, `Condvar` and `RwLock` types instead of `const fn`. - `RwLock` will not be able to take advantage of hardware lock elision for readers, which improves performance when there are multiple readers. - Slightly less efficient code may be generated for `compare_exchange` operations. This should not affect architectures like x86 though. +To enable nightly-only functionality, you need to enable the `nightly` feature +in Cargo (see below). + ## Usage Add this to your `Cargo.toml`: ```toml [dependencies] -parking_lot = "0.4" +parking_lot = "0.5" ``` and this to your crate root: ```rust extern crate parking_lot; ``` To enable nightly-only features, add this to your `Cargo.toml` instead: ```toml [dependencies] -parking_lot = {version = "0.4", features = ["nightly"]} +parking_lot = {version = "0.5", features = ["nightly"]} ``` +The experimental deadlock detector can be enabled with the +`deadlock_detection` Cargo feature. + The core parking lot API is provided by the `parking_lot_core` crate. It is separate from the synchronization primitives in the `parking_lot` crate so that changes to the core API do not cause breaking changes for users of `parking_lot`. ## License Licensed under either of
--- a/third_party/rust/parking_lot/appveyor.yml +++ b/third_party/rust/parking_lot/appveyor.yml @@ -1,27 +1,29 @@ environment: TRAVIS_CARGO_NIGHTLY_FEATURE: nightly + RUST_TEST_THREADS: 1 matrix: - TARGET: nightly-x86_64-pc-windows-msvc - TARGET: nightly-i686-pc-windows-msvc - TARGET: nightly-x86_64-pc-windows-gnu - TARGET: nightly-i686-pc-windows-gnu - - TARGET: 1.13.0-x86_64-pc-windows-msvc - - TARGET: 1.13.0-i686-pc-windows-msvc - - TARGET: 1.13.0-x86_64-pc-windows-gnu - - TARGET: 1.13.0-i686-pc-windows-gnu + - TARGET: 1.18.0-x86_64-pc-windows-msvc + - TARGET: 1.18.0-i686-pc-windows-msvc + - TARGET: 1.18.0-x86_64-pc-windows-gnu + - TARGET: 1.18.0-i686-pc-windows-gnu install: - SET PATH=C:\Python27;C:\Python27\Scripts;%PATH%;%APPDATA%\Python\Scripts - pip install "travis-cargo<0.2" --user - ps: Start-FileDownload "https://static.rust-lang.org/dist/rust-${env:TARGET}.exe" -FileName "rust-install.exe" - ps: .\rust-install.exe /VERYSILENT /NORESTART /DIR="C:\rust" | Out-Null - ps: $env:PATH="$env:PATH;C:\rust\bin" - rustc -vV - cargo -vV build_script: - travis-cargo build test_script: - travis-cargo test + - travis-cargo test -- --features=deadlock_detection - travis-cargo doc
--- a/third_party/rust/parking_lot/src/condvar.rs +++ b/third_party/rust/parking_lot/src/condvar.rs @@ -3,19 +3,20 @@ // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or // http://opensource.org/licenses/MIT>, at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::sync::atomic::{AtomicPtr, Ordering}; use std::time::{Duration, Instant}; use std::ptr; -use parking_lot_core::{self, ParkResult, UnparkResult, RequeueOp, DEFAULT_PARK_TOKEN}; -use mutex::{MutexGuard, guard_lock}; -use raw_mutex::{RawMutex, TOKEN_NORMAL, TOKEN_HANDOFF}; +use parking_lot_core::{self, ParkResult, RequeueOp, UnparkResult, DEFAULT_PARK_TOKEN}; +use mutex::{guard_lock, MutexGuard}; +use raw_mutex::{RawMutex, TOKEN_HANDOFF, TOKEN_NORMAL}; +use deadlock; /// A type indicating whether a timed wait on a condition variable returned /// due to a time out or not. #[derive(Debug, PartialEq, Eq, Copy, Clone)] pub struct WaitTimeoutResult(bool); impl WaitTimeoutResult { /// Returns whether the wait was known to have timed out. @@ -83,25 +84,29 @@ pub struct Condvar { } impl Condvar { /// Creates a new condition variable which is ready to be waited on and /// notified. #[cfg(feature = "nightly")] #[inline] pub const fn new() -> Condvar { - Condvar { state: AtomicPtr::new(ptr::null_mut()) } + Condvar { + state: AtomicPtr::new(ptr::null_mut()), + } } /// Creates a new condition variable which is ready to be waited on and /// notified. #[cfg(not(feature = "nightly"))] #[inline] pub fn new() -> Condvar { - Condvar { state: AtomicPtr::new(ptr::null_mut()) } + Condvar { + state: AtomicPtr::new(ptr::null_mut()), + } } /// Wakes up one blocked thread on this condvar. /// /// If there is a blocked thread on this condition variable, then it will /// be woken up from its call to `wait` or `wait_timeout`. Calls to /// `notify_one` are not buffered in any way. /// @@ -233,20 +238,21 @@ impl Condvar { /// Like `wait`, the lock specified will be re-acquired when this function /// returns, regardless of whether the timeout elapsed or not. /// /// # Panics /// /// This function will panic if another thread is waiting on the `Condvar` /// with a different `Mutex` object. #[inline] - pub fn wait_until<T: ?Sized>(&self, - mutex_guard: &mut MutexGuard<T>, - timeout: Instant) - -> WaitTimeoutResult { + pub fn wait_until<T: ?Sized>( + &self, + mutex_guard: &mut MutexGuard<T>, + timeout: Instant, + ) -> WaitTimeoutResult { self.wait_until_internal(guard_lock(mutex_guard), Some(timeout)) } // This is a non-generic function to reduce the monomorphization cost of // using `wait_until`. fn wait_until_internal(&self, mutex: &RawMutex, timeout: Option<Instant>) -> WaitTimeoutResult { unsafe { let result; @@ -280,33 +286,37 @@ impl Condvar { // If we were the last thread on the queue then we need to // clear our state. This is normally done by the // notify_{one,all} functions when not timing out. if !requeued && was_last_thread { self.state.store(ptr::null_mut(), Ordering::Relaxed); } }; - result = parking_lot_core::park(addr, - validate, - before_sleep, - timed_out, - DEFAULT_PARK_TOKEN, - timeout); + result = parking_lot_core::park( + addr, + validate, + before_sleep, + timed_out, + DEFAULT_PARK_TOKEN, + timeout, + ); } // Panic if we tried to use multiple mutexes with a Condvar. Note // that at this point the MutexGuard is still locked. It will be // unlocked by the unwinding logic. if bad_mutex { panic!("attempted to use a condition variable with more than one mutex"); } // ... and re-lock it once we are done sleeping - if result != ParkResult::Unparked(TOKEN_HANDOFF) { + if result == ParkResult::Unparked(TOKEN_HANDOFF) { + deadlock::acquire_resource(mutex as *const _ as usize); + } else { mutex.lock(); } WaitTimeoutResult(!(result.is_unparked() || requeued)) } } /// Waits on this condition variable for a notification, timing out after a @@ -323,20 +333,21 @@ impl Condvar { /// the system time. /// /// The returned `WaitTimeoutResult` value indicates if the timeout is /// known to have elapsed. /// /// Like `wait`, the lock specified will be re-acquired when this function /// returns, regardless of whether the timeout elapsed or not. #[inline] - pub fn wait_for<T: ?Sized>(&self, - guard: &mut MutexGuard<T>, - timeout: Duration) - -> WaitTimeoutResult { + pub fn wait_for<T: ?Sized>( + &self, + guard: &mut MutexGuard<T>, + timeout: Duration, + ) -> WaitTimeoutResult { self.wait_until(guard, Instant::now() + timeout) } } impl Default for Condvar { #[inline] fn default() -> Condvar { Condvar::new() @@ -437,19 +448,20 @@ mod tests { let mut g = m.lock(); let no_timeout = c.wait_until(&mut g, Instant::now() + Duration::from_millis(1)); assert!(no_timeout.timed_out()); let _t = thread::spawn(move || { let _g = m2.lock(); c2.notify_one(); }); - let timeout_res = c.wait_until(&mut g, - Instant::now() + - Duration::from_millis(u32::max_value() as u64)); + let timeout_res = c.wait_until( + &mut g, + Instant::now() + Duration::from_millis(u32::max_value() as u64), + ); assert!(!timeout_res.timed_out()); drop(g); } #[test] #[should_panic] fn two_mutexes() { let m = Arc::new(Mutex::new(()));
new file mode 100644 --- /dev/null +++ b/third_party/rust/parking_lot/src/deadlock.rs @@ -0,0 +1,218 @@ +//! [Experimental] Deadlock detection +//! +//! This feature is optional and can be enabled via the `deadlock_detection` feature flag. +//! +//! # Example +//! +//! ``` +//! #[cfg(feature = "deadlock_detection")] +//! { // only for #[cfg] +//! use std::thread; +//! use std::time::Duration; +//! use parking_lot::deadlock; +//! +//! // Create a background thread which checks for deadlocks every 10s +//! thread::spawn(move || { +//! loop { +//! thread::sleep(Duration::from_secs(10)); +//! let deadlocks = deadlock::check_deadlock(); +//! if deadlocks.is_empty() { +//! continue; +//! } +//! +//! println!("{} deadlocks detected", deadlocks.len()); +//! for (i, threads) in deadlocks.iter().enumerate() { +//! println!("Deadlock #{}", i); +//! for t in threads { +//! println!("Thread Id {:#?}", t.thread_id()); +//! println!("{:#?}", t.backtrace()); +//! } +//! } +//! } +//! }); +//! } // only for #[cfg] +//! ``` + +#[cfg(feature = "deadlock_detection")] +pub use parking_lot_core::deadlock::check_deadlock; +pub(crate) use parking_lot_core::deadlock::{acquire_resource, release_resource}; + +#[cfg(test)] +#[cfg(feature = "deadlock_detection")] +mod tests { + use std::thread::{self, sleep}; + use std::sync::{Arc, Barrier}; + use std::time::Duration; + use {Mutex, ReentrantMutex, RwLock}; + + fn check_deadlock() -> bool { + use parking_lot_core::deadlock::check_deadlock; + !check_deadlock().is_empty() + } + + #[test] + fn test_mutex_deadlock() { + let m1: Arc<Mutex<()>> = Default::default(); + let m2: Arc<Mutex<()>> = Default::default(); + let m3: Arc<Mutex<()>> = Default::default(); + let b = Arc::new(Barrier::new(4)); + + let m1_ = m1.clone(); + let m2_ = m2.clone(); + let m3_ = m3.clone(); + let b1 = b.clone(); + let b2 = b.clone(); + let b3 = b.clone(); + + assert!(!check_deadlock()); + + let _t1 = thread::spawn(move || { + let _g = m1.lock(); + b1.wait(); + let _ = m2_.lock(); + }); + + let _t2 = thread::spawn(move || { + let _g = m2.lock(); + b2.wait(); + let _ = m3_.lock(); + }); + + let _t3 = thread::spawn(move || { + let _g = m3.lock(); + b3.wait(); + let _ = m1_.lock(); + }); + + assert!(!check_deadlock()); + + b.wait(); + sleep(Duration::from_millis(50)); + assert!(check_deadlock()); + + assert!(!check_deadlock()); + } + + #[test] + fn test_mutex_deadlock_reentrant() { + let m1: Arc<Mutex<()>> = Default::default(); + + assert!(!check_deadlock()); + + let _t1 = thread::spawn(move || { + let _g = m1.lock(); + let _ = m1.lock(); + }); + + sleep(Duration::from_millis(50)); + assert!(check_deadlock()); + + assert!(!check_deadlock()); + } + + #[test] + fn test_remutex_deadlock() { + let m1: Arc<ReentrantMutex<()>> = Default::default(); + let m2: Arc<ReentrantMutex<()>> = Default::default(); + let m3: Arc<ReentrantMutex<()>> = Default::default(); + let b = Arc::new(Barrier::new(4)); + + let m1_ = m1.clone(); + let m2_ = m2.clone(); + let m3_ = m3.clone(); + let b1 = b.clone(); + let b2 = b.clone(); + let b3 = b.clone(); + + assert!(!check_deadlock()); + + let _t1 = thread::spawn(move || { + let _g = m1.lock(); + let _g = m1.lock(); + b1.wait(); + let _ = m2_.lock(); + }); + + let _t2 = thread::spawn(move || { + let _g = m2.lock(); + let _g = m2.lock(); + b2.wait(); + let _ = m3_.lock(); + }); + + let _t3 = thread::spawn(move || { + let _g = m3.lock(); + let _g = m3.lock(); + b3.wait(); + let _ = m1_.lock(); + }); + + assert!(!check_deadlock()); + + b.wait(); + sleep(Duration::from_millis(50)); + assert!(check_deadlock()); + + assert!(!check_deadlock()); + } + + #[test] + fn test_rwlock_deadlock() { + let m1: Arc<RwLock<()>> = Default::default(); + let m2: Arc<RwLock<()>> = Default::default(); + let m3: Arc<RwLock<()>> = Default::default(); + let b = Arc::new(Barrier::new(4)); + + let m1_ = m1.clone(); + let m2_ = m2.clone(); + let m3_ = m3.clone(); + let b1 = b.clone(); + let b2 = b.clone(); + let b3 = b.clone(); + + assert!(!check_deadlock()); + + let _t1 = thread::spawn(move || { + let _g = m1.read(); + b1.wait(); + let _g = m2_.write(); + }); + + let _t2 = thread::spawn(move || { + let _g = m2.read(); + b2.wait(); + let _g = m3_.write(); + }); + + let _t3 = thread::spawn(move || { + let _g = m3.read(); + b3.wait(); + let _ = m1_.write(); + }); + + assert!(!check_deadlock()); + + b.wait(); + sleep(Duration::from_millis(50)); + assert!(check_deadlock()); + + assert!(!check_deadlock()); + } + + #[test] + fn test_rwlock_deadlock_reentrant() { + let m1: Arc<RwLock<()>> = Default::default(); + + assert!(!check_deadlock()); + + let _t1 = thread::spawn(move || { + let _g = m1.read(); + let _ = m1.write(); + }); + + sleep(Duration::from_millis(50)); + assert!(check_deadlock()); + + assert!(!check_deadlock()); + } +}
--- a/third_party/rust/parking_lot/src/elision.rs +++ b/third_party/rust/parking_lot/src/elision.rs @@ -1,41 +1,42 @@ // Copyright 2016 Amanieu d'Antras // // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or // http://opensource.org/licenses/MIT>, at your option. This file may not be // copied, modified, or distributed except according to those terms. -#[cfg(feature = "nightly")] use std::sync::atomic::AtomicUsize; -#[cfg(not(feature = "nightly"))] -use stable::AtomicUsize; // Extension trait to add lock elision primitives to atomic types pub trait AtomicElisionExt { type IntType; // Perform a compare_exchange and start a transaction - fn elision_acquire(&self, - current: Self::IntType, - new: Self::IntType) - -> Result<Self::IntType, Self::IntType>; + fn elision_acquire( + &self, + current: Self::IntType, + new: Self::IntType, + ) -> Result<Self::IntType, Self::IntType>; // Perform a compare_exchange and end a transaction - fn elision_release(&self, - current: Self::IntType, - new: Self::IntType) - -> Result<Self::IntType, Self::IntType>; + fn elision_release( + &self, + current: Self::IntType, + new: Self::IntType, + ) -> Result<Self::IntType, Self::IntType>; } // Indicates whether the target architecture supports lock elision #[inline] pub fn have_elision() -> bool { - cfg!(all(feature = "nightly", - any(target_arch = "x86", target_arch = "x86_64"))) + cfg!(all( + feature = "nightly", + any(target_arch = "x86", target_arch = "x86_64"), + )) } // This implementation is never actually called because it is guarded by // have_elision(). #[cfg(not(all(feature = "nightly", any(target_arch = "x86", target_arch = "x86_64"))))] impl AtomicElisionExt for AtomicUsize { type IntType = usize; @@ -58,56 +59,111 @@ impl AtomicElisionExt for AtomicUsize { fn elision_acquire(&self, current: usize, new: usize) -> Result<usize, usize> { unsafe { let prev: usize; asm!("xacquire; lock; cmpxchgl $2, $1" : "={eax}" (prev), "+*m" (self) : "r" (new), "{eax}" (current) : "memory" : "volatile"); - if prev == current { Ok(prev) } else { Err(prev) } + if prev == current { + Ok(prev) + } else { + Err(prev) + } } } #[inline] fn elision_release(&self, current: usize, new: usize) -> Result<usize, usize> { unsafe { let prev: usize; asm!("xrelease; lock; cmpxchgl $2, $1" : "={eax}" (prev), "+*m" (self) : "r" (new), "{eax}" (current) : "memory" : "volatile"); - if prev == current { Ok(prev) } else { Err(prev) } + if prev == current { + Ok(prev) + } else { + Err(prev) + } } } } -#[cfg(all(feature = "nightly", target_arch = "x86_64"))] +#[cfg(all(feature = "nightly", target_arch = "x86_64", target_pointer_width = "32"))] +impl AtomicElisionExt for AtomicUsize { + type IntType = usize; + + #[inline] + fn elision_acquire(&self, current: usize, new: usize) -> Result<usize, usize> { + unsafe { + let prev: usize; + asm!("xacquire; lock; cmpxchgl $2, $1" + : "={rax}" (prev), "+*m" (self) + : "r" (new), "{rax}" (current) + : "memory" + : "volatile"); + if prev == current { + Ok(prev) + } else { + Err(prev) + } + } + } + + #[inline] + fn elision_release(&self, current: usize, new: usize) -> Result<usize, usize> { + unsafe { + let prev: usize; + asm!("xrelease; lock; cmpxchgl $2, $1" + : "={rax}" (prev), "+*m" (self) + : "r" (new), "{rax}" (current) + : "memory" + : "volatile"); + if prev == current { + Ok(prev) + } else { + Err(prev) + } + } + } +} + +#[cfg(all(feature = "nightly", target_arch = "x86_64", target_pointer_width = "64"))] impl AtomicElisionExt for AtomicUsize { type IntType = usize; #[inline] fn elision_acquire(&self, current: usize, new: usize) -> Result<usize, usize> { unsafe { let prev: usize; asm!("xacquire; lock; cmpxchgq $2, $1" : "={rax}" (prev), "+*m" (self) : "r" (new), "{rax}" (current) : "memory" : "volatile"); - if prev == current { Ok(prev) } else { Err(prev) } + if prev == current { + Ok(prev) + } else { + Err(prev) + } } } #[inline] fn elision_release(&self, current: usize, new: usize) -> Result<usize, usize> { unsafe { let prev: usize; asm!("xrelease; lock; cmpxchgq $2, $1" : "={rax}" (prev), "+*m" (self) : "r" (new), "{rax}" (current) : "memory" : "volatile"); - if prev == current { Ok(prev) } else { Err(prev) } + if prev == current { + Ok(prev) + } else { + Err(prev) + } } } }
--- a/third_party/rust/parking_lot/src/lib.rs +++ b/third_party/rust/parking_lot/src/lib.rs @@ -12,40 +12,39 @@ #![warn(missing_docs)] #![cfg_attr(feature = "nightly", feature(const_fn))] #![cfg_attr(feature = "nightly", feature(integer_atomics))] #![cfg_attr(feature = "nightly", feature(asm))] #[cfg(feature = "owning_ref")] extern crate owning_ref; -#[cfg(not(target_os = "emscripten"))] -extern crate thread_id; - extern crate parking_lot_core; -#[cfg(not(feature = "nightly"))] -mod stable; - mod util; mod elision; mod raw_mutex; mod raw_remutex; mod raw_rwlock; mod condvar; mod mutex; mod remutex; mod rwlock; mod once; -pub use once::{Once, ONCE_INIT, OnceState}; +#[cfg(feature = "deadlock_detection")] +pub mod deadlock; +#[cfg(not(feature = "deadlock_detection"))] +mod deadlock; + +pub use once::{Once, OnceState, ONCE_INIT}; pub use mutex::{Mutex, MutexGuard}; pub use remutex::{ReentrantMutex, ReentrantMutexGuard}; pub use condvar::{Condvar, WaitTimeoutResult}; -pub use rwlock::{RwLock, RwLockReadGuard, RwLockWriteGuard}; +pub use rwlock::{RwLock, RwLockReadGuard, RwLockUpgradableReadGuard, RwLockWriteGuard}; #[cfg(feature = "owning_ref")] use owning_ref::OwningRef; /// Typedef of an owning reference that uses a `MutexGuard` as the owner. #[cfg(feature = "owning_ref")] pub type MutexGuardRef<'a, T, U = T> = OwningRef<MutexGuard<'a, T>, U>; @@ -55,8 +54,13 @@ pub type ReentrantMutexGuardRef<'a, T, U /// Typedef of an owning reference that uses a `RwLockReadGuard` as the owner. #[cfg(feature = "owning_ref")] pub type RwLockReadGuardRef<'a, T, U = T> = OwningRef<RwLockReadGuard<'a, T>, U>; /// Typedef of an owning reference that uses a `RwLockWriteGuard` as the owner. #[cfg(feature = "owning_ref")] pub type RwLockWriteGuardRef<'a, T, U = T> = OwningRef<RwLockWriteGuard<'a, T>, U>; + +/// Typedef of an owning reference that uses a `RwLockUpgradableReadGuard` as the owner. +#[cfg(feature = "owning_ref")] +pub type RwLockUpgradableReadGuardRef<'a, T, U = T> = + OwningRef<RwLockUpgradableReadGuard<'a, T>, U>;
--- a/third_party/rust/parking_lot/src/mutex.rs +++ b/third_party/rust/parking_lot/src/mutex.rs @@ -45,17 +45,16 @@ use owning_ref::StableAddress; /// You can also force a fair unlock by calling `MutexGuard::unlock_fair` when /// unlocking a mutex instead of simply dropping the `MutexGuard`. /// /// # Differences from the standard library `Mutex` /// /// - No poisoning, the lock is released normally on panic. /// - Only requires 1 byte of space, whereas the standard library boxes the /// `Mutex` due to platform limitations. -/// - A `MutexGuard` can be sent to another thread and unlocked there. /// - Can be statically constructed (requires the `const_fn` nightly feature). /// - Does not require any drop glue when dropped. /// - Inline fast path for the uncontended case. /// - Efficient handling of micro-contention using adaptive spinning. /// - Allows raw locking & unlocking without a guard. /// - Supports eventual fairness so that the mutex is fair on average. /// - Optionally allows making the mutex fair by calling `MutexGuard::unlock_fair`. /// @@ -94,30 +93,33 @@ use owning_ref::StableAddress; /// /// rx.recv().unwrap(); /// ``` pub struct Mutex<T: ?Sized> { raw: RawMutex, data: UnsafeCell<T>, } -unsafe impl<T: Send> Send for Mutex<T> {} -unsafe impl<T: Send> Sync for Mutex<T> {} +unsafe impl<T: ?Sized + Send> Send for Mutex<T> {} +unsafe impl<T: ?Sized + Send> Sync for Mutex<T> {} /// An RAII implementation of a "scoped lock" of a mutex. When this structure is /// dropped (falls out of scope), the lock will be unlocked. /// /// The data protected by the mutex can be accessed through this guard via its /// `Deref` and `DerefMut` implementations. #[must_use] pub struct MutexGuard<'a, T: ?Sized + 'a> { - mutex: &'a Mutex<T>, + raw: &'a RawMutex, + data: *mut T, marker: PhantomData<&'a mut T>, } +unsafe impl<'a, T: ?Sized + Sync + 'a> Sync for MutexGuard<'a, T> {} + impl<T> Mutex<T> { /// Creates a new mutex in an unlocked state ready for use. #[cfg(feature = "nightly")] #[inline] pub const fn new(val: T) -> Mutex<T> { Mutex { data: UnsafeCell::new(val), raw: RawMutex::new(), @@ -137,82 +139,79 @@ impl<T> Mutex<T> { /// Consumes this mutex, returning the underlying data. #[inline] pub fn into_inner(self) -> T { unsafe { self.data.into_inner() } } } impl<T: ?Sized> Mutex<T> { + #[inline] + fn guard(&self) -> MutexGuard<T> { + MutexGuard { + raw: &self.raw, + data: self.data.get(), + marker: PhantomData, + } + } + /// Acquires a mutex, blocking the current thread until it is able to do so. /// /// This function will block the local thread until it is available to acquire /// the mutex. Upon returning, the thread is the only thread with the mutex /// held. An RAII guard is returned to allow scoped unlock of the lock. When /// the guard goes out of scope, the mutex will be unlocked. /// /// Attempts to lock a mutex in the thread which already holds the lock will /// result in a deadlock. #[inline] pub fn lock(&self) -> MutexGuard<T> { self.raw.lock(); - MutexGuard { - mutex: self, - marker: PhantomData, - } + self.guard() } /// Attempts to acquire this lock. /// /// If the lock could not be acquired at this time, then `None` is returned. /// Otherwise, an RAII guard is returned. The lock will be unlocked when the /// guard is dropped. /// /// This function does not block. #[inline] pub fn try_lock(&self) -> Option<MutexGuard<T>> { if self.raw.try_lock() { - Some(MutexGuard { - mutex: self, - marker: PhantomData, - }) + Some(self.guard()) } else { None } } /// Attempts to acquire this lock until a timeout is reached. /// /// If the lock could not be acquired before the timeout expired, then /// `None` is returned. Otherwise, an RAII guard is returned. The lock will /// be unlocked when the guard is dropped. #[inline] pub fn try_lock_for(&self, timeout: Duration) -> Option<MutexGuard<T>> { if self.raw.try_lock_for(timeout) { - Some(MutexGuard { - mutex: self, - marker: PhantomData, - }) + Some(self.guard()) } else { None } } /// Attempts to acquire this lock until a timeout is reached. /// /// If the lock could not be acquired before the timeout expired, then /// `None` is returned. Otherwise, an RAII guard is returned. The lock will /// be unlocked when the guard is dropped. #[inline] pub fn try_lock_until(&self, timeout: Instant) -> Option<MutexGuard<T>> { if self.raw.try_lock_until(timeout) { - Some(MutexGuard { - mutex: self, - marker: PhantomData, - }) + Some(self.guard()) } else { None } } /// Returns a mutable reference to the underlying data. /// /// Since this call borrows the `Mutex` mutably, no actual locking needs to @@ -295,59 +294,82 @@ impl<'a, T: ?Sized + 'a> MutexGuard<'a, /// context switch on every mutex unlock. This can result in one thread /// acquiring a mutex many more times than other threads. /// /// However in some cases it can be beneficial to ensure fairness by forcing /// the lock to pass on to a waiting thread if there is one. This is done by /// using this method instead of dropping the `MutexGuard` normally. #[inline] pub fn unlock_fair(self) { - self.mutex.raw.unlock(true); + self.raw.unlock(true); mem::forget(self); } + + /// Make a new `MutexGuard` for a component of the locked data. + /// + /// This operation cannot fail as the `MutexGuard` passed + /// in already locked the mutex. + /// + /// This is an associated function that needs to be + /// used as `MutexGuard::map(...)`. A method would interfere with methods of + /// the same name on the contents of the locked data. + #[inline] + pub fn map<U: ?Sized, F>(orig: Self, f: F) -> MutexGuard<'a, U> + where + F: FnOnce(&mut T) -> &mut U, + { + let raw = orig.raw; + let data = f(unsafe { &mut *orig.data }); + mem::forget(orig); + MutexGuard { + raw, + data, + marker: PhantomData, + } + } } impl<'a, T: ?Sized + 'a> Deref for MutexGuard<'a, T> { type Target = T; #[inline] fn deref(&self) -> &T { - unsafe { &*self.mutex.data.get() } + unsafe { &*self.data } } } impl<'a, T: ?Sized + 'a> DerefMut for MutexGuard<'a, T> { #[inline] fn deref_mut(&mut self) -> &mut T { - unsafe { &mut *self.mutex.data.get() } + unsafe { &mut *self.data } } } impl<'a, T: ?Sized + 'a> Drop for MutexGuard<'a, T> { #[inline] fn drop(&mut self) { - self.mutex.raw.unlock(false); + self.raw.unlock(false); } } #[cfg(feature = "owning_ref")] unsafe impl<'a, T: ?Sized> StableAddress for MutexGuard<'a, T> {} // Helper function used by Condvar, not publicly exported #[inline] -pub fn guard_lock<'a, T: ?Sized>(guard: &MutexGuard<'a, T>) -> &'a RawMutex { - &guard.mutex.raw +pub(crate) fn guard_lock<'a, T: ?Sized>(guard: &MutexGuard<'a, T>) -> &'a RawMutex { + &guard.raw } #[cfg(test)] mod tests { use std::sync::mpsc::channel; use std::sync::Arc; use std::sync::atomic::{AtomicUsize, Ordering}; use std::thread; - use {Mutex, Condvar}; + use {Condvar, Mutex}; struct Packet<T>(Arc<(Mutex<T>, Condvar)>); #[derive(Eq, PartialEq, Debug)] struct NonCopy(i32); unsafe impl<T: Send> Send for Packet<T> {} unsafe impl<T> Sync for Packet<T> {} @@ -471,28 +493,27 @@ mod tests { rx.recv().unwrap(); } #[test] fn test_mutex_arc_access_in_unwind() { let arc = Arc::new(Mutex::new(1)); let arc2 = arc.clone(); let _ = thread::spawn(move || -> () { - struct Unwinder { - i: Arc<Mutex<i32>>, + struct Unwinder { + i: Arc<Mutex<i32>>, + } + impl Drop for Unwinder { + fn drop(&mut self) { + *self.i.lock() += 1; } - impl Drop for Unwinder { - fn drop(&mut self) { - *self.i.lock() += 1; - } - } - let _u = Unwinder { i: arc2 }; - panic!(); - }) - .join(); + } + let _u = Unwinder { i: arc2 }; + panic!(); + }).join(); let lock = arc.lock(); assert_eq!(*lock, 2); } #[test] fn test_mutex_unsized() { let mutex: &Mutex<[i32]> = &Mutex::new([1, 2, 3]); { @@ -500,15 +521,15 @@ mod tests { b[0] = 4;