author | Sebastian Hengst <archaeopteryx@coole-files.de> |
Thu, 09 Nov 2017 00:32:30 +0200 | |
changeset 444102 | 7d799a93ed72e65fbf277170eafe45535276c671 |
parent 444101 | c7095faa0112874e1804e2efad70699e5021eb53 (current diff) |
parent 444082 | c10cf7082a9b84839e7c3fdda80bd468e091739a (diff) |
child 444103 | 3acb30b37718b0abc626416b9554acbc880a0078 |
push id | 1618 |
push user | Callek@gmail.com |
push date | Thu, 11 Jan 2018 17:45:48 +0000 |
treeherder | mozilla-release@882ca853e05a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge, merge |
milestone | 58.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
|
devtools/shim/aboutdevtools/tmp-locale/aboutdevtools.dtd | file | annotate | diff | comparison | revisions | |
netwerk/base/RustURL.cpp | file | annotate | diff | comparison | revisions | |
netwerk/base/RustURL.h | file | annotate | diff | comparison | revisions | |
netwerk/test/unit/test_rusturl.js | file | annotate | diff | comparison | revisions | |
python/mozbuild/mozbuild/test/test_testing.py | file | annotate | diff | comparison | revisions | |
testing/web-platform/meta/html/browsers/browsing-the-web/unloading-documents/003.html.ini | file | annotate | diff | comparison | revisions |
--- a/browser/app/blocklist.xml +++ b/browser/app/blocklist.xml @@ -3926,16 +3926,19 @@ <serialNumber>AINVG9I4T2jgQgW4N9SNhw==</serialNumber> </certItem> <certItem issuerName="MD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQQ=="> <serialNumber>e7wSpVxmgAS5/ioLi2iBIA==</serialNumber> </certItem> <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> <serialNumber>Byemag==</serialNumber> </certItem> + <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> + <serialNumber>AxPlMqxkByCn3XNuYMhYNMcp</serialNumber> + </certItem> <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA3IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNA=="> <serialNumber>cXXMzbWDHMIdCotb3h64yw==</serialNumber> </certItem> <certItem issuerName="MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> <serialNumber>E/YGRk12iZqZuMfsIiVaeg==</serialNumber> </certItem> <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> <serialNumber>Bye2Cg==</serialNumber> @@ -4067,25 +4070,16 @@ <serialNumber>AQw=</serialNumber> </certItem> <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> <serialNumber>FJl6tXgNpSk=</serialNumber> </certItem> <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> <serialNumber>BAAAAAAA+X/GIyk=</serialNumber> </certItem> - <certItem issuerName="MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw=="> - <serialNumber>O2Qh+qhbBRuZA11yDhcLGQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>UU3AP1SMxmyhBFq7MRFZmf0=</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xvYmFsU2lnbiBQYXJ0bmVycyBDQQ=="> - <serialNumber>BAAAAAABHhw1vwc=</serialNumber> - </certItem> <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> <serialNumber>ESDItX4ruWiLnrlz0rk4/bmz</serialNumber> </certItem> <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> <serialNumber>BAAAAAABIg08D3U=</serialNumber> </certItem> <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> <serialNumber>GN2Hrh9LtnI=</serialNumber> @@ -4799,10 +4793,19 @@ <serialNumber>BAAAAAABK84yjs8=</serialNumber> </certItem> <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> <serialNumber>ESCC9oPNcRdPOox+SjWm9dTX</serialNumber> </certItem> <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> <serialNumber>DjIvBkX+ECVbB/C3i6w2Gg==</serialNumber> </certItem> + <certItem issuerName="MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw=="> + <serialNumber>O2Qh+qhbBRuZA11yDhcLGQ==</serialNumber> + </certItem> + <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> + <serialNumber>UU3AP1SMxmyhBFq7MRFZmf0=</serialNumber> + </certItem> + <certItem issuerName="MF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xvYmFsU2lnbiBQYXJ0bmVycyBDQQ=="> + <serialNumber>BAAAAAABHhw1vwc=</serialNumber> + </certItem> </certItems> </blocklist>
--- a/browser/base/content/browser-thumbnails.js +++ b/browser/base/content/browser-thumbnails.js @@ -39,17 +39,16 @@ var gBrowserThumbnails = { _topSiteURLsRefreshTimer: null, /** * List of tab events we want to listen for. */ _tabEvents: ["TabClose", "TabSelect"], init: function Thumbnails_init() { - PageThumbs.addExpirationFilter(this); gBrowser.addTabsProgressListener(this); Services.prefs.addObserver(this.PREF_DISK_CACHE_SSL, this); Services.prefs.addObserver(this.PREF_ACTIVITY_STREAM_ENABLED, this); this._sslDiskCacheEnabled = Services.prefs.getBoolPref(this.PREF_DISK_CACHE_SSL); this._activityStreamEnabled = Services.prefs.getBoolPref(this.PREF_ACTIVITY_STREAM_ENABLED); @@ -57,17 +56,16 @@ var gBrowserThumbnails = { this._tabEvents.forEach(function(aEvent) { gBrowser.tabContainer.addEventListener(aEvent, this); }, this); this._timeouts = new WeakMap(); }, uninit: function Thumbnails_uninit() { - PageThumbs.removeExpirationFilter(this); gBrowser.removeTabsProgressListener(this); Services.prefs.removeObserver(this.PREF_DISK_CACHE_SSL, this); Services.prefs.removeObserver(this.PREF_ACTIVITY_STREAM_ENABLED, this); if (this._topSiteURLsRefreshTimer) { this._topSiteURLsRefreshTimer.cancel(); this._topSiteURLsRefreshTimer = null; } @@ -99,46 +97,36 @@ var gBrowserThumbnails = { case this.PREF_DISK_CACHE_SSL: this._sslDiskCacheEnabled = Services.prefs.getBoolPref(this.PREF_DISK_CACHE_SSL); break; case this.PREF_ACTIVITY_STREAM_ENABLED: this._activityStreamEnabled = Services.prefs.getBoolPref(this.PREF_ACTIVITY_STREAM_ENABLED); // Get the new top sites - XPCOMUtils.defineLazyGetter(this, "_topSiteURLs", getTopSiteURLs); + this.clearTopSiteURLCache(); break; } }, - /** - * clearTopSiteURLCache is only ever called if we've created an nsITimer, - * which only happens if we've loaded the tiles top sites. Therefore we only - * need to clear the tiles top sites (and not activity stream's top sites) - */ clearTopSiteURLCache: function Thumbnails_clearTopSiteURLCache() { if (this._topSiteURLsRefreshTimer) { this._topSiteURLsRefreshTimer.cancel(); this._topSiteURLsRefreshTimer = null; } // Delete the defined property delete this._topSiteURLs; XPCOMUtils.defineLazyGetter(this, "_topSiteURLs", getTopSiteURLs); }, notify: function Thumbnails_notify(timer) { gBrowserThumbnails._topSiteURLsRefreshTimer = null; gBrowserThumbnails.clearTopSiteURLCache(); }, - async filterForThumbnailExpiration(aCallback) { - const topSites = await this._topSiteURLs; - aCallback(topSites); - }, - /** * State change progress listener for all tabs. */ onStateChange: function Thumbnails_onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) { if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP && aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) this._delayedCapture(aBrowser); @@ -207,28 +195,33 @@ var gBrowserThumbnails = { } else { // idle callback dispatched window.cancelIdleCallback(timeoutData.id); } } }; async function getTopSiteURLs() { + // The _topSiteURLs getter can be expensive to run, but its return value can + // change frequently on new profiles, so as a compromise we cache its return + // value as a lazy getter for 1 minute every time it's called. + gBrowserThumbnails._topSiteURLsRefreshTimer = + Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); + gBrowserThumbnails._topSiteURLsRefreshTimer.initWithCallback(gBrowserThumbnails, + 60 * 1000, + Ci.nsITimer.TYPE_ONE_SHOT); let sites = []; if (gBrowserThumbnails._activityStreamEnabled) { - sites = await NewTabUtils.activityStreamLinks.getTopSites(); + // Get both the top sites returned by the query, and also any pinned sites + // that the user might have added manually that also need a screenshot. + // Also include top sites that don't have rich icons + let topSites = await NewTabUtils.activityStreamLinks.getTopSites(); + sites.push(...topSites.filter(link => !(link.faviconSize >= 96))); + sites.push(...NewTabUtils.pinnedLinks.links); } else { - // The _topSiteURLs getter can be expensive to run, but its return value can - // change frequently on new profiles, so as a compromise we cache its return - // value as a lazy getter for 1 minute every time it's called. - gBrowserThumbnails._topSiteURLsRefreshTimer = - Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); - gBrowserThumbnails._topSiteURLsRefreshTimer.initWithCallback(gBrowserThumbnails, - 60 * 1000, - Ci.nsITimer.TYPE_ONE_SHOT); sites = NewTabUtils.links.getLinks(); } return sites.reduce((urls, link) => { if (link) urls.push(link.url); return urls; }, []); }
--- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -255,17 +255,17 @@ if (aTab.hidden) this.showTab(aTab); this.moveTabTo(aTab, this._numPinnedTabs); aTab.setAttribute("pinned", "true"); this.tabContainer._unlockTabSizing(); this.tabContainer._positionPinnedTabs(); - this.tabContainer.adjustTabstrip(); + this.tabContainer._updateCloseButtons(); this.getBrowserForTab(aTab).messageManager.sendAsyncMessage("Browser:AppTab", { isAppTab: true }) if (aTab.selected) this._setCloseKeyState(false); let event = document.createEvent("Events"); event.initEvent("TabPinned", true, false); @@ -279,17 +279,17 @@ if (!aTab.pinned) return; this.moveTabTo(aTab, this._numPinnedTabs - 1); aTab.removeAttribute("pinned"); aTab.style.marginInlineStart = ""; this.tabContainer._unlockTabSizing(); this.tabContainer._positionPinnedTabs(); - this.tabContainer.adjustTabstrip(); + this.tabContainer._updateCloseButtons(); this.getBrowserForTab(aTab).messageManager.sendAsyncMessage("Browser:AppTab", { isAppTab: false }) if (aTab.selected) this._setCloseKeyState(true); let event = document.createEvent("Events"); event.initEvent("TabUnpinned", true, false); @@ -3351,17 +3351,17 @@ this._windowIsClosing = true; while (this._removingTabs.length) this._endRemoveTab(this._removingTabs[0]); } else if (!this._windowIsClosing) { if (aNewTab) focusAndSelectUrlBar(); // workaround for bug 345399 - this.tabContainer.mTabstrip._updateScrollButtonsDisabledState(); + this.tabContainer.arrowScrollbox._updateScrollButtonsDisabledState(); } // We're going to remove the tab and the browser now. this._tabFilters.delete(aTab); this._tabListeners.delete(aTab); var browser = this.getBrowserForTab(aTab); @@ -3388,17 +3388,17 @@ for (let i = aTab._tPos; i < this.tabs.length; i++) this.tabs[i]._tPos = i; if (!this._windowIsClosing) { if (wasPinned) this.tabContainer._positionPinnedTabs(); // update tab close buttons state - this.tabContainer.adjustTabstrip(); + this.tabContainer._updateCloseButtons(); setTimeout(function(tabs) { tabs._lastTabClosedByMouse = false; }, 0, this.tabContainer); } // update tab positional properties and attributes this.selectedTab._selected = true; @@ -3862,17 +3862,17 @@ <method name="showTab"> <parameter name="aTab"/> <body> <![CDATA[ if (aTab.hidden) { aTab.removeAttribute("hidden"); this._visibleTabs = null; // invalidate cache - this.tabContainer.adjustTabstrip(); + this.tabContainer._updateCloseButtons(); this.tabContainer._setPositionalAttributes(); let event = document.createEvent("Events"); event.initEvent("TabShow", true, false); aTab.dispatchEvent(event); } ]]> @@ -3883,17 +3883,17 @@ <parameter name="aTab"/> <body> <![CDATA[ if (!aTab.hidden && !aTab.pinned && !aTab.selected && !aTab.closing) { aTab.setAttribute("hidden", "true"); this._visibleTabs = null; // invalidate cache - this.tabContainer.adjustTabstrip(); + this.tabContainer._updateCloseButtons(); this.tabContainer._setPositionalAttributes(); let event = document.createEvent("Events"); event.initEvent("TabHide", true, false); aTab.dispatchEvent(event); } ]]> @@ -6398,17 +6398,17 @@ <xul:spacer class="closing-tabs-spacer" anonid="closing-tabs-spacer" style="width: 0;"/> </xul:arrowscrollbox> </content> <implementation implements="nsIDOMEventListener, nsIObserver"> <constructor> <![CDATA[ - this.mTabClipWidth = Services.prefs.getIntPref("browser.tabs.tabClipWidth"); + this._tabClipWidth = Services.prefs.getIntPref("browser.tabs.tabClipWidth"); let { restoreTabsButton } = this; restoreTabsButton.setAttribute("label", gTabBrowserBundle.GetStringFromName("tabs.restoreLastTabs")); var tab = this.firstChild; tab.label = gTabBrowserBundle.GetStringFromName("tabs.emptyTabTitle"); tab.setAttribute("onerror", "this.removeAttribute('image');"); @@ -6435,17 +6435,17 @@ <field name="tabbox" readonly="true"> this.tabbrowser.mTabBox; </field> <field name="contextMenu" readonly="true"> document.getElementById("tabContextMenu"); </field> - <field name="mTabstrip"> + <field name="arrowScrollbox"> document.getAnonymousElementByAttribute(this, "anonid", "arrowscrollbox"); </field> <field name="_firstTab">null</field> <field name="_lastTab">null</field> <field name="_beforeSelectedTab">null</field> <field name="_beforeHoveredTab">null</field> <field name="_afterHoveredTab">null</field> @@ -6474,33 +6474,33 @@ let {restoreTabsButton, restoreTabsButtonWrapperWidth, windowUtils} = this; let restoreTabsButtonWrapper = restoreTabsButton.parentNode; if (!restoreTabsButtonWrapper.getAttribute("session-exists")) { restoreTabsButtonWrapper.removeAttribute("shown"); return; } - let tabstripWidth = this.mTabstrip.clientWidth; + let arrowScrollboxWidth = this.arrowScrollbox.clientWidth; let newTabButton = document.getAnonymousElementByAttribute( this, "anonid", "tabs-newtab-button"); // If there are no pinned tabs it will multiply by 0 and result in 0 let pinnedTabsWidth = windowUtils.getBoundsWithoutFlushing(this.firstChild).width * this._lastNumPinned; let numUnpinnedTabs = this.childNodes.length - this._lastNumPinned; let unpinnedTabsWidth = windowUtils.getBoundsWithoutFlushing(this.lastChild).width * numUnpinnedTabs; let tabbarUsedSpace = pinnedTabsWidth + unpinnedTabsWidth + windowUtils.getBoundsWithoutFlushing(newTabButton).width; // Subtract the elements' widths from the available space to ensure // that showing the restoreTabsButton won't cause any overflow. - if (tabstripWidth - tabbarUsedSpace > restoreTabsButtonWrapperWidth) { + if (arrowScrollboxWidth - tabbarUsedSpace > restoreTabsButtonWrapperWidth) { restoreTabsButtonWrapper.setAttribute("shown", "true"); } else { restoreTabsButtonWrapper.removeAttribute("shown"); } ]]></body> </method> <method name="observe"> @@ -6666,17 +6666,17 @@ if (this.childNodes.length - this.tabbrowser._removingTabs.length == 1) this.visible = window.toolbar.visible; else this.visible = true; ]]></body> </method> <field name="_closeButtonsUpdatePending">false</field> - <method name="adjustTabstrip"> + <method name="_updateCloseButtons"> <body><![CDATA[ // If we're overflowing, tabs are at their minimum widths. if (this.getAttribute("overflow") == "true") { this.setAttribute("closebuttons", "activetab"); return; } if (this._closeButtonsUpdatePending) { @@ -6701,31 +6701,31 @@ // remove close buttons from background tabs so that people don't // accidentally close tabs by selecting them. let rect = ele => { return window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils) .getBoundsWithoutFlushing(ele); }; let tab = this.tabbrowser.visibleTabs[this.tabbrowser._numPinnedTabs]; - if (tab && rect(tab).width <= this.mTabClipWidth) { + if (tab && rect(tab).width <= this._tabClipWidth) { this.setAttribute("closebuttons", "activetab"); } else { this.removeAttribute("closebuttons"); } }); }); ]]></body> </method> <method name="_handleTabSelect"> <parameter name="aInstant"/> <body><![CDATA[ if (this.getAttribute("overflow") == "true") - this.mTabstrip.ensureElementIsVisible(this.selectedItem, aInstant); + this.arrowScrollbox.ensureElementIsVisible(this.selectedItem, aInstant); this.selectedItem._notselectedsinceload = false; ]]></body> </method> <field name="_closingTabsSpacer"> document.getAnonymousElementByAttribute(this, "anonid", "closing-tabs-spacer"); </field> @@ -6748,17 +6748,17 @@ if (!this._tabDefaultMaxWidth) this._tabDefaultMaxWidth = parseFloat(window.getComputedStyle(aTab).maxWidth); this._lastTabClosedByMouse = true; if (this.getAttribute("overflow") == "true") { // Don't need to do anything if we're in overflow mode and aren't scrolled // all the way to the right, or if we're closing the last tab. - if (isEndTab || !this.mTabstrip._scrollButtonDown.disabled) + if (isEndTab || !this.arrowScrollbox._scrollButtonDown.disabled) return; // If the tab has an owner that will become the active tab, the owner will // be to the left of it, so we actually want the left tab to slide over. // This can't be done as easily in non-overflow mode, so we don't bother. if (aTab.owner) return; @@ -6833,20 +6833,20 @@ var doPosition = this.getAttribute("overflow") == "true" && numPinned > 0; if (doPosition) { this.setAttribute("positionpinnedtabs", "true"); let layoutData = this._pinnedTabsLayoutCache; if (!layoutData) { - let tabstrip = this.mTabstrip; + let arrowScrollbox = this.arrowScrollbox; layoutData = this._pinnedTabsLayoutCache = { pinnedTabWidth: this.childNodes[0].getBoundingClientRect().width, - scrollButtonWidth: tabstrip._scrollButtonDown.getBoundingClientRect().width + scrollButtonWidth: arrowScrollbox._scrollButtonDown.getBoundingClientRect().width }; } let width = 0; for (let i = numPinned - 1; i >= 0; i--) { let tab = this.childNodes[i]; width += layoutData.pinnedTabWidth; tab.style.marginInlineStart = -(width + layoutData.scrollButtonWidth) + "px"; @@ -6903,17 +6903,17 @@ // Move the dragged tab based on the mouse position. let leftTab = tabs[0]; let rightTab = tabs[tabs.length - 1]; let tabScreenX = draggedTab.boxObject.screenX; let translateX = screenX - draggedTab._dragData.screenX; if (!pinned) - translateX += this.mTabstrip._scrollbox.scrollLeft - draggedTab._dragData.scrollX; + translateX += this.arrowScrollbox._scrollbox.scrollLeft - draggedTab._dragData.scrollX; let leftBound = leftTab.boxObject.screenX - tabScreenX; let rightBound = (rightTab.boxObject.screenX + rightTab.boxObject.width) - (tabScreenX + tabWidth); translateX = Math.max(translateX, leftBound); translateX = Math.min(translateX, rightBound); draggedTab.style.transform = "translateX(" + translateX + "px)"; draggedTab._dragData.translateX = translateX; @@ -6995,17 +6995,17 @@ this.updateVisibility(); TabsInTitlebar.init(); break; case "resize": if (aEvent.target != window) break; TabsInTitlebar.updateAppearance(); - this.adjustTabstrip(); + this._updateCloseButtons(); this._handleTabSelect(true); this.updateSessionRestoreVisibility(); break; case "mouseout": // If the "related target" (the node to which the pointer went) is not // a child of the current document, the mouse just left the window. let relatedTarget = aEvent.relatedTarget; if (relatedTarget && relatedTarget.ownerDocument == document) @@ -7014,50 +7014,50 @@ if (document.getElementById("tabContextMenu").state != "open") this._unlockTabSizing(); break; } ]]></body> </method> <field name="_animateElement"> - this.mTabstrip._scrollButtonDown; + this.arrowScrollbox._scrollButtonDown; </field> <method name="_notifyBackgroundTab"> <parameter name="aTab"/> <body><![CDATA[ if (aTab.pinned || aTab.hidden) return; - var scrollRect = this.mTabstrip.scrollClientRect; + var scrollRect = this.arrowScrollbox.scrollClientRect; var tab = aTab.getBoundingClientRect(); // DOMRect left/right properties are immutable. tab = {left: tab.left, right: tab.right}; // Is the new tab already completely visible? if (scrollRect.left <= tab.left && tab.right <= scrollRect.right) return; - if (this.mTabstrip.smoothScroll) { + if (this.arrowScrollbox.smoothScroll) { let selected = !this.selectedItem.pinned && this.selectedItem.getBoundingClientRect(); // Can we make both the new tab and the selected tab completely visible? if (!selected || Math.max(tab.right - selected.left, selected.right - tab.left) <= scrollRect.width) { - this.mTabstrip.ensureElementIsVisible(aTab); + this.arrowScrollbox.ensureElementIsVisible(aTab); return; } - this.mTabstrip.scrollByPixels(this.mTabstrip._isRTLScrollbox ? - selected.right - scrollRect.right : - selected.left - scrollRect.left); + this.arrowScrollbox.scrollByPixels(this.arrowScrollbox._isRTLScrollbox ? + selected.right - scrollRect.right : + selected.left - scrollRect.left); } if (!this._animateElement.hasAttribute("highlight")) { this._animateElement.setAttribute("highlight", "true"); setTimeout(function(ele) { ele.removeAttribute("highlight"); }, 150, this._animateElement); } @@ -7137,30 +7137,30 @@ <method name="_handleNewTab"> <parameter name="tab"/> <body><![CDATA[ if (tab.parentNode != this) return; tab._fullyOpen = true; this.tabbrowser.tabAnimationsInProgress--; - this.adjustTabstrip(); + this._updateCloseButtons(); if (tab.getAttribute("selected") == "true") { this._handleTabSelect(); } else if (!tab.hasAttribute("skipbackgroundnotify")) { this._notifyBackgroundTab(tab); } // XXXmano: this is a temporary workaround for bug 345399 // We need to manually update the scroll buttons disabled state // if a tab was inserted to the overflow area or removed from it // without any scrolling and when the tabbar has already // overflowed. - this.mTabstrip._updateScrollButtonsDisabledState(); + this.arrowScrollbox._updateScrollButtonsDisabledState(); // Preload the next about:newtab if there isn't one already. this.tabbrowser._createPreloadBrowser(); ]]></body> </method> <method name="_canAdvanceToTab"> <parameter name="aTab"/> @@ -7193,17 +7193,17 @@ <handler event="transitionend"><![CDATA[ if (event.propertyName != "max-width") return; var tab = event.target; if (tab.getAttribute("fadein") == "true") { if (tab._fullyOpen) - this.adjustTabstrip(); + this._updateCloseButtons(); else this._handleNewTab(tab); } else if (tab.closing) { this.tabbrowser._endRemoveTab(tab); } ]]></handler> <handler event="dblclick"><![CDATA[ @@ -7443,17 +7443,17 @@ // relative to the corner of the dragged tab. function clientX(ele) { return ele.getBoundingClientRect().left; } let tabOffsetX = clientX(tab) - clientX(this); tab._dragData = { offsetX: event.screenX - window.screenX - tabOffsetX, offsetY: event.screenY - window.screenY, - scrollX: this.mTabstrip._scrollbox.scrollLeft, + scrollX: this.arrowScrollbox._scrollbox.scrollLeft, screenX: event.screenX }; event.stopPropagation(); ]]></handler> <handler event="dragover"><![CDATA[ var effects = this._getDropEffectForTabDrag(event); @@ -7461,35 +7461,35 @@ var ind = this._tabDropIndicator; if (effects == "" || effects == "none") { ind.collapsed = true; return; } event.preventDefault(); event.stopPropagation(); - var tabStrip = this.mTabstrip; + var arrowScrollbox = this.arrowScrollbox; var ltr = (window.getComputedStyle(this).direction == "ltr"); // autoscroll the tab strip if we drag over the scroll // buttons, even if we aren't dragging a tab, but then // return to avoid drawing the drop indicator var pixelsToScroll = 0; if (this.getAttribute("overflow") == "true") { var targetAnonid = event.originalTarget.getAttribute("anonid"); switch (targetAnonid) { case "scrollbutton-up": - pixelsToScroll = tabStrip.scrollIncrement * -1; + pixelsToScroll = arrowScrollbox.scrollIncrement * -1; break; case "scrollbutton-down": - pixelsToScroll = tabStrip.scrollIncrement; + pixelsToScroll = arrowScrollbox.scrollIncrement; break; } if (pixelsToScroll) - tabStrip.scrollByPixels((ltr ? 1 : -1) * pixelsToScroll, true); + arrowScrollbox.scrollByPixels((ltr ? 1 : -1) * pixelsToScroll, true); } if (effects == "move" && this == event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0).parentNode) { ind.collapsed = true; this._animateTabMove(event); return; } @@ -7503,22 +7503,22 @@ this._dragTime = Date.now(); if (Date.now() >= this._dragTime + this._dragOverDelay) this.selectedItem = tab; ind.collapsed = true; return; } } - var rect = tabStrip.getBoundingClientRect(); + var rect = arrowScrollbox.getBoundingClientRect(); var newMargin; if (pixelsToScroll) { // if we are scrolling, put the drop indicator at the edge // so that it doesn't jump while scrolling - let scrollRect = tabStrip.scrollClientRect; + let scrollRect = arrowScrollbox.scrollClientRect; let minMargin = scrollRect.left - rect.left; let maxMargin = Math.min(minMargin + scrollRect.width, scrollRect.right); if (!ltr) [minMargin, maxMargin] = [this.clientWidth - maxMargin, this.clientWidth - minMargin]; newMargin = (pixelsToScroll > 0) ? maxMargin : minMargin; } else { @@ -7666,17 +7666,17 @@ } // Disable detach within the browser toolbox var eX = event.screenX; var eY = event.screenY; var wX = window.screenX; // check if the drop point is horizontally within the window if (eX > wX && eX < (wX + window.outerWidth)) { - let bo = this.mTabstrip.boxObject; + let bo = this.arrowScrollbox.boxObject; // also avoid detaching if the the tab was dropped too close to // the tabbar (half a tab) let endScreenY = bo.screenY + 1.5 * bo.height; if (eY < endScreenY && eY > window.screenY) return; } // screen.availLeft et. al. only check the screen that this window is on, @@ -8245,26 +8245,26 @@ var tabContainer = gBrowser.tabContainer; // We don't want menu item decoration unless there is overflow. if (tabContainer.getAttribute("overflow") != "true") { return; } let windowUtils = window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); - let tabstripRect = windowUtils.getBoundsWithoutFlushing(tabContainer.mTabstrip); + let arrowScrollboxRect = windowUtils.getBoundsWithoutFlushing(tabContainer.arrowScrollbox); for (let menuitem of this.childNodes) { let curTab = menuitem.tab; if (!curTab) { // "Undo close tab", menuseparator, or entries put here by addons. continue; } let curTabRect = windowUtils.getBoundsWithoutFlushing(curTab); - if (curTabRect.left >= tabstripRect.left && - curTabRect.right <= tabstripRect.right) { + if (curTabRect.left >= arrowScrollboxRect.left && + curTabRect.right <= arrowScrollboxRect.right) { menuitem.setAttribute("tabIsVisible", "true"); } else { menuitem.removeAttribute("tabIsVisible"); } } ]]></body> </method>
--- a/browser/base/content/test/performance/browser.ini +++ b/browser/base/content/test/performance/browser.ini @@ -14,12 +14,12 @@ skip-if = !e10s [browser_tabopen_reflows.js] [browser_tabopen_squeeze_reflows.js] [browser_tabstrip_overflow_underflow_reflows.js] [browser_tabswitch_reflows.js] [browser_toolbariconcolor_restyles.js] [browser_urlbar_keyed_search_reflows.js] skip-if = (os == 'linux') || (os == 'win' && debug) # Disabled on Linux and Windows debug due to perma failures. Bug 1392320. [browser_urlbar_search_reflows.js] -skip-if = (os == 'linux') || (os == 'mac' && !debug) # Disabled on Linux and OS X opt due to frequent failures. Bug 1385932 and Bug 1384582 +skip-if = (os == 'linux') # Disabled on Linux and OS X opt due to frequent failures. Bug 1385932 [browser_windowclose_reflows.js] [browser_windowopen_reflows.js] skip-if = os == 'linux' # Disabled due to frequent failures. Bug 1380465.
--- a/browser/base/content/test/performance/browser_tabstrip_overflow_underflow_reflows.js +++ b/browser/base/content/test/performance/browser_tabstrip_overflow_underflow_reflows.js @@ -41,17 +41,17 @@ add_task(async function() { await withReflowObserver(async function(dirtyFrame) { let switchDone = BrowserTestUtils.waitForEvent(window, "TabSwitchDone"); BrowserOpenTab(); await BrowserTestUtils.waitForEvent(gBrowser.selectedTab, "transitionend", false, e => e.propertyName === "max-width"); await switchDone; await BrowserTestUtils.waitForCondition(() => { - return gBrowser.tabContainer.mTabstrip.hasAttribute("scrolledtoend"); + return gBrowser.tabContainer.arrowScrollbox.hasAttribute("scrolledtoend"); }); }, EXPECTED_OVERFLOW_REFLOWS, window); await withReflowObserver(async function() { let switchDone = BrowserTestUtils.waitForEvent(window, "TabSwitchDone"); let transitionPromise = BrowserTestUtils.waitForEvent(gBrowser.selectedTab, "transitionend", false,
--- a/browser/base/content/test/performance/browser_urlbar_search_reflows.js +++ b/browser/base/content/test/performance/browser_urlbar_search_reflows.js @@ -109,20 +109,20 @@ const EXPECTED_REFLOWS_SECOND_OPEN = [ "_openAutocompletePopup@chrome://browser/content/urlbarBindings.xml", "openAutocompletePopup@chrome://browser/content/urlbarBindings.xml", "openPopup@chrome://global/content/bindings/autocomplete.xml", "set_popupOpen@chrome://global/content/bindings/autocomplete.xml", ], }, ]; -const SEARCH_TERM = "urlbar-reflows"; +const SEARCH_TERM = "urlbar-reflows-" + Date.now(); add_task(async function setup() { - await addDummyHistoryEntries(); + await addDummyHistoryEntries(SEARCH_TERM); }); /** * This test ensures that there are no unexpected * uninterruptible reflows when typing into the URL bar * with the default values in Places. */ add_task(async function() {
--- a/browser/base/content/test/performance/head.js +++ b/browser/base/content/test/performance/head.js @@ -1,10 +1,12 @@ "use strict"; +XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils", + "resource://gre/modules/PlacesUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils", "resource://testing-common/PlacesTestUtils.jsm"); /** * Async utility function for ensuring that no unexpected uninterruptible * reflows occur during some period of time in a window. * * @param testFn (async function) @@ -193,17 +195,17 @@ async function ensureNoPreloadedBrowser( * tabstrip without causing it to overflow. */ function computeMaxTabCount() { let currentTabCount = gBrowser.tabs.length; let newTabButton = document.getAnonymousElementByAttribute(gBrowser.tabContainer, "anonid", "tabs-newtab-button"); let newTabRect = newTabButton.getBoundingClientRect(); - let tabStripRect = gBrowser.tabContainer.mTabstrip.getBoundingClientRect(); + let tabStripRect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect(); let availableTabStripWidth = tabStripRect.width - newTabRect.width; let tabMinWidth = parseInt(getComputedStyle(gBrowser.selectedTab, null).minWidth, 10); let maxTabCount = Math.floor(availableTabStripWidth / tabMinWidth) - currentTabCount; Assert.ok(maxTabCount > 0, "Tabstrip needs to be wide enough to accomodate at least 1 more tab " + @@ -243,27 +245,30 @@ async function removeAllButFirstTab() { gBrowser.removeAllTabsBut(gBrowser.tabs[0]); await BrowserTestUtils.waitForCondition(() => gBrowser.tabs.length == 1); await SpecialPowers.popPrefEnv(); } /** * Adds some entries to the Places database so that we can * do semi-realistic look-ups in the URL bar. + * + * @param searchStr (string) + * Optional text to add to the search history items. */ -async function addDummyHistoryEntries() { - await PlacesTestUtils.clearHistory(); +async function addDummyHistoryEntries(searchStr = "") { + await PlacesUtils.history.clear(); const NUM_VISITS = 10; let visits = []; for (let i = 0; i < NUM_VISITS; ++i) { visits.push({ uri: `http://example.com/urlbar-reflows-${i}`, - title: `Reflow test for URL bar entry #${i}`, + title: `Reflow test for URL bar entry #${i} - ${searchStr}`, }); } await PlacesTestUtils.addVisits(visits); registerCleanupFunction(async function() { - await PlacesTestUtils.clearHistory(); + await PlacesUtils.history.clear(); }); }
--- a/browser/base/content/test/static/browser_misused_characters_in_strings.js +++ b/browser/base/content/test/static/browser_misused_characters_in_strings.js @@ -143,16 +143,20 @@ let gWhitelist = [{ }, { file: "aboutNetworking.dtd", key: "aboutNetworking.logTutorial", type: "single-quote" }, { file: "preferences.properties", key: "searchResults.needHelp2", type: "double-quote" + }, { + file: "aboutdevtools.dtd", + key: "aboutDevtools.newsletter.privacy.label", + type: "single-quote" } ]; /** * Check if an error should be ignored due to matching one of the whitelist * objects defined in gWhitelist. * * @param filepath The URI spec of the locale file
--- a/browser/base/content/test/tabs/browser_overflowScroll.js +++ b/browser/base/content/test/tabs/browser_overflowScroll.js @@ -2,56 +2,56 @@ requestLongerTimeout(2); /** * Tests that scrolling the tab strip via the scroll buttons scrolls the right * amount in non-smoothscroll mode. */ add_task(async function() { - let tabstrip = gBrowser.tabContainer.mTabstrip; - let scrollbox = tabstrip._scrollbox; - let originalSmoothScroll = tabstrip.smoothScroll; + let arrowScrollbox = gBrowser.tabContainer.arrowScrollbox; + let scrollbox = arrowScrollbox._scrollbox; + let originalSmoothScroll = arrowScrollbox.smoothScroll; let tabs = gBrowser.tabs; let tabMinWidth = parseInt(getComputedStyle(gBrowser.selectedTab, null).minWidth); let rect = ele => ele.getBoundingClientRect(); let width = ele => rect(ele).width; - let tabCountForOverflow = Math.ceil(width(tabstrip) / tabMinWidth * 3); + let tabCountForOverflow = Math.ceil(width(arrowScrollbox) / tabMinWidth * 3); let left = ele => rect(ele).left; let right = ele => rect(ele).right; let isLeft = (ele, msg) => is(left(ele), left(scrollbox), msg); let isRight = (ele, msg) => is(right(ele), right(scrollbox), msg); - let elementFromPoint = x => tabstrip._elementFromPoint(x); + let elementFromPoint = x => arrowScrollbox._elementFromPoint(x); let nextLeftElement = () => elementFromPoint(left(scrollbox) - 1); let nextRightElement = () => elementFromPoint(right(scrollbox) + 1); let firstScrollable = () => tabs[gBrowser._numPinnedTabs]; - tabstrip.smoothScroll = false; + arrowScrollbox.smoothScroll = false; registerCleanupFunction(() => { - tabstrip.smoothScroll = originalSmoothScroll; + arrowScrollbox.smoothScroll = originalSmoothScroll; }); while (tabs.length < tabCountForOverflow) { BrowserTestUtils.addTab(gBrowser, "about:blank", { skipAnimation: true }); } gBrowser.pinTab(tabs[0]); await BrowserTestUtils.waitForCondition(() => { return Array.from(gBrowser.tabs).every(tab => tab._fullyOpen); }); ok(!scrollbox.hasAttribute("notoverflowing"), "Tab strip should be overflowing"); - let upButton = tabstrip._scrollButtonUp; - let downButton = tabstrip._scrollButtonDown; + let upButton = arrowScrollbox._scrollButtonUp; + let downButton = arrowScrollbox._scrollButtonDown; let element; gBrowser.selectedTab = firstScrollable(); ok(left(scrollbox) <= left(firstScrollable()), "Selecting the first tab scrolls it into view " + "(" + left(scrollbox) + " <= " + left(firstScrollable()) + ")"); element = nextRightElement(); EventUtils.synthesizeMouseAtCenter(downButton, {});
--- a/browser/components/extensions/ext-sidebarAction.js +++ b/browser/components/extensions/ext-sidebarAction.js @@ -136,26 +136,16 @@ this.sidebarAction = class extends Exten let install = this.extension.startupReason === "ADDON_INSTALL"; for (let window of windowTracker.browserWindows()) { this.updateWindow(window); let {SidebarUI} = window; if (install || SidebarUI.lastOpenedId == this.id) { SidebarUI.show(this.id); } } - - if (install && !Services.prefs.prefHasUserValue("extensions.sidebar-button.shown")) { - Services.prefs.setBoolPref("extensions.sidebar-button.shown", true); - // If the sidebar button has never been moved to the toolbar, move it now - // so the user can see/access the sidebars. - let widget = CustomizableUI.getWidget("sidebar-button"); - if (!widget.areaType) { - CustomizableUI.addWidgetToArea("sidebar-button", CustomizableUI.AREA_NAVBAR, 0); - } - } } sidebarUrl(panel) { let url = `${sidebarURL}?panel=${encodeURIComponent(panel)}`; if (this.extension.remote) { url += "&remote=1"; }
--- a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js +++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js @@ -46,37 +46,29 @@ let extData = { add_task(async function sidebar_initial_install() { ok(document.getElementById("sidebar-box").hidden, "sidebar box is not visible"); let extension = ExtensionTestUtils.loadExtension(extData); await extension.startup(); // Test sidebar is opened on install await extension.awaitMessage("sidebar"); ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible"); - // Test toolbar button is available - ok(document.getElementById("sidebar-button"), "sidebar button is in UI"); await extension.unload(); // Test that the sidebar was closed on unload. ok(document.getElementById("sidebar-box").hidden, "sidebar box is not visible"); - - // Move toolbar button back to customization. - CustomizableUI.removeWidgetFromArea("sidebar-button", CustomizableUI.AREA_NAVBAR); - ok(!document.getElementById("sidebar-button"), "sidebar button is not in UI"); }); add_task(async function sidebar_two_sidebar_addons() { let extension2 = ExtensionTestUtils.loadExtension(extData); await extension2.startup(); // Test sidebar is opened on install await extension2.awaitMessage("sidebar"); ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible"); - // Test toolbar button is NOT available after first install - ok(!document.getElementById("sidebar-button"), "sidebar button is not in UI"); // Test second sidebar install opens new sidebar let extension3 = ExtensionTestUtils.loadExtension(extData); await extension3.startup(); // Test sidebar is opened on install await extension3.awaitMessage("sidebar"); ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible"); await extension3.unload(); @@ -92,13 +84,8 @@ add_task(async function sidebar_empty_pa await extension.startup(); // Test sidebar is opened on install await extension.awaitMessage("sidebar"); ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible in first window"); extension.sendMessage("set-panel"); await extension.awaitFinish(); await extension.unload(); }); - -add_task(async function cleanup() { - // This is set on initial sidebar install. - Services.prefs.clearUserPref("extensions.sidebar-button.shown"); -});
--- a/browser/components/migration/MigrationUtils.jsm +++ b/browser/components/migration/MigrationUtils.jsm @@ -30,16 +30,18 @@ XPCOMUtils.defineLazyModuleGetter(this, XPCOMUtils.defineLazyModuleGetter(this, "ResponsivenessMonitor", "resource://gre/modules/ResponsivenessMonitor.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Sqlite", "resource://gre/modules/Sqlite.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch", "resource://gre/modules/TelemetryStopwatch.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry", "resource://gre/modules/WindowsRegistry.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "setTimeout", + "resource://gre/modules/Timer.jsm"); var gMigrators = null; var gProfileStartup = null; var gMigrationBundle = null; var gPreviousDefaultBrowserKey = ""; let gKeepUndoData = false; let gUndoData = null;
new file mode 100644 --- /dev/null +++ b/browser/components/migration/tests/unit/test_MigrationUtils_timedRetry.js @@ -0,0 +1,26 @@ +"use strict"; + +XPCOMUtils.defineLazyModuleGetter(this, "OS", + "resource://gre/modules/osfile.jsm"); + +let tmpFile = FileUtils.getDir("TmpD", [], true); +let dbConn; + +add_task(async function setup() { + tmpFile.append("TestDB"); + dbConn = await Sqlite.openConnection({ path: tmpFile.path }); + + do_register_cleanup(() => { + dbConn.close(); + OS.File.remove(tmpFile.path); + }); +}); + +add_task(async function testgetRowsFromDBWithoutLocksRetries() { + let promise = MigrationUtils.getRowsFromDBWithoutLocks(tmpFile.path, + "Temp DB", + "SELECT * FROM moz_temp_table"); + await new Promise(resolve => do_timeout(50, resolve)); + dbConn.execute("CREATE TABLE moz_temp_table (id INTEGER PRIMARY KEY)"); + await promise; +});
--- a/browser/components/migration/tests/unit/xpcshell.ini +++ b/browser/components/migration/tests/unit/xpcshell.ini @@ -18,10 +18,11 @@ skip-if = os != "win" skip-if = os != "win" [test_fx_telemetry.js] [test_IE_bookmarks.js] skip-if = !(os == "win" && bits == 64) # bug 1392396 [test_IE_cookies.js] skip-if = os != "win" [test_IE7_passwords.js] skip-if = os != "win" +[test_MigrationUtils_timedRetry.js] [test_Safari_bookmarks.js] skip-if = os != "mac"
--- a/browser/components/places/tests/browser/browser_library_left_pane_middleclick.js +++ b/browser/components/places/tests/browser/browser_library_left_pane_middleclick.js @@ -2,190 +2,86 @@ /* 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/. */ /** * Tests middle-clicking items in the Library. */ -const ENABLE_HISTORY_PREF = "places.history.enabled"; +const URIs = ["about:license", "about:"]; var gLibrary = null; -var gTests = []; -var gCurrentTest = null; -// Listener for TabOpen and tabs progress. -var gTabsListener = { - _loadedURIs: [], - _openTabsCount: 0, - - handleEvent(aEvent) { - if (aEvent.type != "TabOpen") - return; - - if (++this._openTabsCount == gCurrentTest.URIs.length) { - is(gBrowser.tabs.length, gCurrentTest.URIs.length + 1, - "We have opened " + gCurrentTest.URIs.length + " new tab(s)"); - } - - var tab = aEvent.target; - is(tab.ownerGlobal, window, - "Tab has been opened in current browser window"); - }, - - onLocationChange(aBrowser, aWebProgress, aRequest, aLocationURI, - aFlags) { - var spec = aLocationURI.spec; - ok(true, spec); - // When a new tab is opened, location is first set to "about:blank", so - // we can ignore those calls. - // Ignore multiple notifications for the same URI too. - if (spec == "about:blank" || this._loadedURIs.includes(spec)) - return; - - ok(gCurrentTest.URIs.includes(spec), - "Opened URI found in list: " + spec); - - if (gCurrentTest.URIs.includes(spec)) - this._loadedURIs.push(spec); - - if (this._loadedURIs.length == gCurrentTest.URIs.length) { - // We have correctly opened all URIs. - - // Reset arrays. - this._loadedURIs.length = 0; - - this._openTabsCount = 0; - - executeSoon(function() { - // Close all tabs. - while (gBrowser.tabs.length > 1) - gBrowser.removeCurrentTab(); - - // Test finished. This will move to the next one. - waitForFocus(gCurrentTest.finish, gBrowser.ownerGlobal); - }); - } - } -}; - -// ------------------------------------------------------------------------------ -// Open a folder in tabs. - -gTests.push({ - desc: "Open a folder in tabs.", - URIs: ["about:buildconfig", "about:"], - _folderId: -1, - - setup() { - var bs = PlacesUtils.bookmarks; - // Create a new folder. - var folderId = bs.createFolder(bs.unfiledBookmarksFolder, - "Folder", - bs.DEFAULT_INDEX); - this._folderId = folderId; - - // Add bookmarks in folder. - this.URIs.forEach(function(aURI) { - bs.insertBookmark(folderId, - PlacesUtils._uri(aURI), - bs.DEFAULT_INDEX, - "Title"); - }); - - // Select unsorted bookmarks root in the left pane. - gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); - isnot(gLibrary.PlacesOrganizer._places.selectedNode, null, - "We correctly have selection in the Library left pane"); - // Get our bookmark in the right pane. - var folderNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0); - is(folderNode.title, "Folder", "Found folder in the right pane"); - }, - - finish() { - setTimeout(runNextTest, 0); - }, - - cleanup() { - PlacesUtils.bookmarks.removeItem(this._folderId); - } -}); - -// ------------------------------------------------------------------------------ - -function test() { - waitForExplicitFinish(); - - // Sanity checks. - ok(PlacesUtils, "PlacesUtils in context"); - ok(PlacesUIUtils, "PlacesUIUtils in context"); - - // Add tabs listeners. - gBrowser.tabContainer.addEventListener("TabOpen", gTabsListener); - gBrowser.addTabsProgressListener(gTabsListener); - +add_task(async function test_setup() { // Temporary disable history, so we won't record pages navigation. - gPrefService.setBoolPref(ENABLE_HISTORY_PREF, false); + await SpecialPowers.pushPrefEnv({set: [ + ["places.history.enabled", false] + ]}); // Open Library window. - openLibrary(function(library) { - gLibrary = library; - // Kick off tests. - runNextTest(); - }); -} - -function runNextTest() { - // Cleanup from previous test. - if (gCurrentTest) - gCurrentTest.cleanup(); + gLibrary = await promiseLibrary(); - if (gTests.length > 0) { - // Goto next test. - gCurrentTest = gTests.shift(); - info("Start of test: " + gCurrentTest.desc); - // Test setup will set Library so that the bookmark to be opened is the - // first node in the content (right pane) tree. - gCurrentTest.setup(); - - gLibrary.focus(); - waitForFocus(function() { - // Open the "Other Bookmarks" folder. - gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); - gLibrary.PlacesOrganizer._places.selectedNode.containerOpen = true; - // Now middle-click on the bookmark contained with it. - let bookmarkedNode = gLibrary.PlacesOrganizer._places.selectedNode.getChild(0); - mouseEventOnCell(gLibrary.PlacesOrganizer._places, - gLibrary.PlacesOrganizer._places.view.treeIndexForNode(bookmarkedNode), - 0, - { button: 1 }); - }, gLibrary); - } else { - // No more tests. - + registerCleanupFunction(async () => { // We must close "Other Bookmarks" ready for other tests. gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); gLibrary.PlacesOrganizer._places.selectedNode.containerOpen = false; + await PlacesUtils.bookmarks.eraseEverything(); + // Close Library window. - gLibrary.close(); + await promiseLibraryClosed(gLibrary); + }); +}); - // Remove tabs listeners. - gBrowser.tabContainer.removeEventListener("TabOpen", gTabsListener); - gBrowser.removeTabsProgressListener(gTabsListener); +add_task(async function test_open_folder_in_tabs() { + let children = URIs.map(url => { + return { + title: "Title", + url + } + }); + + // Create a new folder. + await PlacesUtils.bookmarks.insertTree({ + guid: PlacesUtils.bookmarks.unfiledGuid, + children: [{ + title: "Folder", + type: PlacesUtils.bookmarks.TYPE_FOLDER, + children, + }], + }); - // Restore history. - try { - gPrefService.clearUserPref(ENABLE_HISTORY_PREF); - } catch (ex) {} + // Select unsorted bookmarks root in the left pane. + gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); + Assert.notEqual(gLibrary.PlacesOrganizer._places.selectedNode, null, + "We correctly have selection in the Library left pane"); + + // Get our bookmark in the right pane. + var folderNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0); + Assert.equal(folderNode.title, "Folder", "Found folder in the right pane"); + + gLibrary.PlacesOrganizer._places.selectedNode.containerOpen = true; - finish(); - } -} + // Now middle-click on the bookmark contained with it. + let promiseLoaded = Promise.all(URIs.map(uri => + BrowserTestUtils.waitForNewTab(gBrowser, uri, false, true))); + + let bookmarkedNode = gLibrary.PlacesOrganizer._places.selectedNode.getChild(0); + mouseEventOnCell(gLibrary.PlacesOrganizer._places, + gLibrary.PlacesOrganizer._places.view.treeIndexForNode(bookmarkedNode), + 0, + { button: 1 }); + + let tabs = await promiseLoaded; + + Assert.ok(true, "Expected tabs were loaded"); + + await Promise.all(tabs.map(tab => BrowserTestUtils.removeTab(tab))); +}); function mouseEventOnCell(aTree, aRowIndex, aColumnIndex, aEventDetails) { var selection = aTree.view.selection; selection.select(aRowIndex); aTree.treeBoxObject.ensureRowIsVisible(aRowIndex); var column = aTree.columns[aColumnIndex]; // get cell coordinates
--- a/browser/components/places/tests/browser/browser_library_middleclick.js +++ b/browser/components/places/tests/browser/browser_library_middleclick.js @@ -2,272 +2,205 @@ /* 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/. */ /** * Tests middle-clicking items in the Library. */ -const ENABLE_HISTORY_PREF = "places.history.enabled"; +const URIs = ["about:license", "about:"]; var gLibrary = null; var gTests = []; -var gCurrentTest = null; -// Listener for TabOpen and tabs progress. -var gTabsListener = { - _loadedURIs: [], - _openTabsCount: 0, +add_task(async function test_setup() { + // Increase timeout, this test can be quite slow due to waitForFocus calls. + requestLongerTimeout(2); - handleEvent(aEvent) { - if (aEvent.type != "TabOpen") - return; + // Temporary disable history, so we won't record pages navigation. + await SpecialPowers.pushPrefEnv({set: [ + ["places.history.enabled", false] + ]}); - if (++this._openTabsCount == gCurrentTest.URIs.length) { - is(gBrowser.tabs.length, gCurrentTest.URIs.length + 1, - "We have opened " + gCurrentTest.URIs.length + " new tab(s)"); - } - - var tab = aEvent.target; - is(tab.ownerGlobal, window, - "Tab has been opened in current browser window"); - }, + // Ensure the database is empty. + await PlacesUtils.bookmarks.eraseEverything(); - onLocationChange(aBrowser, aWebProgress, aRequest, aLocationURI, - aFlags) { - var spec = aLocationURI.spec; - ok(true, spec); - // When a new tab is opened, location is first set to "about:blank", so - // we can ignore those calls. - // Ignore multiple notifications for the same URI too. - if (spec == "about:blank" || this._loadedURIs.includes(spec)) - return; - - ok(gCurrentTest.URIs.includes(spec), - "Opened URI found in list: " + spec); - - if (gCurrentTest.URIs.includes(spec)) - this._loadedURIs.push(spec); - - if (this._loadedURIs.length == gCurrentTest.URIs.length) { - // We have correctly opened all URIs. + // Open Library window. + gLibrary = await promiseLibrary(); - // Reset arrays. - this._loadedURIs.length = 0; - - this._openTabsCount = 0; - - executeSoon(function() { - // Close all tabs. - while (gBrowser.tabs.length > 1) - gBrowser.removeCurrentTab(); + registerCleanupFunction(async () => { + // We must close "Other Bookmarks" ready for other tests. + gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); + gLibrary.PlacesOrganizer._places.selectedNode.containerOpen = false; - // Test finished. This will move to the next one. - waitForFocus(gCurrentTest.finish, gBrowser.ownerGlobal); - }); - } - } -}; + await PlacesUtils.bookmarks.eraseEverything(); -// ------------------------------------------------------------------------------ -// Open bookmark in a new tab. + // Close Library window. + await promiseLibraryClosed(gLibrary); + }); +}); gTests.push({ desc: "Open bookmark in a new tab.", URIs: ["about:buildconfig"], - _itemId: -1, + _bookmark: null, - setup() { - var bs = PlacesUtils.bookmarks; + async setup() { // Add a new unsorted bookmark. - this._itemId = bs.insertBookmark(bs.unfiledBookmarksFolder, - PlacesUtils._uri(this.URIs[0]), - bs.DEFAULT_INDEX, - "Title"); + this._bookmark = await PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.unfiledGuid, + title: "Title", + url: this.URIs[0], + }); + // Select unsorted bookmarks root in the left pane. gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); - isnot(gLibrary.PlacesOrganizer._places.selectedNode, null, - "We correctly have selection in the Library left pane"); + Assert.notEqual(gLibrary.PlacesOrganizer._places.selectedNode, null, + "We correctly have selection in the Library left pane"); + // Get our bookmark in the right pane. var bookmarkNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0); - is(bookmarkNode.uri, this.URIs[0], "Found bookmark in the right pane"); + Assert.equal(bookmarkNode.uri, this.URIs[0], "Found bookmark in the right pane"); }, - finish() { - setTimeout(runNextTest, 0); - }, - - cleanup() { - PlacesUtils.bookmarks.removeItem(this._itemId); + async cleanup() { + await PlacesUtils.bookmarks.remove(this._bookmark); } }); // ------------------------------------------------------------------------------ // Open a folder in tabs. - +// gTests.push({ desc: "Open a folder in tabs.", URIs: ["about:buildconfig", "about:"], - _folderId: -1, + _bookmarks: null, - setup() { - var bs = PlacesUtils.bookmarks; + async setup() { // Create a new folder. - var folderId = bs.createFolder(bs.unfiledBookmarksFolder, - "Folder", - bs.DEFAULT_INDEX); - this._folderId = folderId; + let children = this.URIs.map(url => { + return { + title: "Title", + url, + } + }); - // Add bookmarks in folder. - this.URIs.forEach(function(aURI) { - bs.insertBookmark(folderId, - PlacesUtils._uri(aURI), - bs.DEFAULT_INDEX, - "Title"); + this._bookmarks = await PlacesUtils.bookmarks.insertTree({ + guid: PlacesUtils.bookmarks.unfiledGuid, + children: [{ + title: "Folder", + type: PlacesUtils.bookmarks.TYPE_FOLDER, + children, + }], }); // Select unsorted bookmarks root in the left pane. gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); isnot(gLibrary.PlacesOrganizer._places.selectedNode, null, "We correctly have selection in the Library left pane"); // Get our bookmark in the right pane. var folderNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0); is(folderNode.title, "Folder", "Found folder in the right pane"); }, - finish() { - setTimeout(runNextTest, 0); - }, - - cleanup() { - PlacesUtils.bookmarks.removeItem(this._folderId); + async cleanup() { + await PlacesUtils.bookmarks.remove(this._bookmarks[0]); } }); // ------------------------------------------------------------------------------ // Open a query in tabs. gTests.push({ desc: "Open a query in tabs.", URIs: ["about:buildconfig", "about:"], - _folderId: -1, - _queryId: -1, + _bookmarks: null, + _query: null, - setup() { - var bs = PlacesUtils.bookmarks; - // Create a new folder. - var folderId = bs.createFolder(bs.unfiledBookmarksFolder, - "Folder", - bs.DEFAULT_INDEX); - this._folderId = folderId; + async setup() { + let children = this.URIs.map(url => { + return { + title: "Title", + url, + } + }); - // Add bookmarks in folder. - this.URIs.forEach(function(aURI) { - bs.insertBookmark(folderId, - PlacesUtils._uri(aURI), - bs.DEFAULT_INDEX, - "Title"); + this._bookmarks = await PlacesUtils.bookmarks.insertTree({ + guid: PlacesUtils.bookmarks.unfiledGuid, + children: [{ + title: "Folder", + type: PlacesUtils.bookmarks.TYPE_FOLDER, + children, + }], }); // Create a bookmarks query containing our bookmarks. var hs = PlacesUtils.history; var options = hs.getNewQueryOptions(); options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS; var query = hs.getNewQuery(); // The colon included in the terms selects only about: URIs. If not included // we also may get pages like about.html included in the query result. query.searchTerms = "about:"; var queryString = hs.queriesToQueryString([query], 1, options); - this._queryId = bs.insertBookmark(bs.unfiledBookmarksFolder, - PlacesUtils._uri(queryString), - 0, // It must be the first. - "Query"); + this._query = await PlacesUtils.bookmarks.insert({ + index: 0, // it must be the first + parentGuid: PlacesUtils.bookmarks.unfiledGuid, + title: "Query", + url: queryString, + }); + + gLibrary.PlacesOrganizer.selectLeftPaneQuery("Query"); // Select unsorted bookmarks root in the left pane. gLibrary.PlacesOrganizer.selectLeftPaneQuery("UnfiledBookmarks"); isnot(gLibrary.PlacesOrganizer._places.selectedNode, null, "We correctly have selection in the Library left pane"); // Get our bookmark in the right pane. var folderNode = gLibrary.ContentTree.view.view.nodeForTreeIndex(0); is(folderNode.title, "Query", "Found query in the right pane"); }, - finish() { - setTimeout(runNextTest, 0); - }, - - cleanup() { - PlacesUtils.bookmarks.removeItem(this._folderId); - PlacesUtils.bookmarks.removeItem(this._queryId); + async cleanup() { + await PlacesUtils.bookmarks.remove(this._bookmarks[0]); + await PlacesUtils.bookmarks.remove(this._query); } }); -// ------------------------------------------------------------------------------ +async function runTest(test) { + info("Start of test: " + test.desc); + // Test setup will set Library so that the bookmark to be opened is the + // first node in the content (right pane) tree. + await test.setup(); -function test() { - waitForExplicitFinish(); - // Increase timeout, this test can be quite slow due to waitForFocus calls. - requestLongerTimeout(2); - - // Sanity checks. - ok(PlacesUtils, "PlacesUtils in context"); - ok(PlacesUIUtils, "PlacesUIUtils in context"); + // Middle click on first node in the content tree of the Library. + gLibrary.focus(); + await SimpleTest.promiseFocus(gLibrary); - // Add tabs listeners. - gBrowser.tabContainer.addEventListener("TabOpen", gTabsListener); - gBrowser.addTabsProgressListener(gTabsListener); + // Now middle-click on the bookmark contained with it. + let promiseLoaded = Promise.all(test.URIs.map(uri => + BrowserTestUtils.waitForNewTab(gBrowser, uri, false, true))); - // Temporary disable history, so we won't record pages navigation. - gPrefService.setBoolPref(ENABLE_HISTORY_PREF, false); + mouseEventOnCell(gLibrary.ContentTree.view, 0, 0, { button: 1 }); - // Open Library window. - openLibrary(function(library) { - gLibrary = library; - // Kick off tests. - runNextTest(); - }); + let tabs = await promiseLoaded; + + Assert.ok(true, "Expected tabs were loaded"); + + await Promise.all(tabs.map(tab => BrowserTestUtils.removeTab(tab))); + + await test.cleanup(); } -function runNextTest() { - // Cleanup from previous test. - if (gCurrentTest) - gCurrentTest.cleanup(); - - if (gTests.length > 0) { - // Goto next test. - gCurrentTest = gTests.shift(); - info("Start of test: " + gCurrentTest.desc); - // Test setup will set Library so that the bookmark to be opened is the - // first node in the content (right pane) tree. - gCurrentTest.setup(); - - // Middle click on first node in the content tree of the Library. - gLibrary.focus(); - waitForFocus(function() { - mouseEventOnCell(gLibrary.ContentTree.view, 0, 0, { button: 1 }); - }, gLibrary); - } else { - // No more tests. - - // Close Library window. - gLibrary.close(); - - // Remove tabs listeners. - gBrowser.tabContainer.removeEventListener("TabOpen", gTabsListener); - gBrowser.removeTabsProgressListener(gTabsListener); - - // Restore history. - try { - gPrefService.clearUserPref(ENABLE_HISTORY_PREF); - } catch (ex) {} - - finish(); +add_task(async function test_all() { + for (let test of gTests) { + await runTest(test); } -} +}); function mouseEventOnCell(aTree, aRowIndex, aColumnIndex, aEventDetails) { var selection = aTree.view.selection; selection.select(aRowIndex); aTree.treeBoxObject.ensureRowIsVisible(aRowIndex); var column = aTree.columns[aColumnIndex]; // get cell coordinates
--- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -3345,19 +3345,19 @@ var SessionStoreInternal = { selectTab = Math.min(selectTab, winData.tabs.length); } let tabbrowser = aWindow.gBrowser; let newTabCount = winData.tabs.length; var tabs = []; // disable smooth scrolling while adding, moving, removing and selecting tabs - let tabstrip = tabbrowser.tabContainer.mTabstrip; - let smoothScroll = tabstrip.smoothScroll; - tabstrip.smoothScroll = false; + let arrowScrollbox = tabbrowser.tabContainer.arrowScrollbox; + let smoothScroll = arrowScrollbox.smoothScroll; + arrowScrollbox.smoothScroll = false; // We need to keep track of the initially open tabs so that they // can be moved to the end of the restored tabs. let initialTabs; if (!overwriteTabs && firstWindow) { initialTabs = Array.slice(tabbrowser.tabs); } @@ -3489,17 +3489,17 @@ var SessionStoreInternal = { } // Restore tabs, if any. if (winData.tabs.length) { this.restoreTabs(aWindow, tabs, winData.tabs, selectTab); } // set smoothScroll back to the original value - tabstrip.smoothScroll = smoothScroll; + arrowScrollbox.smoothScroll = smoothScroll; TelemetryStopwatch.finish("FX_SESSION_RESTORE_RESTORE_WINDOW_MS"); if (Services.prefs.getIntPref("browser.tabs.restorebutton") != 0 ) { Services.telemetry.scalarAdd("browser.session.restore.number_of_tabs", winData.tabs.length); Services.telemetry.scalarAdd("browser.session.restore.number_of_win", 1); } this._setWindowStateReady(aWindow);
--- a/browser/config/mozconfigs/win32/mingw32 +++ b/browser/config/mozconfigs/win32/mingw32 @@ -3,20 +3,16 @@ # SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE - shouldn't be used? # TOOLTOOL_DIR # MAKECAB - shouldn't be used? . "$topsrcdir/build/mozconfig.win-common" # MinGW does not have (or need) makecab unset MAKECAB -# These aren't supported on mingw at this time -# Bug 1393817 -MOZ_AUTOMATION_L10N_CHECK=0 - # Sets: # build/mozconfig.common # AUTOCLOBBER=1 # --enable-crashreporter # --enable-release # LLVM_CONFIG # MOZ_ADDON_SIGNING # MOZ_REQUIRE_SIGNING
--- a/browser/confvars.sh +++ b/browser/confvars.sh @@ -23,20 +23,16 @@ if test "$OS_ARCH" = "WINNT"; then "$MOZ_UPDATE_CHANNEL" = "release"; then if ! test "$MOZ_DEBUG"; then MOZ_STUB_INSTALLER=1 fi fi fi fi -if test "$NIGHTLY_BUILD"; then - MOZ_RUST_URLPARSE=1 -fi - # Enable building ./signmar and running libmar signature tests MOZ_ENABLE_SIGNMAR=1 MOZ_APP_VERSION=$FIREFOX_VERSION MOZ_APP_VERSION_DISPLAY=$FIREFOX_VERSION_DISPLAY # MOZ_APP_DISPLAYNAME will be set by branding/configure.sh # MOZ_BRANDING_DIRECTORY is the default branding directory used when none is # specified. It should never point to the "official" branding directory.
--- a/browser/extensions/formautofill/FormAutofillUtils.jsm +++ b/browser/extensions/formautofill/FormAutofillUtils.jsm @@ -234,16 +234,64 @@ this.FormAutofillUtils = { let dataset = this.getCountryAddressData(country); let languages = dataset.languages ? dataset.languages.split("~") : [dataset.lang]; this._collators[country] = languages.map(lang => new Intl.Collator(lang, {sensitivity: "base", ignorePunctuation: true})); } return this._collators[country]; }, /** + * Parse a country address format string and outputs an array of fields. + * Spaces, commas, and other literals are ignored in this implementation. + * For example, format string "%A%n%C, %S" should return: + * [ + * {fieldId: "street-address", newLine: true}, + * {fieldId: "address-level2"}, + * {fieldId: "address-level1"}, + * ] + * + * @param {string} fmt Country address format string + * @returns {array<object>} List of fields + */ + parseAddressFormat(fmt) { + if (!fmt) { + throw new Error("fmt string is missing."); + } + // Based on the list of fields abbreviations in + // https://github.com/googlei18n/libaddressinput/wiki/AddressValidationMetadata + const fieldsLookup = { + N: "name", + O: "organization", + A: "street-address", + S: "address-level1", + C: "address-level2", + Z: "postal-code", + n: "newLine", + }; + + return fmt.match(/%[^%]/g).reduce((parsed, part) => { + // Take the first letter of each segment and try to identify it + let fieldId = fieldsLookup[part[1]]; + // Early return if cannot identify part. + if (!fieldId) { + return parsed; + } + // If a new line is detected, add an attribute to the previous field. + if (fieldId == "newLine") { + let size = parsed.length; + if (size) { + parsed[size - 1].newLine = true; + } + return parsed; + } + return parsed.concat({fieldId}); + }, []); + }, + + /** * Use alternative country name list to identify a country code from a * specified country name. * @param {string} countryName A country name to be identified * @param {string} [countrySpecified] A country code indicating that we only * search its alternative names if specified. * @returns {string} The matching country code. */ identifyCountryCode(countryName, countrySpecified) {
new file mode 100644 --- /dev/null +++ b/browser/extensions/formautofill/test/unit/test_parseAddressFormat.js @@ -0,0 +1,47 @@ +"use strict"; + +Cu.import("resource://formautofill/FormAutofillUtils.jsm"); + +add_task(async function test_parseAddressFormat() { + const TEST_CASES = [ + { + fmt: "%N%n%O%n%A%n%C, %S %Z", // US + parsed: [ + {fieldId: "name", newLine: true}, + {fieldId: "organization", newLine: true}, + {fieldId: "street-address", newLine: true}, + {fieldId: "address-level2"}, + {fieldId: "address-level1"}, + {fieldId: "postal-code"}, + ], + }, + { + fmt: "%N%n%O%n%A%n%C %S %Z", // CA + parsed: [ + {fieldId: "name", newLine: true}, + {fieldId: "organization", newLine: true}, + {fieldId: "street-address", newLine: true}, + {fieldId: "address-level2"}, + {fieldId: "address-level1"}, + {fieldId: "postal-code"}, + ], + }, + { + fmt: "%N%n%O%n%A%n%Z %C", // DE + parsed: [ + {fieldId: "name", newLine: true}, + {fieldId: "organization", newLine: true}, + {fieldId: "street-address", newLine: true}, + {fieldId: "postal-code"}, + {fieldId: "address-level2"}, + ], + }, + ]; + + Assert.throws(() => FormAutofillUtils.parseAddressFormat(), + /fmt string is missing./, + "Should throw if fmt is empty"); + for (let tc of TEST_CASES) { + Assert.deepEqual(FormAutofillUtils.parseAddressFormat(tc.fmt), tc.parsed); + } +});
--- a/browser/extensions/formautofill/test/unit/xpcshell.ini +++ b/browser/extensions/formautofill/test/unit/xpcshell.ini @@ -33,16 +33,17 @@ support-files = [test_isAvailable.js] [test_isCJKName.js] [test_isFieldEligibleForAutofill.js] [test_markAsAutofillField.js] [test_masterPassword.js] [test_migrateRecords.js] [test_nameUtils.js] [test_onFormSubmitted.js] +[test_parseAddressFormat.js] [test_profileAutocompleteResult.js] [test_phoneNumber.js] [test_reconcile.js] [test_savedFieldNames.js] [test_toOneLineAddress.js] [test_storage_tombstones.js] [test_storage_syncfields.js] [test_transformFields.js]
--- a/devtools/shim/aboutdevtools/aboutdevtools.js +++ b/devtools/shim/aboutdevtools/aboutdevtools.js @@ -4,16 +4,22 @@ "use strict"; const { utils: Cu } = Components; const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); const DEVTOOLS_ENABLED_PREF = "devtools.enabled"; +const TELEMETRY_OPENED_KEY = "DEVTOOLS_ABOUT_DEVTOOLS_OPENED_KEY"; +const TELEMETRY_OPENED_REASON = "DEVTOOLS_ABOUT_DEVTOOLS_OPENED_REASON"; +const TELEMETRY_OPENED = "devtools.aboutdevtools.opened"; +const TELEMETRY_INSTALLED = "devtools.aboutdevtools.installed"; +const TELEMETRY_NOINSTALL_EXITS = "devtools.aboutdevtools.noinstall_exits"; + const MESSAGES = { AboutDebugging: "about-debugging-message", ContextMenu: "inspect-element-message", HamburgerMenu: "menu-message", KeyShortcut: "key-shortcut-message", SystemMenu: "menu-message", }; @@ -22,25 +28,35 @@ const aboutDevtoolsBundle = Services.str const KEY_SHORTCUTS_STRINGS = "chrome://devtools-shim/locale/key-shortcuts.properties"; const keyShortcutsBundle = Services.strings.createBundle(KEY_SHORTCUTS_STRINGS); // URL constructor doesn't support about: scheme, // we have to use http in order to have working searchParams. let url = new URL(window.location.href.replace("about:", "http://")); let reason = url.searchParams.get("reason"); +let keyid = url.searchParams.get("keyid"); let tabid = parseInt(url.searchParams.get("tabid"), 10); +// Keep track of the initial devtools.enabled value to track exits in telemetry. +let isEnabledOnLoad; + function getToolboxShortcut() { const modifier = Services.appinfo.OS == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+"; return modifier + keyShortcutsBundle.GetStringFromName("toggleToolbox.commandkey"); } function onInstallButtonClick() { Services.prefs.setBoolPref("devtools.enabled", true); + + try { + Services.telemetry.scalarAdd(TELEMETRY_INSTALLED, 1); + } catch (e) { + dump("about:devtools oninstall telemetry failed: " + e + "\n"); + } } function onCloseButtonClick() { window.close(); } function updatePage() { const installPage = document.getElementById("install-page"); @@ -135,18 +151,21 @@ function createFeatureEl(feature) { </p>`; return li; } window.addEventListener("load", function () { const inspectorShortcut = getToolboxShortcut(); const welcomeMessage = document.getElementById("welcome-message"); - welcomeMessage.textContent = welcomeMessage.textContent.replace( - "##INSPECTOR_SHORTCUT##", inspectorShortcut); + + // Set the welcome message content with the correct keyboard sortcut for the current + // platform. + welcomeMessage.textContent = aboutDevtoolsBundle.formatStringFromName("welcome.message", + [inspectorShortcut], 1); // Set the appropriate title message. if (reason == "ContextMenu") { document.getElementById("inspect-title").removeAttribute("hidden"); } else { document.getElementById("common-title").removeAttribute("hidden"); } @@ -164,16 +183,30 @@ window.addEventListener("load", function let featuresContainer = document.querySelector(".features-list"); for (let feature of features) { featuresContainer.appendChild(createFeatureEl(feature)); } // Update the current page based on the current value of DEVTOOLS_ENABLED_PREF. updatePage(); + + try { + if (reason) { + Services.telemetry.getHistogramById(TELEMETRY_OPENED_REASON).add(reason); + } + + if (keyid) { + Services.telemetry.getHistogramById(TELEMETRY_OPENED_KEY).add(keyid); + } + + Services.telemetry.scalarAdd(TELEMETRY_OPENED, 1); + } catch (e) { + dump("about:devtools onload telemetry failed: " + e + "\n"); + } }, { once: true }); window.addEventListener("beforeunload", function () { // Focus the tab that triggered the DevTools onboarding. if (document.visibilityState != "visible") { // Only try to focus the correct tab if the current tab is the about:devtools page. return; } @@ -189,9 +222,18 @@ window.addEventListener("beforeunload", gBrowser.selectedTab = originalTab; } }, {once: true}); window.addEventListener("unload", function () { document.getElementById("install").removeEventListener("click", onInstallButtonClick); document.getElementById("close").removeEventListener("click", onCloseButtonClick); Services.prefs.removeObserver(DEVTOOLS_ENABLED_PREF, updatePage); + + const isEnabled = Services.prefs.getBoolPref("devtools.enabled"); + if (!isEnabledOnLoad && !isEnabled) { + try { + Services.telemetry.scalarAdd(TELEMETRY_NOINSTALL_EXITS, 1); + } catch (e) { + dump("about:devtools onunload telemetry failed: " + e + "\n"); + } + } }, {once: true});
--- a/devtools/shim/aboutdevtools/aboutdevtools.xhtml +++ b/devtools/shim/aboutdevtools/aboutdevtools.xhtml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <!DOCTYPE html [ <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> %htmlDTD; <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd"> %globalDTD; -<!ENTITY % aboutdevtoolsDTD SYSTEM "chrome://devtools-shim/content/aboutdevtools/tmp-locale/aboutdevtools.dtd"> %aboutdevtoolsDTD; +<!ENTITY % aboutdevtoolsDTD SYSTEM "chrome://devtools-shim/locale/aboutdevtools.dtd"> %aboutdevtoolsDTD; ]> <html xmlns="http://www.w3.org/1999/xhtml" dir="&locale.dir;"> <head> <title>&aboutDevtools.headTitle;</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>a <link rel="stylesheet" href="chrome://global/skin/in-content/common.css" type="text/css"/> <link rel="stylesheet" href="chrome://devtools-shim/content/aboutdevtools/aboutdevtools.css" type="text/css"/> @@ -31,30 +31,32 @@ <p id="about-debugging-message" hidden="true">&aboutDevtools.enable.aboutDebuggingMessage;</p> <p id="menu-message" hidden="true">&aboutDevtools.enable.menuMessage;</p> <p id="key-shortcut-message" hidden="true">&aboutDevtools.enable.keyShortcutMessage;</p> <p id="inspect-element-message" hidden="true">&aboutDevtools.enable.inspectElementMessage;</p> <p>&aboutDevtools.enable.commonMessage;</p> <a class="external installpage-link" href="https://developer.mozilla.org/docs/Tools" target="_blank">&aboutDevtools.enable.learnMoreLink;</a> <div class="buttons-container"> - <button class="primary-button" id="install">&aboutDevtools.enable.installButton;</button> + <button class="primary-button" id="install">&aboutDevtools.enable.enableButton;</button> <button class="default-button" id="close">&aboutDevtools.enable.closeButton;</button> </div> </div> </div> </div> <!-- This page, hidden by default is displayed once the add-on is installed --> <div id="welcome-page" class="wrapper" hidden="true"> <div class="box"> <div class="left-pane" /> <div class="right-pane"> <h1 class="title" >&aboutDevtools.welcome.title;</h1> - <p id="welcome-message">&aboutDevtools.welcome.message;</p> + <!-- The welcome message is dynamically updated with a keyboard shortcut at + runtime and added in aboutdevtools.js --> + <p id="welcome-message"></p> <!-- Form dedicated to the newsletter subscription --> <div class="newsletter"> <h2 class="newsletter-title">&aboutDevtools.newsletter.title;</h2> <p>&aboutDevtools.newsletter.message;</p> <form id="newsletter-form" name="newsletter-form" action="https://www.mozilla.org/en-US/newsletter/" method="post"> <!-- "H" stands for the HTML format (->fmt). Alternative is T for text. --> @@ -65,17 +67,17 @@ <section id="newsletter-email" class="newsletter-form-section"> <input type="email" id="email" name="email" required="true" placeholder="&aboutDevtools.newsletter.email.placeholder;" /> </section> <section id="newsletter-privacy" class="newsletter-form-section"> <input type="checkbox" id="privacy" name="privacy" required="true" /> <label for="privacy">&aboutDevtools.newsletter.privacy.label;</label> </section> - <button type="submit" id="newsletter-submit" class="primary-button">&aboutDevtools.newsletter.subscribe.label;</button> + <button type="submit" id="newsletter-submit" class="primary-button">&aboutDevtools.newsletter.subscribeButton;</button> </form> <div id="newsletter-thanks"> <h2>&aboutDevtools.newsletter.thanks.title;</h2> <p>&aboutDevtools.newsletter.thanks.message;</p> </div> </div> </div> </div> @@ -85,20 +87,19 @@ </ul> </div> <footer> <img class="dev-edition-logo" src="chrome://devtools-shim/content/aboutdevtools/images/dev-edition-logo.svg" alt="Firefox Developer Edition logo"/> <div class="footer-message"> - <h1 class="footer-message-title">Firefox Developer Edition</h1> - <p> - Looking for more than just Developer Tools? - Check out the Firefox browser that is built specifically for developers and modern workflows. - </p> - <a class="external footer-link" href="https://www.mozilla.org/en-US/firefox/developer/" target="_blank">Learn more</a> + <h1 class="footer-message-title">&aboutDevtools.footer.title;</h1> + <p>&aboutDevtools.footer.message;</p> + <a class="external footer-link" + href="https://www.mozilla.org/firefox/developer/" + target="_blank">&aboutDevtools.footer.learnMoreLink;</a> </div> </footer> </div> </body> </html>
--- a/devtools/shim/devtools-startup.js +++ b/devtools/shim/devtools-startup.js @@ -460,24 +460,25 @@ DevToolsStartup.prototype = { // Appending a <key> element is not always enough. The <keyset> needs // to be detached and reattached to make sure the <key> is taken into // account (see bug 832984). let mainKeyset = doc.getElementById("mainKeyset"); mainKeyset.parentNode.insertBefore(keyset, mainKeyset); }, onKey(window, key) { - // Record the timing at which this event started in order to compute later in - // gDevTools.showToolbox, the complete time it takes to open the toolbox. - // i.e. especially take `initDevTools` into account. - - let startTime = window.performance.now(); - let require = this.initDevTools("KeyShortcut"); - if (require) { - // require might be null if initDevTools was called while DevTools are disabled. + if (!Services.prefs.getBoolPref(DEVTOOLS_ENABLED_PREF)) { + let id = key.toolId || key.id; + this.openInstallPage("KeyShortcut", id); + } else { + // Record the timing at which this event started in order to compute later in + // gDevTools.showToolbox, the complete time it takes to open the toolbox. + // i.e. especially take `initDevTools` into account. + let startTime = window.performance.now(); + let require = this.initDevTools("KeyShortcut"); let { gDevToolsBrowser } = require("devtools/client/framework/devtools-browser"); gDevToolsBrowser.onKeyShortcut(window, key, startTime); } }, // Create a <xul:key> DOM Element createKey(doc, { id, toolId, shortcut, modifiers: mod }, oncommand) { let k = doc.createElement("key"); @@ -523,17 +524,27 @@ DevToolsStartup.prototype = { this.initialized = true; let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); // Ensure loading main devtools module that hooks up into browser UI // and initialize all devtools machinery. require("devtools/client/framework/devtools-browser"); return require; }, - openInstallPage: function (reason) { + /** + * Open about:devtools to start the onboarding flow. + * + * @param {String} reason + * One of "KeyShortcut", "SystemMenu", "HamburgerMenu", "ContextMenu", + * "CommandLine". + * @param {String} keyId + * Optional. If the onboarding flow was triggered by a keyboard shortcut, pass + * the shortcut key id (or toolId) to about:devtools. + */ + openInstallPage: function (reason, keyId) { let { gBrowser } = Services.wm.getMostRecentWindow("navigator:browser"); // Focus about:devtools tab if there is already one opened in the current window. for (let tab of gBrowser.tabs) { let browser = tab.linkedBrowser; // browser.documentURI might be undefined if the browser tab is still loading. let location = browser.documentURI ? browser.documentURI.spec : ""; if (location.startsWith("about:devtools") && @@ -551,16 +562,20 @@ DevToolsStartup.prototype = { params.push("reason=" + encodeURIComponent(reason)); } let selectedBrowser = gBrowser.selectedBrowser; if (selectedBrowser) { params.push("tabid=" + selectedBrowser.outerWindowID); } + if (keyId) { + params.push("keyid=" + keyId); + } + if (params.length > 0) { url += "?" + params.join("&"); } // Set relatedToCurrent: true to open the tab next to the current one. gBrowser.selectedTab = gBrowser.addTab(url, {relatedToCurrent: true}); },
--- a/devtools/shim/jar.mn +++ b/devtools/shim/jar.mn @@ -7,20 +7,16 @@ devtools-shim.jar: content/aboutdevtools/aboutdevtools.xhtml (aboutdevtools/aboutdevtools.xhtml) content/aboutdevtools/aboutdevtools.css (aboutdevtools/aboutdevtools.css) content/aboutdevtools/aboutdevtools.js (aboutdevtools/aboutdevtools.js) content/aboutdevtools/subscribe.css (aboutdevtools/subscribe.css) content/aboutdevtools/subscribe.js (aboutdevtools/subscribe.js) content/aboutdevtools/images/otter.svg (aboutdevtools/images/otter.svg) - # Temporary localisation file, move back to devtools/shim/locales/en-US when ready for localization - # See https://bugzilla.mozilla.org/show_bug.cgi?id=1408369 - content/aboutdevtools/tmp-locale/aboutdevtools.dtd (aboutdevtools/tmp-locale/aboutdevtools.dtd) - content/aboutdevtools/images/dev-edition-logo.svg (aboutdevtools/images/dev-edition-logo.svg) content/aboutdevtools/images/external-link.svg (aboutdevtools/images/external-link.svg) content/aboutdevtools/images/feature-inspector.svg (aboutdevtools/images/feature-inspector.svg) content/aboutdevtools/images/feature-console.svg (aboutdevtools/images/feature-console.svg) content/aboutdevtools/images/feature-debugger.svg (aboutdevtools/images/feature-debugger.svg) content/aboutdevtools/images/feature-network.svg (aboutdevtools/images/feature-network.svg) content/aboutdevtools/images/feature-memory.svg (aboutdevtools/images/feature-memory.svg) content/aboutdevtools/images/feature-visualediting.svg (aboutdevtools/images/feature-visualediting.svg)
rename from devtools/shim/aboutdevtools/tmp-locale/aboutdevtools.dtd rename to devtools/shim/locales/en-US/aboutdevtools.dtd --- a/devtools/shim/aboutdevtools/tmp-locale/aboutdevtools.dtd +++ b/devtools/shim/locales/en-US/aboutdevtools.dtd @@ -1,35 +1,78 @@ <!-- 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/. --> +<!-- LOCALIZATION NOTE : This file contains the strings used in aboutdevtools.xhtml, + - displayed when going to about:devtools. UI depends on the value of the preference + - "devtools.enabled". + - + - "aboutDevtools.enable.*" and "aboutDevtools.newsletter.*" keys are used when DevTools + are disabled + - "aboutDevtools.welcome.*" keys are used when DevTools are enabled + - --> + +<!-- LOCALIZATION NOTE (aboutDevtools.headTitle): Text of the title tag for about:devtools --> <!ENTITY aboutDevtools.headTitle "About Developer Tools"> + +<!-- LOCALIZATION NOTE (aboutDevtools.enable.title): Title of the top about:devtools + - section displayed when DevTools are disabled. --> <!ENTITY aboutDevtools.enable.title "Enable Firefox Developer Tools"> + +<!-- LOCALIZATION NOTE (aboutDevtools.enable.inspectElementTitle): Title of the top + - section displayed when devtools are disabled and the user triggered DevTools by using + - the Inspect Element menu item. --> <!ENTITY aboutDevtools.enable.inspectElementTitle "Enable Firefox Developer Tools to use Inspect Element"> +<!-- LOCALIZATION NOTE (aboutDevtools.enable.inspectElementMessage): Message displayed + - when users come from using the Inspect Element menu item. --> +<!ENTITY aboutDevtools.enable.inspectElementMessage + "Examine and edit HTML and CSS with the Developer Tools’ Inspector."> + +<!-- LOCALIZATION NOTE (aboutDevtools.enable.aboutDebuggingMessage): Message displayed + - when users come from about:debugging. --> <!ENTITY aboutDevtools.enable.aboutDebuggingMessage - "Develop and debug WebExtensions, web workers, service workers and more with Firefox DevTools."> -<!ENTITY aboutDevtools.enable.inspectElementMessage - "Examine and edit HTML and CSS with the DevTools Inspector."> + "Develop and debug WebExtensions, web workers, service workers and more with Firefox Developer Tools."> + +<!-- LOCALIZATION NOTE (aboutDevtools.enable.keyShortcutMessage): Message displayed when + - users pressed a DevTools key shortcut. --> <!ENTITY aboutDevtools.enable.keyShortcutMessage "You activated a Developer Tools shortcut. If that was a mistake, you can close this tab."> + +<!-- LOCALIZATION NOTE (aboutDevtools.enable.menuMessage): Message displayed when users + - clicked on a "Enable Developer Tools" menu item. --> <!ENTITY aboutDevtools.enable.menuMessage "Examine, edit and debug HTML, CSS, and JavaScript with tools like Inspector and Debugger."> +<!-- LOCALIZATION NOTE (aboutDevtools.enable.commonMessage): Generic message displayed for + - all possible entry points (keyshortcut, menu item etc…). --> <!ENTITY aboutDevtools.enable.commonMessage - "As of Firefox 58, Developer Tools are disabled by default to give you more control over your browser."> + "Firefox Developer Tools are disabled by default to give you more control over your browser."> -<!ENTITY aboutDevtools.enable.learnMoreLink "Learn more about DevTools"> -<!ENTITY aboutDevtools.enable.installButton "Enable Developer Tools"> +<!-- LOCALIZATION NOTE (aboutDevtools.enable.learnMoreLink): Text for the link to + - https://developer.mozilla.org/docs/Tools displayed in the top section when DevTools + - are disabled. --> +<!ENTITY aboutDevtools.enable.learnMoreLink "Learn more about Developer Tools"> + +<!ENTITY aboutDevtools.enable.enableButton "Enable Developer Tools"> <!ENTITY aboutDevtools.enable.closeButton "Close this page"> + <!ENTITY aboutDevtools.welcome.title "Welcome to Firefox Developer Tools!"> -<!ENTITY aboutDevtools.welcome.message "You’ve successfully enabled DevTools! To get started, explore the Web Developer menu or open the tools with ##INSPECTOR_SHORTCUT##."> <!ENTITY aboutDevtools.newsletter.title "Mozilla Developer Newsletter"> +<!-- LOCALIZATION NOTE (aboutDevtools.newsletter.message): Subscribe form message. + - The newsletter is only available in english at the moment. + - See Bug 1415273 for support of additional languages.--> <!ENTITY aboutDevtools.newsletter.message "Get developer news, tricks and resources sent straight to your inbox."> <!ENTITY aboutDevtools.newsletter.email.placeholder "Email"> -<!ENTITY aboutDevtools.newsletter.privacy.label "I’m okay with Mozilla handling my info as explained in this <a class="external" href="https://www.mozilla.org/privacy/">Privacy Policy</a>."> -<!ENTITY aboutDevtools.newsletter.subscribe.label "Subscribe"> - +<!ENTITY aboutDevtools.newsletter.privacy.label "I’m okay with Mozilla handling my info as explained in this <a class='external' href='https://www.mozilla.org/privacy/'>Privacy Policy</a>."> +<!ENTITY aboutDevtools.newsletter.subscribeButton "Subscribe"> <!ENTITY aboutDevtools.newsletter.thanks.title "Thanks!"> <!ENTITY aboutDevtools.newsletter.thanks.message "If you haven’t previously confirmed a subscription to a Mozilla-related newsletter you may have to do so. Please check your inbox or your spam filter for an email from us."> +<!ENTITY aboutDevtools.footer.title "Firefox Developer Edition"> +<!ENTITY aboutDevtools.footer.message "Looking for more than just Developer Tools? Check out the Firefox browser that is built specifically for developers and modern workflows."> + +<!-- LOCALIZATION NOTE (aboutDevtools.footer.learnMoreLink): Text for the link to + - https://www.mozilla.org/firefox/developer/ displayed in the footer. --> +<!ENTITY aboutDevtools.footer.learnMoreLink "Learn more"> +
--- a/devtools/shim/locales/en-US/aboutdevtools.properties +++ b/devtools/shim/locales/en-US/aboutdevtools.properties @@ -43,8 +43,12 @@ newsletter.error.common=Subscription req # LOCALIZATION NOTE (newsletter.error.unknown): error text displayed when the newsletter # subscription failed for an unexpected reason. newsletter.error.unknown=An unexpected error occurred. # LOCALIZATION NOTE (newsletter.error.timeout): error text displayed when the newsletter # subscription timed out. newsletter.error.timeout=Subscription request timed out. + +# LOCALIZATION NOTE (welcome.message): Message displayed when devtools are enabled. +# %S will be replaced with the shortcut to toggle the DevTools toolbox. +welcome.message=You’ve successfully enabled Developer Tools! To get started, explore the Web Developer menu or open the tools with %S.
--- a/dom/base/Element.cpp +++ b/dom/base/Element.cpp @@ -1209,17 +1209,17 @@ Element::CreateShadowRoot(ErrorResult& a already_AddRefed<ShadowRoot> Element::AttachShadowInternal(bool aClosed, ErrorResult& aError) { /** * 3. If context object is a shadow host, then throw * an "InvalidStateError" DOMException. */ - if (GetShadowRoot()) { + if (GetShadowRoot() || GetXBLBinding()) { aError.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return nullptr; } nsAutoScriptBlocker scriptBlocker; RefPtr<mozilla::dom::NodeInfo> nodeInfo; nodeInfo = mNodeInfo->NodeInfoManager()->GetNodeInfo(
--- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -1593,17 +1593,18 @@ nsIDocument::nsIDocument() mInSyncOperationCount(0), mBlockDOMContentLoaded(0), mUseCounters(0), mChildDocumentUseCounters(0), mNotifiedPageForUseCounter(0), mIncCounters(), mUserHasInteracted(false), mServoRestyleRootDirtyBits(0), - mThrowOnDynamicMarkupInsertionCounter(0) + mThrowOnDynamicMarkupInsertionCounter(0), + mIgnoreOpensDuringUnloadCounter(0) { SetIsInDocument(); for (auto& cnt : mIncCounters) { cnt = 0; } } nsDocument::nsDocument(const char* aContentType)
--- a/dom/base/nsIDocument.h +++ b/dom/base/nsIDocument.h @@ -3221,16 +3221,32 @@ public: } void DecrementThrowOnDynamicMarkupInsertionCounter() { MOZ_ASSERT(mThrowOnDynamicMarkupInsertionCounter); --mThrowOnDynamicMarkupInsertionCounter; } + bool ShouldIgnoreOpens() const + { + return mIgnoreOpensDuringUnloadCounter; + } + + void IncrementIgnoreOpensDuringUnloadCounter() + { + ++mIgnoreOpensDuringUnloadCounter; + } + + void DecrementIgnoreOpensDuringUnloadCounter() + { + MOZ_ASSERT(mIgnoreOpensDuringUnloadCounter); + --mIgnoreOpensDuringUnloadCounter; + } + virtual bool AllowPaymentRequest() const = 0; virtual void SetAllowPaymentRequest(bool aAllowPaymentRequest) = 0; protected: bool GetUseCounter(mozilla::UseCounter aUseCounter) { return mUseCounters[aUseCounter]; } @@ -3778,16 +3794,19 @@ protected: // root corresponds to. nsCOMPtr<nsINode> mServoRestyleRoot; uint32_t mServoRestyleRootDirtyBits; // Used in conjunction with the create-an-element-for-the-token algorithm to // prevent custom element constructors from being able to use document.open(), // document.close(), and document.write() when they are invoked by the parser. uint32_t mThrowOnDynamicMarkupInsertionCounter; + + // Count of unload/beforeunload/pagehide operations in progress. + uint32_t mIgnoreOpensDuringUnloadCounter; }; NS_DEFINE_STATIC_IID_ACCESSOR(nsIDocument, NS_IDOCUMENT_IID) /** * mozAutoSubtreeModified batches DOM mutations so that a DOMSubtreeModified * event is dispatched, if necessary, when the outermost mozAutoSubtreeModified * object is deleted. @@ -3851,16 +3870,33 @@ class MOZ_RAII AutoSetThrowOnDynamicMark ~AutoSetThrowOnDynamicMarkupInsertionCounter() { mDocument->DecrementThrowOnDynamicMarkupInsertionCounter(); } private: nsIDocument* mDocument; }; +class MOZ_RAII IgnoreOpensDuringUnload final +{ +public: + explicit IgnoreOpensDuringUnload(nsIDocument* aDoc) + : mDoc(aDoc) + { + mDoc->IncrementIgnoreOpensDuringUnloadCounter(); + } + + ~IgnoreOpensDuringUnload() + { + mDoc->DecrementIgnoreOpensDuringUnloadCounter(); + } +private: + nsIDocument* mDoc; +}; + // XXX These belong somewhere else nsresult NS_NewHTMLDocument(nsIDocument** aInstancePtrResult, bool aLoadedAsData = false); nsresult NS_NewXMLDocument(nsIDocument** aInstancePtrResult, bool aLoadedAsData = false, bool aIsPlainDocument = false);
new file mode 100644 --- /dev/null +++ b/dom/html/crashtests/1412173.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<head> +<script> +let f = document.createElement('frame'); +f.onload = function() { + let frameDocument = f.contentDocument; + frameDocument.body.onbeforeunload = function () { frameDocument.write('<p>beforeUnload</p>') }; + frameDocument.write('<p>trigger unload</p>') + window.stop(); + document.documentElement.className = ''; +}; +document.documentElement.appendChild(f); +</script> +</head> +<body> +</body> +</html>
--- a/dom/html/crashtests/crashtests.list +++ b/dom/html/crashtests/crashtests.list @@ -80,9 +80,10 @@ load 1237633.html load 1281972-1.html load 1282894.html load 1290904.html load 1343886-1.html load 1343886-2.xml load 1343886-3.xml load 1350972.html load 1386905.html -asserts(0-4) load 1401726.html \ No newline at end of file +asserts(0-4) load 1401726.html +load 1412173.html
--- a/dom/html/nsHTMLDocument.cpp +++ b/dom/html/nsHTMLDocument.cpp @@ -1529,16 +1529,23 @@ nsHTMLDocument::Open(JSContext* cx, // invoked." // Note that aborting a parser leaves the parser "active" with its // insertion point "not undefined". We track this using mParserAborted, // because aborting a parser nulls out mParser. nsCOMPtr<nsIDocument> ret = this; return ret.forget(); } + // Implement Step 6 of: + // https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#document-open-steps + if (ShouldIgnoreOpens()) { + nsCOMPtr<nsIDocument> ret = this; + return ret.forget(); + } + // No calling document.open() without a script global object if (!mScriptGlobalObject) { nsCOMPtr<nsIDocument> ret = this; return ret.forget(); } nsPIDOMWindowOuter* outer = GetWindow(); if (!outer || (GetInnerWindow() != outer->GetCurrentInnerWindow())) { @@ -1942,16 +1949,22 @@ nsHTMLDocument::WriteCommon(JSContext *c if (mParserAborted) { // Hixie says aborting the parser doesn't undefine the insertion point. // However, since we null out mParser in that case, we track the // theoretically defined insertion point using mParserAborted. return NS_OK; } + // Implement Step 4.1 of: + // https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#document-write-steps + if (ShouldIgnoreOpens()) { + return NS_OK; + } + nsresult rv = NS_OK; void *key = GenerateParserKey(); if (mParser && !mParser->IsInsertionPointDefined()) { if (mIgnoreDestructiveWritesCounter) { // Instead of implying a call to document.open(), ignore the call. nsContentUtils::ReportToConsole(nsIScriptError::warningFlag, NS_LITERAL_CSTRING("DOM Events"), this,
--- a/extensions/cookie/test/browser.ini +++ b/extensions/cookie/test/browser.ini @@ -1,10 +1,13 @@ [DEFAULT] [browser_test_favicon.js] +support-files = + damonbowling.jpg + damonbowling.jpg^headers^ [browser_permmgr_sync.js] # The browser_permmgr_sync test tests e10s specific behavior, and runs code # paths which would hit the debug only assertion in # nsPermissionManager::PermissionKey::CreateFromPrincipal. Because of this, it # is only run in e10s opt builds. skip-if = debug || !e10s [browser_permmgr_viewsrc.js]
--- a/extensions/cookie/test/browser_test_favicon.js +++ b/extensions/cookie/test/browser_test_favicon.js @@ -1,28 +1,23 @@ // tests third party cookie blocking using a favicon load directly from chrome. // in this case, the docshell of the channel is chrome, not content; thus // the cookie should be considered third party. -function test() { - waitForExplicitFinish(); - - Services.prefs.setIntPref("network.cookie.cookieBehavior", 1); +add_task(async function() { + const iconUrl = "http://example.org/browser/extensions/cookie/test/damonbowling.jpg"; + await SpecialPowers.pushPrefEnv({"set": [["network.cookie.cookieBehavior", 1]]}); - Services.obs.addObserver(function (theSubject, theTopic, theData) { - var uri = theSubject.QueryInterface(Components.interfaces.nsIURI); - var domain = uri.host; - - if (domain == "example.org") { - ok(true, "foreign favicon cookie was blocked"); + let promise = TestUtils.topicObserved("cookie-rejected", subject => { + let uri = subject.QueryInterface(Components.interfaces.nsIURI); + return uri.spec == iconUrl; + }); - Services.prefs.setIntPref("network.cookie.cookieBehavior", 0); - - Services.obs.removeObserver(arguments.callee, "cookie-rejected"); + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://example.com/"); + registerCleanupFunction(async function() { + await BrowserTestUtils.removeTab(tab); + }); - finish(); - } - }, "cookie-rejected"); - - // kick off a favicon load - gBrowser.setIcon(gBrowser.selectedTab, "http://example.org/tests/extensions/cookie/test/damonbowling.jpg", - Services.scriptSecurityManager.getSystemPrincipal()); -} + // Kick off a favicon load. + gBrowser.setIcon(tab, iconUrl); + await promise; + ok(true, "foreign favicon cookie was blocked"); +});
--- a/extensions/cookie/test/mochitest.ini +++ b/extensions/cookie/test/mochitest.ini @@ -1,14 +1,12 @@ [DEFAULT] support-files = beltzner.jpg beltzner.jpg^headers^ - damonbowling.jpg - damonbowling.jpg^headers^ file_chromecommon.js file_domain_hierarchy_inner.html file_domain_hierarchy_inner_inner.html file_domain_hierarchy_inner_inner_inner.html file_domain_inner.html file_domain_inner_inner.html file_image_inner.html file_image_inner_inner.html
--- a/gfx/src/nsFont.cpp +++ b/gfx/src/nsFont.cpp @@ -37,42 +37,52 @@ nsFont::nsFont() } nsFont::~nsFont() { } bool nsFont::Equals(const nsFont& aOther) const { - if ((style == aOther.style) && - (systemFont == aOther.systemFont) && - (weight == aOther.weight) && - (stretch == aOther.stretch) && - (size == aOther.size) && - (sizeAdjust == aOther.sizeAdjust) && - (fontlist == aOther.fontlist) && - (kerning == aOther.kerning) && - (synthesis == aOther.synthesis) && - (fontFeatureSettings == aOther.fontFeatureSettings) && - (fontVariationSettings == aOther.fontVariationSettings) && - (languageOverride == aOther.languageOverride) && - (variantAlternates == aOther.variantAlternates) && - (variantCaps == aOther.variantCaps) && - (variantEastAsian == aOther.variantEastAsian) && - (variantLigatures == aOther.variantLigatures) && - (variantNumeric == aOther.variantNumeric) && - (variantPosition == aOther.variantPosition) && - (variantWidth == aOther.variantWidth) && - (alternateValues == aOther.alternateValues) && - (featureValueLookup == aOther.featureValueLookup) && - (smoothing == aOther.smoothing) && - (fontSmoothingBackgroundColor == aOther.fontSmoothingBackgroundColor)) { - return true; + return CalcDifference(aOther) == MaxDifference::eNone; +} + +nsFont::MaxDifference +nsFont::CalcDifference(const nsFont& aOther) const +{ + if ((style != aOther.style) || + (systemFont != aOther.systemFont) || + (weight != aOther.weight) || + (stretch != aOther.stretch) || + (size != aOther.size) || + (sizeAdjust != aOther.sizeAdjust) || + (fontlist != aOther.fontlist) || + (kerning != aOther.kerning) || + (synthesis != aOther.synthesis) || + (fontFeatureSettings != aOther.fontFeatureSettings) || + (fontVariationSettings != aOther.fontVariationSettings) || + (languageOverride != aOther.languageOverride) || + (variantAlternates != aOther.variantAlternates) || + (variantCaps != aOther.variantCaps) || + (variantEastAsian != aOther.variantEastAsian) || + (variantLigatures != aOther.variantLigatures) || + (variantNumeric != aOther.variantNumeric) || + (variantPosition != aOther.variantPosition) || + (variantWidth != aOther.variantWidth) || + (alternateValues != aOther.alternateValues) || + (featureValueLookup != aOther.featureValueLookup)) { + return MaxDifference::eLayoutAffecting; } - return false; + + if ((smoothing != aOther.smoothing) || + (fontSmoothingBackgroundColor != aOther.fontSmoothingBackgroundColor)) { + return MaxDifference::eVisual; + } + + return MaxDifference::eNone; } nsFont& nsFont::operator=(const nsFont& aOther) = default; void nsFont::CopyAlternates(const nsFont& aOther) { variantAlternates = aOther.variantAlternates;
--- a/gfx/src/nsFont.h +++ b/gfx/src/nsFont.h @@ -138,16 +138,24 @@ struct nsFont { bool operator!=(const nsFont& aOther) const { return !Equals(aOther); } bool Equals(const nsFont& aOther) const; nsFont& operator=(const nsFont& aOther); + enum class MaxDifference : uint8_t { + eNone, + eVisual, + eLayoutAffecting + }; + + MaxDifference CalcDifference(const nsFont& aOther) const; + void CopyAlternates(const nsFont& aOther); // Add featureSettings into style void AddFontFeaturesToStyle(gfxFontStyle *aStyle, bool aVertical) const; void AddFontVariationsToStyle(gfxFontStyle *aStyle) const; };
--- a/gfx/tests/gtest/TestRect.cpp +++ b/gfx/tests/gtest/TestRect.cpp @@ -4,16 +4,17 @@ * 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 <limits> #include "gtest/gtest.h" #include "nsRect.h" #include "gfxRect.h" +#include "mozilla/WritingModes.h" #ifdef XP_WIN #include <windows.h> #endif template <class RectType> static bool TestConstructors() { @@ -440,17 +441,65 @@ TestSwap() { RectType rect(1, 2, 3, 4); EXPECT_TRUE(rect.X() == 1 && rect.Y() == 2 && rect.Width() == 3 && rect.Height() == 4); rect.Swap(); EXPECT_TRUE(rect.X() == 2 && rect.Y() == 1 && rect.Width() == 4 && rect.Height() == 3); return true; } +static void +TestIntersectionLogicalHelper(nscoord x1, nscoord y1, nscoord w1, nscoord h1, + nscoord x2, nscoord y2, nscoord w2, nscoord h2, + nscoord xR, nscoord yR, nscoord wR, nscoord hR, + bool isNonEmpty) +{ + nsRect rect1(x1, y1, w1, h1); + nsRect rect2(x2, y2, w2, h2); + nsRect rectDebug; + EXPECT_TRUE(isNonEmpty == rectDebug.IntersectRect(rect1, rect2)); + EXPECT_TRUE(rectDebug.IsEqualEdges(nsRect(xR, yR, wR, hR))); + mozilla::LogicalRect r1(mozilla::WritingMode(), rect1.X(), rect1.Y(), rect1.Width(), rect1.Height()); + mozilla::LogicalRect r2(mozilla::WritingMode(), rect2.X(), rect2.Y(), rect2.Width(), rect2.Height()); + EXPECT_TRUE(isNonEmpty == r1.IntersectRect(r1, r2)); + EXPECT_TRUE(rectDebug.IsEqualEdges(nsRect(r1.IStart(WritingMode()), r1.BStart(WritingMode()), + r1.ISize(WritingMode()), r1.BSize(WritingMode())))); + + mozilla::LogicalRect r3(mozilla::WritingMode(), rect1.X(), rect1.Y(), rect1.Width(), rect1.Height()); + mozilla::LogicalRect r4(mozilla::WritingMode(), rect2.X(), rect2.Y(), rect2.Width(), rect2.Height()); + EXPECT_TRUE(isNonEmpty == r4.IntersectRect(r3, r4)); + EXPECT_TRUE(rectDebug.IsEqualEdges(nsRect(r4.IStart(WritingMode()), r4.BStart(WritingMode()), + r4.ISize(WritingMode()), r4.BSize(WritingMode())))); + + mozilla::LogicalRect r5(mozilla::WritingMode(), rect1.X(), rect1.Y(), rect1.Width(), rect1.Height()); + mozilla::LogicalRect r6(mozilla::WritingMode(), rect2.X(), rect2.Y(), rect2.Width(), rect2.Height()); + mozilla::LogicalRect r7(mozilla::WritingMode(), 0, 0, 1, 1); + EXPECT_TRUE(isNonEmpty == r7.IntersectRect(r5, r6)); + EXPECT_TRUE(rectDebug.IsEqualEdges(nsRect(r7.IStart(WritingMode()), r7.BStart(WritingMode()), + r7.ISize(WritingMode()), r7.BSize(WritingMode())))); +} + +static void +TestIntersectionLogical(nscoord x1, nscoord y1, nscoord w1, nscoord h1, + nscoord x2, nscoord y2, nscoord w2, nscoord h2, + nscoord xR, nscoord yR, nscoord wR, nscoord hR, + bool isNonEmpty) +{ + TestIntersectionLogicalHelper(x1, y1, w1, h1, x2, y2, w2, h2, xR, yR, wR, hR, isNonEmpty); + TestIntersectionLogicalHelper(x2, y2, w2, h2, x1, y1, w1, h1, xR, yR, wR, hR, isNonEmpty); +} + +TEST(Gfx, Logical) +{ + TestIntersectionLogical(578, 0, 2650, 1152, 1036, 0, 2312, 1, 1036, 0, 2192, 1, true); + TestIntersectionLogical(0, 0, 1000, 1000, 500, 500, 1000, 1000, 500, 500, 500, 500, true); + TestIntersectionLogical(100, 200, 300, 400, 50, 250, 100, 100, 100, 250, 50, 100, true); + TestIntersectionLogical(0, 100, 200, 300, 300, 100, 100, 300, 300, 100, 0, 0, false); +} TEST(Gfx, nsRect) { TestConstructors<nsRect>(); TestEqualityOperator<nsRect>(); TestContainment<nsRect>(); TestIntersects<nsRect>(); TestIntersection<nsRect>(); TestUnion<nsRect>(); @@ -478,8 +527,9 @@ TEST(Gfx, gfxRect) { TestIntersects<gfxRect>(); TestIntersection<gfxRect>(); TestUnion<gfxRect>(); TestBug1135677<gfxRect>(); TestFiniteGfx(); TestSetWH<gfxRect>(); TestSwap<gfxRect>(); } +
--- a/gfx/thebes/gfxFontFamilyList.h +++ b/gfx/thebes/gfxFontFamilyList.h @@ -441,11 +441,16 @@ protected: FontFamilyType mDefaultFontType; // none, serif or sans-serif }; inline bool operator==(const FontFamilyList& a, const FontFamilyList& b) { return a.Equals(b); } +inline bool +operator!=(const FontFamilyList& a, const FontFamilyList& b) { + return !a.Equals(b); +} + } // namespace mozilla #endif /* GFX_FONT_FAMILY_LIST_H */
--- a/layout/base/nsCSSFrameConstructor.cpp +++ b/layout/base/nsCSSFrameConstructor.cpp @@ -7473,40 +7473,21 @@ nsCSSFrameConstructor::GetRangeInsertion // real parent frame; if not, then the frame hasn't been built yet // and we just bail. InsertionPoint insertionPoint = GetInsertionPoint(aContainer, nullptr); if (!insertionPoint.mParentFrame && !insertionPoint.mMultiple) { return insertionPoint; // Don't build the frames. } if (insertionPoint.mMultiple || aStartChild->GetXBLInsertionPoint()) { - // We have an insertion point. There are some additional tests we need to do - // in order to ensure that an append is a safe operation. - uint32_t childCount = 0; - - if (!insertionPoint.mMultiple) { - // We may need to make multiple ContentInserted calls instead. A - // reasonable heuristic to employ (in order to maintain good performance) - // is to find out if the insertion point's content node contains any - // explicit children. If it does not, then it is highly likely that - // an append is occurring. (Note it is not definite, and there are insane - // cases we will not deal with by employing this heuristic, but it beats - // always falling back to multiple ContentInserted calls). - // - // In the multiple insertion point case, we know we're going to need to do - // multiple ContentInserted calls anyway. - // XXXndeakin This test doesn't work in the new world. Or rather, it works, but - // it's slow - childCount = insertionPoint.mParentFrame->GetContent()->GetChildCount(); - } - // If we have multiple insertion points or if we have an insertion point // and the operation is not a true append or if the insertion point already // has explicit children, then we must fall back. - if (insertionPoint.mMultiple || aEndChild != nullptr || childCount > 0) { + if (insertionPoint.mMultiple || aEndChild || + insertionPoint.mParentFrame->GetContent()->HasChildren()) { // Now comes the fun part. For each inserted child, make a // ContentInserted call as if it had just gotten inserted and // let ContentInserted handle the mess. IssueSingleInsertNofications(aContainer, aStartChild, aEndChild, aInsertionKind); insertionPoint.mParentFrame = nullptr; } } @@ -7850,29 +7831,24 @@ nsCSSFrameConstructor::ContentAppended(n // because processing a single caption can add a whole bunch of things to // the frame items due to pseudoframe processing. So we'd have to pull // captions from a list anyway; might as well do that here. // XXXbz this is no longer true; we could pull captions directly out of the // FrameConstructionItemList now. PullOutCaptionFrames(frameItems, captionItems); } - bool dealtWithFirstLine = false; if (haveFirstLineStyle && parentFrame == containingBlock) { // It's possible that some of the new frames go into a // first-line frame. Look at them and see... AppendFirstLineFrames(state, containingBlock->GetContent(), containingBlock, frameItems); // That moved things into line frames as needed, reparenting their // styles. Nothing else needs to be done. - dealtWithFirstLine = true; - } - - if (!dealtWithFirstLine && - parentFrame->StyleContext()->HasPseudoElementData()) { + } else if (parentFrame->StyleContext()->HasPseudoElementData()) { // parentFrame might be inside a ::first-line frame. Check whether it is, // and if so fix up our styles. CheckForFirstLineInsertion(parentFrame, frameItems); CheckForFirstLineInsertion(parentFrame, captionItems); } // Notify the parent frame passing it the list of new frames // Append the flowed frames to the principal child list; captions @@ -8431,42 +8407,22 @@ nsCSSFrameConstructor::ContentRangeInser nsIFrame* appendAfterFrame; insertion.mParentFrame = ::AdjustAppendParentForAfterContent(this, container, frameItems.FirstChild()->GetParent(), aStartChild, &appendAfterFrame); prevSibling = ::FindAppendPrevSibling(insertion.mParentFrame, appendAfterFrame); } - bool dealtWithFirstLine = false; - if (haveFirstLineStyle && insertion.mParentFrame == containingBlock) { + if (haveFirstLineStyle && insertion.mParentFrame == containingBlock && isAppend) { // It's possible that the new frame goes into a first-line // frame. Look at it and see... - if (isAppend) { - // Use append logic when appending - AppendFirstLineFrames(state, containingBlock->GetContent(), - containingBlock, frameItems); - // That moved things into line frames as needed, reparenting their - // styles. Nothing else needs to be done to handle ::first-line. - dealtWithFirstLine = true; - } - else { - // Use more complicated insert logic when inserting - // XXXbz this method is a no-op, so it's easy for the args being passed - // here to make no sense without anyone noticing... If it ever stops - // being a no-op, vet them carefully! - // XXXbz Can this code even get hit? I'd think/hope not, since any - // insert would go into an existing lineframe if we have them.. - InsertFirstLineFrames(state, container, containingBlock, &insertion.mParentFrame, - prevSibling, frameItems); - } - } - - if (!dealtWithFirstLine && - insertion.mParentFrame->StyleContext()->HasPseudoElementData()) { + AppendFirstLineFrames(state, containingBlock->GetContent(), + containingBlock, frameItems); + } else if (insertion.mParentFrame->StyleContext()->HasPseudoElementData()) { CheckForFirstLineInsertion(insertion.mParentFrame, frameItems); CheckForFirstLineInsertion(insertion.mParentFrame, captionItems); } // We might have captions; put them into the caption list of the // table wrapper frame. if (captionItems.NotEmpty()) { NS_ASSERTION(LayoutFrameType::Table == frameType || @@ -8541,18 +8497,17 @@ nsCSSFrameConstructor::ContentRangeInser #ifdef DEBUG if (gReallyNoisyContentUpdates && insertion.mParentFrame) { printf("nsCSSFrameConstructor::ContentRangeInserted: resulting frame model:\n"); insertion.mParentFrame->List(stdout, 0); } #endif #ifdef ACCESSIBILITY - nsAccessibilityService* accService = nsIPresShell::AccService(); - if (accService) { + if (nsAccessibilityService* accService = nsIPresShell::AccService()) { accService->ContentRangeInserted(mPresShell, aContainer, aStartChild, aEndChild); } #endif } bool nsCSSFrameConstructor::ContentRemoved(nsIContent* aContainer, @@ -11486,159 +11441,16 @@ nsCSSFrameConstructor::AppendFirstLineFr return; } nsFirstLineFrame* lineFrame = static_cast<nsFirstLineFrame*>(lastBlockKid); WrapFramesInFirstLineFrame(aState, aBlockContent, aBlockFrame, lineFrame, aFrameItems); } -// Special routine to handle inserting a new frame into a block -// frame's child list. Takes care of placing the new frame into the -// right place when first-line style is present. -void -nsCSSFrameConstructor::InsertFirstLineFrames( - nsFrameConstructorState& aState, - nsIContent* aContent, - nsIFrame* aBlockFrame, - nsContainerFrame** aParentFrame, - nsIFrame* aPrevSibling, - nsFrameItems& aFrameItems) -{ - // XXXbz If you make this method actually do something, check to - // make sure that the caller is passing what you expect. In - // particular, which content is aContent? And audit the rest of - // this code too; it makes bogus assumptions and may not build. -#if 0 - nsIFrame* parentFrame = *aParentFrame; - nsIFrame* newFrame = aFrameItems.childList; - bool isInline = IsInlineOutside(newFrame); - - if (!aPrevSibling) { - // Insertion will become the first frame. Two cases: we either - // already have a first-line frame or we don't. - nsIFrame* firstBlockKid = aBlockFrame->PrincipalChildList().FirstChild(); - if (firstBlockKid->IsLineFrame()) { - // We already have a first-line frame - nsIFrame* lineFrame = firstBlockKid; - - if (isInline) { - // Easy case: the new inline frame will go into the lineFrame. - ReparentFrame(this, lineFrame, newFrame); - InsertFrames(lineFrame, kPrincipalList, nullptr, newFrame); - - // Since the frame is going into the lineFrame, don't let it - // go into the block too. - aFrameItems.childList = nullptr; - aFrameItems.lastChild = nullptr; - } - else { - // Harder case: We are about to insert a block level element - // before the first-line frame. - // XXX need a method to steal away frames from the line-frame - } - } - else { - // We do not have a first-line frame - if (isInline) { - // We now need a first-line frame to contain the inline frame. - nsIFrame* lineFrame = NS_NewFirstLineFrame(firstLineStyle); - - if (NS_SUCCEEDED(rv)) { - // Lookup first-line style context - nsStyleContext* parentStyle = - nsFrame::CorrectStyleParentFrame(aBlockFrame, - nsCSSPseudoElements::firstLine)-> - StyleContext(); - RefPtr<nsStyleContext> firstLineStyle = - GetFirstLineStyle(aContent, parentStyle); - - // Initialize the line frame - InitAndRestoreFrame(aState, aContent, aBlockFrame, lineFrame); - - // Make sure the caller inserts the lineFrame into the - // blocks list of children. - aFrameItems.childList = lineFrame; - aFrameItems.lastChild = lineFrame; - - // Give the inline frames to the lineFrame <b>after</b> - // reparenting them - NS_ASSERTION(lineFrame->StyleContext() == firstLineStyle, - "Bogus style context on line frame"); - ReparentFrame(aPresContext, lineFrame, newFrame); - lineFrame->SetInitialChildList(kPrincipalList, newFrame); - } - } - else { - // Easy case: the regular insertion logic can insert the new - // frame because it's a block frame. - } - } - } - else { - // Insertion will not be the first frame. - nsIFrame* prevSiblingParent = aPrevSibling->GetParent(); - if (prevSiblingParent == aBlockFrame) { - // Easy case: The prev-siblings parent is the block - // frame. Therefore the prev-sibling is not currently in a - // line-frame. Therefore the new frame which is going after it, - // regardless of type, is not going into a line-frame. - } - else { - // If the prevSiblingParent is not the block-frame then it must - // be a line-frame (if it were a letter-frame, that logic would - // already have adjusted the prev-sibling to be the - // letter-frame). - if (isInline) { - // Easy case: the insertion can go where the caller thinks it - // should go (which is into prevSiblingParent). - } - else { - // Block elements don't end up in line-frames, therefore - // change the insertion point to aBlockFrame. However, there - // might be more inline elements following aPrevSibling that - // need to be pulled out of the line-frame and become children - // of the block. - nsIFrame* nextSibling = aPrevSibling->GetNextSibling(); - nsIFrame* nextLineFrame = prevSiblingParent->GetNextInFlow(); - if (nextSibling || nextLineFrame) { - // Oy. We have work to do. Create a list of the new frames - // that are going into the block by stripping them away from - // the line-frame(s). - if (nextSibling) { - nsLineFrame* lineFrame = (nsLineFrame*) prevSiblingParent; - nsFrameList tail = lineFrame->StealFramesAfter(aPrevSibling); - // XXX do something with 'tail' - } - - nsLineFrame* nextLineFrame = (nsLineFrame*) lineFrame; - for (;;) { - nextLineFrame = nextLineFrame->GetNextInFlow(); - if (!nextLineFrame) { - break; - } - nsIFrame* kids = nextLineFrame->PrincipalChildList().FirstChild(); - } - } - else { - // We got lucky: aPrevSibling was the last inline frame in - // the line-frame. - ReparentFrame(this, aBlockFrame, newFrame); - InsertFrames(aBlockFrame, kPrincipalList, - prevSiblingParent, newFrame); - aFrameItems.childList = nullptr; - aFrameItems.lastChild = nullptr; - } - } - } - } - -#endif -} - void nsCSSFrameConstructor::CheckForFirstLineInsertion(nsIFrame* aParentFrame, nsFrameItems& aFrameItems) { MOZ_ASSERT(aParentFrame->StyleContext()->HasPseudoElementData(), "Why were we called?"); if (aFrameItems.IsEmpty()) {
--- a/layout/base/nsCSSFrameConstructor.h +++ b/layout/base/nsCSSFrameConstructor.h @@ -2096,23 +2096,16 @@ private: // Handle the case when a block with first-line style is appended to (by // possibly calling WrapFramesInFirstLineFrame as needed). void AppendFirstLineFrames(nsFrameConstructorState& aState, nsIContent* aContent, nsContainerFrame* aBlockFrame, nsFrameItems& aFrameItems); - void InsertFirstLineFrames(nsFrameConstructorState& aState, - nsIContent* aContent, - nsIFrame* aBlockFrame, - nsContainerFrame** aParentFrame, - nsIFrame* aPrevSibling, - nsFrameItems& aFrameItems); - /** * When aFrameItems is being inserted into aParentFrame, and aParentFrame has * pseudo-element-affected styles, it's possible that we're inserting under a * ::first-line frame. In that case, with servo's style system, the styles we * resolved for aFrameItems are wrong (they don't take ::first-line into * account), and we should fix them up, which is what this method does. * * This method does not mutate aFrameItems.
--- a/layout/base/nsDocumentViewer.cpp +++ b/layout/base/nsDocumentViewer.cpp @@ -1184,16 +1184,23 @@ nsDocumentViewer::PermitUnloadInternal(b if (!window) { // This is odd, but not fatal NS_WARNING("window not set for document!"); return NS_OK; } NS_ASSERTION(nsContentUtils::IsSafeToRunScript(), "This is unsafe"); + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#prompt-to-unload-a-document + // Create an RAII object on mDocument that will increment the + // should-ignore-opens-during-unload counter on initialization + // and decrement it again when it goes out of score (regardless + // of how we exit this function). + IgnoreOpensDuringUnload ignoreOpens(mDocument); + // Now, fire an BeforeUnload event to the document and see if it's ok // to unload... nsIPresShell* shell = mDocument->GetShell(); nsPresContext* presContext = nullptr; if (shell) { presContext = shell->GetPresContext(); } RefPtr<BeforeUnloadEvent> event = @@ -1392,16 +1399,22 @@ nsDocumentViewer::PageHide(bool aIsUnloa nsPIDOMWindowOuter* window = mDocument->GetWindow(); if (!window) { // Fail if no window is available... NS_WARNING("window not set for document!"); return NS_ERROR_NULL_POINTER; } + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#unload-a-document + // Create an RAII object on mDocument that will increment the + // should-ignore-opens-during-unload counter on initialization + // and decrement it again when it goes out of scope. + IgnoreOpensDuringUnload ignoreOpens(mDocument); + // Now, fire an Unload event to the document... nsEventStatus status = nsEventStatus_eIgnore; WidgetEvent event(true, eUnload); event.mFlags.mBubbles = false; // XXX Dispatching to |window|, but using |document| as the target. event.mTarget = mDocument; // Never permit popups from the unload handler, no matter how we get
--- a/layout/generic/WritingModes.h +++ b/layout/generic/WritingModes.h @@ -1484,123 +1484,132 @@ private: */ class LogicalRect { public: explicit LogicalRect(WritingMode aWritingMode) : #ifdef DEBUG mWritingMode(aWritingMode), #endif - mRect(0, 0, 0, 0) + mIStart(0), + mBStart(0), + mISize(0), + mBSize(0) { } LogicalRect(WritingMode aWritingMode, nscoord aIStart, nscoord aBStart, nscoord aISize, nscoord aBSize) : #ifdef DEBUG mWritingMode(aWritingMode), #endif - mRect(aIStart, aBStart, aISize, aBSize) + mIStart(aIStart), + mBStart(aBStart), + mISize(aISize), + mBSize(aBSize) { } LogicalRect(WritingMode aWritingMode, const LogicalPoint& aOrigin, const LogicalSize& aSize) : #ifdef DEBUG mWritingMode(aWritingMode), #endif - mRect(aOrigin.mPoint, aSize.mSize) + mIStart(aOrigin.mPoint.x), + mBStart(aOrigin.mPoint.y), + mISize(aSize.mSize.width), + mBSize(aSize.mSize.height) { CHECK_WRITING_MODE(aOrigin.GetWritingMode()); CHECK_WRITING_MODE(aSize.GetWritingMode()); } LogicalRect(WritingMode aWritingMode, const nsRect& aRect, const nsSize& aContainerSize) #ifdef DEBUG : mWritingMode(aWritingMode) #endif { if (aWritingMode.IsVertical()) { - mRect.y = aWritingMode.IsVerticalLR() - ? aRect.x : aContainerSize.width - aRect.XMost(); - mRect.x = aWritingMode.IsInlineReversed() - ? aContainerSize.height - aRect.YMost() : aRect.y; - mRect.height = aRect.width; - mRect.width = aRect.height; + mBStart = aWritingMode.IsVerticalLR() + ? aRect.X() : aContainerSize.width - aRect.XMost(); + mIStart = aWritingMode.IsInlineReversed() + ? aContainerSize.height - aRect.YMost() : aRect.Y(); + mBSize = aRect.Width(); + mISize = aRect.Height(); } else { - mRect.x = aWritingMode.IsInlineReversed() - ? aContainerSize.width - aRect.XMost() : aRect.x; - mRect.y = aRect.y; - mRect.width = aRect.width; - mRect.height = aRect.height; + mIStart = aWritingMode.IsInlineReversed() + ? aContainerSize.width - aRect.XMost() : aRect.X(); + mBStart = aRect.Y(); + mISize = aRect.Width(); + mBSize = aRect.Height(); } } /** * Inline- and block-dimension geometry. */ nscoord IStart(WritingMode aWritingMode) const // inline-start edge { CHECK_WRITING_MODE(aWritingMode); - return mRect.X(); + return mIStart; } nscoord IEnd(WritingMode aWritingMode) const // inline-end edge { CHECK_WRITING_MODE(aWritingMode); - return mRect.XMost(); + return mIStart + mISize; } nscoord ISize(WritingMode aWritingMode) const // inline-size { CHECK_WRITING_MODE(aWritingMode); - return mRect.Width(); + return mISize; } nscoord BStart(WritingMode aWritingMode) const // block-start edge { CHECK_WRITING_MODE(aWritingMode); - return mRect.Y(); + return mBStart; } nscoord BEnd(WritingMode aWritingMode) const // block-end edge { CHECK_WRITING_MODE(aWritingMode); - return mRect.YMost(); + return mBStart + mBSize; } nscoord BSize(WritingMode aWritingMode) const // block-size { CHECK_WRITING_MODE(aWritingMode); - return mRect.Height(); + return mBSize; } /** * Writable (reference) accessors are only available for the basic logical * fields (Start and Size), not derivatives like End. */ nscoord& IStart(WritingMode aWritingMode) // inline-start edge { CHECK_WRITING_MODE(aWritingMode); - return mRect.x; + return mIStart; } nscoord& ISize(WritingMode aWritingMode) // inline-size { CHECK_WRITING_MODE(aWritingMode); - return mRect.width; + return mISize; } nscoord& BStart(WritingMode aWritingMode) // block-start edge { CHECK_WRITING_MODE(aWritingMode); - return mRect.y; + return mBStart; } nscoord& BSize(WritingMode aWritingMode) // block-size { CHECK_WRITING_MODE(aWritingMode); - return mRect.height; + return mBSize; } /** * Accessors for line-relative coordinates */ nscoord LineLeft(WritingMode aWritingMode, const nsSize& aContainerSize) const { @@ -1627,91 +1636,98 @@ public: /** * Physical coordinates of the rect. */ nscoord X(WritingMode aWritingMode, nscoord aContainerWidth) const { CHECK_WRITING_MODE(aWritingMode); if (aWritingMode.IsVertical()) { return aWritingMode.IsVerticalLR() ? - mRect.Y() : aContainerWidth - mRect.YMost(); + mBStart : aContainerWidth - BEnd(); } else { return aWritingMode.IsInlineReversed() ? - aContainerWidth - mRect.XMost() : mRect.X(); + aContainerWidth - IEnd() : mIStart; } } nscoord Y(WritingMode aWritingMode, nscoord aContainerHeight) const { CHECK_WRITING_MODE(aWritingMode); if (aWritingMode.IsVertical()) { - return aWritingMode.IsInlineReversed() ? aContainerHeight - mRect.XMost() - : mRect.X(); + return aWritingMode.IsInlineReversed() ? aContainerHeight - IEnd() + : mIStart; } else { - return mRect.Y(); + return mBStart; } } nscoord Width(WritingMode aWritingMode) const { CHECK_WRITING_MODE(aWritingMode); - return aWritingMode.IsVertical() ? mRect.Height() : mRect.Width(); + return aWritingMode.IsVertical() ? mBSize : mISize; } nscoord Height(WritingMode aWritingMode) const { CHECK_WRITING_MODE(aWritingMode); - return aWritingMode.IsVertical() ? mRect.Width() : mRect.Height(); + return aWritingMode.IsVertical() ? mISize : mBSize; } nscoord XMost(WritingMode aWritingMode, nscoord aContainerWidth) const { CHECK_WRITING_MODE(aWritingMode); if (aWritingMode.IsVertical()) { return aWritingMode.IsVerticalLR() ? - mRect.YMost() : aContainerWidth - mRect.Y(); + BEnd() : aContainerWidth - mBStart; } else { return aWritingMode.IsInlineReversed() ? - aContainerWidth - mRect.X() : mRect.XMost(); + aContainerWidth - mIStart : IEnd(); } } nscoord YMost(WritingMode aWritingMode, nscoord aContainerHeight) const { CHECK_WRITING_MODE(aWritingMode); if (aWritingMode.IsVertical()) { - return aWritingMode.IsInlineReversed() ? aContainerHeight - mRect.x - : mRect.XMost(); + return aWritingMode.IsInlineReversed() ? aContainerHeight - mIStart + : IEnd(); } else { - return mRect.YMost(); + return mBStart; } } bool IsEmpty() const { - return mRect.IsEmpty(); + return mISize <= 0 || mBSize << 0; } bool IsAllZero() const { - return (mRect.x == 0 && mRect.y == 0 && - mRect.width == 0 && mRect.height == 0); + return (mIStart == 0 && mBStart == 0 && + mISize == 0 && mBSize == 0); } bool IsZeroSize() const { - return (mRect.width == 0 && mRect.height == 0); + return (mISize == 0 && mBSize == 0); } - void SetEmpty() { mRect.SetEmpty(); } + void SetEmpty() { mISize = mBSize = 0; } bool IsEqualEdges(const LogicalRect aOther) const { CHECK_WRITING_MODE(aOther.GetWritingMode()); - return mRect.IsEqualEdges(aOther.mRect); + bool result = mIStart == aOther.mIStart && mBStart == aOther.mBStart && + mISize == aOther.mISize && mBSize == aOther.mBSize; + + // We want the same result as nsRect, so assert we get it. + MOZ_ASSERT(result == nsRect(mIStart, mBStart, mISize, mBSize). + IsEqualEdges(nsRect(aOther.mIStart, aOther.mBStart, + aOther.mISize, aOther.mBSize))); + return result; } LogicalPoint Origin(WritingMode aWritingMode) const { CHECK_WRITING_MODE(aWritingMode); return LogicalPoint(aWritingMode, IStart(), BStart()); } void SetOrigin(WritingMode aWritingMode, const LogicalPoint& aPoint) @@ -1732,59 +1748,127 @@ public: return LogicalRect(GetWritingMode(), IStart() + aPoint.I(), BStart() + aPoint.B(), ISize(), BSize()); } LogicalRect& operator+=(const LogicalPoint& aPoint) { CHECK_WRITING_MODE(aPoint.GetWritingMode()); - mRect += aPoint.mPoint; + mIStart += aPoint.mPoint.x; + mBStart += aPoint.mPoint.y; return *this; } LogicalRect operator-(const LogicalPoint& aPoint) const { CHECK_WRITING_MODE(aPoint.GetWritingMode()); return LogicalRect(GetWritingMode(), IStart() - aPoint.I(), BStart() - aPoint.B(), ISize(), BSize()); } LogicalRect& operator-=(const LogicalPoint& aPoint) { CHECK_WRITING_MODE(aPoint.GetWritingMode()); - mRect -= aPoint.mPoint; + mIStart -= aPoint.mPoint.x; + mBStart -= aPoint.mPoint.y; return *this; } void MoveBy(WritingMode aWritingMode, const LogicalPoint& aDelta) { CHECK_WRITING_MODE(aWritingMode); CHECK_WRITING_MODE(aDelta.GetWritingMode()); IStart() += aDelta.I(); BStart() += aDelta.B(); } - void Inflate(nscoord aD) { mRect.Inflate(aD); } - void Inflate(nscoord aDI, nscoord aDB) { mRect.Inflate(aDI, aDB); } + void Inflate(nscoord aD) + { +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug(mIStart, mBStart, mISize, mBSize); + rectDebug.Inflate(aD); +#endif + mIStart -= aD; + mBStart -= aD; + mISize += 2 * aD; + mBSize += 2 * aD; + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); + } + void Inflate(nscoord aDI, nscoord aDB) + { +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug(mIStart, mBStart, mISize, mBSize); + rectDebug.Inflate(aDI, aDB); +#endif + mIStart -= aDI; + mBStart -= aDB; + mISize += 2 * aDI; + mBSize += 2 * aDB; + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); + } void Inflate(WritingMode aWritingMode, const LogicalMargin& aMargin) { CHECK_WRITING_MODE(aWritingMode); CHECK_WRITING_MODE(aMargin.GetWritingMode()); - mRect.Inflate(aMargin.mMargin); +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug(mIStart, mBStart, mISize, mBSize); + rectDebug.Inflate(aMargin.mMargin); +#endif + mIStart -= aMargin.mMargin.left; + mBStart -= aMargin.mMargin.top; + mISize += aMargin.mMargin.LeftRight(); + mBSize += aMargin.mMargin.TopBottom(); + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); } - void Deflate(nscoord aD) { mRect.Deflate(aD); } - void Deflate(nscoord aDI, nscoord aDB) { mRect.Deflate(aDI, aDB); } + void Deflate(nscoord aD) + { +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug(mIStart, mBStart, mISize, mBSize); + rectDebug.Deflate(aD); +#endif + mIStart += aD; + mBStart += aD; + mISize = std::max(0, mISize - 2 * aD); + mBSize = std::max(0, mBSize - 2 * aD); + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); + } + void Deflate(nscoord aDI, nscoord aDB) + { +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug(mIStart, mBStart, mISize, mBSize); + rectDebug.Deflate(aDI, aDB); +#endif + mIStart += aDI; + mBStart += aDB; + mISize = std::max(0, mISize - 2 * aDI); + mBSize = std::max(0, mBSize - 2 * aDB); + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); + } void Deflate(WritingMode aWritingMode, const LogicalMargin& aMargin) { CHECK_WRITING_MODE(aWritingMode); CHECK_WRITING_MODE(aMargin.GetWritingMode()); - mRect.Deflate(aMargin.mMargin); +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug(mIStart, mBStart, mISize, mBSize); + rectDebug.Deflate(aMargin.mMargin); +#endif + mIStart += aMargin.mMargin.left; + mBStart += aMargin.mMargin.top; + mISize = std::max(0, mISize - aMargin.mMargin.LeftRight()); + mBSize = std::max(0, mBSize - aMargin.mMargin.TopBottom()); + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); } /** * Return an nsRect containing our physical coordinates within the given * container size. */ nsRect GetPhysicalRect(WritingMode aWritingMode, const nsSize& aContainerSize) const @@ -1818,75 +1902,102 @@ public: /** * Set *this to be the rectangle containing the intersection of aRect1 * and aRect2, return whether the intersection is non-empty. */ bool IntersectRect(const LogicalRect& aRect1, const LogicalRect& aRect2) { CHECK_WRITING_MODE(aRect1.mWritingMode); CHECK_WRITING_MODE(aRect2.mWritingMode); - return mRect.IntersectRect(aRect1.mRect, aRect2.mRect); +#ifdef DEBUG + // Compute using nsRect and assert the results match + nsRect rectDebug; + rectDebug.IntersectRect(nsRect(aRect1.mIStart, aRect1.mBStart, + aRect1.mISize, aRect1.mBSize), + nsRect(aRect2.mIStart, aRect2.mBStart, + aRect2.mISize, aRect2.mBSize)); +#endif + + nscoord iEnd = std::min(aRect1.IEnd(), aRect2.IEnd()); + mIStart = std::max(aRect1.mIStart, aRect2.mIStart); + mISize = iEnd - mIStart; + + nscoord bEnd = std::min(aRect1.BEnd(), aRect2.BEnd()); + mBStart = std::max(aRect1.mBStart, aRect2.mBStart); + mBSize = bEnd - mBStart; + + if (mISize < 0 || mBSize < 0) { + mISize = 0; + mBSize = 0; + } + + MOZ_ASSERT(rectDebug.IsEqualEdges(nsRect(mIStart, mBStart, mISize, mBSize))); + return mISize > 0 && mBSize > 0; } private: LogicalRect() = delete; #ifdef DEBUG WritingMode GetWritingMode() const { return mWritingMode; } #else WritingMode GetWritingMode() const { return WritingMode::Unknown(); } #endif nscoord IStart() const // inline-start edge { - return mRect.X(); + return mIStart; } nscoord IEnd() const // inline-end edge { - return mRect.XMost(); + return mIStart + mISize; } nscoord ISize() const // inline-size { - return mRect.Width(); + return mISize; } nscoord BStart() const // block-start edge { - return mRect.Y(); + return mBStart; } nscoord BEnd() const // block-end edge { - return mRect.YMost(); + return mBStart + mBSize; } nscoord BSize() const // block-size { - return mRect.Height(); + return mBSize; } nscoord& IStart() // inline-start edge { - return mRect.x; + return mIStart; } nscoord& ISize() // inline-size { - return mRect.width; + return mISize; } nscoord& BStart() // block-start edge { - return mRect.y; + return mBStart; } nscoord& BSize() // block-size { - return mRect.height; + return mBSize; } #ifdef DEBUG WritingMode mWritingMode; #endif - nsRect mRect; + // Inline- and block-geometry dimension + nscoord mIStart; // inline-start edge + nscoord mBStart; // block-start edge + nscoord mISize; // inline-size + nscoord mBSize; // block-size }; } // namespace mozilla // Definitions of inline methods for nsStyleSides, declared in nsStyleCoord.h // but not defined there because they need WritingMode. inline nsStyleUnit nsStyleSides::GetUnit(mozilla::WritingMode aWM, mozilla::LogicalSide aSide) const
new file mode 100644 --- /dev/null +++ b/layout/style/crashtests/1415353.html @@ -0,0 +1,8 @@ +<!doctype html> +<textarea id="htmlvar00003" maxlength="0"> + <!-- Text nodes around me are important --> +</textarea> +<script> +document.body.offsetTop; +document.querySelector('textarea').createShadowRoot(); +</script>
--- a/layout/style/crashtests/crashtests.list +++ b/layout/style/crashtests/crashtests.list @@ -107,17 +107,17 @@ load 894245-1.html load 915440.html load 927734-1.html load 930270-1.html load 930270-2.html load 945048-1.html load 972199-1.html load 989965-1.html load 992333-1.html -pref(dom.webcomponents.enabled,true) load 1017798-1.html # bug 1409086 +pref(dom.webcomponents.enabled,true) load 1017798-1.html load 1028514-1.html load 1066089-1.html load 1074651-1.html load 1135534.html pref(dom.webcomponents.enabled,true) load 1089463-1.html pref(layout.css.expensive-style-struct-assertions.enabled,true) load 1136010-1.html pref(layout.css.expensive-style-struct-assertions.enabled,true) load 1146101-1.html load 1153693-1.html @@ -255,8 +255,9 @@ load 1404057.html load 1409502.html load 1409931.html load 1410226-1.html load 1410226-2.html load 1411143.html load 1411478.html load 1413288.html load 1413361.html +pref(dom.webcomponents.enabled,true) load 1415353.html
--- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -194,28 +194,35 @@ nsStyleFont::EnableZoom(nsPresContext* a } nsChangeHint nsStyleFont::CalcDifference(const nsStyleFont& aNewData) const { MOZ_ASSERT(mAllowZoom == aNewData.mAllowZoom, "expected mAllowZoom to be the same on both nsStyleFonts"); if (mSize != aNewData.mSize || - mFont != aNewData.mFont || mLanguage != aNewData.mLanguage || mExplicitLanguage != aNewData.mExplicitLanguage || mMathVariant != aNewData.mMathVariant || mMathDisplay != aNewData.mMathDisplay || mMinFontSizeRatio != aNewData.mMinFontSizeRatio) { - // If only mFont.fontSmoothingBackgroundColor changes, we really only need - // a repaint hint rather than a reflow+repaint hint, but it's not worth - // worth optimizing. return NS_STYLE_HINT_REFLOW; } + switch (mFont.CalcDifference(aNewData.mFont)) { + case nsFont::MaxDifference::eLayoutAffecting: + return NS_STYLE_HINT_REFLOW; + + case nsFont::MaxDifference::eVisual: + return NS_STYLE_HINT_VISUAL; + + case nsFont::MaxDifference::eNone: + break; + } + // XXX Should any of these cause a non-nsChangeHint_NeutralChange change? if (mGenericID != aNewData.mGenericID || mScriptLevel != aNewData.mScriptLevel || mScriptUnconstrainedSize != aNewData.mScriptUnconstrainedSize || mScriptMinSize != aNewData.mScriptMinSize || mScriptSizeMultiplier != aNewData.mScriptSizeMultiplier) { return nsChangeHint_NeutralChange; }
--- a/layout/tables/nsTableCellFrame.cpp +++ b/layout/tables/nsTableCellFrame.cpp @@ -440,17 +440,19 @@ nsDisplayTableCellBackground::GetBounds( // revert from nsDisplayTableItem's implementation ... cell backgrounds // don't overflow the cell return nsDisplayItem::GetBounds(aBuilder, aSnap); } void nsTableCellFrame::InvalidateFrame(uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrame(aDisplayItemKey); - GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) { + GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + } } void nsTableCellFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey); // If we have filters applied that would affects our bounds, then // we get an inactive layer created and this is computed // within FrameLayerBuilder
--- a/layout/tables/nsTableColFrame.cpp +++ b/layout/tables/nsTableColFrame.cpp @@ -207,17 +207,19 @@ nsTableColFrame::GetSplittableType() con { return NS_FRAME_NOT_SPLITTABLE; } void nsTableColFrame::InvalidateFrame(uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrame(aDisplayItemKey); - GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) { + GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + } } void nsTableColFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey); // If we have filters applied that would affects our bounds, then
--- a/layout/tables/nsTableColGroupFrame.cpp +++ b/layout/tables/nsTableColGroupFrame.cpp @@ -463,17 +463,19 @@ NS_NewTableColGroupFrame(nsIPresShell* a } NS_IMPL_FRAMEARENA_HELPERS(nsTableColGroupFrame) void nsTableColGroupFrame::InvalidateFrame(uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrame(aDisplayItemKey); - GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) { + GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + } } void nsTableColGroupFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey); // If we have filters applied that would affects our bounds, then
--- a/layout/tables/nsTableRowFrame.cpp +++ b/layout/tables/nsTableRowFrame.cpp @@ -1439,17 +1439,19 @@ void nsTableRowFrame::InitHasCellWithSty } RemoveStateBits(NS_ROW_HAS_CELL_WITH_STYLE_BSIZE); } void nsTableRowFrame::InvalidateFrame(uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrame(aDisplayItemKey); - GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) { + GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + } } void nsTableRowFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey); // If we have filters applied that would affects our bounds, then // we get an inactive layer created and this is computed
--- a/layout/tables/nsTableRowGroupFrame.cpp +++ b/layout/tables/nsTableRowGroupFrame.cpp @@ -1990,17 +1990,19 @@ nsTableRowGroupFrame::FrameCursorData::A mOverflowBelow = std::max(mOverflowBelow, overflowBelow); return mFrames.AppendElement(aFrame) != nullptr; } void nsTableRowGroupFrame::InvalidateFrame(uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrame(aDisplayItemKey); - GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + if (GetTableFrame()->IsBorderCollapse() && StyleBorder()->HasBorder()) { + GetParent()->InvalidateFrameWithRect(GetVisualOverflowRect() + GetPosition(), aDisplayItemKey); + } } void nsTableRowGroupFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey) { nsIFrame::InvalidateFrameWithRect(aRect, aDisplayItemKey); // If we have filters applied that would affects our bounds, then // we get an inactive layer created and this is computed
new file mode 100644 --- /dev/null +++ b/media/libyuv/clang_x86_asm.patch @@ -0,0 +1,211 @@ +From 01e994d74e4e3937ee1a3efdc048320a1e51f818 Mon Sep 17 00:00:00 2001 +From: Frank Barchard <fbarchard@chromium.org> +Date: Tue, 7 Nov 2017 18:17:33 -0800 +Subject: [PATCH] Enable SSE2 code without -msse + +Bug: libyuv:754 +Test: CC=clang CXX=clang++ CFLAGS="-m32" CXXFLAGS="-m32 -mno-sse -O2" make -f linux.mk +Change-Id: I74bf8d032013694e65ea7637bc38d3253db53ff2 +Reviewed-on: https://chromium-review.googlesource.com/758043 +Reviewed-by: Frank Barchard <fbarchard@google.com> +--- + include/libyuv/compare_row.h | 2 +- + include/libyuv/planar_functions.h | 2 +- + include/libyuv/rotate_row.h | 2 +- + include/libyuv/row.h | 2 +- + include/libyuv/scale_row.h | 2 +- + linux.mk | 2 +- + source/row_gcc.cc | 6 +++--- + 7 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/include/libyuv/compare_row.h b/include/libyuv/compare_row.h +index 9b7013a2..a34f9ad4 100644 +--- a/include/libyuv/compare_row.h ++++ b/include/libyuv/compare_row.h +@@ -14,17 +14,17 @@ + #include "libyuv/basic_types.h" + + #ifdef __cplusplus + namespace libyuv { + extern "C" { + #endif + + #if defined(__pnacl__) || defined(__CLR_VER) || \ +- (defined(__i386__) && !defined(__SSE2__)) ++ (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) + #define LIBYUV_DISABLE_X86 + #endif + // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 + #if defined(__has_feature) + #if __has_feature(memory_sanitizer) + #define LIBYUV_DISABLE_X86 + #endif + #endif +diff --git a/include/libyuv/planar_functions.h b/include/libyuv/planar_functions.h +index d97965cb..c91501a9 100644 +--- a/include/libyuv/planar_functions.h ++++ b/include/libyuv/planar_functions.h +@@ -715,17 +715,17 @@ int I420Interpolate(const uint8* src0_y, + int dst_stride_u, + uint8* dst_v, + int dst_stride_v, + int width, + int height, + int interpolation); + + #if defined(__pnacl__) || defined(__CLR_VER) || \ +- (defined(__i386__) && !defined(__SSE2__)) ++ (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) + #define LIBYUV_DISABLE_X86 + #endif + // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 + #if defined(__has_feature) + #if __has_feature(memory_sanitizer) + #define LIBYUV_DISABLE_X86 + #endif + #endif +diff --git a/include/libyuv/rotate_row.h b/include/libyuv/rotate_row.h +index 60ac55ef..973fc152 100644 +--- a/include/libyuv/rotate_row.h ++++ b/include/libyuv/rotate_row.h +@@ -14,17 +14,17 @@ + #include "libyuv/basic_types.h" + + #ifdef __cplusplus + namespace libyuv { + extern "C" { + #endif + + #if defined(__pnacl__) || defined(__CLR_VER) || \ +- (defined(__i386__) && !defined(__SSE2__)) ++ (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) + #define LIBYUV_DISABLE_X86 + #endif + // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 + #if defined(__has_feature) + #if __has_feature(memory_sanitizer) + #define LIBYUV_DISABLE_X86 + #endif + #endif +diff --git a/include/libyuv/row.h b/include/libyuv/row.h +index 5ccf94d9..6f0cd500 100644 +--- a/include/libyuv/row.h ++++ b/include/libyuv/row.h +@@ -26,17 +26,17 @@ extern "C" { + uint8* var##_mem = (uint8*)(malloc((size) + 63)); /* NOLINT */ \ + uint8* var = (uint8*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */ + + #define free_aligned_buffer_64(var) \ + free(var##_mem); \ + var = 0 + + #if defined(__pnacl__) || defined(__CLR_VER) || \ +- (defined(__i386__) && !defined(__SSE2__)) ++ (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) + #define LIBYUV_DISABLE_X86 + #endif + // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 + #if defined(__has_feature) + #if __has_feature(memory_sanitizer) + #define LIBYUV_DISABLE_X86 + #endif + #endif +diff --git a/include/libyuv/scale_row.h b/include/libyuv/scale_row.h +index ebafac4f..b97f3e78 100644 +--- a/include/libyuv/scale_row.h ++++ b/include/libyuv/scale_row.h +@@ -15,17 +15,17 @@ + #include "libyuv/scale.h" + + #ifdef __cplusplus + namespace libyuv { + extern "C" { + #endif + + #if defined(__pnacl__) || defined(__CLR_VER) || \ +- (defined(__i386__) && !defined(__SSE2__)) ++ (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) + #define LIBYUV_DISABLE_X86 + #endif + // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 + #if defined(__has_feature) + #if __has_feature(memory_sanitizer) + #define LIBYUV_DISABLE_X86 + #endif + #endif +diff --git a/linux.mk b/linux.mk +index 1dd527c7..7e9aa5e4 100644 +--- a/linux.mk ++++ b/linux.mk +@@ -75,9 +75,9 @@ psnr: util/psnr.cc + + # A C test utility that uses libyuv conversion from C. + # gcc 4.4 and older require -fno-exceptions to avoid link error on __gxx_personality_v0 + # CC=gcc-4.4 CXXFLAGS=-fno-exceptions CXX=g++-4.4 make -f linux.mk + cpuid: util/cpuid.c libyuv.a + $(CC) $(CFLAGS) -o $@ util/cpuid.c libyuv.a + + clean: +- /bin/rm -f source/*.o *.ii *.s libyuv.a convert cpuid psnr ++ /bin/rm -f source/*.o *.ii *.s libyuv.a yuvconvert cpuid psnr +diff --git a/source/row_gcc.cc b/source/row_gcc.cc +index 3af32045..93399f0b 100644 +--- a/source/row_gcc.cc ++++ b/source/row_gcc.cc +@@ -5474,17 +5474,17 @@ void HalfFloatRow_SSE2(const uint16* src, uint16* dst, float scale, int width) { + "psrld $0xd,%%xmm3 \n" + "packssdw %%xmm3,%%xmm2 \n" + MEMOPMEM(movdqu,xmm2,-0x10,0,1,1) + "sub $0x8,%2 \n" + "jg 1b \n" + : "+r"(src), // %0 + "+r"(dst), // %1 + "+r"(width) // %2 +- : "x"(scale * kScaleBias) // %3 ++ : "mx"(scale * kScaleBias) // %3 + : "memory", "cc", + "xmm2", "xmm3", "xmm4", "xmm5" + ); + } + #endif // HAS_HALFFLOATROW_SSE2 + + #ifdef HAS_HALFFLOATROW_AVX2 + void HalfFloatRow_AVX2(const uint16* src, uint16* dst, float scale, int width) { +@@ -5510,17 +5510,17 @@ void HalfFloatRow_AVX2(const uint16* src, uint16* dst, float scale, int width) { + MEMOPMEM(vmovdqu,ymm2,-0x20,0,1,1) + "sub $0x10,%2 \n" + "jg 1b \n" + + "vzeroupper \n" + : "+r"(src), // %0 + "+r"(dst), // %1 + "+r"(width) // %2 +- : "x"(scale * kScaleBias) // %3 ++ : "mx"(scale * kScaleBias) // %3 + : "memory", "cc", + "xmm2", "xmm3", "xmm4", "xmm5" + ); + } + #endif // HAS_HALFFLOATROW_AVX2 + + #ifdef HAS_HALFFLOATROW_F16C + void HalfFloatRow_F16C(const uint16* src, uint16* dst, float scale, int width) { +@@ -5543,17 +5543,17 @@ void HalfFloatRow_F16C(const uint16* src, uint16* dst, float scale, int width) { + MEMOPMEM(vmovdqu,xmm3,0x10,0,1,1) + "add $0x20,%0 \n" + "sub $0x10,%2 \n" + "jg 1b \n" + "vzeroupper \n" + : "+r"(src), // %0 + "+r"(dst), // %1 + "+r"(width) // %2 +- : "x"(scale) // %3 ++ : "mx"(scale) // %3 + : "memory", "cc", + "xmm2", "xmm3", "xmm4" + ); + } + #endif // HAS_HALFFLOATROW_F16C + + #ifdef HAS_HALFFLOATROW_F16C + void HalfFloat1Row_F16C(const uint16* src, uint16* dst, float, int width) {
--- a/media/libyuv/libyuv/include/libyuv/compare_row.h +++ b/media/libyuv/libyuv/include/libyuv/compare_row.h @@ -14,17 +14,17 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus namespace libyuv { extern "C" { #endif #if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__i386__) && !defined(__SSE2__)) + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) #define LIBYUV_DISABLE_X86 #endif // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 #if defined(__has_feature) #if __has_feature(memory_sanitizer) #define LIBYUV_DISABLE_X86 #endif #endif
--- a/media/libyuv/libyuv/include/libyuv/planar_functions.h +++ b/media/libyuv/libyuv/include/libyuv/planar_functions.h @@ -715,17 +715,17 @@ int I420Interpolate(const uint8* src0_y, int dst_stride_u, uint8* dst_v, int dst_stride_v, int width, int height, int interpolation); #if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__i386__) && !defined(__SSE2__)) + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) #define LIBYUV_DISABLE_X86 #endif // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 #if defined(__has_feature) #if __has_feature(memory_sanitizer) #define LIBYUV_DISABLE_X86 #endif #endif
--- a/media/libyuv/libyuv/include/libyuv/rotate_row.h +++ b/media/libyuv/libyuv/include/libyuv/rotate_row.h @@ -14,17 +14,17 @@ #include "libyuv/basic_types.h" #ifdef __cplusplus namespace libyuv { extern "C" { #endif #if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__i386__) && !defined(__SSE2__)) + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) #define LIBYUV_DISABLE_X86 #endif // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 #if defined(__has_feature) #if __has_feature(memory_sanitizer) #define LIBYUV_DISABLE_X86 #endif #endif
--- a/media/libyuv/libyuv/include/libyuv/row.h +++ b/media/libyuv/libyuv/include/libyuv/row.h @@ -26,17 +26,17 @@ extern "C" { uint8* var##_mem = (uint8*)(malloc((size) + 63)); /* NOLINT */ \ uint8* var = (uint8*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */ #define free_aligned_buffer_64(var) \ free(var##_mem); \ var = 0 #if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__i386__) && !defined(__SSE2__)) + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) #define LIBYUV_DISABLE_X86 #endif // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 #if defined(__has_feature) #if __has_feature(memory_sanitizer) #define LIBYUV_DISABLE_X86 #endif #endif
--- a/media/libyuv/libyuv/include/libyuv/scale_row.h +++ b/media/libyuv/libyuv/include/libyuv/scale_row.h @@ -15,17 +15,17 @@ #include "libyuv/scale.h" #ifdef __cplusplus namespace libyuv { extern "C" { #endif #if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__i386__) && !defined(__SSE2__)) + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) #define LIBYUV_DISABLE_X86 #endif // MemorySanitizer does not support assembly code yet. http://crbug.com/344505 #if defined(__has_feature) #if __has_feature(memory_sanitizer) #define LIBYUV_DISABLE_X86 #endif #endif
--- a/media/libyuv/libyuv/linux.mk +++ b/media/libyuv/libyuv/linux.mk @@ -75,9 +75,9 @@ psnr: util/psnr.cc # A C test utility that uses libyuv conversion from C. # gcc 4.4 and older require -fno-exceptions to avoid link error on __gxx_personality_v0 # CC=gcc-4.4 CXXFLAGS=-fno-exceptions CXX=g++-4.4 make -f linux.mk cpuid: util/cpuid.c libyuv.a $(CC) $(CFLAGS) -o $@ util/cpuid.c libyuv.a clean: - /bin/rm -f source/*.o *.ii *.s libyuv.a convert cpuid psnr + /bin/rm -f source/*.o *.ii *.s libyuv.a yuvconvert cpuid psnr
--- a/media/libyuv/libyuv/source/row_gcc.cc +++ b/media/libyuv/libyuv/source/row_gcc.cc @@ -5474,17 +5474,17 @@ void HalfFloatRow_SSE2(const uint16* src "psrld $0xd,%%xmm3 \n" "packssdw %%xmm3,%%xmm2 \n" MEMOPMEM(movdqu,xmm2,-0x10,0,1,1) "sub $0x8,%2 \n" "jg 1b \n" : "+r"(src), // %0 "+r"(dst), // %1 "+r"(width) // %2 - : "x"(scale * kScaleBias) // %3 + : "mx"(scale * kScaleBias) // %3 : "memory", "cc", "xmm2", "xmm3", "xmm4", "xmm5" ); } #endif // HAS_HALFFLOATROW_SSE2 #ifdef HAS_HALFFLOATROW_AVX2 void HalfFloatRow_AVX2(const uint16* src, uint16* dst, float scale, int width) { @@ -5510,17 +5510,17 @@ void HalfFloatRow_AVX2(const uint16* src MEMOPMEM(vmovdqu,ymm2,-0x20,0,1,1) "sub $0x10,%2 \n" "jg 1b \n" "vzeroupper \n" : "+r"(src), // %0 "+r"(dst), // %1 "+r"(width) // %2 - : "x"(scale * kScaleBias) // %3 + : "mx"(scale * kScaleBias) // %3 : "memory", "cc", "xmm2", "xmm3", "xmm4", "xmm5" ); } #endif // HAS_HALFFLOATROW_AVX2 #ifdef HAS_HALFFLOATROW_F16C void HalfFloatRow_F16C(const uint16* src, uint16* dst, float scale, int width) { @@ -5543,17 +5543,17 @@ void HalfFloatRow_F16C(const uint16* src MEMOPMEM(vmovdqu,xmm3,0x10,0,1,1) "add $0x20,%0 \n" "sub $0x10,%2 \n" "jg 1b \n" "vzeroupper \n" : "+r"(src), // %0 "+r"(dst), // %1 "+r"(width) // %2 - : "x"(scale) // %3 + : "mx"(scale) // %3 : "memory", "cc", "xmm2", "xmm3", "xmm4" ); } #endif // HAS_HALFFLOATROW_F16C #ifdef HAS_HALFFLOATROW_F16C void HalfFloat1Row_F16C(const uint16* src, uint16* dst, float, int width) {
--- a/media/libyuv/update.py +++ b/media/libyuv/update.py @@ -47,16 +47,18 @@ def apply_patches(): # Patch to add H444ToARGB() variant os.system("patch -p3 < add_H444ToARGB.patch") # Patch for bug 1342730 os.system("patch -p3 < cpu_id.patch") # Patch for bug 1342730 os.system("patch -p3 < cpu_id.patch") # Patch for bug 1342732 os.system("patch -p3 < row_any.patch") + # Patch for bug 1414440 + os.system("patch -p1 -d libyuv < clang_x86_asm.patch") def update_readme(commit, commitdate): with open('README_MOZILLA') as f: readme = f.read() if 'The git commit ID last used to import was ' in readme: new_readme = re.sub('The git commit ID last used to import was [v\.a-f0-9]+ \(.+\)', 'The git commit ID last used to import was %s (%s)' % (commit, commitdate), readme)
--- a/mobile/android/locales/all-locales +++ b/mobile/android/locales/all-locales @@ -1,18 +1,20 @@ +ach an ar as ast az be bg bn-BD bn-IN br +bs ca cak cs cy da de dsb el @@ -36,37 +38,40 @@ gl gn gu-IN he hi-IN hr hsb hu hy-AM +ia id is it ja ka kab kk kn ko lo lt +ltg lv mai ml mr ms my nb-NO ne-NP nl nn-NO +oc or pa-IN pl pt-BR pt-PT rm ro ru
--- a/mobile/android/locales/l10n.toml +++ b/mobile/android/locales/l10n.toml @@ -1,25 +1,27 @@ # 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/. basepath = "../../.." locales = [ + "ach", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", + "bs", "ca", "cak", "cs", "cy", "da", "de", "dsb", "el", @@ -43,37 +45,40 @@ locales = [ "gn", "gu-IN", "he", "hi-IN", "hr", "hsb", "hu", "hy-AM", + "ia", "id", "is", "it", "ja", "ka", "kab", "kk", "kn", "ko", "lo", "lt", + "ltg", "lv", "mai", "ml", "mr", "ms", "my", "nb-NO", "ne-NP", "nl", "nn-NO", + "oc", "or", "pa-IN", "pl", "pt-BR", "pt-PT", "rm", "ro", "ru",
--- a/mobile/locales/search/list.json +++ b/mobile/locales/search/list.json @@ -364,16 +364,23 @@ }, "hy-AM": { "default": { "visibleDefaultEngines": [ "google", "yahoo", "bing", "amazondotcom", "list-am", "wikipedia-hy-AM" ] } }, + "ia": { + "default": { + "visibleDefaultEngines": [ + "google", "yahoo", "bing", "amazondotcom", "duckduckgo", "twitter", "wikipedia-ia" + ] + } + }, "id": { "default": { "visibleDefaultEngines": [ "google", "yahoo-id", "bing", "twitter", "wikipedia-id" ] } }, "is": { @@ -532,16 +539,23 @@ }, "nn-NO": { "default": { "visibleDefaultEngines": [ "google", "duckduckgo", "gulesider-mobile-NO", "twitter", "wikipedia-NN" ] } }, + "oc": { + "default": { + "visibleDefaultEngines": [ + "google", "yahoo-france", "bing", "wikipedia-oc", "wiktionary-oc" + ] + } + }, "or": { "default": { "visibleDefaultEngines": [ "google", "yahoo-in", "bing", "amazon-in", "wikipedia-or", "wiktionary-or" ] } }, "pa-IN": {
new file mode 100644 --- /dev/null +++ b/mobile/locales/searchplugins/wikipedia-ia.xml @@ -0,0 +1,23 @@ +<!-- 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/. --> + +<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/"> +<ShortName>Wikipedia (ia)</ShortName> +<InputEncoding>UTF-8</InputEncoding> +<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA51BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////7+/vl5eWxsbH9/f3Ly8tzc3P39/fe3t5cXFzz8/Pt7e3i4uI3NzcaGhoHBwcFBQX5+fnIyMhTU1MXFxcMDAzx8fHX19fFxcXCwsK7u7u1tbWenp6WlpZ8fHxXV1ctLS319fXn5+fV1dWsrKySkpJnZ2cgICDv7+/p6eng4ODQ0NC9vb24uLikpKSPj4+JiYmCgoJiYmJCQkI7OzsyMjIpKSkQEBCoqKigoKCdnZ14eHhubm5PT09LS0tERETk5OTb29unp6c0NDQkJCQOGD7BAAAAB3RSTlMA8si8ZBhlc+JuAAAAAw1JREFUaN7tmtluIjEQRYEhUxd6YYew7xAggRAgCQmB7Ov8//eM3Zg2nXkJvUjz4POAVEbyQXaVy0gOMaKRMAVAOBINcY5+UWD8OmKCIOaXhlDoNwVKNBShQImEwhQo4RAFjBIogRIogRIogRIoQWCCYXqaHJVaWrtl1IfpYp3GiczFqLHQ5kY9m0l0qVM8Txrs+8ZomkhSKpbOzlraolSP15o/EtxoU9gk2iZVujM7HnVe6eUhKaL4aYrWXWMXfd7+dIlScWxpbsjibQiLPm255sH5jYjKOoCEecge5LcTxqokuItZv5F2DID0iR21ALwctslfunNCurKEBRJkgBTZdIDOoVl0CU7FjgsZHpsi+gNoJGlisDlUkC+C8SQHejzOiqCLgXRTNYazw+vg8tsaHZ+DMd7ZlyR5Qix/uOAEgGOhlzy+EPLMMUmyOHVTyQ0wDBlXB2Dw1FzreCZJGfhyIyiDs/qWSEkiarNPxxaX3J1FWcCRLJXidtFW7MO5lmV3AhMMPS8HHsH4oBJmtEcHF+ROUEgD2E/AiVXO98AtSaoJmC4F1AUjXZAD97Bo0R491ApuBRNdVq/FGhz9hPaI48p9w1mI6rVpi1qQ9FmRuRe8iTPaJgfOi6NaTr20zDoYJUfOM2aOHM15EYwBOKbQwHm14wcY5FYgTzi5CHewMPZytO9aIHuj3MY53sF5s3M0S94EFV5bdiLeshQdgdGwc9T0IJC1VROHs4EHSgHY1XKflaFXQQ6y2MpIVIiSYDStgRLOvN/sDDCSImmv7cxaWVuu5z0LxJKU+Y1M9LE4GHOrsWnkXUDx3a5mRR8zRXFsisj5IeiBc0cmPkRxZMBY0BIGeRLIYmJ8smnLDmVuiL5ngWxksUd5JhVqYEzxTv4I1tiSc9Y38OSTgOZwnki0GYhe55Pg1VqjCUnORLf2SWAVb5fIeYPRJ/4JnoFa1THSATTyT3BcQ++f+8DKRwGN299Hltr/+zdWCZRACZRACZSAlEAJDifwRwPBP3uIUqBEg356EvzjmcCf//wFVbAkwfl+5CMAAAAASUVORK5CYII=</Image> +<Url type="application/x-suggestions+json" method="GET" template="https://ia.wikipedia.org/w/api.php"> + <Param name="action" value="opensearch"/> + <Param name="search" value="{searchTerms}"/> +</Url> +<Url type="text/html" method="GET" template="https://ia.wikipedia.org/wiki/Special:Recerca"> + <Param name="search" value="{searchTerms}"/> + <Param name="sourceid" value="Mozilla-search"/> +</Url> +<!-- Search activity --> +<Url type="text/html" method="GET" rel="mobile" template="https://ia.wikipedia.org/wiki/Special:Recerca"> + <Param name="search" value="{searchTerms}"/> + <Param name="sourceid" value="Mozilla-search"/> +</Url> +<SearchForm>https://ia.wikipedia.org/wiki/Special:Recerca</SearchForm> +</SearchPlugin>
new file mode 100644 --- /dev/null +++ b/mobile/locales/searchplugins/wikipedia-oc.xml @@ -0,0 +1,23 @@ +<!-- 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/. --> + +<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/"> +<ShortName>Wikipèdia (oc)</ShortName> +<InputEncoding>UTF-8</InputEncoding> +<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA51BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////7+/vl5eWxsbH9/f3Ly8tzc3P39/fe3t5cXFzz8/Pt7e3i4uI3NzcaGhoHBwcFBQX5+fnIyMhTU1MXFxcMDAzx8fHX19fFxcXCwsK7u7u1tbWenp6WlpZ8fHxXV1ctLS319fXn5+fV1dWsrKySkpJnZ2cgICDv7+/p6eng4ODQ0NC9vb24uLikpKSPj4+JiYmCgoJiYmJCQkI7OzsyMjIpKSkQEBCoqKigoKCdnZ14eHhubm5PT09LS0tERETk5OTb29unp6c0NDQkJCQOGD7BAAAAB3RSTlMA8si8ZBhlc+JuAAAAAw1JREFUaN7tmtluIjEQRYEhUxd6YYew7xAggRAgCQmB7Ov8//eM3Zg2nXkJvUjz4POAVEbyQXaVy0gOMaKRMAVAOBINcY5+UWD8OmKCIOaXhlDoNwVKNBShQImEwhQo4RAFjBIogRIogRIogRIoQWCCYXqaHJVaWrtl1IfpYp3GiczFqLHQ5kY9m0l0qVM8Txrs+8ZomkhSKpbOzlraolSP15o/EtxoU9gk2iZVujM7HnVe6eUhKaL4aYrWXWMXfd7+dIlScWxpbsjibQiLPm255sH5jYjKOoCEecge5LcTxqokuItZv5F2DID0iR21ALwctslfunNCurKEBRJkgBTZdIDOoVl0CU7FjgsZHpsi+gNoJGlisDlUkC+C8SQHejzOiqCLgXRTNYazw+vg8tsaHZ+DMd7ZlyR5Qix/uOAEgGOhlzy+EPLMMUmyOHVTyQ0wDBlXB2Dw1FzreCZJGfhyIyiDs/qWSEkiarNPxxaX3J1FWcCRLJXidtFW7MO5lmV3AhMMPS8HHsH4oBJmtEcHF+ROUEgD2E/AiVXO98AtSaoJmC4F1AUjXZAD97Bo0R491ApuBRNdVq/FGhz9hPaI48p9w1mI6rVpi1qQ9FmRuRe8iTPaJgfOi6NaTr20zDoYJUfOM2aOHM15EYwBOKbQwHm14wcY5FYgTzi5CHewMPZytO9aIHuj3MY53sF5s3M0S94EFV5bdiLeshQdgdGwc9T0IJC1VROHs4EHSgHY1XKflaFXQQ6y2MpIVIiSYDStgRLOvN/sDDCSImmv7cxaWVuu5z0LxJKU+Y1M9LE4GHOrsWnkXUDx3a5mRR8zRXFsisj5IeiBc0cmPkRxZMBY0BIGeRLIYmJ8smnLDmVuiL5ngWxksUd5JhVqYEzxTv4I1tiSc9Y38OSTgOZwnki0GYhe55Pg1VqjCUnORLf2SWAVb5fIeYPRJ/4JnoFa1THSATTyT3BcQ++f+8DKRwGN299Hltr/+zdWCZRACZRACZSAlEAJDifwRwPBP3uIUqBEg356EvzjmcCf//wFVbAkwfl+5CMAAAAASUVORK5CYII=</Image> +<Url type="application/x-suggestions+json" method="GET" template="https://oc.wikipedia.org/w/api.php"> + <Param name="action" value="opensearch"/> + <Param name="search" value="{searchTerms}"/> +</Url> +<Url type="text/html" method="GET" template="https://oc.wikipedia.org/wiki/Especial:Recèrca"> + <Param name="search" value="{searchTerms}"/> + <Param name="sourceid" value="Mozilla-search"/> +</Url> +<!-- Search activity --> +<Url type="text/html" method="GET" rel="mobile" template="https://oc.wikipedia.org/wiki/Especial:Recèrca"> + <Param name="search" value="{searchTerms}"/> + <Param name="sourceid" value="Mozilla-search"/> +</Url> +<SearchForm>https://oc.wikipedia.org/wiki/Especial:Recèrca</SearchForm> +</SearchPlugin>
new file mode 100644 --- /dev/null +++ b/mobile/locales/searchplugins/wiktionary-oc.xml @@ -0,0 +1,17 @@ +<!-- 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/. --> + +<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/"> +<ShortName>Wikiccionari (oc)</ShortName> +<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA21BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD////Z2dnm5uYSEhJCQkJjY2PJycn6+vq4uLhOTk79/f0GBgbg4OBra2tbW1sEBAQeHh729va/v7/u7u4pKSkPDw/d3d2BgYFQUFAjIyMYGBjq6uq0tLSrq6umpqadnZ2Xl5eSkpKNjY1wcHBWVlZGRkY7Ozs1NTUwMDAKCgrDw8OxsbGIiIh6enpoaGhLS0tAQEA3NzcsLCwrKysICAjw8PDW1tbS0tJ0dHTo6Ojj4+PPz898fHxiYmLx8fG6urqhoaFlZWXTVXa3AAAABnRSTlMA8si8ZBgxEvPEAAACy0lEQVRo3u2aa1fiMBCGAXUiiLW2tFguAsr9orBcFBDwsrf//4t2kqbN0d2DS5Pshz15P0BmQvtMMsmclpMU6jiTBg1KZ45TVCdHoE1HJwjQeH8k4PyAVh2nMqBVmVQatCqdAs0yAAMwAAMwAAP414B8pCIzh/m8DYfpMc81+COARKoxc0LI9kBAh3Bl9wPCwC8IOT8Q0CNcp5+MICmg+ymg5Nm2XWskBaxqtr142wfIOsJMAAgzvReQkwecGYAB/AYoLsurOgitV6vyMgdCjSXaEoCpZVmlovDPLVQbhAK0hwkAASGvrKoSlCf8t9SurmO7buF1lQSAB89jceVusENEnCtRwOW9GBGaPxLk4H3Ip05k2YSp8K57IAXoi4hFzW/GKX7CGpmTAtxfYk+fG85pCHDH3OGh8QUkAPyet9y4Q1pQwiHdcUcLO7/KAaCNPc+8Z4btxTl+7EK7kiXkqigJGBDUMF68WacjpmWBzQAkAcUr7JrGzSYS46VPWX1ZAExIVJc8NuN1ShyxulElxCpLA65JNNEtbGBhokmYUXvE0NKAh6haVF4ImfDnkwtWqLBxLQMQS4W0OemNp/YGf+tv6YKVB0CTV4spv1+DFqSzcA9ufAWAeVgt/NeoKgV0asJd0QMFgLJFVyP76sRpD8LldaYC4G/Z1irgpx2nvVShu8IdqwBAl3aOm2FqUZVnuhM8lnslgBpbqK4onLc0CS06IlmAqPpkgymYc8cObfeGjkgNAALCdFUXZZupCYoAM0IlysLYDR2eKsBjGLEoCy1mf2soAYiIR7HjJ7MvQAVAROyuxd5jgII6wMCtVl96wva/o2NTVwcAx/edDw7HB0mA+qfrDyEpfwl82hVQRUioUR+v7v7ViziX6hdxLjspoKcZIEbg/qd/SDEZgAEYAIABGIABaJD2QwPajz1oP7ih++iJ/sMz2o///ALGfwB3vnCGuQAAAABJRU5ErkJggg==</Image> +<Url type="application/x-suggestions+json" method="GET" template="https://oc.wiktionary.org/w/api.php"> + <Param name="action" value="opensearch"/> + <Param name="search" value="{searchTerms}"/> + <Param name="namespace" value="0"/> +</Url> +<Url type="text/html" method="get" template="https://oc.wiktionary.org/wiki/Especial:Recèrca"> + <Param name="search" value="{searchTerms}"/> +</Url> +<SearchForm>https://oc.wiktionary.org/wiki/Especial:Recèrca</SearchForm> +</SearchPlugin>
--- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -2094,20 +2094,16 @@ pref("network.dns.localDomains", ""); pref("network.dns.forceResolve", ""); // Contols whether or not "localhost" should resolve when offline pref("network.dns.offline-localhost", true); // The maximum allowed length for a URL - 1MB default pref("network.standard-url.max-length", 1048576); -// The preference controls if the rust URL parser is run in parallel with the -// C++ implementation. Requires restart for changes to take effect. -pref("network.standard-url.enable-rust", false); - // Whether nsIURI.host/.hostname/.spec should return a punycode string // If set to false we will revert to previous behaviour and return a unicode string. pref("network.standard-url.punycode-host", true); // Idle timeout for ftp control connections - 5 minute default pref("network.ftp.idleConnectionTimeout", 300); // directory listing format
deleted file mode 100644 --- a/netwerk/base/RustURL.cpp +++ /dev/null @@ -1,759 +0,0 @@ -#include "RustURL.h" -#include "nsCOMPtr.h" -#include "nsURLHelper.h" - -#ifndef MOZ_RUST_URLPARSE - #error "Should be defined" -#endif - -using namespace mozilla::ipc; - -namespace mozilla { -namespace net { - -NS_IMPL_ADDREF(RustURL) -NS_IMPL_RELEASE(RustURL) - -NS_INTERFACE_MAP_BEGIN(RustURL) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIStandardURL) - NS_INTERFACE_MAP_ENTRY(nsIURI) - NS_INTERFACE_MAP_ENTRY(nsIURL) - // NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsIFileURL, mSupportsFileURL) - NS_INTERFACE_MAP_ENTRY(nsIStandardURL) - // NS_INTERFACE_MAP_ENTRY(nsISerializable) - NS_INTERFACE_MAP_ENTRY(nsIClassInfo) - NS_INTERFACE_MAP_ENTRY(nsIMutable) - // NS_INTERFACE_MAP_ENTRY(nsIIPCSerializableURI) - // NS_INTERFACE_MAP_ENTRY(nsISensitiveInfoHiddenURI) - NS_INTERFACE_MAP_ENTRY(nsISizeOf) -NS_INTERFACE_MAP_END - -#define ENSURE_MUTABLE() \ - PR_BEGIN_MACRO \ - if (!mMutable) { \ - NS_WARNING("attempt to modify an immutable RustURL"); \ - return NS_ERROR_ABORT; \ - } \ - PR_END_MACRO - -RustURL::RustURL() - : mMutable(true) -{ - -} - -RustURL::~RustURL() -{ - -} - -NS_IMETHODIMP -RustURL::GetSpec(nsACString & aSpec) -{ - return rusturl_get_spec(mURL.get(), &aSpec); -} - -NS_IMETHODIMP -RustURL::SetSpec(const nsACString & aSpec) -{ - ENSURE_MUTABLE(); - - rusturl* ptr = rusturl_new(&aSpec, nullptr); - if (!ptr) { - return NS_ERROR_FAILURE; - } - mURL.reset(ptr); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetPrePath(nsACString & aPrePath) -{ - // TODO: use slicing API to get actual prepath - aPrePath.Truncate(); - nsAutoCString rustResult; - nsAutoCString part; - - nsresult rv = GetScheme(part); - if (NS_FAILED(rv)) { - return rv; - } - rustResult.Append(part); - rustResult += "://"; - - rv = GetUserPass(part); - if (NS_FAILED(rv)) { - return rv; - } - if (!part.IsEmpty()) { - rustResult += part; - rustResult += "@"; - } - - rv = GetHostPort(part); - if (NS_FAILED(rv)) { - return rv; - } - - rustResult += part; - aPrePath.Assign(rustResult); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetScheme(nsACString & aScheme) -{ - return rusturl_get_scheme(mURL.get(), &aScheme); -} - -NS_IMETHODIMP -RustURL::SetScheme(const nsACString & aScheme) -{ - ENSURE_MUTABLE(); - - return rusturl_set_scheme(mURL.get(), &aScheme); -} - -NS_IMETHODIMP -RustURL::GetUserPass(nsACString & aUserPass) -{ - nsresult rv = GetUsername(aUserPass); - if (NS_FAILED(rv)) { - aUserPass.Truncate(); - return rv; - } - - nsAutoCString password; - rv = GetPassword(password); - if (NS_FAILED(rv)) { - aUserPass.Truncate(); - return rv; - } - - if (password.Length()) { - aUserPass.Append(':'); - aUserPass.Append(password); - } - return NS_OK; -} - -NS_IMETHODIMP -RustURL::SetUserPass(const nsACString & aUserPass) -{ - ENSURE_MUTABLE(); - - int32_t colonPos = aUserPass.FindChar(':'); - nsAutoCString user; - nsAutoCString pass; - if (colonPos == kNotFound) { - user = aUserPass; - } else { - user = Substring(aUserPass, 0, colonPos); - pass = Substring(aUserPass, colonPos + 1, aUserPass.Length()); - } - - nsresult rv = rusturl_set_username(mURL.get(), &user); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - return rusturl_set_password(mURL.get(), &pass); -} - -NS_IMETHODIMP -RustURL::GetUsername(nsACString & aUsername) -{ - return rusturl_get_username(mURL.get(), &aUsername); -} - -NS_IMETHODIMP -RustURL::SetUsername(const nsACString & aUsername) -{ - ENSURE_MUTABLE(); - return rusturl_set_username(mURL.get(), &aUsername); -} - -NS_IMETHODIMP -RustURL::GetPassword(nsACString & aPassword) -{ - return rusturl_get_password(mURL.get(), &aPassword); -} - -NS_IMETHODIMP -RustURL::SetPassword(const nsACString & aPassword) -{ - ENSURE_MUTABLE(); - return rusturl_set_password(mURL.get(), &aPassword); -} - -NS_IMETHODIMP -RustURL::GetHostPort(nsACString & aHostPort) -{ - nsresult rv = rusturl_get_host(mURL.get(), &aHostPort); - if (NS_FAILED(rv)) { - return rv; - } - - int32_t port; - rv = GetPort(&port); - if (NS_FAILED(rv)) { - return rv; - } - if (port >= 0) { - aHostPort.Append(':'); - aHostPort.AppendInt(port); - } - - return NS_OK; -} - -NS_IMETHODIMP -RustURL::SetHostPort(const nsACString & aHostPort) -{ - ENSURE_MUTABLE(); - return rusturl_set_host_port(mURL.get(), &aHostPort); -} - -NS_IMETHODIMP -RustURL::SetHostAndPort(const nsACString & hostport) -{ - ENSURE_MUTABLE(); - return rusturl_set_host_and_port(mURL.get(), &hostport); -} - -NS_IMETHODIMP -RustURL::GetHost(nsACString & aHost) -{ - nsAutoCString host; - nsresult rv = rusturl_get_host(mURL.get(), &host); - if (NS_FAILED(rv)) { - return rv; - } - - if (host.Length() > 0 && host.First() == '[' && host.Last() == ']') { - aHost = Substring(host, 1, host.Length() - 2); - return NS_OK; - } - - aHost = host; - return NS_OK; -} - -NS_IMETHODIMP -RustURL::SetHost(const nsACString & aHost) -{ - ENSURE_MUTABLE(); - return rusturl_set_host(mURL.get(), &aHost); -} - -NS_IMETHODIMP -RustURL::GetPort(int32_t *aPort) -{ - if (!mURL) { - return NS_ERROR_FAILURE; - } - *aPort = 0; - return rusturl_get_port(mURL.get(), aPort); -} - -NS_IMETHODIMP -RustURL::SetPort(int32_t aPort) -{ - ENSURE_MUTABLE(); - return rusturl_set_port_no(mURL.get(), aPort); -} - -NS_IMETHODIMP -RustURL::GetPathQueryRef(nsACString & aPath) -{ - return rusturl_get_path(mURL.get(), &aPath); -} - -NS_IMETHODIMP -RustURL::SetPathQueryRef(const nsACString & aPath) -{ - ENSURE_MUTABLE(); - - nsAutoCString path; - nsresult rv = GetPrePath(path); - if (NS_FAILED(rv)) { - return rv; - } - - if (aPath.Length() > 0 && aPath.First() != '/') { - path.Append('/'); - } - path.Append(aPath); - - return SetSpec(path); -} - -NS_IMETHODIMP -RustURL::Equals(nsIURI *other, bool *aRetVal) -{ - *aRetVal = false; - nsAutoCString spec; - nsresult rv = other->GetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - nsAutoCString rustSpec; - rv = GetSpec(rustSpec); - if (NS_FAILED(rv)) { - return rv; - } - if (rustSpec == spec) { - *aRetVal = true; - } - return NS_OK; -} - -NS_IMETHODIMP -RustURL::SchemeIs(const char * aScheme, bool *aRetVal) -{ - *aRetVal = false; - nsAutoCString scheme; - nsresult rv = GetScheme(scheme); - if (NS_FAILED(rv)) { - return rv; - } - if (scheme.Equals(aScheme, nsCaseInsensitiveCStringComparator())) { - *aRetVal = true; - } - return NS_OK; -} - -NS_IMETHODIMP -RustURL::Clone(nsIURI * *aRetVal) -{ - RefPtr<RustURL> url = new RustURL(); - nsAutoCString spec; - nsresult rv = GetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - rv = url->SetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - url.forget(aRetVal); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::Resolve(const nsACString & relativePath, nsACString & aRetVal) -{ - return rusturl_resolve(mURL.get(), &relativePath, &aRetVal); -} - -NS_IMETHODIMP -RustURL::GetAsciiSpec(nsACString & aAsciiSpec) -{ - return GetSpec(aAsciiSpec); -} - -NS_IMETHODIMP -RustURL::GetAsciiHostPort(nsACString & aAsciiHostPort) -{ - return GetHostPort(aAsciiHostPort); -} - -NS_IMETHODIMP -RustURL::GetAsciiHost(nsACString & aAsciiHost) -{ - return GetHost(aAsciiHost); -} - -NS_IMETHODIMP -RustURL::GetRef(nsACString & aRef) -{ - return rusturl_get_fragment(mURL.get(), &aRef); -} - -NS_IMETHODIMP -RustURL::SetRef(const nsACString & aRef) -{ - ENSURE_MUTABLE(); - return rusturl_set_fragment(mURL.get(), &aRef); -} - -NS_IMETHODIMP -RustURL::EqualsExceptRef(nsIURI *other, bool *_retval) -{ - *_retval = false; - nsAutoCString otherSpec; - nsresult rv = other->GetSpecIgnoringRef(otherSpec); - if (NS_FAILED(rv)) { - return rv; - } - nsAutoCString thisSpec; - rv = GetSpecIgnoringRef(thisSpec); - if (NS_FAILED(rv)) { - return rv; - } - if (thisSpec == otherSpec) { - *_retval = true; - } - return NS_OK; -} - -NS_IMETHODIMP -RustURL::CloneIgnoringRef(nsIURI * *_retval) -{ - return CloneWithNewRef(NS_LITERAL_CSTRING(""), _retval); -} - -NS_IMETHODIMP -RustURL::CloneWithNewRef(const nsACString & newRef, nsIURI * *_retval) -{ - nsCOMPtr<nsIURI> uri; - nsresult rv = Clone(getter_AddRefs(uri)); - if (NS_FAILED(rv)) { - return rv; - } - rv = uri->SetRef(newRef); - if (NS_FAILED(rv)) { - return rv; - } - uri.forget(_retval); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetSpecIgnoringRef(nsACString & aSpecIgnoringRef) -{ - nsresult rv = GetSpec(aSpecIgnoringRef); - if (NS_FAILED(rv)) { - return rv; - } - int32_t pos = aSpecIgnoringRef.FindChar('#'); - if (pos == kNotFound) { - return NS_OK; - } - - aSpecIgnoringRef.Truncate(pos); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetDisplaySpec(nsACString &aUnicodeSpec) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetDisplayHostPort(nsACString &aUnicodeHostPort) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetDisplayHost(nsACString &aUnicodeHost) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetDisplayPrePath(nsACString & aPrePath) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetHasRef(bool *aHasRef) -{ - *aHasRef = false; - return rusturl_has_fragment(mURL.get(), aHasRef); -} - -/// nsIURL - -NS_IMETHODIMP -RustURL::GetFilePath(nsACString & aFilePath) -{ - return rusturl_get_path(mURL.get(), &aFilePath); -} - -NS_IMETHODIMP -RustURL::SetFilePath(const nsACString & aFilePath) -{ - ENSURE_MUTABLE(); - return rusturl_set_path(mURL.get(), &aFilePath); -} - -NS_IMETHODIMP -RustURL::GetQuery(nsACString & aQuery) -{ - return rusturl_get_query(mURL.get(), &aQuery); -} - -NS_IMETHODIMP -RustURL::SetQuery(const nsACString & aQuery) -{ - ENSURE_MUTABLE(); - return rusturl_set_query(mURL.get(), &aQuery); -} - -NS_IMETHODIMP -RustURL::SetQueryWithEncoding(const nsACString& aQuery, - const Encoding* aEncoding) -{ - ENSURE_MUTABLE(); - //XXX rust-url-capi should support the concept of "encoding override" - return rusturl_set_query(mURL.get(), &aQuery); -} - -NS_IMETHODIMP -RustURL::GetDirectory(nsACString & aDirectory) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::SetDirectory(const nsACString & aDirectory) -{ - ENSURE_MUTABLE(); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetFileName(nsACString & aFileName) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::SetFileName(const nsACString & aFileName) -{ - ENSURE_MUTABLE(); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetFileBaseName(nsACString & aFileBaseName) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::SetFileBaseName(const nsACString & aFileBaseName) -{ - ENSURE_MUTABLE(); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetFileExtension(nsACString & aFileExtension) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::SetFileExtension(const nsACString & aFileExtension) -{ - ENSURE_MUTABLE(); - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetCommonBaseSpec(nsIURI *aURIToCompare, nsACString & _retval) -{ - RefPtr<RustURL> url = new RustURL(); - nsAutoCString spec; - nsresult rv = aURIToCompare->GetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - rv = url->SetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - return rusturl_common_base_spec(mURL.get(), url->mURL.get(), &_retval); -} - -NS_IMETHODIMP -RustURL::GetRelativeSpec(nsIURI *aURIToCompare, nsACString & _retval) -{ - RefPtr<RustURL> url = new RustURL(); - nsAutoCString spec; - nsresult rv = aURIToCompare->GetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - rv = url->SetSpec(spec); - if (NS_FAILED(rv)) { - return rv; - } - - return rusturl_relative_spec(mURL.get(), url->mURL.get(), &_retval); -} - -// nsIFileURL - - -NS_IMETHODIMP -RustURL::GetFile(nsIFile * *aFile) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::SetFile(nsIFile *aFile) -{ - ENSURE_MUTABLE(); - return NS_ERROR_NOT_IMPLEMENTED; -} - -// nsIStandardURL - -NS_IMETHODIMP -RustURL::Init(uint32_t aUrlType, int32_t aDefaultPort, const nsACString & aSpec, - const char * aOriginCharset, nsIURI *aBaseURI) -{ - ENSURE_MUTABLE(); - - if (aBaseURI && net_IsAbsoluteURL(aSpec)) { - aBaseURI = nullptr; - } - - if (!aBaseURI) { - return SetSpec(aSpec); - } - - nsAutoCString buf; - nsresult rv = aBaseURI->Resolve(aSpec, buf); - if (NS_FAILED(rv)) { - return rv; - } - - return SetSpec(buf); -} - -NS_IMETHODIMP -RustURL::SetDefaultPort(int32_t aNewDefaultPort) -{ - ENSURE_MUTABLE(); - return NS_ERROR_NOT_IMPLEMENTED; -} - -// nsISerializable - -NS_IMETHODIMP -RustURL::Read(nsIObjectInputStream *aInputStream) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::Write(nsIObjectOutputStream *aOutputStream) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -void -RustURL::Serialize(URIParams& aParams) -{ - // TODO -} - -bool -RustURL::Deserialize(const URIParams& aParams) -{ - // TODO - return false; -} - -// nsIClassInfo - -NS_IMETHODIMP -RustURL::GetInterfaces(uint32_t *count, nsIID ***array) -{ - *count = 0; - *array = nullptr; - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetScriptableHelper(nsIXPCScriptable * *_retval) -{ - *_retval = nullptr; - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetContractID(nsACString& aContractID) -{ - aContractID.SetIsVoid(true); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetClassDescription(nsACString& aClassDescription) -{ - aClassDescription.SetIsVoid(true); - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetClassID(nsCID **aClassID) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -RustURL::GetFlags(uint32_t *aFlags) -{ - *aFlags = nsIClassInfo::MAIN_THREAD_ONLY; - return NS_OK; -} - -NS_IMETHODIMP -RustURL::GetClassIDNoAlloc(nsCID *aClassIDNoAlloc) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -/// nsIMutable - -NS_IMETHODIMP -RustURL::GetMutable(bool *aValue) -{ - *aValue = mMutable; - return NS_OK; -} - -NS_IMETHODIMP -RustURL::SetMutable(bool aValue) -{ - if (mMutable || !aValue) { - return NS_ERROR_FAILURE; - } - mMutable = aValue; - return NS_OK; -} - -// nsISensitiveInfoHiddenURI - -NS_IMETHODIMP -RustURL::GetSensitiveInfoHiddenSpec(nsACString & _retval) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -// nsISizeOf - -size_t -RustURL::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const -{ - return mURL.get() ? sizeof_rusturl() : 0; -} - -size_t -RustURL::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const -{ - return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); -} - -} // namespace net -} // namespace mozilla -
deleted file mode 100644 --- a/netwerk/base/RustURL.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* 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/. */ - -#ifndef RustURL_h__ -#define RustURL_h__ - -#include "nsISerializable.h" -#include "nsIFileURL.h" -#include "nsIStandardURL.h" -#include "nsIClassInfo.h" -#include "nsISizeOf.h" -#include "nsIIPCSerializableURI.h" -#include "nsISensitiveInfoHiddenURI.h" - -#include "rust-url-capi/src/rust-url-capi.h" -#include "mozilla/UniquePtr.h" - -namespace mozilla { -namespace net { - -class RustURL final - : public nsIFileURL - , public nsIStandardURL - , public nsISerializable - , public nsIClassInfo - , public nsISizeOf - , public nsIIPCSerializableURI - , public nsISensitiveInfoHiddenURI -{ - NS_DECL_ISUPPORTS - NS_DECL_NSIURI - NS_DECL_NSIURL - NS_DECL_NSIFILEURL - NS_DECL_NSISTANDARDURL - NS_DECL_NSISERIALIZABLE - NS_DECL_NSICLASSINFO - NS_DECL_NSIMUTABLE - NS_DECL_NSIIPCSERIALIZABLEURI - NS_DECL_NSISENSITIVEINFOHIDDENURI - - RustURL(); - // nsISizeOf - virtual size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override; - virtual size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override; -private: - virtual ~RustURL(); - - struct FreeRustURL { void operator()(rusturl* aPtr) { rusturl_free(aPtr); } }; - mutable mozilla::UniquePtr<rusturl, FreeRustURL> mURL; - - bool mMutable; -}; - -} // namespace net -} // namespace mozilla - -#endif // RustURL_h__
--- a/netwerk/base/moz.build +++ b/netwerk/base/moz.build @@ -252,20 +252,16 @@ UNIFIED_SOURCES += [ 'SimpleChannel.cpp', 'SimpleChannelParent.cpp', 'TCPFastOpenLayer.cpp', 'ThrottleQueue.cpp', 'Tickler.cpp', 'TLSServerSocket.cpp', ] -if CONFIG['MOZ_RUST_URLPARSE']: - EXPORTS.mozilla.net += [ 'RustURL.h' ] - UNIFIED_SOURCES += [ 'RustURL.cpp' ] - if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows': SOURCES += [ 'nsURLHelperWin.cpp', 'ShutdownLayer.cpp', ] elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': SOURCES += [ 'nsURLHelperOSX.cpp',
--- a/netwerk/base/nsStandardURL.cpp +++ b/netwerk/base/nsStandardURL.cpp @@ -22,121 +22,30 @@ #include "nsNetCID.h" #include "mozilla/MemoryReporting.h" #include "mozilla/ipc/URIUtils.h" #include <algorithm> #include "mozilla/SyncRunnable.h" #include "nsContentUtils.h" #include "prprf.h" #include "nsReadableUtils.h" +#include "rust-url-capi/src/rust-url-capi.h" // // setenv MOZ_LOG nsStandardURL:5 // static LazyLogModule gStandardURLLog("nsStandardURL"); // The Chromium code defines its own LOG macro which we don't want #undef LOG #define LOG(args) MOZ_LOG(gStandardURLLog, LogLevel::Debug, args) #undef LOG_ENABLED #define LOG_ENABLED() MOZ_LOG_TEST(gStandardURLLog, LogLevel::Debug) -#ifdef MOZ_RUST_URLPARSE - -#include "RustURL.h" - -// Modified on the main thread, read on both main thread and worker threads. -Atomic<bool> nsStandardURL::gRustEnabled(false); - -// Fall back to CPP-parsed URLs if the Rust one doesn't match. -#define MOZ_RUST_URLPARSE_FALLBACK - -#ifdef MOZ_RUST_URLPARSE_FALLBACK -#define MOZ_RUST_URLPARSE_FALLBACK_MACRO(expr) expr -#else -#define MOZ_RUST_URLPARSE_FALLBACK_MACRO(expr) -#endif - -#define CALL_RUST_SETTER(func, ...) \ -do { \ - if (!mRustURL) break; \ - mRustURL->func(__VA_ARGS__); \ - nsAutoCString rustSpec; \ - mRustURL->GetSpec(rustSpec); \ - if (mSpec != rustSpec) { \ - LOG(("Spec diff detected after setter (%s): rust: %s standard-url: %s\n", \ - #func, rustSpec.get(), mSpec.get())); \ - } \ -} while (0) - -#define CALL_RUST_GETTER_STR(result, func, ...) \ -do { \ - if (!mRustURL) break; \ - nsAutoCString backup(result); \ - mRustURL->func(__VA_ARGS__); \ - if (backup != result) { \ - LOG(("Diff detected calling getter (%s): rust: %s standard-url: %s\n", \ - #func, result.BeginReading() , backup.BeginReading())); \ - MOZ_RUST_URLPARSE_FALLBACK_MACRO(result = backup); \ - } \ -} while (0) - -#define CALL_RUST_GETTER_INT(result, func, ...) \ -do { \ - if (!mRustURL) break; \ - int32_t backup = *result; \ - mRustURL->func(__VA_ARGS__); \ - if (backup != *result) { \ - LOG(("Diff detected calling getter (%s): rust: %d standard-url: %d\n", \ - #func, *result , backup)); \ - MOZ_RUST_URLPARSE_FALLBACK_MACRO(*result = backup); \ - } \ -} while (0) - -#define COPY_RUST_MEMBER \ -do { \ - if (!gRustEnabled) break; \ - RefPtr<RustURL> url = new RustURL(); \ - nsAutoCString spec; \ - GetSpec(spec); \ - url->SetSpec(spec); \ - mRustURL = url; \ -} while (0) - -#define CALL_RUST_SYNC \ -do { \ - if (!mRustURL) break; \ - mRustURL->SetSpec(mSpec); \ -} while (0) - -#define CALL_SET_MUTABLE \ -do { \ - if (!mRustURL) break; \ - mRustURL->SetMutable(value); \ -} while (0) - -#define CALL_RUST_INIT \ -do { \ - if (!mRustURL) break; \ - mRustURL->Init(urlType, defaultPort, spec, charset, baseURI); \ -} while (0) - -#else - -#define CALL_RUST_SETTER(func, ...) -#define CALL_RUST_GETTER_STR(expected, func, ...) -#define CALL_RUST_GETTER_INT(expected, func, ...) -#define CALL_RUST_INIT -#define CALL_RUST_SYNC -#define CALL_SET_MUTABLE -#define COPY_RUST_MEMBER - -#endif // MOZ_RUST_URLPARSE - using namespace mozilla::ipc; namespace mozilla { namespace net { static NS_DEFINE_CID(kThisImplCID, NS_THIS_STANDARDURL_IMPL_CID); static NS_DEFINE_CID(kStandardURLCID, NS_STANDARDURL_CID); @@ -180,18 +89,16 @@ constexpr ASCIIMaskArray sInvalidHostCha return NS_ERROR_ABORT; \ } \ PR_END_MACRO //---------------------------------------------------------------------------- // nsStandardURL::nsPrefObserver //---------------------------------------------------------------------------- -#define NS_NET_PREF_ENABLE_RUST "network.standard-url.enable-rust" - NS_IMPL_ISUPPORTS(nsStandardURL::nsPrefObserver, nsIObserver) NS_IMETHODIMP nsStandardURL:: nsPrefObserver::Observe(nsISupports *subject, const char *topic, const char16_t *data) { MOZ_ASSERT(NS_IsMainThread()); @@ -317,21 +224,16 @@ nsStandardURL::nsStandardURL(bool aSuppo #ifdef DEBUG_DUMP_URLS_AT_SHUTDOWN if (NS_IsMainThread()) { if (aTrackURL) { gAllURLs.insertBack(this); } } #endif -#ifdef MOZ_RUST_URLPARSE - if (gRustEnabled) { - mRustURL = new RustURL(); - } -#endif } nsStandardURL::~nsStandardURL() { LOG(("Destroying nsStandardURL @%p\n", this)); } #ifdef DEBUG_DUMP_URLS_AT_SHUTDOWN @@ -369,19 +271,16 @@ nsStandardURL::InitGlobalObjects() } MOZ_ASSERT(NS_IsMainThread()); gInitialized = true; nsCOMPtr<nsIPrefBranch> prefBranch( do_GetService(NS_PREFSERVICE_CONTRACTID) ); if (prefBranch) { nsCOMPtr<nsIObserver> obs( new nsPrefObserver() ); -#ifdef MOZ_RUST_URLPARSE - prefBranch->AddObserver(NS_NET_PREF_ENABLE_RUST, obs.get(), false); -#endif PrefsChanged(prefBranch, nullptr); } Preferences::AddBoolVarCache(&gPunycodeHost, "network.standard-url.punycode-host", true); nsCOMPtr<nsIIDNService> serv(do_GetService(NS_IDNSERVICE_CONTRACTID)); if (serv) { NS_ADDREF(gIDN = serv.get()); MOZ_ASSERT(gIDN); @@ -1278,26 +1177,16 @@ nsStandardURL::PrefsChanged(nsIPrefBranc { MOZ_ASSERT(NS_IsMainThread()); LOG(("nsStandardURL::PrefsChanged [pref=%s]\n", pref)); #define PREF_CHANGED(p) ((pref == nullptr) || !strcmp(pref, p)) #define GOT_PREF(p, b) (NS_SUCCEEDED(prefs->GetBoolPref(p, &b))) -#ifdef MOZ_RUST_URLPARSE - bool val; - if (PREF_CHANGED(NS_NET_PREF_ENABLE_RUST)) { - if (GOT_PREF(NS_NET_PREF_ENABLE_RUST, val)) { - gRustEnabled = val; - } - LOG(("Rust parser %s\n", gRustEnabled ? "enabled" : "disabled")); - } -#endif // MOZ_RUST_URLPARSE - #undef PREF_CHANGED #undef GOT_PREF } #define SHIFT_FROM(name, what) \ void \ nsStandardURL::name(int32_t diff) \ { \ @@ -1366,32 +1255,30 @@ nsStandardURL::GetSpec(nsACString &resul MOZ_ASSERT(mSpec.Length() <= (uint32_t) net_GetURLMaxLength(), "The spec should never be this long, we missed a check."); nsresult rv = NS_OK; if (gPunycodeHost) { result = mSpec; } else { // XXX: This code path may be slow rv = GetDisplaySpec(result); } - CALL_RUST_GETTER_STR(result, GetSpec, result); return rv; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetSensitiveInfoHiddenSpec(nsACString &result) { nsresult rv = GetSpec(result); if (NS_FAILED(rv)) { return rv; } if (mPassword.mLen >= 0) { result.ReplaceLiteral(mPassword.mPos, mPassword.mLen, "****"); } - CALL_RUST_GETTER_STR(result, GetSensitiveInfoHiddenSpec, result); return NS_OK; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetSpecIgnoringRef(nsACString &result) { // URI without ref is 0 to one char before ref @@ -1403,17 +1290,16 @@ nsStandardURL::GetSpecIgnoringRef(nsACSt result = Segment(noRef); CheckIfHostIsAscii(); MOZ_ASSERT(mCheckedIfHostA); if (!gPunycodeHost && !mDisplayHost.IsEmpty()) { result.Replace(mHost.mPos, mHost.mLen, mDisplayHost); } - CALL_RUST_GETTER_STR(result, GetSpecIgnoringRef, result); return NS_OK; } nsresult nsStandardURL::CheckIfHostIsAscii() { nsresult rv; if (mCheckedIfHostA) { @@ -1499,17 +1385,16 @@ NS_IMETHODIMP nsStandardURL::GetPrePath(nsACString &result) { result = Prepath(); CheckIfHostIsAscii(); MOZ_ASSERT(mCheckedIfHostA); if (!gPunycodeHost && !mDisplayHost.IsEmpty()) { result.Replace(mHost.mPos, mHost.mLen, mDisplayHost); } - CALL_RUST_GETTER_STR(result, GetPrePath, result); return NS_OK; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetDisplayPrePath(nsACString &result) { result = Prepath(); @@ -1521,106 +1406,97 @@ nsStandardURL::GetDisplayPrePath(nsACStr return NS_OK; } // result is strictly US-ASCII NS_IMETHODIMP nsStandardURL::GetScheme(nsACString &result) { result = Scheme(); - CALL_RUST_GETTER_STR(result, GetScheme, result); return NS_OK; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetUserPass(nsACString &result) { result = Userpass(); - CALL_RUST_GETTER_STR(result, GetUserPass, result); return NS_OK; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetUsername(nsACString &result) { result = Username(); - CALL_RUST_GETTER_STR(result, GetUsername, result); return NS_OK; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetPassword(nsACString &result) { result = Password(); - CALL_RUST_GETTER_STR(result, GetPassword, result); return NS_OK; } NS_IMETHODIMP nsStandardURL::GetHostPort(nsACString &result) { nsresult rv; if (gPunycodeHost) { rv = GetAsciiHostPort(result); } else { rv = GetDisplayHostPort(result); } - CALL_RUST_GETTER_STR(result, GetHostPort, result); return rv; } NS_IMETHODIMP nsStandardURL::GetHost(nsACString &result) { nsresult rv; if (gPunycodeHost) { rv = GetAsciiHost(result); } else { rv = GetDisplayHost(result); } - CALL_RUST_GETTER_STR(result, GetHost, result); return rv; } NS_IMETHODIMP nsStandardURL::GetPort(int32_t *result) { // should never be more than 16 bit MOZ_ASSERT(mPort <= std::numeric_limits<uint16_t>::max()); *result = mPort; - CALL_RUST_GETTER_INT(result, GetPort, result); return NS_OK; } // result may contain unescaped UTF-8 characters NS_IMETHODIMP nsStandardURL::GetPathQueryRef(nsACString &result) { result = Path(); - CALL_RUST_GETTER_STR(result, GetPathQueryRef, result); return NS_OK; } // result is ASCII NS_IMETHODIMP nsStandardURL::GetAsciiSpec(nsACString &result) { if (mSpecEncoding == eEncoding_Unknown) { if (IsASCII(mSpec)) mSpecEncoding = eEncoding_ASCII; else mSpecEncoding = eEncoding_UTF8; } if (mSpecEncoding == eEncoding_ASCII) { result = mSpec; - CALL_RUST_GETTER_STR(result, GetAsciiSpec, result); return NS_OK; } // try to guess the capacity required for result... result.SetCapacity(mSpec.Length() + std::min<uint32_t>(32, mSpec.Length()/10)); result = Substring(mSpec, 0, mScheme.mLen + 3); @@ -1631,35 +1507,32 @@ nsStandardURL::GetAsciiSpec(nsACString & // get the hostport nsAutoCString hostport; MOZ_ALWAYS_SUCCEEDS(GetAsciiHostPort(hostport)); result += hostport; // This is left infallible as this entire function is expected to be // infallible. NS_EscapeURL(Path(), esc_OnlyNonASCII | esc_AlwaysCopy, result); - CALL_RUST_GETTER_STR(result, GetAsciiSpec, result); return NS_OK; } // result is ASCII NS_IMETHODIMP nsStandardURL::GetAsciiHostPort(nsACString &result) { result = Hostport(); - CALL_RUST_GETTER_STR(result, GetAsciiHostPort, result); return NS_OK; } // result is ASCII NS_IMETHODIMP nsStandardURL::GetAsciiHost(nsACString &result) { result = Host(); - CALL_RUST_GETTER_STR(result, GetAsciiHost, result); return NS_OK; } static bool IsSpecialProtocol(const nsACString &input) { nsACString::const_iterator start, end; input.BeginReading(start); @@ -1767,17 +1640,16 @@ nsStandardURL::SetSpecWithEncoding(const LOG((" filepath = (%u,%d)\n", mFilepath.mPos, mFilepath.mLen)); LOG((" directory = (%u,%d)\n", mDirectory.mPos, mDirectory.mLen)); LOG((" basename = (%u,%d)\n", mBasename.mPos, mBasename.mLen)); LOG((" extension = (%u,%d)\n", mExtension.mPos, mExtension.mLen)); LOG((" query = (%u,%d)\n", mQuery.mPos, mQuery.mLen)); LOG((" ref = (%u,%d)\n", mRef.mPos, mRef.mLen)); } - CALL_RUST_SETTER(SetSpec, input); return rv; } NS_IMETHODIMP nsStandardURL::SetScheme(const nsACString &input) { ENSURE_MUTABLE(); @@ -1812,17 +1684,16 @@ nsStandardURL::SetScheme(const nsACStrin ShiftFromAuthority(shift); } // ensure new scheme is lowercase // // XXX the string code unfortunately doesn't provide a ToLowerCase // that operates on a substring. net_ToLowerCase((char *) mSpec.get(), mScheme.mLen); - CALL_RUST_SETTER(SetScheme, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::SetUserPass(const nsACString &input) { ENSURE_MUTABLE(); @@ -1855,17 +1726,16 @@ nsStandardURL::SetUserPass(const nsACStr mUsername.mLen++; mSpec.Cut(mUsername.mPos, mUsername.mLen); mAuthority.mLen -= mUsername.mLen; ShiftFromHost(-mUsername.mLen); mUsername.mLen = -1; mPassword.mLen = -1; } - CALL_RUST_SETTER(SetUserPass, input); return NS_OK; } NS_ASSERTION(mHost.mLen >= 0, "uninitialized"); nsresult rv; uint32_t usernamePos, passwordPos; int32_t usernameLen, passwordLen; @@ -1924,17 +1794,16 @@ nsStandardURL::SetUserPass(const nsACStr } // update positions and lengths mUsername.mLen = usernameLen; mPassword.mLen = passwordLen; if (passwordLen > 0) { mPassword.mPos = mUsername.mPos + mUsername.mLen + 1; } - CALL_RUST_SETTER(SetUserPass, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::SetUsername(const nsACString &input) { ENSURE_MUTABLE(); @@ -1975,17 +1844,16 @@ nsStandardURL::SetUsername(const nsACStr shift = ReplaceSegment(mUsername.mPos, mUsername.mLen, escUsername); if (shift) { mUsername.mLen = escUsername.Length(); mAuthority.mLen += shift; ShiftFromPassword(shift); } - CALL_RUST_SETTER(SetUsername, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::SetPassword(const nsACString &input) { ENSURE_MUTABLE(); @@ -2013,17 +1881,16 @@ nsStandardURL::SetPassword(const nsACStr if (password.IsEmpty()) { if (mPassword.mLen >= 0) { // cut(":password") mSpec.Cut(mPassword.mPos - 1, mPassword.mLen + 1); ShiftFromHost(-(mPassword.mLen + 1)); mAuthority.mLen -= (mPassword.mLen + 1); mPassword.mLen = -1; } - CALL_RUST_SETTER(SetPassword, input); return NS_OK; } // escape password if necessary nsAutoCString buf; nsSegmentEncoder encoder; const nsACString &escPassword = encoder.EncodeSegment(password, esc_Password, buf); @@ -2038,17 +1905,16 @@ nsStandardURL::SetPassword(const nsACStr else shift = ReplaceSegment(mPassword.mPos, mPassword.mLen, escPassword); if (shift) { mPassword.mLen = escPassword.Length(); mAuthority.mLen += shift; ShiftFromHost(shift); } - CALL_RUST_SETTER(SetPassword, input); return NS_OK; } void nsStandardURL::FindHostLimit(nsACString::const_iterator& aStart, nsACString::const_iterator& aEnd) { for (int32_t i = 0; gHostLimitDigits[i]; ++i) { @@ -2122,30 +1988,28 @@ nsStandardURL::SetHostPort(const nsACStr // Failure parsing port number return NS_ERROR_MALFORMED_URI; } } else { // port number is missing return NS_ERROR_MALFORMED_URI; } } - CALL_RUST_SETTER(SetHostPort, aValue); return NS_OK; } // This function is different than SetHostPort in that the port number will be // reset as well if aValue parameter does not contain a port port number. NS_IMETHODIMP nsStandardURL::SetHostAndPort(const nsACString &aValue) { // Reset the port and than call SetHostPort. SetHostPort does not reset // the port number. nsresult rv = SetPort(-1); NS_ENSURE_SUCCESS(rv, rv); - CALL_RUST_SETTER(SetHostAndPort, aValue); return SetHostPort(aValue); } NS_IMETHODIMP nsStandardURL::SetHost(const nsACString &input) { ENSURE_MUTABLE(); @@ -2245,17 +2109,16 @@ nsStandardURL::SetHost(const nsACString if (shift) { mHost.mLen = len; mAuthority.mLen += shift; ShiftFromPath(shift); } // Now canonicalize the host to lowercase net_ToLowerCase(mSpec.BeginWriting() + mHost.mPos, mHost.mLen); - CALL_RUST_SETTER(SetHost, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::SetPort(int32_t port) { ENSURE_MUTABLE(); @@ -2277,17 +2140,16 @@ nsStandardURL::SetPort(int32_t port) InvalidateCache(); if (port == mDefaultPort) { port = -1; } ReplacePortInSpec(port); mPort = port; - CALL_RUST_SETTER(SetPort, port); return NS_OK; } /** * Replaces the existing port in mSpec with aNewPort. * * The caller is responsible for: * - Calling InvalidateCache (since our mSpec is changing). @@ -2356,17 +2218,16 @@ nsStandardURL::SetPathQueryRef(const nsA mDirectory.mLen = 1; mFilepath.mLen = 1; // these are no longer defined mBasename.mLen = -1; mExtension.mLen = -1; mQuery.mLen = -1; mRef.mLen = -1; } - CALL_RUST_SETTER(SetPathQueryRef, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::Equals(nsIURI *unknownOther, bool *result) { return EqualsInternal(unknownOther, eHonorRef, result); } @@ -2540,17 +2401,16 @@ nsresult nsStandardURL::CopyMembers(nsSt mExtension = source->mExtension; mQuery = source->mQuery; mRef = source->mRef; mURLType = source->mURLType; mParser = source->mParser; mMutable = true; mSupportsFileURL = source->mSupportsFileURL; - COPY_RUST_MEMBER; if (copyCached) { mFile = source->mFile; mCheckedIfHostA = source->mCheckedIfHostA; mDisplayHost = source->mDisplayHost; mSpecEncoding = source->mSpecEncoding; } else { InvalidateCache(true); } @@ -3080,17 +2940,16 @@ nsStandardURL::SetQueryWithEncoding(cons if (mQuery.mLen >= 0) { // remove query and leading '?' mSpec.Cut(mQuery.mPos - 1, mQuery.mLen + 1); ShiftFromRef(-(mQuery.mLen + 1)); mPath.mLen -= (mQuery.mLen + 1); mQuery.mPos = 0; mQuery.mLen = -1; } - CALL_RUST_SETTER(SetQuery, input); return NS_OK; } int32_t queryLen = flat.Length(); if (query[0] == '?') { query++; queryLen--; } @@ -3121,17 +2980,16 @@ nsStandardURL::SetQueryWithEncoding(cons int32_t shift = ReplaceSegment(mQuery.mPos, mQuery.mLen, query, queryLen); if (shift) { mQuery.mLen = queryLen; mPath.mLen += shift; ShiftFromRef(shift); } - CALL_RUST_SETTER(SetQuery, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::SetRef(const nsACString &input) { ENSURE_MUTABLE(); @@ -3153,17 +3011,16 @@ nsStandardURL::SetRef(const nsACString & // remove existing ref if (mRef.mLen >= 0) { // remove ref and leading '#' mSpec.Cut(mRef.mPos - 1, mRef.mLen + 1); mPath.mLen -= (mRef.mLen + 1); mRef.mPos = 0; mRef.mLen = -1; } - CALL_RUST_SETTER(SetRef, input); return NS_OK; } int32_t refLen = flat.Length(); if (ref[0] == '#') { ref++; refLen--; } @@ -3186,17 +3043,16 @@ nsStandardURL::SetRef(const nsACString & if (encoded) { ref = buf.get(); refLen = buf.Length(); } int32_t shift = ReplaceSegment(mRef.mPos, mRef.mLen, ref, refLen); mPath.mLen += shift; mRef.mLen = refLen; - CALL_RUST_SETTER(SetRef, input); return NS_OK; } NS_IMETHODIMP nsStandardURL::SetDirectory(const nsACString &input) { NS_NOTYETIMPLEMENTED(""); return NS_ERROR_NOT_IMPLEMENTED; @@ -3467,18 +3323,16 @@ nsStandardURL::Init(uint32_t urlType, if (IsUTFEncoding(encoding)) { encoding = nullptr; } if (baseURI && net_IsAbsoluteURL(spec)) { baseURI = nullptr; } - CALL_RUST_INIT; - if (!baseURI) return SetSpecWithEncoding(spec, encoding); nsAutoCString buf; nsresult rv = baseURI->Resolve(spec, buf); if (NS_FAILED(rv)) return rv; return SetSpecWithEncoding(buf, encoding); @@ -3516,17 +3370,16 @@ nsStandardURL::GetMutable(bool *value) } NS_IMETHODIMP nsStandardURL::SetMutable(bool value) { NS_ENSURE_ARG(mMutable || !value); mMutable = value; - CALL_SET_MUTABLE; return NS_OK; } //---------------------------------------------------------------------------- // nsStandardURL::nsISerializable //---------------------------------------------------------------------------- NS_IMETHODIMP @@ -3628,17 +3481,16 @@ nsStandardURL::Read(nsIObjectInputStream // query and ref already. Bump the mFilePath and // directory/basename/extension components to include this. mFilepath.Merge(mSpec, ';', old_param); mDirectory.Merge(mSpec, ';', old_param); mBasename.Merge(mSpec, ';', old_param); mExtension.Merge(mSpec, ';', old_param); } - CALL_RUST_SYNC; return NS_OK; } NS_IMETHODIMP nsStandardURL::Write(nsIObjectOutputStream *stream) { MOZ_ASSERT(mSpec.Length() <= (uint32_t) net_GetURLMaxLength(), "The spec should never be this long, we missed a check."); @@ -3807,18 +3659,16 @@ nsStandardURL::Deserialize(const URIPara mDirectory = FromIPCSegment(params.directory()); mBasename = FromIPCSegment(params.baseName()); mExtension = FromIPCSegment(params.extension()); mQuery = FromIPCSegment(params.query()); mRef = FromIPCSegment(params.ref()); mMutable = params.isMutable(); mSupportsFileURL = params.supportsFileURL(); - CALL_RUST_SYNC; - // mSpecEncoding and mDisplayHost are just caches that can be recovered as needed. return true; } //---------------------------------------------------------------------------- // nsStandardURL::nsIClassInfo //---------------------------------------------------------------------------- @@ -3893,14 +3743,14 @@ nsStandardURL::SizeOfExcludingThis(Mallo size_t nsStandardURL::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const { return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); } } // namespace net } // namespace mozilla -// For unit tests. Including nsStandardURL.h seems to cause problems via RustURL.h +// For unit tests. Including nsStandardURL.h seems to cause problems nsresult Test_NormalizeIPv4(const nsACString& host, nsCString& result) { return nsStandardURL::NormalizeIPv4(host, result); }
--- a/netwerk/base/nsStandardURL.h +++ b/netwerk/base/nsStandardURL.h @@ -16,17 +16,16 @@ #include "nsURLHelper.h" #include "nsIClassInfo.h" #include "nsISizeOf.h" #include "mozilla/Attributes.h" #include "mozilla/LinkedList.h" #include "mozilla/MemoryReporting.h" #include "nsIIPCSerializableURI.h" #include "nsISensitiveInfoHiddenURI.h" -#include "RustURL.h" #ifdef NS_BUILD_REFCNT_LOGGING #define DEBUG_DUMP_URLS_AT_SHUTDOWN #endif class nsIBinaryInputStream; class nsIBinaryOutputStream; class nsIIDNService; @@ -306,21 +305,16 @@ private: static const char gHostLimitDigits[]; static bool gInitialized; static bool gPunycodeHost; public: #ifdef DEBUG_DUMP_URLS_AT_SHUTDOWN void PrintSpec() const { printf(" %s\n", mSpec.get()); } #endif - -#ifdef MOZ_RUST_URLPARSE - static Atomic<bool> gRustEnabled; - RefPtr<RustURL> mRustURL; -#endif }; #define NS_THIS_STANDARDURL_IMPL_CID \ { /* b8e3e97b-1ccd-4b45-af5a-79596770f5d7 */ \ 0xb8e3e97b, \ 0x1ccd, \ 0x4b45, \ {0xaf, 0x5a, 0x79, 0x59, 0x67, 0x70, 0xf5, 0xd7} \
--- a/netwerk/build/nsNetCID.h +++ b/netwerk/build/nsNetCID.h @@ -108,28 +108,16 @@ #define NS_STANDARDURL_CID \ { /* de9472d0-8034-11d3-9399-00104ba0fd40 */ \ 0xde9472d0, \ 0x8034, \ 0x11d3, \ {0x93, 0x99, 0x00, 0x10, 0x4b, 0xa0, 0xfd, 0x40} \ } -// compoenent implementing nsIStandardURL, nsIURI, nsIURL -// future replacement for nsStandardURL -#define NS_RUSTURL_CONTRACTID \ - "@mozilla.org/network/rust-url;1" -#define NS_RUSTURL_CID \ -{ /* fd2d9f76-b34a-459e-b80e-447b03a1283a */ \ - 0xfd2d9f76, \ - 0xb34a, \ - 0x459e, \ - {0xb8, 0x0e, 0x44, 0x7b, 0x03, 0xa1, 0x28, 0x3a} \ -} - // service implementing nsIURLParser that assumes the URL will NOT contain an // authority section. #define NS_NOAUTHURLPARSER_CONTRACTID \ "@mozilla.org/network/url-parser;1?auth=no" #define NS_NOAUTHURLPARSER_CID \ { /* 78804a84-8173-42b6-bb94-789f0816a810 */ \ 0x78804a84, \ 0x8173, \
--- a/netwerk/build/nsNetModule.cpp +++ b/netwerk/build/nsNetModule.cpp @@ -367,22 +367,16 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsAuthURL NS_GENERIC_FACTORY_CONSTRUCTOR(nsStdURLParser) #include "nsStandardURL.h" typedef mozilla::net::nsStandardURL nsStandardURL; NS_GENERIC_FACTORY_CONSTRUCTOR(nsStandardURL) typedef mozilla::net::nsSimpleURI nsSimpleURI; NS_GENERIC_FACTORY_CONSTRUCTOR(nsSimpleURI) -#ifdef MOZ_RUST_URLPARSE -#include "mozilla/net/RustURL.h" -typedef mozilla::net::RustURL RustURL; -NS_GENERIC_FACTORY_CONSTRUCTOR(RustURL) -#endif // MOZ_RUST_URLPARSE - typedef mozilla::net::nsSimpleNestedURI nsSimpleNestedURI; NS_GENERIC_FACTORY_CONSTRUCTOR(nsSimpleNestedURI) /////////////////////////////////////////////////////////////////////////////// #include "nsIDNService.h" NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsIDNService, Init) @@ -720,19 +714,16 @@ NS_DEFINE_NAMED_CID(NS_LOCALFILEOUTPUTST NS_DEFINE_NAMED_CID(NS_ATOMICLOCALFILEOUTPUTSTREAM_CID); NS_DEFINE_NAMED_CID(NS_SAFELOCALFILEOUTPUTSTREAM_CID); NS_DEFINE_NAMED_CID(NS_LOCALFILESTREAM_CID); NS_DEFINE_NAMED_CID(NS_INCREMENTALDOWNLOAD_CID); NS_DEFINE_NAMED_CID(NS_STDURLPARSER_CID); NS_DEFINE_NAMED_CID(NS_NOAUTHURLPARSER_CID); NS_DEFINE_NAMED_CID(NS_AUTHURLPARSER_CID); NS_DEFINE_NAMED_CID(NS_STANDARDURL_CID); -#ifdef MOZ_RUST_URLPARSE -NS_DEFINE_NAMED_CID(NS_RUSTURL_CID); -#endif NS_DEFINE_NAMED_CID(NS_ARRAYBUFFERINPUTSTREAM_CID); NS_DEFINE_NAMED_CID(NS_BUFFEREDINPUTSTREAM_CID); NS_DEFINE_NAMED_CID(NS_BUFFEREDOUTPUTSTREAM_CID); NS_DEFINE_NAMED_CID(NS_MIMEINPUTSTREAM_CID); NS_DEFINE_NAMED_CID(NS_PROTOCOLPROXYSERVICE_CID); NS_DEFINE_NAMED_CID(NS_STREAMCONVERTERSERVICE_CID); #if defined(XP_WIN) NS_DEFINE_NAMED_CID(NS_NAMEDPIPESERVICE_CID); @@ -846,19 +837,16 @@ static const mozilla::Module::CIDEntry k { &kNS_ATOMICLOCALFILEOUTPUTSTREAM_CID, false, nullptr, nsAtomicFileOutputStreamConstructor }, { &kNS_SAFELOCALFILEOUTPUTSTREAM_CID, false, nullptr, nsSafeFileOutputStreamConstructor }, { &kNS_LOCALFILESTREAM_CID, false, nullptr, nsFileStreamConstructor }, { &kNS_INCREMENTALDOWNLOAD_CID, false, nullptr, net_NewIncrementalDownload }, { &kNS_STDURLPARSER_CID, false, nullptr, nsStdURLParserConstructor }, { &kNS_NOAUTHURLPARSER_CID, false, nullptr, nsNoAuthURLParserConstructor }, { &kNS_AUTHURLPARSER_CID, false, nullptr, nsAuthURLParserConstructor }, { &kNS_STANDARDURL_CID, false, nullptr, nsStandardURLConstructor }, -#ifdef MOZ_RUST_URLPARSE - { &kNS_RUSTURL_CID, false, nullptr, RustURLConstructor }, -#endif { &kNS_ARRAYBUFFERINPUTSTREAM_CID, false, nullptr, ArrayBufferInputStreamConstructor }, { &kNS_BUFFEREDINPUTSTREAM_CID, false, nullptr, nsBufferedInputStream::Create }, { &kNS_BUFFEREDOUTPUTSTREAM_CID, false, nullptr, nsBufferedOutputStream::Create }, { &kNS_MIMEINPUTSTREAM_CID, false, nullptr, nsMIMEInputStreamConstructor }, { &kNS_PROTOCOLPROXYSERVICE_CID, true, nullptr, nsProtocolProxyServiceConstructor }, { &kNS_STREAMCONVERTERSERVICE_CID, false, nullptr, CreateNewStreamConvServiceFactory }, #if defined (XP_WIN) { &kNS_NAMEDPIPESERVICE_CID, false, NULL, mozilla::net::NamedPipeServiceConstructor }, @@ -974,19 +962,16 @@ static const mozilla::Module::ContractID { NS_ATOMICLOCALFILEOUTPUTSTREAM_CONTRACTID, &kNS_ATOMICLOCALFILEOUTPUTSTREAM_CID }, { NS_SAFELOCALFILEOUTPUTSTREAM_CONTRACTID, &kNS_SAFELOCALFILEOUTPUTSTREAM_CID }, { NS_LOCALFILESTREAM_CONTRACTID, &kNS_LOCALFILESTREAM_CID }, { NS_INCREMENTALDOWNLOAD_CONTRACTID, &kNS_INCREMENTALDOWNLOAD_CID }, { NS_STDURLPARSER_CONTRACTID, &kNS_STDURLPARSER_CID }, { NS_NOAUTHURLPARSER_CONTRACTID, &kNS_NOAUTHURLPARSER_CID }, { NS_AUTHURLPARSER_CONTRACTID, &kNS_AUTHURLPARSER_CID }, { NS_STANDARDURL_CONTRACTID, &kNS_STANDARDURL_CID }, -#ifdef MOZ_RUST_URLPARSE - { NS_RUSTURL_CONTRACTID, &kNS_RUSTURL_CID }, -#endif { NS_ARRAYBUFFERINPUTSTREAM_CONTRACTID, &kNS_ARRAYBUFFERINPUTSTREAM_CID }, { NS_BUFFEREDINPUTSTREAM_CONTRACTID, &kNS_BUFFEREDINPUTSTREAM_CID }, { NS_BUFFEREDOUTPUTSTREAM_CONTRACTID, &kNS_BUFFEREDOUTPUTSTREAM_CID }, { NS_MIMEINPUTSTREAM_CONTRACTID, &kNS_MIMEINPUTSTREAM_CID }, { NS_PROTOCOLPROXYSERVICE_CONTRACTID, &kNS_PROTOCOLPROXYSERVICE_CID }, { NS_STREAMCONVERTERSERVICE_CONTRACTID, &kNS_STREAMCONVERTERSERVICE_CID }, #if defined(XP_WIN) { NS_NAMEDPIPESERVICE_CONTRACTID, &kNS_NAMEDPIPESERVICE_CID },
deleted file mode 100644 --- a/netwerk/test/unit/test_rusturl.js +++ /dev/null @@ -1,475 +0,0 @@ -const nsIStandardURL = Components.interfaces.nsIStandardURL; - -let rustIsMissing = false; -let RustURL; -try { - RustURL = Components.Constructor("@mozilla.org/network/rust-url;1", - "nsIStandardURL", - "init"); -} catch (e) { - rustIsMissing = true; -} - -function symmetricEquality(expect, a, b) -{ - /* Use if/else instead of |do_check_eq(expect, a.spec == b.spec)| so - that we get the specs output on the console if the check fails. - */ - if (expect) { - /* Check all the sub-pieces too, since that can help with - debugging cases when equals() returns something unexpected */ - /* We don't check port in the loop, because it can be defaulted in - some cases. */ - ["spec", "prePath", "scheme", "userPass", "username", "password", - "hostPort", "host", "pathQueryRef", "filePath", "param", "query", - "ref", - // TODO: implement these - //"directory", "fileName", "fileBaseName", "fileExtension" - ] - .map(function(prop) { - dump("Testing '"+ prop + "'\n"); - do_check_eq(a[prop], b[prop]); - }); - } else { - do_check_neq(a.spec, b.spec); - } - do_check_eq(expect, a.equals(b)); - do_check_eq(expect, b.equals(a)); -} - -function stringToURL(str) { - return (new RustURL(nsIStandardURL.URLTYPE_AUTHORITY, 80, - str, "UTF-8", null)) - .QueryInterface(Components.interfaces.nsIURL); -} - -function pairToURLs(pair) { - do_check_eq(pair.length, 2); - return pair.map(stringToURL); -} - -add_test({ skip_if: () => rustIsMissing }, function test_setEmptyPath() -{ - var pairs = - [ - ["http://example.com", "http://example.com/tests/dom/tests"], - ["http://example.com:80", "http://example.com/tests/dom/tests"], - ["http://example.com:80/", "http://example.com/tests/dom/test"], - ["http://example.com/", "http://example.com/tests/dom/tests"], - ["http://example.com/a", "http://example.com/tests/dom/tests"], - ["http://example.com:80/a", "http://example.com/tests/dom/tests"], - ].map(pairToURLs); - - for (var [provided, target] of pairs) - { - symmetricEquality(false, target, provided); - - dump(provided.scheme); - dump(provided.host); - dump(provided.port); - dump(provided.userPass); - dump(provided.hostPort); - - provided.pathQueryRef = ""; - target.pathQueryRef = ""; - - do_check_eq(provided.spec, target.spec); - symmetricEquality(true, target, provided); - } - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_setQuery() -{ - var pairs = - [ - ["http://example.com", "http://example.com/?foo"], - ["http://example.com/bar", "http://example.com/bar?foo"], - ["http://example.com#bar", "http://example.com/?foo#bar"], - ["http://example.com/#bar", "http://example.com/?foo#bar"], - ["http://example.com/?longerthanfoo#bar", "http://example.com/?foo#bar"], - ["http://example.com/?longerthanfoo", "http://example.com/?foo"], - /* And one that's nonempty but shorter than "foo" */ - ["http://example.com/?f#bar", "http://example.com/?foo#bar"], - ["http://example.com/?f", "http://example.com/?foo"], - ].map(pairToURLs); - - for (var [provided, target] of pairs) { - symmetricEquality(false, provided, target); - - provided.query = "foo"; - - do_check_eq(provided.spec, target.spec); - symmetricEquality(true, provided, target); - } - - [provided, target] = - ["http://example.com/#", "http://example.com/?foo#bar"].map(stringToURL); - symmetricEquality(false, provided, target); - provided.query = "foo"; - symmetricEquality(false, provided, target); - - var newProvided = Components.classes["@mozilla.org/network/io-service;1"] - .getService(Components.interfaces.nsIIOService) - .newURI("#bar", null, provided) - .QueryInterface(Components.interfaces.nsIURL); - - do_check_eq(newProvided.spec, target.spec); - symmetricEquality(true, newProvided, target); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_setRef() -{ - var tests = - [ - ["http://example.com", "", "http://example.com/"], - ["http://example.com:80", "", "http://example.com:80/"], - ["http://example.com:80/", "", "http://example.com:80/"], - ["http://example.com/", "", "http://example.com/"], - ["http://example.com/a", "", "http://example.com/a"], - ["http://example.com:80/a", "", "http://example.com:80/a"], - - ["http://example.com", "x", "http://example.com/#x"], - ["http://example.com:80", "x", "http://example.com:80/#x"], - ["http://example.com:80/", "x", "http://example.com:80/#x"], - ["http://example.com/", "x", "http://example.com/#x"], - ["http://example.com/a", "x", "http://example.com/a#x"], - ["http://example.com:80/a", "x", "http://example.com:80/a#x"], - - ["http://example.com", "xx", "http://example.com/#xx"], - ["http://example.com:80", "xx", "http://example.com:80/#xx"], - ["http://example.com:80/", "xx", "http://example.com:80/#xx"], - ["http://example.com/", "xx", "http://example.com/#xx"], - ["http://example.com/a", "xx", "http://example.com/a#xx"], - ["http://example.com:80/a", "xx", "http://example.com:80/a#xx"], - - ["http://example.com", "xxxxxxxxxxxxxx", "http://example.com/#xxxxxxxxxxxxxx"], - ["http://example.com:80", "xxxxxxxxxxxxxx", "http://example.com:80/#xxxxxxxxxxxxxx"], - ["http://example.com:80/", "xxxxxxxxxxxxxx", "http://example.com:80/#xxxxxxxxxxxxxx"], - ["http://example.com/", "xxxxxxxxxxxxxx", "http://example.com/#xxxxxxxxxxxxxx"], - ["http://example.com/a", "xxxxxxxxxxxxxx", "http://example.com/a#xxxxxxxxxxxxxx"], - ["http://example.com:80/a", "xxxxxxxxxxxxxx", "http://example.com:80/a#xxxxxxxxxxxxxx"], - ]; - - for (var [before, ref, result] of tests) - { - /* Test1: starting with empty ref */ - var a = stringToURL(before); - a.ref = ref; - var b = stringToURL(result); - - do_check_eq(a.spec, b.spec); - do_check_eq(ref, b.ref); - symmetricEquality(true, a, b); - - /* Test2: starting with non-empty */ - a.ref = "yyyy"; - var c = stringToURL(before); - c.ref = "yyyy"; - symmetricEquality(true, a, c); - - /* Test3: reset the ref */ - a.ref = ""; - symmetricEquality(true, a, stringToURL(before)); - - /* Test4: verify again after reset */ - a.ref = ref; - symmetricEquality(true, a, b); - } - run_next_test(); -}); - -// Bug 960014 - Make nsStandardURL::SetHost less magical around IPv6 -add_test({ skip_if: () => rustIsMissing }, function test_ipv6() -{ - var url = stringToURL("http://example.com"); - url.host = "[2001::1]"; - do_check_eq(url.host, "2001::1"); - - url = stringToURL("http://example.com"); - url.hostPort = "[2001::1]:30"; - do_check_eq(url.host, "2001::1"); - do_check_eq(url.port, 30); - do_check_eq(url.hostPort, "[2001::1]:30"); - - url = stringToURL("http://example.com"); - url.hostPort = "2001:1"; - do_check_eq(url.host, "0.0.7.209"); - do_check_eq(url.port, 1); - do_check_eq(url.hostPort, "0.0.7.209:1"); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_ipv6_fail() -{ - var url = stringToURL("http://example.com"); - - // TODO: check that the commented behaviours are correct. - // TODO: add tests checking for the proper result - - // Assert.throws(() => { url.host = "2001::1"; }, "missing brackets"); - // Assert.throws(() => { url.host = "[2001::1]:20"; }, "url.host with port"); - Assert.throws(() => { url.host = "[2001::1"; }, "missing last bracket"); - // Assert.throws(() => { url.host = "2001::1]"; }, "missing first bracket"); - Assert.throws(() => { url.host = "2001[::1]"; }, "bad bracket position"); - Assert.throws(() => { url.host = "[]"; }, "empty IPv6 address"); - Assert.throws(() => { url.host = "[hello]"; }, "bad IPv6 address"); - Assert.throws(() => { url.host = "[192.168.1.1]"; }, "bad IPv6 address"); - // Assert.throws(() => { url.hostPort = "2001::1"; }, "missing brackets"); - Assert.throws(() => { url.hostPort = "[2001::1]30"; }, "missing : after IP"); - Assert.throws(() => { url.hostPort = "[2001:1]"; }, "bad IPv6 address"); - Assert.throws(() => { url.hostPort = "[2001:1]10"; }, "bad IPv6 address"); - Assert.throws(() => { url.hostPort = "[2001:1]10:20"; }, "bad IPv6 address"); - Assert.throws(() => { url.hostPort = "[2001:1]:10:20"; }, "bad IPv6 address"); - Assert.throws(() => { url.hostPort = "[2001:1"; }, "bad IPv6 address"); - Assert.throws(() => { url.hostPort = "2001]:1"; }, "bad IPv6 address"); - // Assert.throws(() => { url.hostPort = "2001:1]"; }, "bad IPv6 address"); - Assert.throws(() => { url.hostPort = ""; }, "Empty hostPort should fail"); - // Assert.throws(() => { url.hostPort = "[2001::1]:"; }, "missing port number"); - // Assert.throws(() => { url.hostPort = "[2001::1]:bad"; }, "bad port number"); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_clearedSpec() -{ - let url = stringToURL("http://example.com:1234"); - url.hostPort = "hostname" - do_check_eq(url.spec, "http://hostname:1234/"); - url.setHostAndPort("other"); - do_check_eq(url.spec, "http://other/"); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_hostPort() -{ - var url = stringToURL("http://example.com/path"); - Assert.throws(() => { url.spec = "http: example"; }, "set bad spec"); - Assert.throws(() => { url.spec = ""; }, "set empty spec"); - do_check_eq(url.spec, "http://example.com/path"); - url.host = "allizom.org"; - - var ref = stringToURL("http://allizom.org/path"); - symmetricEquality(true, url, ref); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_escapeBrackets() -{ - // Query - var url = stringToURL("http://example.com/?a[x]=1"); - do_check_eq(url.spec, "http://example.com/?a[x]=1"); - - url = stringToURL("http://example.com/?a%5Bx%5D=1"); - do_check_eq(url.spec, "http://example.com/?a%5Bx%5D=1"); - - url = stringToURL("http://[2001::1]/?a[x]=1"); - do_check_eq(url.spec, "http://[2001::1]/?a[x]=1"); - - url = stringToURL("http://[2001::1]/?a%5Bx%5D=1"); - do_check_eq(url.spec, "http://[2001::1]/?a%5Bx%5D=1"); - - // Path - url = stringToURL("http://example.com/brackets[x]/test"); - do_check_eq(url.spec, "http://example.com/brackets[x]/test"); - - url = stringToURL("http://example.com/a%5Bx%5D/test"); - do_check_eq(url.spec, "http://example.com/a%5Bx%5D/test"); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_apostropheEncoding() -{ - // For now, single quote is escaped everywhere _except_ the path. - // This policy is controlled by the bitmask in nsEscape.cpp::EscapeChars[] - var url = stringToURL("http://example.com/dir'/file'.ext'"); - do_check_eq(url.spec, "http://example.com/dir'/file'.ext'"); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_accentEncoding() -{ - var url = stringToURL("http://example.com/?hello=`"); - do_check_eq(url.spec, "http://example.com/?hello=`"); - do_check_eq(url.query, "hello=`"); - - url = stringToURL("http://example.com/?hello=%2C"); - do_check_eq(url.spec, "http://example.com/?hello=%2C"); - do_check_eq(url.query, "hello=%2C"); - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_percentDecoding() -{ - var url = stringToURL("http://%70%61%73%74%65%62%69%6E.com"); - do_check_eq(url.spec, "http://pastebin.com/"); - - // We shouldn't unescape characters that are not allowed in the hostname. - - // TODO: rust-url's behaviour is correct here. Check that it throws! - // url = stringToURL("http://example.com%0a%23.google.com/"); - // do_check_eq(url.spec, "http://example.com%0a%23.google.com/"); - run_next_test(); -}); - -// TODO: rust-url does not enforce a maximum length for the URL at the moment -add_test({ skip_if: () => true }, function test_hugeStringThrows() -{ - let prefs = Cc["@mozilla.org/preferences-service;1"] - .getService(Ci.nsIPrefService); - let maxLen = prefs.getIntPref("network.standard-url.max-length"); - let url = stringToURL("http://test:test@example.com"); - - let hugeString = new Array(maxLen + 1).fill("a").join(""); - let properties = ["spec", "scheme", "userPass", "username", - "password", "hostPort", "host", "pathQueryRef", "ref", - "query", "fileName", "filePath", "fileBaseName", "fileExtension"]; - for (let prop of properties) { - Assert.throws(() => url[prop] = hugeString, - /NS_ERROR_MALFORMED_URI/, - `Passing a huge string to "${prop}" should throw`); - } - - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_filterWhitespace() -{ - var url = stringToURL(" \r\n\th\nt\rt\tp://ex\r\n\tample.com/path\r\n\t/\r\n\tto the/fil\r\n\te.e\r\n\txt?que\r\n\try#ha\r\n\tsh \r\n\t "); - do_check_eq(url.spec, "http://example.com/path/to%20the/file.ext?query#hash"); - - // These setters should escape \r\n\t, not filter them. - var url = stringToURL("http://test.com/path?query#hash"); - url.filePath = "pa\r\n\tth"; // TODO: strips from path - // do_check_eq(url.spec, "http://test.com/pa%0D%0A%09th?query#hash"); - url.query = "qu\r\n\tery"; // TODO: strips from query - // do_check_eq(url.spec, "http://test.com/pa%0D%0A%09th?qu%0D%0A%09ery#hash"); - url.ref = "ha\r\n\tsh"; // TODO: strips from hash - // do_check_eq(url.spec, "http://test.com/pa%0D%0A%09th?qu%0D%0A%09ery#ha%0D%0A%09sh"); - // url.fileName = "fi\r\n\tle.name"; // TODO: filename not implemented - // do_check_eq(url.spec, "http://test.com/fi%0D%0A%09le.name?qu%0D%0A%09ery#ha%0D%0A%09sh"); - - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_backslashReplacement() -{ - var url = stringToURL("http:\\\\test.com\\path/to\\file?query\\backslash#hash\\"); - do_check_eq(url.spec, "http://test.com/path/to/file?query\\backslash#hash\\"); - - url = stringToURL("http:\\\\test.com\\example.org/path\\to/file"); - do_check_eq(url.spec, "http://test.com/example.org/path/to/file"); - do_check_eq(url.host, "test.com"); - do_check_eq(url.pathQueryRef, "/example.org/path/to/file"); - - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_trim_C0_and_space() -{ - var url = stringToURL("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f http://example.com/ \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f "); - do_check_eq(url.spec, "http://example.com/"); - url.spec = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f http://test.com/ \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f "; - do_check_eq(url.spec, "http://test.com/"); - Assert.throws(() => { url.spec = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19 "; }, "set empty spec"); - run_next_test(); -}); - -// This tests that C0-and-space characters in the path, query and ref are -// percent encoded. -add_test({ skip_if: () => rustIsMissing }, function test_encode_C0_and_space() -{ - function toHex(d) { - var hex = d.toString(16); - if (hex.length == 1) - hex = "0"+hex; - return hex.toUpperCase(); - } - - for (var i=0x0; i<=0x20; i++) { - // These characters get filtered - they are not encoded. - if (String.fromCharCode(i) == '\r' || - String.fromCharCode(i) == '\n' || - String.fromCharCode(i) == '\t') { - continue; - } - var url = stringToURL("http://example.com/pa" + String.fromCharCode(i) + "th?qu" + String.fromCharCode(i) +"ery#ha" + String.fromCharCode(i) + "sh"); - // TODO: "http://example.com/pa%00th?qu%00ery#hash" == "http://example.com/pa%00th?qu%00ery#ha%00sh" - // TODO: "http://example.com/pa%01th?qu%01ery#ha\\u0001sh" == "http://example.com/pa%01th?qu%01ery#ha%01sh" - // do_check_eq(url.spec, "http://example.com/pa%" + toHex(i) + "th?qu%" + toHex(i) + "ery#ha%" + toHex(i) + "sh"); - } - - // Additionally, we need to check the setters. - var url = stringToURL("http://example.com/path?query#hash"); - url.filePath = "pa\0th"; - do_check_eq(url.spec, "http://example.com/pa%00th?query#hash"); - url.query = "qu\0ery"; - do_check_eq(url.spec, "http://example.com/pa%00th?qu%00ery#hash"); - url.ref = "ha\0sh"; // TODO: \0 is stripped - // do_check_eq(url.spec, "http://example.com/pa%00th?qu%00ery#ha%00sh"); - // url.fileName = "fi\0le.name"; // TODO: not implemented - // do_check_eq(url.spec, "http://example.com/fi%00le.name?qu%00ery#ha%00sh"); - - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_ipv4Normalize() -{ - var localIPv4s = - ["http://127.0.0.1", - "http://127.0.1", - "http://127.1", - "http://2130706433", - "http://0177.00.00.01", - "http://0177.00.01", - "http://0177.01", - "http://00000000000000000000000000177.0000000.0000000.0001", - "http://000000177.0000001", - "http://017700000001", - "http://0x7f.0x00.0x00.0x01", - "http://0x7f.0x01", - "http://0x7f000001", - "http://0x007f.0x0000.0x0000.0x0001", - "http://000177.0.00000.0x0001", - "http://127.0.0.1.", - ].map(stringToURL); - var url; - for (url of localIPv4s) { - do_check_eq(url.spec, "http://127.0.0.1/"); - } - - // These should treated as a domain instead of an IPv4. - var nonIPv4s = - ["http://0xfffffffff/", - "http://0x100000000/", - "http://4294967296/", - // "http://1.2.0x10000/", // TODO: fails to parse - // "http://1.0x1000000/", // TODO: fails to parse - // "http://256.0.0.1/", // TODO: fails to parse - // "http://1.256.1/", // TODO: fails to parse - // "http://-1.0.0.0/", // TODO: fails to parse - "http://1.2.3.4.5/", - "http://010000000000000000/", - // "http://2+3/", // TODO: fails to parse - // "http://0.0.0.-1/", // TODO: fails to parse - "http://1.2.3.4../", - "http://1..2/", - // "http://.1.2.3.4/", // TODO: parsed as "http://1.2.3.4/" - ]; - var spec; - for (spec of nonIPv4s) { - url = stringToURL(spec); - do_check_eq(url.spec, spec); - } - - run_next_test(); -}); - -add_test({ skip_if: () => rustIsMissing }, function test_schemeIsCaseInsensitive() -{ - var url = stringToURL("http://example.com/"); - do_check_true(url.schemeIs("http")); - do_check_true(url.schemeIs("HtTp")); - - run_next_test(); -});
--- a/netwerk/test/unit/xpcshell.ini +++ b/netwerk/test/unit/xpcshell.ini @@ -389,17 +389,16 @@ skip-if = os == "android" [test_alt-data_stream.js] [test_alt-data_overwrite.js] [test_cache-control_request.js] [test_bug1279246.js] [test_throttlequeue.js] [test_throttlechannel.js] [test_throttling.js] [test_separate_connections.js] -[test_rusturl.js] [test_trackingProtection_annotateChannels.js] [test_race_cache_with_network.js] [test_channel_priority.js] [test_bug1312774_http1.js] [test_1351443-missing-NewChannel2.js] [test_bug1312782_http1.js] [test_bug1355539_http1.js] [test_bug1378385_http1.js]
--- a/old-configure.in +++ b/old-configure.in @@ -2210,22 +2210,16 @@ esac if test -n "$MOZ_GRAPHENE"; then AC_DEFINE(MOZ_GRAPHENE) fi if test -n "$MOZ_MULET"; then AC_DEFINE(MOZ_MULET) fi -# Propagate feature switches for code written in rust from confvars.sh -if test -n "$MOZ_RUST_URLPARSE"; then - AC_DEFINE(MOZ_RUST_URLPARSE) - AC_SUBST(MOZ_RUST_URLPARSE) -fi - AC_SUBST(MOZ_PHOENIX) AC_SUBST(MOZ_XULRUNNER) AC_SUBST(MOZ_MULET) dnl ======================================================== dnl Ensure Android SDK and build-tools versions depending on dnl mobile target. dnl ========================================================
--- a/python/mach_commands.py +++ b/python/mach_commands.py @@ -107,17 +107,17 @@ class MachCommands(MachCommandBase): # Python's unittest, and in particular discover, has problems with # clashing namespaces when importing multiple test modules. What follows # is a simple way to keep environments separate, at the price of # launching Python multiple times. Most tests are run via mozunit, # which produces output in the format Mozilla infrastructure expects. # Some tests are run via pytest. if test_objects is None: - from mozbuild.testing import TestResolver + from moztest.resolve import TestResolver resolver = self._spawn(TestResolver) if tests: # If we were given test paths, try to find tests matching them. test_objects = resolver.resolve_tests(paths=tests, flavor='python') else: # Otherwise just run everything in PYTHON_UNITTEST_MANIFESTS test_objects = resolver.resolve_tests(flavor='python')
--- a/python/mozbuild/mozbuild/action/exe_7z_archive.py +++ b/python/mozbuild/mozbuild/action/exe_7z_archive.py @@ -4,26 +4,27 @@ from __future__ import print_function import os import shutil import sys import subprocess import tempfile +import buildconfig import mozpack.path as mozpath def archive_exe(pkg_dir, tagfile, sfx_package, package): tmpdir = tempfile.mkdtemp(prefix='tmp') try: if pkg_dir: shutil.move(pkg_dir, 'core') subprocess.check_call(['upx', '--best', '-o', mozpath.join(tmpdir, '7zSD.sfx'), sfx_package]) - subprocess.check_call(['7z', 'a', '-r', '-t7z', mozpath.join(tmpdir, 'app.7z'), '-mx', '-m0=BCJ2', '-m1=LZMA:d25', '-m2=LZMA:d19', '-m3=LZMA:d19', '-mb0:1', '-mb0s1:2', '-mb0s2:3']) + subprocess.check_call([buildconfig.substs['7Z'], 'a', '-r', '-t7z', mozpath.join(tmpdir, 'app.7z'), '-mx', '-m0=BCJ2', '-m1=LZMA:d25', '-m2=LZMA:d19', '-m3=LZMA:d19', '-mb0:1', '-mb0s1:2', '-mb0s2:3']) with open(package, 'wb') as o: for i in [mozpath.join(tmpdir, '7zSD.sfx'), tagfile, mozpath.join(tmpdir, 'app.7z')]: shutil.copyfileobj(open(i, 'rb'), o) os.chmod(package, 0o0755) finally: if pkg_dir: shutil.move('core', pkg_dir)
--- a/python/mozbuild/mozbuild/test/python.ini +++ b/python/mozbuild/mozbuild/test/python.ini @@ -35,10 +35,9 @@ [test_expression.py] [test_jarmaker.py] [test_line_endings.py] [test_makeutil.py] [test_mozconfig.py] [test_mozinfo.py] [test_preprocessor.py] [test_pythonutil.py] -[test_testing.py] [test_util.py]
--- a/python/mozbuild/mozbuild/testing.py +++ b/python/mozbuild/mozbuild/testing.py @@ -8,261 +8,18 @@ import cPickle as pickle import os import sys import mozpack.path as mozpath from mozpack.copier import FileCopier from mozpack.manifests import InstallManifest -from .base import MozbuildObject -from .util import OrderedDefaultDict -from collections import defaultdict - import manifestparser -def rewrite_test_base(test, new_base, honor_install_to_subdir=False): - """Rewrite paths in a test to be under a new base path. - - This is useful for running tests from a separate location from where they - were defined. - - honor_install_to_subdir and the underlying install-to-subdir field are a - giant hack intended to work around the restriction where the mochitest - runner can't handle single test files with multiple configurations. This - argument should be removed once the mochitest runner talks manifests - (bug 984670). - """ - test['here'] = mozpath.join(new_base, test['dir_relpath']) - - if honor_install_to_subdir and test.get('install-to-subdir'): - manifest_relpath = mozpath.relpath(test['path'], - mozpath.dirname(test['manifest'])) - test['path'] = mozpath.join(new_base, test['dir_relpath'], - test['install-to-subdir'], manifest_relpath) - else: - test['path'] = mozpath.join(new_base, test['file_relpath']) - - return test - - -class TestMetadata(object): - """Holds information about tests. - - This class provides an API to query tests active in the build - configuration. - """ - - def __init__(self, all_tests, test_defaults=None): - self._tests_by_path = OrderedDefaultDict(list) - self._tests_by_flavor = defaultdict(set) - self._test_dirs = set() - - with open(all_tests, 'rb') as fh: - test_data = pickle.load(fh) - defaults = None - if test_defaults: - with open(test_defaults, 'rb') as fh: - defaults = pickle.load(fh) - for path, tests in test_data.items(): - for metadata in tests: - if defaults: - defaults_manifests = [metadata['manifest']] - - ancestor_manifest = metadata.get('ancestor-manifest') - if ancestor_manifest: - defaults_manifests.append(ancestor_manifest) - - for manifest in defaults_manifests: - manifest_defaults = defaults.get(manifest) - if manifest_defaults: - metadata = manifestparser.combine_fields(manifest_defaults, - metadata) - self._tests_by_path[path].append(metadata) - self._test_dirs.add(os.path.dirname(path)) - flavor = metadata.get('flavor') - self._tests_by_flavor[flavor].add(path) - - def tests_with_flavor(self, flavor): - """Obtain all tests having the specified flavor. - - This is a generator of dicts describing each test. - """ - - for path in sorted(self._tests_by_flavor.get(flavor, [])): - yield self._tests_by_path[path] - - def resolve_tests(self, paths=None, flavor=None, subsuite=None, under_path=None, - tags=None): - """Resolve tests from an identifier. - - This is a generator of dicts describing each test. - - ``paths`` can be an iterable of values to use to identify tests to run. - If an entry is a known test file, tests associated with that file are - returned (there may be multiple configurations for a single file). If - an entry is a directory, or a prefix of a directory containing tests, - all tests in that directory are returned. If the string appears in a - known test file, that test file is considered. If the path contains - a wildcard pattern, tests matching that pattern are returned. - - If ``under_path`` is a string, it will be used to filter out tests that - aren't in the specified path prefix relative to topsrcdir or the - test's installed dir. - - If ``flavor`` is a string, it will be used to filter returned tests - to only be the flavor specified. A flavor is something like - ``xpcshell``. - - If ``subsuite`` is a string, it will be used to filter returned tests - to only be in the subsuite specified. - - If ``tags`` are specified, they will be used to filter returned tests - to only those with a matching tag. - """ - if tags: - tags = set(tags) - - def fltr(tests): - for test in tests: - if flavor: - if (flavor == 'devtools' and test.get('flavor') != 'browser-chrome') or \ - (flavor != 'devtools' and test.get('flavor') != flavor): - continue - - if subsuite and test.get('subsuite') != subsuite: - continue - - if tags and not (tags & set(test.get('tags', '').split())): - continue - - if under_path \ - and not test['file_relpath'].startswith(under_path): - continue - - # Make a copy so modifications don't change the source. - yield dict(test) - - paths = paths or [] - paths = [mozpath.normpath(p) for p in paths] - if not paths: - paths = [None] - - candidate_paths = set() - - for path in sorted(paths): - if path is None: - candidate_paths |= set(self._tests_by_path.keys()) - continue - - if '*' in path: - candidate_paths |= {p for p in self._tests_by_path - if mozpath.match(p, path)} - continue - - # If the path is a directory, or the path is a prefix of a directory - # containing tests, pull in all tests in that directory. - if (path in self._test_dirs or - any(p.startswith(path) for p in self._tests_by_path)): - candidate_paths |= {p for p in self._tests_by_path - if p.startswith(path)} - continue - - # If it's a test file, add just that file. - candidate_paths |= {p for p in self._tests_by_path if path in p} - - for p in sorted(candidate_paths): - tests = self._tests_by_path[p] - - for test in fltr(tests): - yield test - - -class TestResolver(MozbuildObject): - """Helper to resolve tests from the current environment to test files.""" - - def __init__(self, *args, **kwargs): - MozbuildObject.__init__(self, *args, **kwargs) - - # If installing tests is going to result in re-generating the build - # backend, we need to do this here, so that the updated contents of - # all-tests.pkl make it to the set of tests to run. - self._run_make( - target='backend.TestManifestBackend', pass_thru=True, print_directory=False, - filename=mozpath.join(self.topsrcdir, 'build', 'rebuild-backend.mk'), - append_env={ - b'PYTHON': self.virtualenv_manager.python_path, - b'BUILD_BACKEND_FILES': b'backend.TestManifestBackend', - b'BACKEND_GENERATION_SCRIPT': mozpath.join( - self.topsrcdir, 'build', 'gen_test_backend.py'), - }, - ) - - self._tests = TestMetadata(os.path.join(self.topobjdir, - 'all-tests.pkl'), - test_defaults=os.path.join(self.topobjdir, - 'test-defaults.pkl')) - - self._test_rewrites = { - 'a11y': os.path.join(self.topobjdir, '_tests', 'testing', - 'mochitest', 'a11y'), - 'browser-chrome': os.path.join(self.topobjdir, '_tests', 'testing', - 'mochitest', 'browser'), - 'chrome': os.path.join(self.topobjdir, '_tests', 'testing', - 'mochitest', 'chrome'), - 'mochitest': os.path.join(self.topobjdir, '_tests', 'testing', - 'mochitest', 'tests'), - 'web-platform-tests': os.path.join(self.topobjdir, '_tests', 'testing', - 'web-platform'), - 'xpcshell': os.path.join(self.topobjdir, '_tests', 'xpcshell'), - } - - def resolve_tests(self, cwd=None, **kwargs): - """Resolve tests in the context of the current environment. - - This is a more intelligent version of TestMetadata.resolve_tests(). - - This function provides additional massaging and filtering of low-level - results. - - Paths in returned tests are automatically translated to the paths in - the _tests directory under the object directory. - - If cwd is defined, we will limit our results to tests under the - directory specified. The directory should be defined as an absolute - path under topsrcdir or topobjdir for it to work properly. - """ - rewrite_base = None - - if cwd: - norm_cwd = mozpath.normpath(cwd) - norm_srcdir = mozpath.normpath(self.topsrcdir) - norm_objdir = mozpath.normpath(self.topobjdir) - - reldir = None - - if norm_cwd.startswith(norm_objdir): - reldir = norm_cwd[len(norm_objdir)+1:] - elif norm_cwd.startswith(norm_srcdir): - reldir = norm_cwd[len(norm_srcdir)+1:] - - result = self._tests.resolve_tests(under_path=reldir, - **kwargs) - - else: - result = self._tests.resolve_tests(**kwargs) - - for test in result: - rewrite_base = self._test_rewrites.get(test['flavor'], None) - - if rewrite_base: - yield rewrite_test_base(test, rewrite_base, - honor_install_to_subdir=True) - else: - yield test # These definitions provide a single source of truth for modules attempting # to get a view of all tests for a build. Used by the emitter to figure out # how to read/install manifests and by test dependency annotations in Files() # entries to enumerate test flavors. # While there are multiple test manifests, the behavior is very similar # across them. We enforce this by having common handling of all
--- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1079,16 +1079,17 @@ static const TransportSecurityPreload kP { "rw.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, { "script.google.com", true, false, false, -1, &kPinset_google_root_pems }, { "se.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, { "search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, { "secure.facebook.com", true, false, false, -1, &kPinset_facebook }, { "security.google.com", true, false, false, -1, &kPinset_google_root_pems }, { "services.mozilla.com", true, false, true, 6, &kPinset_mozilla_services }, { "sg.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, + { "sirburton.com", true, false, false, -1, &kPinset_ncsccs }, { "sites.google.com", true, false, false, -1, &kPinset_google_root_pems }, { "spideroak.com", true, false, false, -1, &kPinset_spideroak }, { "spreadsheets.google.com", true, false, false, -1, &kPinset_google_root_pems }, { "static.googleadsserving.cn", true, false, false, -1, &kPinset_google_root_pems }, { "stats.g.doubleclick.net", true, false, false, -1, &kPinset_google_root_pems }, { "sv.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, { "swehack.org", true, true, false, -1, &kPinset_swehackCom }, { "sync.services.mozilla.com", true, false, true, 13, &kPinset_mozilla_services }, @@ -1149,13 +1150,13 @@ static const TransportSecurityPreload kP { "youtu.be", true, false, false, -1, &kPinset_google_root_pems }, { "youtube-nocookie.com", true, false, false, -1, &kPinset_google_root_pems }, { "youtube.com", true, false, false, -1, &kPinset_google_root_pems }, { "ytimg.com", true, false, false, -1, &kPinset_google_root_pems }, { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo }, }; -// Pinning Preload List Length = 480; +// Pinning Preload List Length = 481; static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1518550779219000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1518637560032000);
--- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -1,39 +1,37 @@ 06se.com: could not connect to host 0day.su: could not connect to host 1000serien.com: could not connect to host +27728522.com: could not connect to host 47tech.com: could not connect to host 4loc.us: could not connect to host 4x4.lk: could not connect to host 692b8c32.de: could not connect to host 8560.be: could not connect to host 87577.com: could not connect to host 8887999.com: could not connect to host 8ack.de: could not connect to host 8t88.biz: could not connect to host 91-freedom.com: could not connect to host 9ss6.com: could not connect to host aaronmcguire.me: could not connect to host -abeontech.com: could not connect to host abolition.co: could not connect to host accwing.com: could not connect to host acrossgw.com: could not connect to host adamfontenot.com: could not connect to host adamgold.net: could not connect to host adquisitio.co.uk: could not connect to host adquisitio.es: could not connect to host adquisitio.fr: could not connect to host adquisitio.it: could not connect to host adzie.xyz: could not connect to host aevpn.org: could not connect to host affily.io: could not connect to host -agowa.eu: could not connect to host agowa338.de: could not connect to host -ahmedcharles.com: could not connect to host akiba-server.info: could not connect to host akita-stream.com: could not connect to host akoww.de: could not connect to host akul.co.in: could not connect to host al-f.net: could not connect to host alamgir.works: could not connect to host alasta.info: could not connect to host alauda-home.de: could not connect to host @@ -46,132 +44,136 @@ altahrim.net: could not connect to host ameho.me: could not connect to host amua.fr: could not connect to host anastasia-shamara.ru: could not connect to host andiplusben.com: could not connect to host andreaskluge.eu: could not connect to host andrei-coman.com: could not connect to host andrepicard.de: could not connect to host annetaan.fi: could not connect to host +answers-online.ru: could not connect to host anyways.at: could not connect to host apkoyunlar.club: could not connect to host appdrinks.com: could not connect to host arawaza.biz: could not connect to host arawaza.info: could not connect to host arent.kz: could not connect to host arksan.com.tr: could not connect to host artisense.de: could not connect to host artyland.ru: could not connect to host +aseith.com: could not connect to host askmagicconch.com: could not connect to host assdecoeur.org: could not connect to host at1.co: could not connect to host athi.pl: could not connect to host austinsutphin.com: could not connect to host australiancattle.dog: could not connect to host autostop-occasions.be: could not connect to host autozane.com: could not connect to host awan.tech: could not connect to host awf0.xyz: could not connect to host b8a.me: could not connect to host bakaweb.fr: could not connect to host balonmano.co: could not connect to host +bandally.net: could not connect to host bandarifamily.com: could not connect to host bandiga.it: could not connect to host barbate.fr: could not connect to host +bbb1991.me: could not connect to host bbdos.ru: could not connect to host beasel.biz: could not connect to host -beelen.fr: could not connect to host bellavistaoutdoor.com: could not connect to host belua.com: could not connect to host benjamin-horvath.com: could not connect to host benjamin-suess.de: could not connect to host benzou-space.com: could not connect to host berduri.com: could not connect to host berthelier.me: could not connect to host bey.io: could not connect to host -biboumail.fr: could not connect to host -bienoubien.org: could not connect to host binimo.com: could not connect to host bip.gov.sa: could not connect to host bitmessage.ch: could not connect to host bizeau.ch: could not connect to host blackdiam.net: could not connect to host blackscytheconsulting.com: 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 +blogtroterzy.pl: could not connect to host blumen-garage.de: could not connect to host bm-i.ch: could not connect to host bodrumfarm.com: could not connect to host bolwerk.com.br: could not connect to host borisbesemer.com: could not connect to host bouncelanduk.co.uk: could not connect to host bouncourseplanner.net: could not connect to host +bouncycastlehiremalvern.co.uk: could not connect to host brage.info: could not connect to host brettabel.com: could not connect to host brfvh24.se: could not connect to host brunner.ninja: could not connect to host +bsktweetup.info: could not connect to host bsuess.de: could not connect to host buka.jp: could not connect to host burlesquemakeup.com: could not connect to host businessfurs.info: could not connect to host businessmodeler.se: could not connect to host buyshoe.org: could not connect to host bvexplained.co.uk: could not connect to host by1898.com: could not connect to host bypass.kr: could not connect to host c16t.uk: could not connect to host cafesg.net: could not connect to host calculatoaresecondhand.xyz: could not connect to host callabs.net: could not connect to host callsigns.ca: could not connect to host calories.org: could not connect to host canarymod.net: could not connect to host +cardse.net: could not connect to host carlandfaith.com: could not connect to host -casa-mea-inteligenta.ro: could not connect to host +carloshmm.stream: could not connect to host casinoreal.com: could not connect to host -castlecapers.com.au: could not connect to host caughtredhanded.co.nz: could not connect to host centos.pub: could not connect to host challengeskins.com: could not connect to host chaoticlaw.com: could not connect to host charmyadesara.com: could not connect to host charonsecurity.com: could not connect to host cheah.xyz: could not connect to host cheesefusion.com: could not connect to host childrendeservebetter.org: could not connect to host china-line.org: could not connect to host chloehorler.com: could not connect to host chosenplaintext.org: could not connect to host -chsterz.de: could not connect to host -chuck.ovh: could not connect to host +chrisu3050.at: could not connect to host chziyue.com: could not connect to host cjtkfan.club: could not connect to host clearchatsandbox.com: could not connect to host clearviewwealthprojector.com.au: 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 cnlic.com: could not connect to host coco-cool.fr: could not connect to host code.fm: could not connect to host codenlife.xyz: could not connect to host -codera.co.uk: could not connect to host codercross.com: could not connect to host colleencornez.com: could not connect to host coloppe.com: 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 corinnanese.de: could not connect to host -correiodovale.com.br: could not connect to host +cosmeticasimple.com: could not connect to host cosplayer.com: could not connect to host cpaneltips.com: could not connect to host crackpfer.de: 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 crystalmachine.net: could not connect to host csgo.help: could not connect to host csgo77.com: could not connect to host cubela.tech: could not connect to host customfilmworks.com: could not connect to host cyber-computer.club: could not connect to host cyberpeace.nl: could not connect to host cypherpunk.ws: could not connect to host @@ -188,31 +190,33 @@ dawnson.is: could not connect to host dawnsonb.com: could not connect to host days.one: could not connect to host dbcom.ru: could not connect to host de-servers.de: could not connect to host decoyrouting.com: could not connect to host deloittequant.com: could not connect to host derchris.me: could not connect to host derivativeshub.pro: could not connect to host +dermacarecomplex.com: could not connect to host dev-talk.eu: could not connect to host devkid.net: could not connect to host devops.moe: could not connect to host dick.red: could not connect to host diguass.us: could not connect to host dijks.com: could not connect to host dirtycat.ru: could not connect to host disadattamentolavorativo.it: could not connect to host disco-crazy-world.de: could not connect to host djangogolf.com: could not connect to host dlyl888.com: could not connect to host dojifish.space: could not connect to host dolphin-hosting.com: could not connect to host domengrad.ru: could not connect to host dostavkakurierom.ru: could not connect to host +drakeluce.com: could not connect to host dreaming.solutions: could not connect to host drighes.com: could not connect to host dronexpertos.com: could not connect to host droomhuis-in-zuid-holland-kopen.nl: could not connect to host dubrovskiy.net: could not connect to host dubrovskiy.pro: could not connect to host duch.cloud: could not connect to host duelsow.eu: could not connect to host @@ -225,84 +229,83 @@ eatfitoutlet.com.br: could not connect t ebaymotorssucks.com: could not connect to host eeb98.com: could not connect to host eez.ee: could not connect to host egbert.net: could not connect to host ehuber.info: could not connect to host elisabeth-strunz.de: could not connect to host elonbase.com: could not connect to host elsword.moe: could not connect to host +emanuelemazzotta.com: could not connect to host endlessdiy.ca: could not connect to host endspamwith.us: could not connect to host engg.ca: could not connect to host enriquepiraces.com: could not connect to host er-music.com: could not connect to host ericdiao.com: could not connect to host +erspro.net: could not connect to host estan.cn: could not connect to host -etyd.org: could not connect to host eurostrategy.vn.ua: could not connect to host -eurotime.ua: could not connect to host -everygayporn.com: could not connect to host eveshaiwu.com: could not connect to host exceed.global: could not connect to host faber.org.ru: could not connect to host facilitrak.com: could not connect to host faithwatch.org: could not connect to host falkus.net: could not connect to host farm24.co.uk: could not connect to host +farsil.eu: could not connect to host +fashion4ever.pl: could not connect to host +fed51.com: could not connect to host feedstringer.com: could not connect to host feirlane.org: could not connect to host fernangp.com: could not connect to host filhomes.ph: could not connect to host findmybottleshop.com.au: could not connect to host firebaseio.com: could not connect to host firexarxa.de: could not connect to host first-time-offender.com: could not connect to host fixmyglitch.com: could not connect to host flow.su: could not connect to host flucky.xyz: could not connect to host flygpost.com: could not connect to host -fognini-depablo.eu: could not connect to host foodserve.in: could not connect to host forglemmigej.net: 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 fr0zenbits.io: could not connect to host fragnic.com: could not connect to host franckyz.com: could not connect to host -frank.fyi: could not connect to host franksiler.com: could not connect to host fransallen.com: could not connect to host freaksites.dk: could not connect to host fredliang.cn: could not connect to host fredtec.ru: could not connect to host freelansir.com: could not connect to host freesounding.ru: could not connect to host +frodriguez.xyz: could not connect to host fromlemaytoz.com: could not connect to host frosty-gaming.xyz: could not connect to host fukuko.biz: could not connect to host fukuko.xyz: could not connect to host funfunmstdn.tokyo: could not connect to host funideas.org: could not connect to host funksteckdosen24.de: could not connect to host futbolvivo.tv: could not connect to host g4w.co: could not connect to host gabriele-kluge.de: could not connect to host gaiserik.com: could not connect to host -gala.kiev.ua: could not connect to host gam3rs.de: could not connect to host game-gentle.com: could not connect to host gasbarkenora.com: could not connect to host gasnews.net: could not connect to host gayforgenji.com: could not connect to host gaygeeks.de: could not connect to host -gbl.selfip.net: could not connect to host gdevpenze.ru: could not connect to host gdhzcgs.com: could not connect to host geeks.berlin: could not connect to host gehrke.nrw: could not connect to host generationnext.pl: could not connect to host geneve.guide: could not connect to host georgescarryout.com: could not connect to host getgeek.dk: could not connect to host @@ -357,70 +360,63 @@ hg881.com: could not connect to host hiraku.me: could not connect to host homophoni.com: could not connect to host hoodoo.io: could not connect to host hoodoo.tech: could not connect to host horeizai.net: could not connect to host horvathd.eu: could not connect to host hudingyuan.cn: could not connect to host hukkatavara.com: could not connect to host -hundter.com: could not connect to host ibase.com: could not connect to host ictpro.info: could not connect to host iec.pe: could not connect to host -iemb.tk: could not connect to host ifxnet.com: could not connect to host ikenmeyer.eu: could not connect to host ileat.com: could not connect to host imperdintechnologies.com: could not connect to host -impulse-clan.de: could not connect to host inexpensivecomputers.net: could not connect to host informatik.zone: could not connect to host ingalls.run: could not connect to host injust.me: could not connect to host inscript.pl: could not connect to host insouciant.org: could not connect to host installgentoo.net: could not connect to host investorloanshub.com: could not connect to host -iris-insa.com: could not connect to host isamiok.com: could not connect to host issuesofconcern.in: could not connect to host itilo.de: could not connect to host itpro-mg.de: could not connect to host itproject.guru: could not connect to host -itshka.rv.ua: could not connect to host ivanpolchenko.com: could not connect to host ixio.cz: could not connect to host -izodiacsigns.com: could not connect to host jaaxypro.com: could not connect to host jakincode.army: could not connect to host japan4you.org: could not connect to host jaredfraser.com: could not connect to host javascriptlab.fr: could not connect to host jayharris.ca: could not connect to host jbrowndesign.me: could not connect to host jean-remy.ch: could not connect to host -jessevictors.com: could not connect to host +jeremyc.ca: could not connect to host jhburton.co.uk: could not connect to host jie.dance: could not connect to host jobmedic.com: could not connect to host joecod.es: could not connect to host johand.io: could not connect to host jonathansanchez.pro: could not connect to host jonpads.com: could not connect to host joostbovee.nl: could not connect to host jornalalerta.com.br: could not connect to host juliawebber.co.za: could not connect to host just-pools.co.za: could not connect to host justmy.website: 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 kamikaichimaru.com: could not connect to host -kangaroojacks.co.uk: could not connect to host kapo.info: could not connect to host karanlyons.com: could not connect to host karuneshjohri.com: could not connect to host katzen.me: could not connect to host kawaiiku.com: could not connect to host kawaiiku.de: could not connect to host kelm.me: could not connect to host kenrogers.co: could not connect to host @@ -452,27 +448,27 @@ lachawoj.de: could not connect to host lathamlabs.com: could not connect to host lathamlabs.net: could not connect to host lathamlabs.org: could not connect to host lavapot.com: could not connect to host lawformt.com: could not connect to host lazulu.com: could not connect to host lcti.biz: could not connect to host ldcraft.pw: could not connect to host -le23.fr: could not connect to host lebal.se: could not connect to host legaltip.eu: could not connect to host legitaxi.com: could not connect to host leifdreizler.com: could not connect to host leiming.co: could not connect to host leninalbertop.com.ve: could not connect to host leonardcamacho.me: could not connect to host leveredge.net: could not connect to host lezdomsm.com: could not connect to host lheinrich.org: could not connect to host +libbitcoin.org: could not connect to host lifenexto.com: could not connect to host likenosis.com: could not connect to host lingerieonline.com.br: could not connect to host linksanitizer.com: could not connect to host linksextremist.at: could not connect to host linuxcommand.ru: could not connect to host linvx.org: could not connect to host lissabon.guide: could not connect to host @@ -489,43 +485,48 @@ logcat.info: could not connect to host logic8.ml: could not connect to host lookyman.net: could not connect to host loss.no: could not connect to host lovelytimes.net: could not connect to host luav.org: could not connect to host lubomirkazakov.com: could not connect to host lukasunger.cz: could not connect to host lukasunger.net: could not connect to host +luxonetwork.com: could not connect to host +luzat.com: could not connect to host m4g.ru: could not connect to host maartenterpstra.xyz: could not connect to host macedopesca.com.br: could not connect to host madrants.net: 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 marketingdesignu.cz: could not connect to host martin-mattel.com: could not connect to host marvinkeller.de: could not connect to host mastodon.my: could not connect to host matcha-iga.jp: could not connect to host mathijskingma.nl: could not connect to host mattwb65.com: could not connect to host +mazzotta.me: could not connect to host mcdanieldevelopmentservices.com: could not connect to host mchopkins.net: could not connect to host +me-dc.com: could not connect to host meanevo.com: could not connect to host mecanicadom.com: could not connect to host mediadandy.com: could not connect to host melonstudios.net: could not connect to host mentax.net: could not connect to host +mes10doigts.ovh: could not connect to host metachris.com: could not connect to host metrobriefs.com: could not connect to host mhjuma.com: could not connect to host -mikes.tk: could not connect to host mingy.ddns.net: could not connect to host minitruckin.net: could not connect to host +mirodasilva.be: could not connect to host miyugirls.com: could not connect to host mkfs.fr: could not connect to host mmstick.tk: could not connect to host modded-minecraft-server-list.com: could not connect to host moe-max.jp: could not connect to host moobo.xyz: could not connect to host mooselook.de: could not connect to host morotech.com.br: could not connect to host @@ -536,59 +537,60 @@ motomorgen.com: could not connect to hos motorbiketourhanoi.com: could not connect to host mountainadventureseminars.com: could not connect to host mowalls.net: could not connect to host mpserver12.org: could not connect to host mrliu.me: could not connect to host mtn.cc: could not connect to host munduch.cz: could not connect to host muslimbanter.co.za: could not connect to host -mvnet.com.br: could not connect to host mybeautyjobs.de: could not connect to host +mycustomwriting.com: could not connect to host myfrenchtattoo.fr: could not connect to host +n0099.cf: could not connect to host naphex.rocks: could not connect to host narodsovety.ru: could not connect to host natanaelys.com: could not connect to host nauck.org: could not connect to host ncdesigns-studio.com: could not connect to host nedcf.org.uk: could not connect to host neer.io: could not connect to host -nesterov.pw: could not connect to host +netbrief.ml: could not connect to host netica.fr: could not connect to host netulo.com: could not connect to host nevadafiber.net: could not connect to host +next-log.ru: could not connect to host nexuscorporation.in: could not connect to host nfluence.org: could not connect to host nico.st: could not connect to host nienfun.com: could not connect to host +nikksno.io: could not connect to host nikolasbradshaw.com: could not connect to host niouininon.eu: could not connect to host nirada.info: could not connect to host niva.synology.me: could not connect to host nkb.in.th: could not connect to host -nkp-media.de: could not connect to host -nlegall.fr: could not connect to host nolag.host: could not connect to host northwoodsfish.com: could not connect to host notesforpebble.com: could not connect to host novascan.net: could not connect to host novelabs.eu: could not connect to host nowremindme.com: could not connect to host nsdev.cn: could not connect to host nup.pw: could not connect to host obdolbacca.ru: could not connect to host oberhof.co: could not connect to host off-the-clock.us: could not connect to host office-ruru.com: could not connect to host oliverspringer.eu: could not connect to host onewebdev.info: could not connect to host -online-scene.com: could not connect to host onstud.com: could not connect to host onwie.fr: could not connect to host opengg.me: could not connect to host +openspace.xxx: could not connect to host oranges.tokyo: could not connect to host oscsdp.cz: could not connect to host outetc.com: could not connect to host oxygaming.com: could not connect to host oxymc.com: could not connect to host p4chivtac.com: could not connect to host panj.ws: could not connect to host pardnoy.com: could not connect to host @@ -606,64 +608,69 @@ phasme-2016.com: could not connect to ho philippa.cool: could not connect to host picallo.es: could not connect to host picone.com.au: could not connect to host pinebaylibrary.org: could not connect to host pitfire.io: could not connect to host pixelbash.de: could not connect to host plaasprodukte.com: could not connect to host planbox.info: could not connect to host +playsoundevents.be: could not connect to host plussizereviews.com: could not connect to host pnsc.is: could not connect to host pointagri.com: could not connect to host +pokalsocial.de: could not connect to host polit.im: could not connect to host poolinstallers.co.za: could not connect to host pouets.ovh: could not connect to host powerentertainment.tv: could not connect to host prelogica.com.br: could not connect to host privcloud.org: could not connect to host projectasterk.com: could not connect to host +provitacare.com: could not connect to host proxydesk.eu: could not connect to host proxyweb.us: could not connect to host psncardplus.be: could not connect to host psncardplus.com: could not connect to host psncardplus.dk: could not connect to host psncardplus.nl: could not connect to host psncardplus.se: could not connect to host +psu.je: could not connect to host publimepa.it: could not connect to host puhe.se: could not connect to host pypa.io: could not connect to host pythia.nz: could not connect to host qoqo.us: could not connect to host qrforex.com: could not connect to host qscloud.de: could not connect to host qto.net: could not connect to host +r0t.co: could not connect to host rainbin.com: could not connect to host readityourself.net: could not connect to host real-compare.com: could not connect to host realwoo.com: could not connect to host reignsphere.net: could not connect to host reismil.ch: could not connect to host +relsak.cz: could not connect to host relvan.com: could not connect to host report-to.io: could not connect to host report-url.com: could not connect to host report-url.io: could not connect to host reporturi.com: could not connect to host reporturi.io: could not connect to host reporturl.com: could not connect to host reporturl.io: could not connect to host reqognize.com: could not connect to host ressl.ch: could not connect to host +retcor.net: could not connect to host reth.ch: could not connect to host retube.ga: could not connect to host reykjavik.guide: 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 119" data: no] -robomonkey.org: could not connect to host roeldevries.me: could not connect to host -rofrank.space: could not connect to host roguesignal.net: could not connect to host rohanbassett.com: could not connect to host romainmuller.xyz: could not connect to host roolevoi.ru: could not connect to host rpgmaker.es: could not connect to host rs-devdemo.host: could not connect to host rsldb.com: could not connect to host rubyist.today: could not connect to host @@ -697,78 +704,80 @@ shadowplus.net: could not connect to hos shadowrocket.net: could not connect to host sharevari.com: could not connect to host shavingks.com: could not connect to host sheratan.web.id: could not connect to host sheying.tm: could not connect to host shirakaba-cc.com: could not connect to host shopifycloud.com: could not connect to host shoppingreview.org: could not connect to host +sickfile.com: could not connect to host siliconchip.me: could not connect to host simbolo.co.uk: could not connect to host simplerses.com: could not connect to host siqi.wang: could not connect to host skarox.com: could not connect to host skarox.net: could not connect to host skarox.ru: could not connect to host sky-aroma.com: could not connect to host skylocker.net: could not connect to host skylocker.nl: could not connect to host -sl0.us: could not connect to host slovoice.org: could not connect to host smith.is: could not connect to host sml.lc: could not connect to host socialworkout.com: could not connect to host socialworkout.net: could not connect to host socialworkout.org: could not connect to host socialworkout.tv: could not connect to host socketize.com: could not connect to host sodiao.cc: could not connect to host sojingle.net: could not connect to host solos.im: could not connect to host soulema.com: could not connect to host soundhunter.xyz: could not connect to host sowingseasons.com: could not connect to host -spha.info: could not connect to host spicywombat.com: could not connect to host spom.net: could not connect to host sportsmanadvisor.com: could not connect to host +sprint.ml: could not connect to host +squido.ch: could not connect to host stadionmanager.com: could not connect to host stadtgartenla.com: could not connect to host statgram.me: could not connect to host static-assets.io: could not connect to host stbennett.org: could not connect to host stefanovski.io: could not connect to host steffi-in-australien.com: could not connect to host steven-bennett.com: could not connect to host stickswag.cf: could not connect to host stilettomoda.com.br: could not connect to host stpip.com: could not connect to host stressfreehousehold.com: could not connect to host -studport.rv.ua: could not connect to host +stuka-art.de: could not connect to host stylle.me: could not connect to host sulek.eu: could not connect to host +suneilpatel.com: could not connect to host sunjaydhama.com: could not connect to host -sunn.ie: could not connect to host sussexwebdesigns.com: could not connect to host sviz.pro: could not connect to host t3rror.net: could not connect to host takusan.ru: could not connect to host talktwincities.com: 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 techask.it: could not connect to host techpit.us: could not connect to host telugu4u.net: could not connect to host tenispopular.com: could not connect to host teracloud.at: could not connect to host terminalvelocity.co.nz: could not connect to host terrax.net: could not connect to host +tetsai.com: could not connect to host theprivacysolution.com: could not connect to host thesehighsandlows.com: could not connect to host thesteins.org: could not connect to host thinkcash.nl: could not connect to host thinktux.net: could not connect to host thynx.io: could not connect to host tiliaze.info: could not connect to host tiliaze.net: could not connect to host @@ -776,98 +785,105 @@ timysewyn.be: could not connect to host tokaido.com: could not connect to host topdetoxcleanse.com: could not connect to host topnotchendings.com: could not connect to host totallynotaserver.com: could not connect to host totch.de: could not connect to host totot.net: could not connect to host toxicip.com: could not connect to host transcendmotor.sg: could not connect to host +tsaro.io: could not connect to host tucidi.net: could not connect to host tumelum.de: could not connect to host turn-sticks.com: could not connect to host +twem.ddns.net: could not connect to host twiri.net: could not connect to host twotube.ie: could not connect to host tyil.work: could not connect to host tykoon.com: could not connect to host u.nu: could not connect to host uberboxen.net: could not connect to host udo-luetkemeier.de: could not connect to host +uevan.com: could not connect to host umsapi.com: could not connect to host +unhu.fr: could not connect to host unicorn.li: could not connect to host unsupervised.ca: could not connect to host untoldstory.eu: could not connect to host urbackups.com: could not connect to host +uscp8.com: could not connect to host uwesander.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119" data: no] -v-desk.ga: could not connect to host vadik.me: could not connect to host valshamar.is: could not connect to host +valtoaho.com: could not connect to host vanderstraeten.dynv6.net: could not connect to host vapehour.com: could not connect to host vapeshopsupply.com: could not connect to host varela-electricite.fr: could not connect to host venmos.com: could not connect to host versfin.net: could not connect to host vgatest.nl: could not connect to host vinetalk.net: could not connect to host visiontree.eu: could not connect to host vlogge.com: could not connect to host -vmgirls.com: could not connect to host vmug.pl: could not connect to host vrtouring.org: could not connect to host vsx.ch: could not connect to host vxapps.com: could not connect to host w4.no: could not connect to host waixingrenfuli.vip: could not connect to host +wallpapers.pub: could not connect to host wanashi.com: could not connect to host warlions.info: could not connect to host warp-radio.com: could not connect to host warp-radio.tv: could not connect to host watchweasel.com: could not connect to host we.serveftp.net: could not connect to host weareincognito.org: could not connect to host webart-factory.de: could not connect to host webcatechism.com: could not connect to host webdesigneauclaire.com: could not connect to host webhackspro.com: could not connect to host webtech.com.br: could not connect to host webthings.com.br: could not connect to host wecanvisit.com: could not connect to host weed.ren: could not connect to host +wekibe.de: could not connect to host welby.cat: could not connect to host welcomehelp.de: could not connect to host werhatunsverraten.eu: could not connect to host -werkinc.de: could not connect to host werkkrew.xyz: could not connect to host wessner.org: could not connect to host wetthost.com: could not connect to host whilsttraveling.com: could not connect to host winnersports.co: could not connect to host wireframesoftware.com: could not connect to host wissl.org: could not connect to host wolfemg.com: could not connect to host wolfenland.net: could not connect to host woomu.me: could not connect to host wooplagaming.com: could not connect to host workemy.com: could not connect to host worldfree4.org: could not connect to host wp-fastsearch.de: could not connect to host wp6.pw: could not connect to host wriedts.de: could not connect to host +wwv-8522.com: could not connect to host www-8887999.com: could not connect to host www.re: could not connect to host www.sb: could not connect to host www.simbolo.co.uk: could not connect to host xia100.xyz: could not connect to host xiaoyu.net: could not connect to host xing.ml: could not connect to host xn--8mr166hf6s.xn--fiqs8s: could not connect to host xn--yj8h0m.ws: could not connect to host xqin.net: could not connect to host xtremenutrition.com.br: could not connect to host +xwaretech.info: could not connect to host yabrt.cn: could not connect to host yaucy.win: could not connect to host yffengshi.ml: could not connect to host yoga.is-an-engineer.com: could not connect to host yux.fr: could not connect to host yvesx.com: could not connect to host zaoext.com: could not connect to host zby.io: could not connect to host @@ -925,17 +941,17 @@ 12vpnchina.com: could not connect to hos 1391kj.com: did not receive HSTS header 1396.cc: did not receive HSTS header 1396.net: could not connect to host 1536.cf: could not connect to host 163pwd.com: could not connect to host 166166.com: could not connect to host 16deza.com: did not receive HSTS header 16packets.com: could not connect to host -173vpn.cn: did not receive HSTS header +173vpn.cn: could not connect to host 173vpns.com: did not receive HSTS header 188betwarriors.co.uk: could not connect to host 188trafalgar.ca: did not receive HSTS header 195gm.com: could not connect to host 1a-jva.de: could not connect to host 1atic.com: could not connect to host 1co-jp.net: did not receive HSTS header 1cover.com: could not connect to host @@ -947,46 +963,44 @@ 1three1.net: did not receive HSTS header 1xcess.com: did not receive HSTS header 1years.cc: could not connect to host 206rc.net: max-age too low: 2592000 20hs.cn: did not receive HSTS header 21lg.co: could not connect to host 247quickbooks.com: did not receive HSTS header 24hourpaint.com: could not connect to host 24sihu.com: could not connect to host -256pages.com: did not receive HSTS header 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: did not receive HSTS header +2ss.jp: could not connect to host 300651.ru: did not receive HSTS header 300m.com: did not receive HSTS header 300mbmovie24.com: did not receive HSTS header 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 32ph.com: could not connect to host 33drugstore.com: could not connect to host -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 3sreporting.com: did not receive HSTS header 404.sh: could not connect to host @@ -1001,17 +1015,16 @@ 4cclothing.com: could not connect to hos 4elements.com: did not receive HSTS header 4eyes.ch: did not receive HSTS header 4miners.net: could not connect to host 4mybaby.ch: did not receive HSTS header 4ourty2.org: did not receive HSTS header 4sqsu.eu: could not connect to host 4w-performers.link: could not connect to host 50millionablaze.org: could not connect to host -513vpn.net: did not receive HSTS header 517vpn.cn: could not connect to host 518maicai.com: did not receive HSTS header 540.co: did not receive HSTS header 54bf.com: could not connect to host 56ct.com: could not connect to host 5piecesofadvice.com: could not connect to host 5w5.la: could not connect to host 60ych.net: did not receive HSTS header @@ -1032,17 +1045,17 @@ 8522cn.com: did not receive HSTS header 88.to: could not connect to host 8888av.co: did not receive HSTS header 888lu.co: could not connect to host 89955.com: could not connect to host 899699.com: did not receive HSTS header 90smthng.com: could not connect to host 9118b.com: could not connect to host 911911.pw: could not connect to host -915ers.com: could not connect to host +915ers.com: did not receive HSTS header 922.be: could not connect to host 960news.ca: could not connect to host 9651678.ru: could not connect to host 98laba.com: could not connect to host 98laba.net: could not connect to host 99511.fi: could not connect to host 9iwan.net: did not receive HSTS header 9point6.com: could not connect to host @@ -1171,21 +1184,20 @@ aficotroceni.ro: did not receive HSTS he afiru.net: could not connect to host afmchandler.com: did not receive HSTS header afp548.tk: could not connect to host after.im: did not receive HSTS header afvallendoeje.nu: could not connect to host afyou.co.kr: could not connect to host afzco.asia: did not receive HSTS header agalaxyfarfaraway.co.uk: could not connect to host -agate.pw: did not receive HSTS header agatheetraphael.fr: could not connect to host agbremen.de: did not receive HSTS header agdalieso.com.ba: could not connect to host -agentseeker.ca: did not receive HSTS header +agentseeker.ca: could not connect to host agevio.com: could not connect to host agonswim.com: could not connect to host agrias.com.br: did not receive HSTS header agrimap.com: did not receive HSTS header agro-id.gov.ua: did not receive HSTS header agtv.com.br: did not receive HSTS header ahabingo.com: did not receive HSTS header ahfazahmed.net: did not receive HSTS header @@ -1271,17 +1283,16 @@ alphabuild.io: could not connect to host alphagamers.net: did not receive HSTS header alphalabs.xyz: could not connect to host alphasall.com: could not connect to host als-hardware.co.za: did not receive HSTS header 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 -alterbaum.net: did not receive HSTS header altfire.ca: could not connect to host 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 alza.at: did not receive HSTS header alza.co.uk: did not receive HSTS header alza.cz: did not receive HSTS header @@ -1557,22 +1568,19 @@ av.de: did not receive HSTS header avadatravel.com: did not receive HSTS header avantmfg.com: did not receive HSTS header avec-ou-sans-ordonnance.fr: could not connect to host aveling-adventure.co.uk: did not receive HSTS header avepol.cz: did not receive HSTS header avepol.eu: did not receive HSTS header aviacao.pt: did not receive HSTS header aviodeals.com: could not connect to host -avmo.pw: did not receive HSTS header avonlearningcampus.com: could not connect to host avqueen.cn: could not connect to host -avso.pw: did not receive HSTS header avus-automobile.com: did not receive HSTS header -avxo.pw: did not receive HSTS header awanderlustadventure.com: did not receive HSTS header awg-mode.de: did not receive HSTS header aww.moe: did not receive HSTS header awxg.com: could not connect to host axado.com.br: did not receive HSTS header axeny.com: did not receive HSTS header axg.io: did not receive HSTS header ayahuascaadvisor.com: could not connect to host @@ -1710,17 +1718,16 @@ berlatih.com: did not receive HSTS heade berlinleaks.com: could not connect to host bernieware.de: could not connect to host berrymark.be: max-age too low: 0 besixdouze.world: could not connect to host besola.de: did not receive HSTS header bestbeards.ca: could not connect to host bestcellular.com: did not receive HSTS header besthost.cz: did not receive HSTS header -bestmodels.su: did not receive HSTS header bestof1001.de: did not receive HSTS header bestorangeseo.com: could not connect to host betaclean.fr: did not receive HSTS header betafive.net: could not connect to host betakah.net: could not connect to host betcafearena.ro: did not receive HSTS header bethanyduke.com: max-age too low: 7776000 bethditto.com: did not receive HSTS header @@ -1776,16 +1783,17 @@ bimbo.com: did not receive HSTS header binaryfigments.com: max-age too low: 86400 binderapp.net: could not connect to host 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 birkman.com: did not receive HSTS header +biscoint.io: did not receive HSTS header bismarck.moe: did not receive HSTS header bisterfeldt.com: could not connect to host bitbit.org: did not receive HSTS header bitchan.it: could not connect to host bitcoinprivacy.net: did not receive HSTS header bitcoinworld.me: could not connect to host bitconcepts.co.uk: could not connect to host biteoftech.com: did not receive HSTS header @@ -1878,17 +1886,16 @@ booth.in.th: could not connect to host bootjp.me: did not receive HSTS header borderlinegroup.com: could not connect to host boringsecurity.net: could not connect to host boris.one: did not receive HSTS header boris64.net: 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 -boudah.pl: did not receive HSTS header bounceboxspc.com: did not receive HSTS header bouncecoffee.com: did not receive HSTS header bouwbedrijfpurmerend.nl: did not receive HSTS header bowlroll.net: max-age too low: 0 boxcryptor.com: did not receive HSTS header boxintense.com: did not receive HSTS header boyan.in: did not receive HSTS header bp-wahl.at: did not receive HSTS header @@ -1925,23 +1932,23 @@ 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 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 brunoonline.co.uk: could not connect to host +bryanquigley.com: did not receive HSTS header bryn.xyz: could not connect to host bsagan.fr: could not connect to host bsdtips.com: could not connect to host bsociabl.com: could not connect to host btc-e.com: did not receive HSTS header btcdlc.com: could not connect to host -btio.pw: did not receive HSTS header buben.tech: did not receive HSTS header bubulazi.com: did not receive HSTS header bubulazy.com: did not receive HSTS header buch-cuber.de: max-age too low: 0 buchheld.at: did not receive HSTS header bucket.tk: could not connect to host budgetthostels.nl: did not receive HSTS header budskap.eu: could not connect to host @@ -2036,17 +2043,17 @@ c3b.info: could not connect to host cabarave.com: could not connect to host cabsites.com: could not connect to host cabusar.fr: did not receive HSTS header caconnect.org: could not connect to host cadao.me: did not receive HSTS header caesreon.com: could not connect to host cafe-murr.de: could not connect to host cafe-scientifique.org.ec: could not connect to host -cafe-service.ru: could not connect to host +cafe-service.ru: did not receive HSTS header caim.cz: did not receive HSTS header caizx.com: did not receive HSTS header cajapopcorn.com: did not receive HSTS header cake.care: could not connect to host calcularpagerank.com.br: could not connect to host calendarr.com: did not receive HSTS header calgaryconstructionjobs.com: did not receive HSTS header calix.com: max-age too low: 0 @@ -2160,17 +2167,17 @@ cgerstner.eu: could not connect to host cgsshelper.tk: could not connect to host chahub.com: could not connect to host chainmonitor.com: could not connect to host championsofregnum.com: did not receive HSTS header chancat.blog: max-age too low: 2592000 chandlerredding.com: did not receive HSTS header changetip.com: did not receive HSTS header chanshiyu.com: did not receive HSTS header -chaos.fail: could not connect to host +chaos.fail: did not receive HSTS header chaoswebs.net: did not receive HSTS header charityclear.com: did not receive HSTS header charitystreet.co.uk: could not connect to host charliemcneive.com: could not connect to host charlipopkids.com.au: could not connect to host charnleyhouse.co.uk: did not receive HSTS header charp.eu: could not connect to host chartstoffarm.de: max-age too low: 10 @@ -2220,21 +2227,23 @@ chrisopperwall.com: did not receive HSTS chrisself.xyz: did not receive HSTS header christiaandruif.nl: could not connect to host christianbro.gq: could not connect to host christina-quast.de: did not receive HSTS header christophercolumbusfoundation.gov: could not connect to host christophheich.me: could not connect to host chrisupjohn.com: could not connect to host chrisvicmall.com: did not receive HSTS header +chriswarrick.com: did not receive HSTS header chrome: could not connect to host chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless) chrome.google.com: did not receive HSTS header (error ignored - included regardless) chrst.ph: could not connect to host chua.cf: could not connect to host +chuck.ovh: did not receive HSTS header chulado.com: did not receive HSTS header churchux.co: did not receive HSTS header churrasqueirafacil.com.br: could not connect to host cidr.ml: could not connect to host cigarblogs.net: could not connect to host cigi.site: could not connect to host ciicutini.ro: did not receive HSTS header cim2b.de: could not connect to host @@ -2356,18 +2365,20 @@ collectosaurus.com: did not receive HSTS collegepulse.org: could not connect to host collies.eu: max-age too low: 3 collins.press: did not receive HSTS header collinsartworks.com: did not receive HSTS header collision.fyi: could not connect to host colmexpro.com: did not receive HSTS header colognegaming.net: could not connect to host coloradocomputernetworking.net: could not connect to host +colorectalcompounding.com: did not receive HSTS header colorlib.com: did not receive HSTS header colorunhas.com.br: could not connect to host +cometonovascotia.ca: did not receive HSTS header comfortdom.ua: did not receive HSTS header comfortticket.de: did not receive HSTS header comfy.cafe: did not receive HSTS header comfy.moe: did not receive HSTS header comicspines.com: could not connect to host comitesaustria.at: could not connect to host comiteshopping.com: could not connect to host commercialplanet.eu: could not connect to host @@ -2599,17 +2610,16 @@ danijobs.com: could not connect to host danishenanigans.com: could not connect to host dankeblog.com: could not connect to host danmark.guide: could not connect to host dannycrichton.com: did not receive HSTS header danrl.de: could not connect to host danwillenberg.com: did not receive HSTS header daolerp.xyz: could not connect to host daplie.com: did not receive HSTS header -dareyou.be: did not receive HSTS header dargasia.is: could not connect to host dario.im: could not connect to host dark-x.cf: could not connect to host darkanzali.pl: max-age too low: 0 darkfriday.ddns.net: could not connect to host darkhole.cn: did not receive HSTS header darkkeepers.dk: could not connect to host darknebula.space: could not connect to host @@ -2682,17 +2692,16 @@ deinserverhost.de: did not receive HSTS dekasan.ru: could not connect to host delayrefunds.co.uk: could not connect to host deliverance.co.uk: could not connect to host deltaconcepts.de: did not receive HSTS header delvj.org: could not connect to host demdis.org: could not connect to host demilitarized.ninja: could not connect to host demo-server.us: could not connect to host -demo.swedbank.se: did not receive HSTS header demomanca.com: did not receive HSTS header demotops.com: did not receive HSTS header denh.am: did not receive HSTS header denisjean.fr: could not connect to host dentaldomain.org: did not receive HSTS header dentaldomain.ph: did not receive HSTS header denvercybersecurity.com: did not receive HSTS header denverprophit.us: did not receive HSTS header @@ -2745,16 +2754,17 @@ dhpiggott.net: did not receive HSTS head diablotine.rocks: could not connect to host diagnosia.com: did not receive HSTS header diamondcare.com.br: could not connect to host dianlujitao.com: did not receive HSTS header dicando.com: max-age too low: 2592000 dicelab.co.uk: could not connect to host dicionariofinanceiro.com: did not receive HSTS header dicionariopopular.com: did not receive HSTS header +dicoding.com: did not receive HSTS header dieb.photo: could not connect to host dierenkruiden.nl: could not connect to host diewebstube.de: could not connect to host diezel.com: could not connect to host diferenca.com: did not receive HSTS header digired.xyz: could not connect to host digitalbank.kz: could not connect to host digitaldaddy.net: could not connect to host @@ -2926,16 +2936,17 @@ dubik.su: did not receive HSTS header dudesunderwear.com.br: could not connect to host duelysthub.com: could not connect to host duerls.de: did not receive HSTS header dukec.me: could not connect to host dullsir.com: did not receive HSTS header dungi.org: could not connect to host 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 dycontrol.de: could not connect to host dylanscott.com.au: did not receive HSTS header dynamic-innovations.net: could not connect to host dynamize.solutions: could not connect to host dyrkar.com: did not receive HSTS header dzimejl.sk: did not receive HSTS header @@ -2999,17 +3010,16 @@ edelblack.ch: could not connect to host edelsteincosmetic.com: did not receive HSTS header eden-noel.at: could not connect to host edenaya.com: did not receive HSTS header edgereinvent.com: did not receive HSTS header ediscomp.sk: did not receive HSTS header edissecurity.sk: did not receive HSTS header edix.ru: could not connect to host edk.com.tr: did not receive HSTS header -edlinus.cn: did not receive HSTS header edmodo.com: did not receive HSTS header edpubs.gov: did not receive HSTS header eduardnikolenko.ru: could not connect to host educatio.tech: could not connect to host educourse.ga: could not connect to host 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 @@ -3063,33 +3073,33 @@ elenag.ga: could not connect to host elenagherta.ga: could not connect to host elenoon.ir: did not receive HSTS header elgacien.de: could not connect to host elimdengelen.com: did not receive HSTS header elite-porno.ru: could not connect to host elitecovering.fr: did not receive HSTS header elitefishtank.com: could not connect to host elmar-kraamzorg.nl: did not receive HSTS header -elna-service.com.ua: did not receive HSTS header elnutricionista.es: could not connect to host elohna.ch: did not receive HSTS header elpay.kz: did not receive HSTS header elpo.xyz: could not connect to host elsamakhin.com: could not connect to host elsemanario.com: did not receive HSTS header elsitar.com: could not connect to host email.lookout.com: could not connect to host email2rss.net: could not connect to host emanatepixels.com: could not connect to host emanga.su: did not receive HSTS header embroidered-stuff.com: could not connect to host emeldi-commerce.com: max-age too low: 0 emesolutions.net: did not receive HSTS header emiele.com.br: could not connect to host emilyhorsman.com: did not receive HSTS header +emilyjohnson.ga: did not receive HSTS header eminovic.me: could not connect to host emjainteractive.com: did not receive HSTS header emjimadhu.com: could not connect to host emmable.com: could not connect to host emmaliddell.com: could not connect to host emnitech.com: could not connect to host empleosentorreon.mx: could not connect to host empleostampico.com: did not receive HSTS header @@ -3237,17 +3247,17 @@ 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 exceptionalservers.com: could not connect to host exfiles.cz: did not receive HSTS header exgravitus.com: could not connect to host exno.co: could not connect to host exousiakaidunamis.xyz: could not connect to host -expertmile.com: did not receive HSTS header +expertmile.com: could not connect to host expo-designers.com: did not receive HSTS header expressfinance.co.za: did not receive HSTS header extrathemeshowcase.net: could not connect to host extratorrentlive.xyz: could not connect to host extratorrents.tech: could not connect to host extreemhost.nl: did not receive HSTS header extremenetworking.net: could not connect to host exy.pw: could not connect to host @@ -3265,16 +3275,17 @@ eztv.ch: did not receive HSTS header f-rickroll-g.pw: could not connect to host 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 fabriko.fr: did not receive HSTS header +fabrysociety.org: did not receive HSTS header factorable.net: did not receive HSTS header factorygw.com: did not receive HSTS header fadilus.com: did not receive HSTS header faesser.com: did not receive HSTS header fahmed.de: did not receive HSTS header fail4free.de: did not receive HSTS header failproof.be: max-age too low: 604800 fairkey.dk: did not receive HSTS header @@ -3287,17 +3298,16 @@ falconwiz.com: did not receive HSTS head falkhusemann.de: did not receive HSTS header falkp.no: did not receive HSTS header fallenangelspirits.uk: could not connect to host faluninfo.ba: did not receive HSTS header fam-weyer.de: 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 -familylawhotline.org: did not receive HSTS header famio.cn: could not connect to host fanflow.com: did not receive HSTS header fant.dk: did not receive HSTS header fantasticgardenersmelbourne.com.au: did not receive HSTS header fantasyescortsbirmingham.co.uk: did not receive HSTS header fantasyfootballpundit.com: did not receive HSTS header fanyl.cn: could not connect to host farces.com: did not receive HSTS header @@ -3429,17 +3439,16 @@ flushstudios.com: did not receive HSTS h flyaces.com: could not connect to host fm83.nl: could not connect to host fmi.gov: did not receive HSTS header fnvsecurity.com: could not connect to host fobc-usa.org: did not receive HSTS header fojtova.cz: did not receive HSTS header fojtovi.cz: did not receive HSTS header followback.net: did not receive HSTS header -foneo.com: did not receive HSTS header fonetiq.io: could not connect to host foo: 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 @@ -3936,16 +3945,17 @@ handinhandfoundation.org.uk: could not c handiworker.com: could not connect to host handleidingkwijt.com: did not receive HSTS header handsandall.com: did not receive HSTS header hanfu.la: could not connect to host hangar18-modelismo.com.br: could not connect to host hanimalis.fr: could not connect to host hans-natur.de: did not receive HSTS header hao2taiwan.com: max-age too low: 0 +haogoodair.ca: did not receive HSTS header haomwei.com: could not connect to host haoyugao.com: could not connect to host haozi.me: could not connect to host happix.nl: did not receive HSTS header happyandrelaxeddogs.eu: did not receive HSTS header happycoder.net: did not receive HSTS header happyfabric.me: did not receive HSTS header happygastro.com: could not connect to host @@ -3960,25 +3970,25 @@ harlentimberproducts.co.uk: did not rece harmonycosmetic.com: max-age too low: 300 harristony.com: could not connect to host hartlep.eu: could not connect to host hartmancpa.com: did not receive HSTS header harvestrenewal.org: did not receive HSTS header harz.cloud: could not connect to host has.vision: could not connect to host hash-list.com: could not connect to host +hashnode.com: did not receive HSTS header hasilocke.de: did not receive HSTS header hasinase.de: did not receive HSTS header haste.ch: could not connect to host hastherebeenamassshooting.today: could not connect to host hatoko.net: could not connect to host haufschild.de: could not connect to host haurumcraft.net: could not connect to host hausarzt-stader-str.de: did not receive HSTS header -havasuinsurance.com: did not receive HSTS header haveeruexaminer.com: could not connect to host havenmoon.com: could not connect to host havenswift-hosting.co.uk: did not receive HSTS header hawthornharpist.com: could not connect to host haxoff.com: could not connect to host haxon.me: could not connect to host haxx.hu: did not receive HSTS header haydenhill.us: could not connect to host @@ -4036,16 +4046,17 @@ hex2013.com: did not receive HSTS header heyguevara.com: could not connect to host heywoodtown.co.uk: did not receive HSTS header hibilog.com: could not connect to host hicn.gq: could not connect to host hiddendepth.ie: max-age too low: 0 hiddenmail.xyz: could not connect to host hiddenrefuge.eu.org: could not connect to host hideftv.deals: could not connect to host +hieu.com.au: did not receive HSTS header hiexmerida-mailing.com: did not receive HSTS header highgrove.org.uk: could not connect to host highseer.com: did not receive HSTS header highsurf-miyazaki.com: did not receive HSTS header hightower.eu: could not connect to host highvelocitydesign.com: could not connect to host hiisukun.com: could not connect to host hiitcentre.com: did not receive HSTS header @@ -4195,33 +4206,34 @@ icloud.net: could not connect to host icntorrent.download: could not connect to host icq-project.net: could not connect to host icreative.nl: did not receive HSTS header id-co.in: could not connect to host id-conf.com: did not receive HSTS header ideal-envelopes.co.uk: did not receive HSTS header idealmoto.com: did not receive HSTS header idealmykonos.com: did not receive HSTS header -ideaman924.com: did not receive HSTS header +ideaman924.com: could not connect to host ideaplus.me: could not connect to host ideasmeetingpoint.com: could not connect to host ideation-inc.co.jp: could not connect to host idedr.com: could not connect to host identitylabs.uk: could not connect to host identitysandbox.gov: could not connect to host idgsupply.com: did not receive HSTS header idisplay.es: did not receive HSTS header idlekernel.com: could not connect to host idontexist.me: did not receive HSTS header ierna.com: did not receive HSTS header ies-italia.it: did not receive HSTS header ies.id.lv: could not connect to host ievgenialehner.com: did not receive HSTS header ifad.org: did not receive HSTS header ifastuniversity.com: did not receive HSTS header +ifengge.me: did not receive HSTS header ifleurs.com: could not connect to host ifx.ee: could not connect to host igforums.com: could not connect to host igiftcards.nl: did not receive HSTS header ignatisd.gr: did not receive HSTS header igule.net: could not connect to host ihrlotto.de: could not connect to host ihrnationalrat.ch: could not connect to host @@ -4409,16 +4421,17 @@ ishangirdhar.com: could not connect to h ishillaryclintoninprisonyet.com: could not connect to host isitamor.pm: could not connect to host iskaz.rs: did not receive HSTS header islandzero.net: did not receive HSTS header islief.com: did not receive HSTS header ismetroonfiretoday.com: could not connect to host isogen5.com: could not connect to host isogram.nl: could not connect to host +isreedyintheuk.com: did not receive HSTS header istanbultravelguide.info: could not connect to host istaspirtslietas.lv: did not receive HSTS header it-cave.com: could not connect to host it-go.net: did not receive HSTS header it-schwerin.de: could not connect to host itechgeek.com: max-age too low: 0 items.lv: did not receive HSTS header itemton.com: could not connect to host @@ -4621,17 +4634,17 @@ jrgold.me: could not connect to host jrmd.io: could not connect to host jrvar.com: could not connect to host jsanders.us: did not receive HSTS header jsbentertainment.nl: did not receive HSTS header jsg-technologies.de: did not receive HSTS header jualautoclave.com: did not receive HSTS header jualssh.com: could not connect to host juandesouza.com: did not receive HSTS header -juka.pp.ua: could not connect to host +juka.pp.ua: did not receive HSTS header juku-wing.jp: could not connect to host juliamweber.de: could not connect to host julian-kipka.de: did not receive HSTS header julian-witusch.de: could not connect to host julido.de: did not receive HSTS header jumbox.xyz: could not connect to host jumbster.com: max-age too low: 2592000 jumping-duck.com: could not connect to host @@ -4684,16 +4697,17 @@ kanscooking.org: did not receive HSTS he kany.me: did not receive HSTS header kanzlei-wirtschaftsrecht.berlin: did not receive HSTS header kaohub.com: could not connect to host kaplatz.is: could not connect to host kapucini.si: max-age too low: 0 kaputt.com: could not connect to host kapverde.guide: could not connect to host karaoketonight.com: could not connect to host +karlis-kavacis.id.lv: did not receive HSTS header karloskontana.tk: could not connect to host karmaflux.com: did not receive HSTS header karting34.com: did not receive HSTS header kashdash.ca: could not connect to host katiaetdavid.fr: could not connect to host katoju.co.jp: could not connect to host katproxy.al: did not receive HSTS header katproxy.online: could not connect to host @@ -4791,17 +4805,17 @@ klaxn.org: could not connect to host klean-ritekc.com: did not receive HSTS header kleertjesvoordelig.nl: could not connect to host kleinerarchitekturfuehrer.de: could not connect to host kleppe.co: could not connect to host kletterkater.com: did not receive HSTS header klicktojob.de: could not connect to host klunkergarten.org: could not connect to host knapen.io: max-age too low: 604800 -knccloud.com: could not connect to host +knccloud.com: did not receive HSTS header kngk-transavto.ru: could not connect to host knigadel.com: did not receive HSTS header knightsbridgegroup.org: could not connect to host knowdebt.org: did not receive HSTS header knowledgesnap.com: could not connect to host knowledgesnapsites.com: could not connect to host koddsson.com: did not receive HSTS header kode-it.de: could not connect to host @@ -4911,17 +4925,16 @@ lagier.xyz: could not connect to host lagoza.name: could not connect to host lainchan.org: did not receive HSTS header laisashop.com.br: could not connect to host lamaland.ru: did not receive HSTS header lambda-complex.org: could not connect to host lambdafive.co.uk: could not connect to host lamomebijou.paris: did not receive HSTS header lampl.info: did not receive HSTS header -lana.swedbank.se: did not receive HSTS header lanauzedesigns.com: did not receive HSTS header lanboll.com: could not connect to host lancehoteis.com: did not receive HSTS header lancehoteis.com.br: did not receive HSTS header land-links.org: 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 @@ -5235,17 +5248,17 @@ mafamane.com: could not connect to host mafiareturns.com: max-age too low: 2592000 magenx.com: did not receive HSTS header magia360.com: did not receive HSTS header magneticanvil.com: did not receive HSTS header mahamed91.pw: could not connect to host mahfouzadedimeji.com: did not receive HSTS header mail-settings.google.com: did not receive HSTS header (error ignored - included regardless) mail.google.com: did not receive HSTS header (error ignored - included regardless) -mail.yahoo.com: max-age too low: 60 +mail.yahoo.com: max-age too low: 300 mailchuck.com: could not connect to host maildragon.com: could not connect to host mailgarant.nl: could not connect to host mailhost.it: could not connect to host mailing-femprendedores.com: did not receive HSTS header mailing-jbgg.com: did not receive HSTS header main-street-seo.com: did not receive HSTS header mainlywrenches.co: max-age too low: 0 @@ -5292,17 +5305,16 @@ manifestbin.com: did not receive HSTS he manitasicily.com: did not receive HSTS header manningbrothers.com: did not receive HSTS header manshop24.com: could not connect to host mansion-note.com: did not receive HSTS header manududu.com.br: did not receive HSTS header maomaofuli.vip: could not connect to host marcelparra.com: could not connect to host marchagen.nl: did not receive HSTS header -marco-polo-reisen.com: did not receive HSTS header marco01809.net: could not connect to host marcoececilia.it: did not receive HSTS header marcofinke.de: could not connect to host marcontrol.com: did not receive HSTS header marcosteixeira.tk: could not connect to host marcschlagenhauf.de: could not connect to host marcus-scheffler.com: did not receive HSTS header marcush.de: could not connect to host @@ -5325,17 +5337,17 @@ markrobin.de: did not receive HSTS heade marksill.com: could not connect to host marktboten.de: did not receive HSTS header marktissink.nl: did not receive HSTS header markus-dev.com: did not receive HSTS header markusweimar.de: did not receive HSTS header marleyresort.com: did not receive HSTS header marriottvetcareers.com: could not connect to host marshut.net: could not connect to host -martensson.io: could not connect to host +martensson.io: did not receive HSTS header martialc.be: could not connect to host martiert.com: could not connect to host martijnvhoof.nl: 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 martins.im: could not connect to host @@ -5521,16 +5533,17 @@ mightydicks.tech: could not connect to h mightysounds.cz: max-age too low: 0 migrator.co: could not connect to host miguksaram.com: could not connect to host mijcorijneveld.nl: did not receive HSTS header mijn-email.org: could not connect to host mijnetickets.nl: did not receive HSTS header mijnkredietpaspoort.nl: could not connect to host mijnsite.ovh: did not receive HSTS header +mijnstembureau.nl: did not receive HSTS header mikadesign.se: did not receive HSTS header mikaelemilsson.net: did not receive HSTS header mikeburns.com: could not connect to host mikeg.de: did not receive HSTS header mikeology.org: could not connect to host mikepair.net: could not connect to host mikeybot.com: could not connect to host mikii.club: could not connect to host @@ -5628,17 +5641,17 @@ modydev.club: could not connect to host moe4sale.in: did not receive HSTS header moebel-nagel.de: did not receive HSTS header moegirl.org: did not receive HSTS header moellers.it: could not connect to host moelord.org: could not connect to host moen.io: did not receive HSTS header mogry.net: could not connect to host moho.kr: could not connect to host -mohs.es: did not receive HSTS header +mohs.es: could not connect to host moitur.com: could not connect to host mokhtarmial.com: did not receive HSTS header mols.me: could not connect to host molun.net: did not receive HSTS header mommel.com: could not connect to host mommelonline.de: could not connect to host momoka.moe: could not connect to host mon-a-lisa.com: did not receive HSTS header @@ -5733,16 +5746,17 @@ musicalbim.com.br: did not receive HSTS musikkfondene.no: did not receive HSTS header mustardking.me: did not receive HSTS header mustika.cf: could not connect to host mutamatic.com: could not connect to host mutuelle-obligatoire-pme.fr: did not receive HSTS header muzgra.in: did not receive HSTS header muzykaprzeszladoplay.pl: could not connect to host mvanmarketing.nl: did not receive HSTS header +mvnet.com.br: did not receive HSTS header mvsecurity.nl: could not connect to host mwohlfarth.de: did not receive HSTS header my-owncloud.com: could not connect to host my-voice.nl: did not receive HSTS header my.alfresco.com: did not receive HSTS header my.swedbank.se: did not receive HSTS header myairshop.gr: could not connect to host myandroid.tools: could not connect to host @@ -5820,16 +5834,17 @@ nan.zone: could not connect to host nandex.org: could not connect to host naniki.co.uk: did not receive HSTS header 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 nasralmabrooka.com: did not receive HSTS header natalia-fadeeva.ru: could not connect to host natalia.io: could not connect to host natalieandjoshua.com: could not connect to host natalt.org: did not receive HSTS header nathanmfarrugia.com: did not receive HSTS header nationwidevehiclecontracts.co.uk: did not receive HSTS header @@ -6069,16 +6084,17 @@ occentus.net: did not receive HSTS heade ochaken.cf: could not connect to host ocrami.us: did not receive HSTS header octocat.ninja: could not connect to host oddmouse.com: could not connect to host odin.xxx: could not connect to host odinoffice.no: did not receive HSTS header odysseyandco.com: could not connect to host oe8.bet: could not connect to host +oestepaulista.net: did not receive HSTS header ofcourselanguages.com: could not connect to host offenedialoge.de: max-age too low: 2592000 officeclub.com.mx: did not receive HSTS header offshore-firma.org: could not connect to host offshore-unternehmen.com: could not connect to host offshorefirma-gruenden.com: could not connect to host offshoremarineparts.com: did not receive HSTS header oficinadocelular.com.br: could not connect to host @@ -6128,25 +6144,24 @@ onespiritinc.com: did not receive HSTS h onet.space: could not connect to host onetwentyseven001.com: did not receive HSTS header onewpst.com: did not receive HSTS header oniichan.us: did not receive HSTS header onioncloud.org: could not connect to host onionsburg.com: could not connect to host online-casino.eu: did not receive HSTS header online-wetten.de: did not receive HSTS header -online.swedbank.se: did not receive HSTS header onlinebiller.com: did not receive HSTS header onlinecompliance.org: did not receive HSTS header onlinedemo.hu: could not connect to host onlinedeposit.us: could not connect to host onlinekasino.de: did not receive HSTS header onlinepollsph.com: could not connect to host onlineschadestaat.nl: did not receive HSTS header -onlinespielothek.com: did not receive HSTS header +onlinespielothek.com: could not connect to host onlinewetten.de: could not connect to host only-roses.co.uk: did not receive HSTS header only-roses.com: did not receive HSTS header onlyshopstation.com: did not receive HSTS header onlyzero.net: could not connect to host onmuvo.com: did not receive HSTS header onovlena.dn.ua: could not connect to host onpatient.com: did not receive HSTS header @@ -6328,17 +6343,16 @@ paulbunyanmls.com: did not receive HSTS paulproell.at: could not connect to host paulyang.cn: did not receive HSTS header pavelfojt.cz: did not receive HSTS header paxdei.com.br: could not connect to host paxwinkel.nl: did not receive HSTS header pay.gigahost.dk: did not receive HSTS header paybro.eu: did not receive HSTS header payfreez.com: could not connect to host -payloc.io: did not receive HSTS header payments-reference.org: could not connect to host payments.google.com: did not receive HSTS header (error ignored - included regardless) payroll.ch: could not connect to host paytwopay.com: could not connect to host pbapp.net: did not receive HSTS header pbbr.com: did not receive HSTS header pbprint.ru: did not receive HSTS header pc-nf.de: did not receive HSTS header @@ -6388,17 +6402,16 @@ personalcommunicationsecurity.com: could personaldatabasen.no: could not connect to host personalinjurylist.com: did not receive HSTS header personalizedtouch.co: could not connect to host perthdevicelab.com: did not receive HSTS header pestalozzishop.com.br: could not connect to host pet-nsk.ru: could not connect to host petchart.net: could not connect to host peterkshultz.com: did not receive HSTS header -peterlew.is: did not receive HSTS header petersmark.com: did not receive HSTS header pethub.com: did not receive HSTS header petit.site: could not connect to host petplum.com: could not connect to host petravdbos.nl: did not receive HSTS header petrkrapek.cz: did not receive HSTS header petrolplus.ru: max-age too low: 7776000 petrovsky.pro: could not connect to host @@ -6440,17 +6453,16 @@ pidatacenters.com: did not receive HSTS pidomex.com: did not receive HSTS header pieterjangeeroms.me: could not connect to host piggott.me.uk: did not receive HSTS header pilgermaske.org: did not receive HSTS header piligrimname.com: could not connect to host pillowandpepper.com: did not receive HSTS header pimpmymac.ru: did not receive HSTS header pims.global: did not receive HSTS header -pin.net.au: did not receive HSTS header pinkyf.com: could not connect to host pinpayments.com: did not receive HSTS header pippen.io: could not connect to host pirata.ga: could not connect to host piratebit.tech: could not connect to host piratedb.com: could not connect to host piratedot.com: could not connect to host piratelist.online: could not connect to host @@ -6889,17 +6901,17 @@ res-rheingau.de: did not receive HSTS he res42.com: could not connect to host reserve-online.net: did not receive HSTS header residentsinsurance.co.uk: did not receive HSTS header resl20.servehttp.com: could not connect to host respice.xyz: could not connect to host respostas.com.br: did not receive HSTS header restaurace-klokocka.cz: did not receive HSTS header restchart.com: did not receive HSTS header -restioson.me: did not receive HSTS header +restioson.me: could not connect to host restrealitaet.de: did not receive HSTS header returnofwar.com: could not connect to host revapost.ch: could not connect to host revealdata.com: did not receive HSTS header revelaciones.tv: could not connect to host revello.org: did not receive HSTS header reverie.pw: could not connect to host review.info: did not receive HSTS header @@ -6995,32 +7007,34 @@ rough.nu: could not connect to host roundtheme.com: did not receive HSTS header rous.se: could not connect to host rouvray.org: could not connect to host royal-forest.org: max-age too low: 0 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 +rozalynne-dawn.ga: 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 rsmaps.org: could not connect to host rubbereggs.ca: could not connect to host rubecodeberg.com: could not connect to host rubenschulz.nl: could not connect to host rubi-ka.net: max-age too low: 0 ruborr.se: did not receive HSTS header rubysecurity.org: did not receive HSTS header 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 ruig.jp: could not connect to host ruiming.me: did not receive HSTS header ruitershoponline.nl: 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 @@ -7051,16 +7065,17 @@ safematix.com: could not connect to host safemovescheme.co.uk: could not connect to host safersurfing.eu: did not receive HSTS header safewings-nh.nl: could not connect to host sagarhandicraft.com: could not connect to host sageth.com: max-age too low: 0 sah3.net: could not connect to host saharalondon.com: max-age too low: 0 saharmassachi.com: could not connect to host +saifoundation.in: did not receive HSTS header sail-nyc.com: did not receive HSTS header saint-astier-triathlon.com: did not receive HSTS header saintjohnlutheran.church: did not receive HSTS header sairai.bid: did not receive HSTS header sakaki.anime.my: max-age too low: 5184000 sakaserver.com: did not receive HSTS header sakib.ninja: did not receive HSTS header sakurabuff.com: could not connect to host @@ -7366,16 +7381,17 @@ silentcircle.com: did not receive HSTS h silentcircle.org: could not connect to host silentlink.io: could not connect to host silentundo.org: did not receive HSTS header silicagelpackets.ca: did not receive HSTS header silver-drachenkrieger.de: did not receive HSTS header silverhome.ninja: could not connect to host silverpvp.com: could not connect to host simbast.com: could not connect to host +simbeton.nl: did not receive HSTS header simbihaiti.com: did not receive HSTS header simccorp.com: did not receive HSTS header simeon.us: max-age too low: 2592000 simfri.com: did not receive HSTS header simnovo.net: did not receive HSTS header simobilklub.si: could not connect to host simod.org: could not connect to host simon-pokorny.com: did not receive HSTS header @@ -7443,29 +7459,28 @@ slightfuture.com: did not receive HSTS h slix.io: could not connect to host slope.haus: could not connect to host slovakiana.sk: did not receive HSTS header 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 smallshopit.com: did not receive HSTS header -smares.de: could not connect to host +smares.de: 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 smartcleaningcenter.nl: did not receive HSTS header smartcoin.com.br: could not connect to host smarterskies.gov: did not receive HSTS header smartfon4you.ru: max-age too low: 0 smarthomedna.com: did not receive HSTS header smartofficesandsmarthomes.com: did not receive HSTS header smartphone.continental.com: could not connect to host smartrak.co.nz: did not receive HSTS header -smartwurk.nl: did not receive HSTS header smdev.fr: could not connect to host smet.us: could not connect to host smexpt.com: did not receive HSTS header smimea.com: could not connect to host smirkingwhorefromhighgarden.pro: could not connect to host smittix.co.uk: did not receive HSTS header smkn1lengkong.sch.id: did not receive HSTS header smksi2.com: could not connect to host @@ -7529,17 +7544,17 @@ soucorneteiro.com.br: could not connect soulfulglamour.uk: could not connect to host soundforsound.co.uk: did not receive HSTS header sourcelair.com: did not receive HSTS header southcoastswords.com: did not receive HSTS header southernjamusa.com: did not receive HSTS header southgale.condos: could not connect to host southside-crew.club: could not connect to host southworcestershiregpservices.co.uk: could not connect to host -souvik.me: 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 spacedust.xyz: could not connect to host spacefish.biz: could not connect to host spacehq.org: could not connect to host @@ -7624,16 +7639,17 @@ standardssuck.org: did not receive HSTS standingmist.com: did not receive HSTS header stannahtrapliften.nl: did not receive HSTS header starandshield.com: did not receive HSTS header starapple.nl: did not receive HSTS header starfeeling.net: could not connect to host stargatepartners.com: did not receive HSTS header starmusic.ga: did not receive HSTS header startuponcloud.com: max-age too low: 2678400 +startuppeople.co.uk: did not receive HSTS header stash.ai: did not receive HSTS header state-sponsored-actors.net: could not connect to host statementinsertsforless.com: did not receive HSTS header stateofexception.io: could not connect to host static.or.at: did not receive HSTS header staticanime.net: could not connect to host stationaryjourney.com: did not receive HSTS header stationcharlie.com: did not receive HSTS header @@ -7668,16 +7684,17 @@ stn.me.uk: did not receive HSTS header stockseyeserum.com: could not connect to host stocktrade.de: could not connect to host stoffe-monster.de: did not receive HSTS header stoick.me: could not connect to host stole-my.bike: could not connect to host stole-my.tv: could not connect to host stolkschepen.nl: did not receive HSTS header stonecutterscommunity.com: could not connect to host +stopbreakupnow.org: did not receive HSTS header stopwoodfin.org: could not connect to host storbritannien.guide: could not connect to host storecove.com: did not receive HSTS header storeden.com: did not receive HSTS header storefrontify.com: did not receive HSTS header storiesofhealth.org: could not connect to host storillo.com: did not receive HSTS header stormhub.org: could not connect to host @@ -7711,16 +7728,17 @@ stugb.de: did not receive HSTS header sturbock.me: did not receive HSTS header sturdio.com.br: could not connect to host stylenda.com: could not connect to host stytt.com: could not connect to host subbing.work: could not connect to host subdimension.org: could not connect to host subeesu.com: could not connect to host subhacker.net: did not receive HSTS header +sublevel.net: did not receive HSTS header subsys.no: did not receive HSTS header subtitle.rip: could not connect to host subwayz.de: did not receive HSTS header sudo.li: did not receive HSTS header sudokian.io: 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 @@ -7836,17 +7854,17 @@ tandarts-haarlem.nl: did not receive HST tangel.me: could not connect to host tangibilizing.com: could not connect to host taniesianie.pl: did not receive HSTS header tankfreunde.de: did not receive HSTS header tante-bugil.net: could not connect to host tantotiempo.de: did not receive HSTS header tanze-jetzt.de: could not connect to host taotuba.net: did not receive HSTS header -taozj.org: did not receive HSTS header +taozj.org: could not connect to host tapfinder.ca: could not connect to host tapka.cz: did not receive HSTS header tappublisher.com: did not receive HSTS header taravancil.com: did not receive HSTS header targaryen.house: could not connect to host tarhauskielto.fi: did not receive HSTS header tartaros.fi: could not connect to host taskstats.com: could not connect to host @@ -8070,17 +8088,17 @@ thorncreek.net: did not receive HSTS hea thriveapproach.co.uk: did not receive HSTS header thrivewellnesshub.co.za: did not receive HSTS header throughthelookingglasslens.co.uk: could not connect to host thumbtack.com: did not receive HSTS header thundercampaign.com: could not connect to host ti.blog.br: could not connect to host tianxing.pro: did not receive HSTS header tianxingvpn.pro: could not connect to host -tibbitshall.ca: did not receive HSTS header +tibbitshall.ca: could not connect to host tickopa.co.uk: could not connect to host tickreport.com: did not receive HSTS header ticktock.today: did not receive HSTS header tictactux.de: could not connect to host tidmore.us: could not connect to host tiendschuurstraat.nl: could not connect to host tiensnet.com: could not connect to host tierrarp.com: could not connect to host @@ -8107,16 +8125,18 @@ timeserver3.de: could not connect to hos timestamp.io: did not receive HSTS header timhjalpen.se: could not connect to host timnash.co.uk: did not receive HSTS header timotrans.de: did not receive HSTS header timotrans.eu: did not receive HSTS header timowi.de: could not connect to host timowi.net: could not connect to host timschubert.net: max-age too low: 172800 +timtj.ca: did not receive HSTS header +timweb.ca: did not receive HSTS header timwittenberg.com: could not connect to host tinchbear.xyz: could not connect to host tindewen.net: could not connect to host tipsyk.ru: could not connect to host tiredofeating.com: could not connect to host tiremoni.ch: did not receive HSTS header tirex.media: did not receive HSTS header titanlab.de: could not connect to host @@ -8203,17 +8223,17 @@ totalworkout.fitness: did not receive HS totem-eshop.cz: could not connect to host toucedo.de: could not connect to host touchbasemail.com: did not receive HSTS header touchpointidg.us: could not connect to host touchscreen-handy.de: did not receive HSTS header touchstonefms.co.uk: did not receive HSTS header touchtable.nl: did not receive HSTS header tourpeer.com: did not receive HSTS header -toutenmusic.fr: did not receive HSTS header +townofbridgewater.ca: did not receive HSTS header toxme.se: could not connect to host toyotamotala.se: could not connect to host tpbcdn.com: could not connect to host tpe-edu.com: could not connect to host tpms4u.at: did not receive HSTS header tracker-gps.ch: could not connect to host tracktivity.com.au: did not receive HSTS header trade-smart.ru: could not connect to host @@ -8314,23 +8334,22 @@ twee-onder-een-kap-woning-in-leeuwarden- twee-onder-een-kap-woning-in-pekela-kopen.nl: could not connect to host twee-onder-een-kap-woning-in-rijnwaarden-kopen.nl: could not connect to host twee-onder-een-kap-woning-in-sudwest-fryslan-kopen.nl: could not connect to host twee-onder-een-kap-woning-in-veendam-kopen.nl: could not connect to host twee-onder-een-kap-woning-in-zuidplas-kopen.nl: could not connect to host twee-onder-een-kap-woning-in-zwartewaterland-kopen.nl: could not connect to host tweeondereenkapverkopen.nl: could not connect to host tweeondereenkapwoningverkopen.nl: could not connect to host -tweetfreq.net: did not receive HSTS header tweetify.io: could not connect to host twillionmas.com: could not connect to host twinkseason.ca: could not connect to host twinkseason.co: could not connect to host twinkseason.co.uk: could not connect to host -twinkseason.com: could not connect to host +twinkseason.com: did not receive HSTS header twinkseason.net: could not connect to host twinkseason.org: could not connect to host twinkseason.xyz: could not connect to host twist.party: could not connect to host twogo.com: did not receive HSTS header twolinepassbrewing.com: could not connect to host twolivelife.com: could not connect to host tx041cap.org: did not receive HSTS header @@ -8477,16 +8496,17 @@ utumno.ch: did not receive HSTS header utvbloggen.se: did not receive HSTS header uvarov.pw: did not receive HSTS header uwstartups.com: could not connect to host uxux.pl: could not connect to host uyym.com: could not connect to host uzmandroid.com: did not receive HSTS header uzmandroid.net: could not connect to host uzmandroid.top: could not connect to host +v-desk.ga: did not receive HSTS header v0rtex.xyz: could not connect to host v0tti.com: could not connect to host v2.pw: did not receive HSTS header v2ex.us: did not receive HSTS header v4s.ro: did not receive HSTS header v4veedu.com: could not connect to host v7.cl: could not connect to host v789xl.com: did not receive HSTS header @@ -8515,17 +8535,16 @@ vanderkley.it: could not connect to host vanestack.com: could not connect to host vanetv.com: could not connect to host vanitas.xyz: could not connect to host vanitynailworkz.com: could not connect to host vansieleghem.com: could not connect to host vapordepot.jp: did not receive HSTS header vasa-webstranka.sk: did not receive HSTS header vasanth.org: could not connect to host -vasports.com.au: did not receive HSTS header vbest.net: could not connect to host vbhelp.org: could not connect to host vbulletin-russia.com: could not connect to host vbulletinrussia.com: could not connect to host vcdove.com: could not connect to host vcr.re: could not connect to host vdhco.be: did not receive HSTS header veblen.com: did not receive HSTS header @@ -8643,16 +8662,17 @@ vpip.net: could not connect to host vpl.me: did not receive HSTS header vpn-byen.dk: did not receive HSTS header vpn.black: could not connect to host vpn.pics: did not receive HSTS header vpnhot.com: could not connect to host vps-szerver-berles.hu: could not connect to host vpsmojo.com: could not connect to host vratny.space: could not connect to host +vriendenvoordeel.com: did not receive HSTS header vrijstaandhuis-in-alphen-aan-den-rijn-kopen.nl: could not connect to host vrijstaandhuis-in-brielle-kopen.nl: could not connect to host vrijstaandhuis-in-delfzijl-kopen.nl: could not connect to host vrijstaandhuis-in-friesland-kopen.nl: could not connect to host vrijstaandhuis-in-laren-kopen.nl: could not connect to host vrijstaandhuis-in-leeuwarden-kopen.nl: could not connect to host vrijstaandhuis-in-veendam-kopen.nl: could not connect to host vrijstaandhuis-in-zeeland-kopen.nl: could not connect to host @@ -8704,18 +8724,19 @@ 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 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 wave.is: could not connect to host -wavefloatrooms.com: could not connect to host +wavefloatrooms.com: did not receive HSTS header wavefrontsystemstech.com: could not connect to host we-bb.com: could not connect to host wear2work.nl: did not receive HSTS header wearesouthafricans.com: did not receive HSTS header weaverhairextensions.nl: could not connect to host web-industry.fr: could not connect to host web-insider.net: could not connect to host web-redacteuren.nl: max-age too low: 0 @@ -8789,17 +8810,17 @@ wettbuero.de: did not receive HSTS heade wetten.eu: did not receive HSTS header wettertoertchen.com: could not connect to host wetttipps.com: could not connect to host wetttipps.de: could not connect to host wevahoo.com: could not connect to host wevolver.com: did not receive HSTS header wewillgo.com: did not receive HSTS header wewillgo.org: did not receive HSTS header -wewlad.me: did not receive HSTS header +wewlad.me: could not connect to host wftda.com: did not receive HSTS header wg3k.us: 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
--- 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(1520969963113000); +const PRTime gPreloadListExpirationTime = INT64_C(1521056747051000); %% 0-1.party, 1 0.me.uk, 1 00001.am, 1 00002.am, 1 0005pay.com, 1 0010100.net, 1 00220022.net, 1 @@ -214,16 +214,17 @@ 247healthshop.com, 1 247medplan.com, 1 2488.ch, 1 24hrs.shopping, 1 24ip.com, 1 24ip.de, 1 24ip.fr, 1 24kbet.com, 1 256k.me, 1 +256pages.com, 1 25reinyan25.net, 1 2600edinburgh.org, 1 2600hq.com, 1 263.info, 1 27728522.com, 1 281180.de, 1 28spots.net, 1 29227.com, 1 @@ -276,16 +277,17 @@ 365healthworld.com, 1 365maya.com, 1 365skulls.com, 1 3778vip.com, 1 379700.com, 1 38888msc.com, 1 38blog.com, 1 393335.ml, 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 @@ -361,16 +363,17 @@ 4winds.pt, 1 4x.fi, 1 4x4.lk, 1 4xlabs.co, 1 500k.nl, 1 500p.xyz, 1 50lakeshore.com, 1 50north.de, 1 50plusnet.nl, 1 +513vpn.net, 1 525.info, 1 52neptune.com, 1 5432.cc, 1 54below.com, 1 5533445.com, 1 555fl.com, 1 555xl.com, 1 55scc.com, 1 @@ -931,16 +934,17 @@ afrodigital.uk, 1 after.digital, 1 afterhate.fr, 1 afterstack.net, 1 afuh.de, 1 afva.net, 1 ag-websolutions.de, 1 agalliasis.ch, 1 agamsecurity.ch, 1 +agate.pw, 1 ageg.ca, 1 agenciadeempregosdourados.com.br, 1 agenciafiscal.pe, 1 agencymanager.be, 1 agenda-loto.net, 0 agenda21senden.de, 1 agent-grow.com, 1 agent6.com.au, 1 @@ -1343,16 +1347,17 @@ alspolska.pl, 1 alstroemeria.org, 1 alt-three.com, 1 alt.org, 1 altahrim.net, 1 altaide.com, 1 altbinaries.com, 1 altedirect.com, 1 alter-news.fr, 1 +alterbaum.net, 1 altercpa.ru, 1 alternador.com.br, 1 alternative.bike, 1 alternativebit.fr, 1 alternativedev.ca, 1 alternativet.party, 1 alterspalter.de, 1 altesses.eu, 1 @@ -2425,28 +2430,31 @@ averam.net, 1 averen.co.uk, 1 avg.club, 1 avi9526.pp.ua, 1 aviationstrategy.aero, 1 avid.blue, 1 avidcruiser.com, 1 aviv.nyc, 1 avmemo.com, 1 +avmo.pw, 1 avmoo.com, 1 avnet.ws, 1 avotoma.com, 1 avpres.net, 1 +avso.pw, 1 avsox.com, 1 avspot.net, 1 avticket.ru, 1 avtoforex.ru, 1 avtogara-isperih.com, 1 avtosept.by, 1 avtovokzaly.ru, 1 avvcorda.com, 1 +avxo.pw, 1 awan.tech, 1 awaremi-tai.com, 1 awaro.net, 1 awbouncycastlehire.com, 1 awccanadianpharmacy.com, 1 awei.pub, 1 awen.me, 1 awesomebouncycastles.co.uk, 1 @@ -3089,16 +3097,17 @@ bestessaycheap.com, 1 bestessayhelp.com, 1 bestfitnesswatchreview.info, 1 bestgiftever.ca, 1 bestgifts4you.com, 1 besthotsales.com, 1 bestlashesandbrows.com, 1 bestlashesandbrows.hu, 1 bestleftwild.com, 1 +bestmodels.su, 1 bestmotherfucking.website, 1 bestoliveoils.com, 1 bestpartyhire.com, 1 bestperfumebrands.com, 1 bestschools.top, 1 bestseries.tv, 1 bestwarezone.com, 1 bestwebsite.gallery, 1 @@ -3353,17 +3362,16 @@ birdymanbestreviews.com, 1 birgit-rydlewski.de, 1 birkengarten.ch, 1 birkhoff.me, 1 birminghamcastlehire.co.uk, 1 birminghamsunset.com, 1 birthdaytip.com, 1 birthmatters.us, 1 birzan.org, 1 -biscoint.io, 1 biscuits-rec.com, 1 biscuits-shop.com, 1 bismarck-tb.de, 1 bison.co, 1 bissalama.org, 1 bistrocean.com, 1 biswas.me, 1 bit-cloud.de, 1 @@ -3827,16 +3835,17 @@ 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 boueki.org, 1 bougeret.fr, 1 boukoubengo.com, 1 bounce-a-mania.co.uk, 1 bounce-a-roo.co.uk, 1 bounce-abouts.com, 1 bounce-n-go.co.uk, 1 @@ -4200,17 +4209,16 @@ bruckner.li, 1 bruna-cdn.nl, 1 brunn.email, 1 brunner.ninja, 1 brunoramos.com, 1 brunoramos.org, 1 brunosouza.org, 1 bruun.co, 1 bryankaplan.com, 1 -bryanquigley.com, 1 bs-network.net, 1 bs-security.com, 1 bs.sb, 1 bs.to, 1 bs12v.ru, 1 bsalyzer.com, 1 bsc-rietz.at, 1 bsc01.dyndns.org, 1 @@ -4232,16 +4240,17 @@ bsw-solution.de, 1 bt123.xyz, 1 bta.lv, 0 btcarmory.com, 1 btcgo.nl, 1 btcontract.com, 1 btcpop.co, 1 btcpot.ltd, 1 btcycle.org, 1 +btio.pw, 1 btku.org, 1 btnissanparts.com, 1 btorrent.xyz, 1 btrb.ml, 1 btserv.de, 1 btsoft.eu, 1 btsow.com, 1 btth.pl, 1 @@ -4517,17 +4526,17 @@ caferagazzi.de, 1 cafesg.net, 1 caffeinatedcode.com, 1 cainhosting.com, 0 caipai.fm, 1 cairnterrier.com.br, 1 cais.de, 1 caitcs.com, 1 caja-pdf.es, 1 -cajio.ru, 0 +cajio.ru, 1 cajunuk.co.uk, 1 cake-time.co.uk, 1 cakestart.net, 1 caketoindia.com, 1 cakingandbaking.com, 1 cal.goip.de, 1 calaad.net, 1 calabasaselectrical.com, 1 @@ -5349,17 +5358,16 @@ christopherburg.com, 1 christopherl.com, 1 christopherpritchard.co.uk, 1 christophersole.com, 1 christophertruncer.com, 1 christophkreileder.com, 1 christophsackl.de, 1 chrisu3050.at, 1 chrisupjohn.xyz, 1 -chriswarrick.com, 1 chriswbarry.com, 1 chriswells.io, 1 chromaryu.net, 0 chromaxa.com, 1 chrome-devtools-frontend.appspot.com, 1 chrome.com, 0 chrome.google.com, 1 chromebookchart.com, 1 @@ -5373,17 +5381,16 @@ chronology.no, 1 chronoproject.com, 1 chronoshop.cz, 1 chrpaul.de, 1 chrstn.eu, 1 chsh.moe, 1 chsterz.de, 1 chua.family, 1 chuchote-moi.fr, 1 -chuck.ovh, 1 chuckame.fr, 1 chun.pro, 1 chunche.net, 1 chunk.science, 1 chupadelfrasco.com, 1 churchlinkpro.com, 1 churchthemes.com, 1 churchwebcanada.ca, 1 @@ -5872,17 +5879,16 @@ colo-tech.com, 1 colombian.dating, 1 coloppe.com, 1 coloradolottery.com, 1 coloraid.net, 1 colorblindprogramming.com, 1 colorbrush.ru, 1 colorcentertoner.com.br, 1 colorcodedlyrics.com, 1 -colorectalcompounding.com, 1 coloringnotebook.com, 1 coloristcafe.com, 1 colorsbycarin.com, 1 colossal-events.co.uk, 1 colourfulcastles.co.uk, 1 colson-occasions.be, 1 columbuswines.com, 1 colyakootees.com, 1 @@ -5898,17 +5904,16 @@ comdurav.com, 1 comefollowme2016.com, 1 comeoncolleen.com, 1 comercialtrading.eu, 1 comerford.net, 1 comeseetv.com, 1 comestoarra.com, 1 cometbot.cf, 1 cometcache.com, 1 -cometonovascotia.ca, 1 comff.net, 1 comfintouch.com, 1 comflores.com.br, 1 comfypc.com, 1 comhack.com, 1 comico.info, 1 comicrelief.com, 1 comicspornos.com, 1 @@ -6833,16 +6838,17 @@ daoro.net, 1 daphne.informatik.uni-freiburg.de, 1 daracokorilo.com, 1 darbi.org, 1 darbtech.net, 1 darc-mak.de, 1 darchoods.net, 0 darcymarshall.com, 1 daren.com.br, 1 +dareyou.be, 1 darinkotter.com, 1 darioackermann.ch, 1 dariosirangelo.me, 1 darioturchetti.me, 1 darisni.me, 1 dark-infection.de, 1 dark-vision.cz, 1 darkag.ovh, 1 @@ -7209,16 +7215,17 @@ deltasmart.ch, 1 deltava.org, 1 demarle.ch, 1 dementiapraecox.de, 1 demeyere-usedcars.be, 1 demfloro.ru, 1 demijn.nl, 1 demilletech.net, 1 demo.sb, 1 +demo.swedbank.se, 1 demo9.ovh, 1 democracy.io, 1 democracychronicles.com, 1 democracyineurope.eu, 1 democraticdifference.com, 1 democraziaineuropa.eu, 1 demoniak.ch, 1 demonwav.com, 1 @@ -7481,17 +7488,16 @@ dicionario.org, 1 dicionariodegirias.com.br, 1 dicionariodelatim.com.br, 1 dicionariodenomesproprios.com.br, 1 dicionariodesimbolos.com.br, 1 dicionarioetimologico.com.br, 1 dick.red, 1 dickieslife.com, 1 dickpics.ru, 1 -dicoding.com, 1 didacte.com, 1 didche.net, 1 diddens.de, 1 didierlaumen.be, 1 didikhari.web.id, 1 die-besten-weisheiten.de, 1 die-blahuts.de, 1 die-borts.ch, 1 @@ -7649,17 +7655,17 @@ discha.net, 1 disciples.io, 1 discipul.nl, 1 disclosure.io, 1 disco-crazy-world.de, 1 discofitta.com, 1 disconformity.net, 1 discord-chan.net, 1 discordapp.com, 1 -discotek.club, 1 +discotek.club, 0 discount24.de, 1 discountmania.eu, 1 discountmetaux.fr, 1 discountplush.com, 1 discover-mercure.com, 1 discoverhealthage.com, 0 discoveringdocker.com, 1 discoverrsv.com, 1 @@ -8239,17 +8245,16 @@ duriaux-dentiste.ch, 1 durys.be, 1 dusmomente.com, 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 duyao.de, 0 dv189.com, 1 dvbris.co.uk, 1 dvbris.com, 1 @@ -8494,16 +8499,17 @@ edicct.com, 1 edisonchee.com, 1 edisonlee55.com, 1 edisonnissanparts.com, 1 edit.yahoo.com, 0 edited.de, 1 edition-bambou.com, 1 edition-sonblom.de, 1 editoraacademiacrista.com.br, 1 +edlinus.cn, 1 edmundcelis.com, 1 edoss.co.za, 1 edp-collaborative.com, 1 edsm.net, 1 edstep.com, 1 edtech-hub.com, 1 edtechwebb.com, 1 edu6.cloud, 1 @@ -8751,16 +8757,17 @@ elliff.net, 1 elliot.cat, 1 elliotgluck.com, 1 elliquiy.com, 1 elliriehl.at, 1 ellisamusements.co.uk, 1 ellisleisure.co.uk, 1 ellsinger.me, 1 elmermx.ch, 1 +elna-service.com.ua, 1 elnan.do, 1 elodieclerc.ch, 1 eloge.se, 1 elonbase.com, 1 elosrah.com, 1 elosuite.com, 1 eloxt.com, 1 elpado.de, 1 @@ -8811,17 +8818,16 @@ emergenzalavoro.com, 1 emero.de, 1 emi-air-comprime.com, 1 emi.im, 1 emielraaijmakers.nl, 1 emil.click, 1 emilong.com, 1 emilstahl.dk, 1 emilvarga.com, 1 -emilyjohnson.ga, 1 emilyshepherd.me, 1 eminhuseynov.com, 1 emirabiz.com, 0 emirichardson.com, 1 emivauthey.com, 1 emkanrecords.com, 1 emkei.cz, 1 emma-o.com, 1 @@ -9007,17 +9013,17 @@ epicwalnutcreek.com, 1 epilis.gr, 1 epiphyte.network, 1 epistas.com, 1 epistas.de, 1 epitesz.co, 1 epizentrum.work, 1 epizentrum.works, 1 epmcentroitalia.it, 1 -epoch.com, 1 +epoch.com, 0 epolitiker.com, 1 epos-distributor.co.uk, 1 eposbirmingham.co.uk, 1 eposbrighton.co.uk, 1 eposbristol.co.uk, 1 eposcardiff.co.uk, 1 eposcloud.net, 1 eposkent.co.uk, 1 @@ -9559,17 +9565,16 @@ fabianackle.ch, 1 fabianasantiago.com, 1 fabianfranke.de, 1 fabienbaker.com, 1 fabienne-roux.org, 1 fabled.com, 1 fableforge.nl, 1 fabriceleroux.com, 1 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 @@ -9650,16 +9655,17 @@ familie-leu.ch, 1 familie-monka.de, 1 familie-remke.de, 1 familie-sander.rocks, 1 familiegrottendieck.de, 1 familieholme.de, 1 familjenfrodlund.se, 1 familjenm.se, 1 familletouret.fr, 1 +familylawhotline.org, 1 familyparties.co.uk, 1 familyreal.ru, 1 famososnaweb.com, 1 famousbirthdays.com, 1 famoushostels.com, 1 famvangelder.nl, 1 famvsomeren.nl, 1 fanboi.ch, 1 @@ -10272,16 +10278,17 @@ followerrocket.com, 1 followersya.com, 1 followthatpage.com, 1 folv.es, 1 fondanastasia.ru, 1 fondationwiggli.ch, 1 fondy.eu, 1 fondy.ru, 1 fondy.ua, 1 +foneo.com, 1 fonga.ch, 1 fonolo.com, 1 fonseguin.ca, 1 font-converter.net, 1 fontawesome.com, 1 fonte-trading.com, 1 fontein.de, 1 fontlibrary.org, 1 @@ -11348,17 +11355,17 @@ givingnexus.org, 0 gix.net.pl, 1 gixtools.co.uk, 1 gixtools.com, 1 gixtools.net, 1 gixtools.uk, 1 gizmo.ovh, 1 gj-bochum.de, 1 gjcampbell.co.uk, 1 -gjengset.com, 1 +gjengset.com, 0 gjspunk.de, 0 gjung.com, 0 gkralik.eu, 1 gl.search.yahoo.com, 0 gladwellentertainments.co.uk, 1 glahcks.com, 1 glamguru.co.il, 1 glamguru.world, 1 @@ -12058,17 +12065,16 @@ hansolrella.com, 1 hansvaneijsden.com, 1 hansvaneijsden.nl, 1 hantse.com, 1 hanu.la, 1 hanxv.pw, 1 hanys.xyz, 1 hanzubon.jp, 1 hao-zhang.com, 1 -haogoodair.ca, 1 haozhang.org, 1 hapijs.cn, 1 hapissl.com, 1 hapivm.com, 1 happist.com, 0 happyagain.de, 1 happyagain.se, 1 happybounce.co.uk, 1 @@ -12137,17 +12143,16 @@ hashi.dk, 1 hashiconf.com, 1 hashiconf.eu, 1 hashicorp.com, 1 hashidays.com, 1 hashimah.ca, 1 hashinteractive.com, 1 hashish.net, 1 hashiura.jp, 1 -hashnode.com, 1 hashplex.com, 1 hashru.nl, 1 hashworks.net, 1 haskovec.com, 1 hasselbach-dellwig.de, 1 hatarisecurity.co.ke, 1 hatcherlawgroupnm.com, 1 hatethe.uk, 1 @@ -12156,16 +12161,17 @@ haucke.xyz, 1 hauntedfishtank.com, 0 hauntedhouserecords.co.uk, 1 haus-garten-test.de, 1 hausundhof.com, 1 hausverbrauch.de, 1 hautarztzentrum.ch, 1 hauteslatitudes.com, 1 havasuhomepage.com, 1 +havasuinsurance.com, 1 haveabounce.co.uk, 1 haveforeningen-enghaven.dk, 1 havefunbiking.com, 1 haveibeenpwned.com, 1 havellab.de, 1 havelland-obstler.de, 1 haven-moon.com, 1 haven-staging.cloud, 1 @@ -12492,17 +12498,16 @@ hicoria.com, 1 hidbo.de, 1 hiddenhillselectrical.com, 1 hiddenmalta.net, 1 hiddenprocess.com, 1 hideallip.com, 1 hidedd.com, 1 hideouswebsite.com, 1 hidroshop.com.br, 1 -hieu.com.au, 1 higgstools.org, 1 higherpress.org, 1 highland-webcams.com, 1 highlandparkcog.org, 1 highlatitudestravel.com, 1 highlegshop.com, 1 highlevelwoodlands.com, 1 highlnk.com, 1 @@ -13206,17 +13211,16 @@ iewar.com, 1 iexpert9.com, 1 ifamily.top, 1 ifan.ch, 1 ifasec.de, 0 ifcfg.me, 1 ifconfig.co, 1 ifelse.io, 1 ifengge.cn, 1 -ifengge.me, 1 ifightsurveillance.com, 1 ifightsurveillance.net, 1 ifightsurveillance.org, 1 ifixe.ch, 1 iflare.de, 1 iformbuilder.com, 0 ifort.fr, 1 ifosep.fr, 1 @@ -13941,17 +13945,16 @@ isoroc-nidzica.pl, 1 isowosi.com, 1 ispo.com.tw, 1 ispringcloud.ru, 1 ispsoft.pro, 1 ispweb.es, 1 isqrl.de, 1 israelbizreg.com, 1 israkurort.com, 1 -isreedyintheuk.com, 1 issasfrissa.se, 1 issforum.org, 1 issio.net, 1 isslshop.com, 1 issue.watch, 1 issuesofconcern.in, 1 ist-intim.de, 1 istanbul.systems, 1 @@ -14565,17 +14568,17 @@ joelcoustrain.com, 1 joeldrapper.com, 1 joelfries.com, 1 joelj.org, 1 joelle.me, 1 joelleandpeter.co.uk, 1 joellimberg.com, 1 joelmunch.com, 1 joepitt.co.uk, 0 -joerg-wellpott.de, 0 +joerg-wellpott.de, 1 joerss.at, 1 joespaintingpgh.com, 1 joestead.codes, 1 joetyson.io, 1 joetyson.me, 1 joeysmith.com, 1 jogi-server.de, 1 jogorama.com.br, 0 @@ -15030,17 +15033,16 @@ karenledger.ca, 1 karguine.in, 1 karhm.com, 1 karhukamera.com, 1 karina.gd, 1 karit.nz, 1 karjala-ski.ru, 1 karlbowden.com, 1 karlic.net, 1 -karlis-kavacis.id.lv, 1 karlsmithmn.org, 1 karlstabo.se, 1 karlzotter.com, 1 karmaassurance.ca, 1 karmabaker.com, 1 karmainsurance.ca, 1 karmaplatform.com, 1 karmaspa.se, 1 @@ -15983,16 +15985,17 @@ lamboo.be, 1 lamiaposta.email, 1 laminine.info, 1 lampegiganten.dk, 1 lampegiganten.no, 1 lampen24.be, 1 lampenwelt.at, 1 lampenwelt.ch, 1 lan2k.org, 1 +lana.swedbank.se, 1 lanbroa.eu, 1 lanbyte.se, 1 lancejames.com, 1 lancelafontaine.com, 1 lanceyip.com, 1 lancork.net, 1 lancyvbc.ch, 1 land.nrw, 0 @@ -17263,21 +17266,21 @@ magazinedotreino.com.br, 1 magdic.eu, 1 magebankin.com, 1 magenbrot.net, 0 magenda.sk, 1 magentaize.net, 1 magentapinkinteriors.co.uk, 1 magi.systems, 1 magicball.co, 1 -magicbroccoli.de, 0 +magicbroccoli.de, 1 magicdaysomagh.co.uk, 1 magickmoments.co.uk, 1 magiclen.org, 1 -magicspaceninjapirates.de, 0 +magicspaceninjapirates.de, 1 magictable.com, 1 magilio.com, 1 magnacumlaude.co, 1 magnatronic.com.br, 1 magneticattraction.com.au, 1 magnets.jp, 1 magnettracker.com, 1 magnoliadoulas.com, 1 @@ -17484,16 +17487,17 @@ marcelmarnitz.com, 1 marcelpreuss.de, 1 marcelsiegert.com, 1 marcgoertz.de, 1 marche-contre-monsanto.ch, 1 marche-nordic-jorat.ch, 1 marciaimportados.com.br, 1 marcianoandtopazio.com, 1 marco-kretz.de, 1 +marco-polo-reisen.com, 1 marcocasoni.com, 1 marcohager.de, 1 marcoherten.com, 1 marcoslater.com, 1 marcuskoh.com, 1 marcusstafford.com, 1 mardelcupon.com, 1 mare92.cz, 1 @@ -18276,17 +18280,16 @@ migueldominguez.ch, 1 miguelgfierro.com, 1 miguelmartinez.ch, 1 miguelmenendez.pro, 1 miguelmoura.com, 1 miguia.tv, 1 mihnea.net, 1 mijnkerstkaarten.be, 1 mijnreisoverzicht.nl, 1 -mijnstembureau.nl, 1 mijntransacties.nl, 1 mika.cat, 1 mika.moe, 1 mikadoe.nl, 1 mikaela.info, 1 mikakalevi.com, 1 mikalikes.men, 1 mike-bland.com, 1 @@ -19094,17 +19097,16 @@ mutuelle.fr, 1 muusika.fun, 1 muusikoiden.net, 1 muwatenraqamy.org, 1 muzeumkomiksu.eu, 1 muzi.cz, 1 mv-wohnen.de, 1 mvandek.nl, 1 mvbits.com, 1 -mvnet.com.br, 1 mvno.io, 1 mvp-stars.com, 1 mw.search.yahoo.com, 0 mwainc.org, 1 mware-staging.azurewebsites.net, 1 mwavuli.co.ke, 1 mwba.org, 1 mwe.st, 1 @@ -19442,17 +19444,16 @@ nargileh.nl, 1 narindal.ch, 1 narko.space, 1 narmos.ch, 1 naro.se, 1 narodsovety.ru, 1 naroska.name, 1 narrativasdigitais.pt, 1 narthollis.net, 1 -narviz.com, 1 nasarawanewsonline.com, 1 nasbnation.com, 1 nascher.org, 0 nasmocopati.com, 1 nasrsolar.com, 1 nassi.me, 1 nastoletni.pl, 1 nastysclaw.com, 1 @@ -20452,17 +20453,16 @@ odzyskaniedomeny.pl, 1 oec-music.com, 1 oeh.ac.at, 1 oeko-bundesfreiwilligendienst-sh.de, 1 oeko-bundesfreiwilligendienst.de, 1 oeko-jahr-jubilaeum.de, 1 oeko-jahr.de, 1 oelsner.net, 1 oemwolf.com, 1 -oestepaulista.net, 1 ofcampuslausanne.ch, 1 ofcss.com, 1 ofda.gov, 1 off-the-clock.us, 1 offenekommune.de, 1 offersgame.com, 1 offgames.io, 1 offgames.pro, 1 @@ -20646,16 +20646,17 @@ onlfait.ch, 1 online-bouwmaterialen.nl, 1 online-consulting-corp.com, 1 online-consulting-corp.fr, 1 online-eikaiwa-guide.com, 1 online-pr.at, 1 online-results.dk, 1 online-scene.com, 1 online.marketing, 1 +online.swedbank.se, 1 online24.pt, 1 onlinebillingform.com, 1 onlinebizdirect.com, 0 onlinecasino.vlaanderen, 1 onlinecasinobluebook.com, 1 onlinecensorship.org, 1 onlinecollegeessay.com, 1 onlinefashion.it, 1 @@ -21341,16 +21342,17 @@ pawsomebox.co.uk, 1 pawsr.us, 1 pay.ubuntu.com, 1 pay8522.com, 1 payboy.rocks, 1 payclixpayments.com, 1 payfazz.com, 1 paylike.io, 1 payload.tech, 1 +payloc.io, 1 payme.uz, 1 payment-network.com, 1 paymentaccuracy.gov, 1 payments.google.com, 1 paymerang.com, 1 paymill.com, 1 paymill.de, 1 paymon.tj, 1 @@ -21550,16 +21552,17 @@ petelew.is, 1 peter.org.ua, 1 peterandjoelle.co.uk, 1 peterboers.info, 1 peterdavehello.org, 1 peterfolta.net, 1 peterhuetz.at, 1 peterhuetz.com, 1 peterjohnson.io, 1 +peterlew.is, 1 peternagy.ie, 1 petersontoscano.com, 1 pethelpers.org, 1 petite-maison.ch, 1 petitsfrenchies.com, 1 petja.me, 0 petko.me, 1 petlife.od.ua, 1 @@ -21767,16 +21770,17 @@ pilani.ch, 1 pileofgarbage.net, 1 piliszek.net, 1 pill.id, 1 pilotcrowd.nl, 1 pimhaarsma.nl, 1 pimhaarsmamedia.nl, 1 pimpmyperf.fr, 1 pimspage.nl, 1 +pin.net.au, 1 pinceaux.org, 1 pincha.com.tw, 0 pincodeit.com, 1 pindanutjes.be, 0 pinebaylibrary.org, 1 pinemountainnursery.com.au, 1 pinemountbaptistchurch.org, 1 pinesandneedles.com, 1 @@ -23923,17 +23927,16 @@ 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 rpine.net, 1 rpy.xyz, 1 rq-labo.jp, 1 @@ -24007,17 +24010,16 @@ rucnerobene.eu, 1 ruconsole.com, 1 rud.is, 1 rudd-o.com, 1 rudelune.fr, 1 ruderverein-gelsenkirchen.de, 1 rudloff.pro, 0 rudolph.life, 1 rudrastyh.com, 1 -rue-de-la-vieille.fr, 1 ruedirrenggli.ch, 1 ruerte.net, 1 rufabula-com.appspot.com, 1 ruffbeatz.com, 1 rugby.video, 1 rugk.dedyn.io, 1 rugstorene.co.uk, 1 ruh-veit.de, 1 @@ -24177,17 +24179,16 @@ sagemontchurch.org, 1 sagerus.com, 1 sagsmarseille.com, 1 sahar.io, 1 sahb.dk, 1 sahkotyot.eu, 1 said.id, 1 said.my.id, 1 saier.me, 1 -saifoundation.in, 1 saigonflowers.com, 1 saigonstar.de, 1 saikarra.com, 1 saikou.moe, 1 saikouji.tokushima.jp, 1 sailormoonevents.org, 0 saimoe.moe, 1 saimoe.org, 1 @@ -25401,17 +25402,16 @@ silverstartup.sk, 1 silverwind.io, 1 silviamacallister.com, 1 silvine.xyz, 1 silvistefi.com, 1 sim-karten.net, 1 sim-sim.appspot.com, 1 sim4seed.org, 1 simam.de, 1 -simbeton.nl, 1 simbolo.co.uk, 0 simeonoff.ninja, 1 simetal.ch, 1 simfed.org, 1 simlau.net, 1 simmis.fr, 1 simoesgoulart.com.br, 1 simon-hofmann.org, 1 @@ -25500,16 +25500,17 @@ sint-joris.nl, 1 sinterama.biz, 1 sintesysglobal.com, 1 sinuelovirtual.com.br, 1 sion.moe, 1 siqi.wang, 1 siraweb.org, 1 sirbouncealotcastles.co.uk, 1 sirbouncelot.co.uk, 1 +sirburton.com, 1 sirena.co.jp, 1 sirenslove.com, 1 siriuspup.com, 1 siro.gq, 1 siroop.ch, 1 sirtaptap.com, 1 sirtuins.com, 1 sistel.es, 1 @@ -25745,16 +25746,17 @@ smartrade.tech, 1 smartshiftme.com, 1 smartship.co.jp, 1 smartshoppers.es, 1 smartsparrow.com, 1 smartvideo.io, 1 smartviewing.com, 1 smartwelve.com, 1 smartwritingservice.com, 1 +smartwurk.nl, 1 smash-gg.club, 1 smatch.com, 1 smb445.com, 1 smdavis.us, 1 smdcn.net, 1 sme-gmbh.net, 1 smeetsengraas.com, 1 smeso.it, 1 @@ -26402,17 +26404,16 @@ startaninflatablebusiness.com, 1 startlab.sk, 1 startpage.com, 1 startpage.info, 1 startrek.in, 1 starttraffic.com, 1 starttraffic.uk, 1 startup.melbourne, 1 startuplevel.com, 1 -startuppeople.co.uk, 1 startupsort.com, 1 startupum.ru, 1 starwatches.eu, 1 starwins.co.uk, 1 stassi.ch, 1 stastka.ch, 1 stat.ink, 1 state-of-body-and-mind.com, 1 @@ -26600,17 +26601,16 @@ stomt.com, 1 stonedworms.de, 1 stonefusion.org.uk, 1 stonehammerhead.org, 1 stonemain.eu, 1 stonemanbrasil.com.br, 1 stony.com, 1 stonystratford.org, 1 stopakwardhandshakes.org, 1 -stopbreakupnow.org, 1 stopbullying.gov, 1 stopfraud.gov, 1 stopthethyroidmadness.com, 1 stordbatlag.no, 1 store-host.com, 1 store10.de, 1 storedsafe.com, 1 storgom.ua, 0 @@ -26745,17 +26745,16 @@ styloeart.com, 1 stypr.com, 1 su1ph3r.io, 1 suareforma.com, 1 suave.io, 1 sub-net.at, 1 sub.media, 1 subastasdecarros.net, 1 subdev.org, 1 -sublevel.net, 0 sublimebits.com, 1 submedia.tv, 1 submelon.tech, 1 subohm.com, 1 suborbital.io, 1 subrain.com, 1 subrosa.io, 0 subseq.net, 0 @@ -28049,20 +28048,18 @@ timmersgems.com, 1 timmy.im, 1 timmy.ws, 1 timmyrs.de, 1 timoxbrow.com, 1 timroes.de, 1 timstoffel.net, 0 timtaubert.de, 1 timtelfer.com, 1 -timtj.ca, 1 timvandekamp.nl, 1 timvivian.ca, 1 -timweb.ca, 1 timysewyn.be, 1 tinastahlschmidt.de, 1 tinf15b4.de, 1 tinfoilsecurity.com, 0 tinfoleak.com, 1 tink.network, 1 tinker.career, 1 tinkerboard.org, 1 @@ -28432,25 +28429,25 @@ toursandtransfers.it, 1 tourtransferitaly.it, 1 tous-travaux.ch, 1 toushi-exe.com, 1 toushi-return.xyz, 1 touslesdrivers.com, 1 tousproducteurs.fr, 1 tout-art.ch, 1 toutart.ch, 1 +toutenmusic.fr, 1 toutmonexam.fr, 1 tovare.com, 1 toverland-tickets.nl, 1 towandalibrary.org, 1 towaway.ru, 1 townandcountryus.com, 1 townhousedevelopments.com.au, 1 townhouseregister.com.au, 1 -townofbridgewater.ca, 1 towywebdesigns.uk, 1 tox.im, 1 toxicip.com, 1 toymania.de, 1 toysperiod.com, 1 tp-iryuubun.com, 1 tp-kabushiki.com, 1 tp-kyouyufudousan.com, 1 @@ -29311,17 +29308,16 @@ uwesander.de, 1 uwfreelanceopticien.nl, 1 uwimonacs.org.jm, 1 uxtechnologist.com, 1 uy.search.yahoo.com, 0 uygindir.ml, 1 uz.search.yahoo.com, 0 uzaymedya.com.tr, 1 v-d-p.net, 1 -v-desk.ga, 1 v-tek.fi, 1 v-u-z.ru, 1 v12.co.uk, 1 v1sit0r.ru, 1 v2bv.net, 1 v2bv.win, 1 v2ex.com, 1 va-reitartikel.com, 1 @@ -29439,16 +29435,17 @@ varshathacker.com, 1 varta.io, 1 varunagw.com, 0 varunpriolkar.com, 1 varvy.com, 1 vascomm.co.id, 1 vashel.us, 1 vasileruscior.ro, 1 vaskulitis-info.de, 1 +vasports.com.au, 1 vastgoedcultuurfonds.nl, 1 vasyharan.com, 1 vat-eu.com, 1 vatelecom.dk, 1 vattulainen.fi, 1 vaud-fleurs.ch, 1 vault21.net, 1 vaultproject.io, 1 @@ -29867,17 +29864,17 @@ vop.li, 1 vorderklier.de, 1 vorkbaard.nl, 1 vorlicek.de, 1 vorlif.org, 1 vorm2.com, 1 vorodevops.com, 1 vos-fleurs.ch, 1 vos-fleurs.com, 1 -voshod.org, 1 +voshod.org, 0 vosky.fr, 1 vostronet.com, 1 voter-info.uk, 1 votercircle.com, 1 voterstartingpoint.uk, 1 votocek.cz, 1 votockova.cz, 1 votoot.com, 1 @@ -29901,17 +29898,16 @@ vpls.net, 1 vplssolutions.com, 1 vpn.ht, 1 vpnservice.nl, 1 vpnzoom.com, 1 vpsboard.com, 1 vpsdream.dk, 1 vrandopulo.ru, 1 vranjske.co.rs, 1 -vriendenvoordeel.com, 1 vriesdonkow.be, 1 vrijgezellen-feest.com, 1 vrlaid.com, 0 vroedvrouwella.be, 1 vrsystem.com.br, 1 vrtak-cz.net, 1 vrtouring.org, 1 vrzl.pro, 1 @@ -30079,17 +30075,16 @@ watchparts-and-tools-okayama.co.jp, 1 watchstyle.com, 1 watchtv-online.pw, 1 watchweasel.com, 1 waterfedpole.com, 1 watermonitor.gov, 1 watersb.org, 1 watertrails.io, 1 watsonwork.me, 1 -wattechweb.com, 1 wave-ola.es, 1 wavesboardshop.com, 1 wavesoftime.com, 1 wawak.pl, 1 waxdramatic.com, 1 waylaydesign.com, 1 wayne.cloud, 0 wayohoo.com, 1
--- a/servo/Cargo.lock +++ b/servo/Cargo.lock @@ -3471,17 +3471,17 @@ dependencies = [ "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "webdriver 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "webrender" version = "0.53.1" -source = "git+https://github.com/servo/webrender#71c1f3dca3173a977610e5f7a818deb155cc8cf4" +source = "git+https://github.com/servo/webrender#24b3fa46ec628e2e07f754d87791114378a842f8" dependencies = [ "app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-text 7.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3498,17 +3498,17 @@ dependencies = [ "thread_profiler 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "webrender_api 0.53.1 (git+https://github.com/servo/webrender)", ] [[package]] name = "webrender_api" version = "0.53.1" -source = "git+https://github.com/servo/webrender#71c1f3dca3173a977610e5f7a818deb155cc8cf4" +source = "git+https://github.com/servo/webrende