From 77f31c59a5c4f87fb27572c8ab7f1c81c1416a80 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Tue, 19 Oct 2021 12:27:58 +0000 Subject: [PATCH 01/66] Bug 1717724 - [devtools] Remove blockedUrls traits. r=nchevobbe,devtools-backward-compat-reviewers This has been introduced in Fx 80 via bug 1546394 and can now be considered as default backend API. Differential Revision: https://phabricator.services.mozilla.com/D118583 --- devtools/client/netmonitor/src/connector/index.js | 3 --- devtools/server/actors/webconsole.js | 5 +---- devtools/shared/specs/webconsole.js | 4 +--- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/devtools/client/netmonitor/src/connector/index.js b/devtools/client/netmonitor/src/connector/index.js index 77627be6378b..a554bf60f4d6 100644 --- a/devtools/client/netmonitor/src/connector/index.js +++ b/devtools/client/netmonitor/src/connector/index.js @@ -432,9 +432,6 @@ class Connector { if (this.hasResourceCommandSupport && this.networkFront) { return this.networkFront.getBlockedUrls(); } - if (!this.webConsoleFront.traits.blockedUrls) { - return []; - } return this.webConsoleFront.getBlockedUrls(); } diff --git a/devtools/server/actors/webconsole.js b/devtools/server/actors/webconsole.js index 4177d5035293..42b4e704628d 100644 --- a/devtools/server/actors/webconsole.js +++ b/devtools/server/actors/webconsole.js @@ -199,10 +199,7 @@ const WebConsoleActor = ActorClassWithSpec(webconsoleSpec, { ); } - this.traits = { - // Supports retrieving blocked urls - blockedUrls: true, - }; + this.traits = {}; }, /** * Debugger instance. diff --git a/devtools/shared/specs/webconsole.js b/devtools/shared/specs/webconsole.js index 77d5e0eadbbb..f2788b1942f8 100644 --- a/devtools/shared/specs/webconsole.js +++ b/devtools/shared/specs/webconsole.js @@ -12,9 +12,7 @@ const { Arg, } = require("devtools/shared/protocol"); -types.addDictType("console.traits", { - evaluateJSAsync: "boolean", -}); +types.addDictType("console.traits", {}); types.addDictType("console.startlisteners", { startedListeners: "array:string", From 876f60dacd1404722ddc22ce22a4cacf6f426507 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Tue, 19 Oct 2021 12:27:59 +0000 Subject: [PATCH 02/66] Bug 1717724 - [devtools] Listen to inspectObject console actor event directly from the toolbox. r=nchevobbe This code in TargetMixin was only used the Toolbox. Let's avoid one unecessary onion layer. Depends on D118583 Differential Revision: https://phabricator.services.mozilla.com/D118584 --- devtools/client/framework/toolbox.js | 19 ++++++++++++------- .../client/fronts/targets/target-mixin.js | 12 ------------ 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js index b5e7eec9c05f..e089f43c9a3a 100644 --- a/devtools/client/framework/toolbox.js +++ b/devtools/client/framework/toolbox.js @@ -691,7 +691,8 @@ Toolbox.prototype = { // Attach to a new top-level target. // For now, register these event listeners only on the top level target targetFront.on("frame-update", this._updateFrames); - targetFront.on("inspect-object", this._onInspectObject); + const consoleFront = await targetFront.getFront("console"); + consoleFront.on("inspectObject", this._onInspectObject); } // Walker listeners allow to monitor DOM Mutation breakpoint updates. @@ -718,8 +719,9 @@ Toolbox.prototype = { _onTargetDestroyed({ targetFront }) { if (targetFront.isTopLevel) { - this.target.off("inspect-object", this._onInspectObject); - this.target.off("frame-update", this._updateFrames); + const consoleFront = targetFront.getCachedFront("console"); + consoleFront.off("inspectObject", this._onInspectObject); + targetFront.off("frame-update", this._updateFrames); } else if (this.selection) { this.selection.onTargetDestroyed(targetFront); } @@ -3611,10 +3613,6 @@ Toolbox.prototype = { } }, - _onInspectObject: function(packet) { - this.inspectObjectActor(packet.objectActor, packet.inspectFromAnnotation); - }, - _onToolSelected: function() { this._refreshHostTitle(); @@ -3626,6 +3624,13 @@ Toolbox.prototype = { this.component.setToolboxButtons(this.toolbarButtons); }, + /** + * Listener for "inspectObject" event on console top level target actor. + */ + _onInspectObject(packet) { + this.inspectObjectActor(packet.objectActor, packet.inspectFromAnnotation); + }, + inspectObjectActor: async function(objectActor, inspectFromAnnotation) { const objectGrip = objectActor?.getGrip ? objectActor.getGrip() diff --git a/devtools/client/fronts/targets/target-mixin.js b/devtools/client/fronts/targets/target-mixin.js index 18a8931c51c9..42c7201919bd 100644 --- a/devtools/client/fronts/targets/target-mixin.js +++ b/devtools/client/fronts/targets/target-mixin.js @@ -479,12 +479,6 @@ function TargetMixin(parentClass) { // Calling startListeners will populate the traits as it's the first request we // make to the front. await consoleFront.startListeners([]); - - this._onInspectObject = packet => this.emit("inspect-object", packet); - this.removeOnInspectObjectListener = consoleFront.on( - "inspectObject", - this._onInspectObject - ); } /** @@ -649,12 +643,6 @@ function TargetMixin(parentClass) { } this.fronts.clear(); - // Remove listeners set in attachConsole - if (this.removeOnInspectObjectListener) { - this.removeOnInspectObjectListener(); - this.removeOnInspectObjectListener = null; - } - this.threadFront = null; this._offResourceEvent = null; From 716014661aa1820f08b14e7bcfd05231be5ac557 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Tue, 19 Oct 2021 12:27:59 +0000 Subject: [PATCH 03/66] Bug 1717724 - [devtools] Remove web console actor traits. r=nchevobbe,devtools-backward-compat-reviewers This depends on calling startListening, which forces target to be attached asynchronously. Also, we would like to stop calling startListening as it has been replaced by watchResources APIs. If we ever need a trait, we should rather use RootActor one, as it is easy to read by any code. Or we should come up with something more robut and more generic that this startListening setup. Depends on D118584 Differential Revision: https://phabricator.services.mozilla.com/D118585 --- devtools/client/fronts/webconsole.js | 2 -- devtools/server/actors/webconsole.js | 9 --------- devtools/shared/specs/webconsole.js | 3 --- 3 files changed, 14 deletions(-) diff --git a/devtools/client/fronts/webconsole.js b/devtools/client/fronts/webconsole.js index f380f24c92d9..f4f667952c0c 100644 --- a/devtools/client/fronts/webconsole.js +++ b/devtools/client/fronts/webconsole.js @@ -24,7 +24,6 @@ class WebConsoleFront extends FrontClassWithSpec(webconsoleSpec) { constructor(client, targetFront, parentFront) { super(client, targetFront, parentFront); this._client = client; - this.traits = {}; this.events = []; // Attribute name from which to retrieve the actorID out of the target actor's form @@ -306,7 +305,6 @@ class WebConsoleFront extends FrontClassWithSpec(webconsoleSpec) { async startListeners(listeners) { const response = await super.startListeners(listeners); this.hasNativeConsoleAPI = response.nativeConsoleAPI; - this.traits = response.traits; return response; } diff --git a/devtools/server/actors/webconsole.js b/devtools/server/actors/webconsole.js index 42b4e704628d..62321bd52445 100644 --- a/devtools/server/actors/webconsole.js +++ b/devtools/server/actors/webconsole.js @@ -198,8 +198,6 @@ const WebConsoleActor = ActorClassWithSpec(webconsoleSpec, { "last-pb-context-exited" ); } - - this.traits = {}; }, /** * Debugger instance. @@ -236,12 +234,6 @@ const WebConsoleActor = ActorClassWithSpec(webconsoleSpec, { */ conn: null, - /** - * List of supported features by the console actor. - * @type object - */ - traits: null, - /** * The global we work with (this can be a Window, a Worker global or even a Sandbox * for processes and addons). @@ -791,7 +783,6 @@ const WebConsoleActor = ActorClassWithSpec(webconsoleSpec, { return { startedListeners: startedListeners, nativeConsoleAPI: this.hasNativeConsoleAPI(this.global), - traits: this.traits, }; }, diff --git a/devtools/shared/specs/webconsole.js b/devtools/shared/specs/webconsole.js index f2788b1942f8..d793c82091b3 100644 --- a/devtools/shared/specs/webconsole.js +++ b/devtools/shared/specs/webconsole.js @@ -12,12 +12,9 @@ const { Arg, } = require("devtools/shared/protocol"); -types.addDictType("console.traits", {}); - types.addDictType("console.startlisteners", { startedListeners: "array:string", nativeConsoleAPI: "nullable:boolean", - traits: "console.traits", }); types.addDictType("console.stoplisteners", { From 971e021dba9efb109e0ba3a1eb439662e0ee716f Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Tue, 19 Oct 2021 12:28:00 +0000 Subject: [PATCH 04/66] Bug 1717724 - [devtools] Remove attachConsole sequence. r=nchevobbe This is one step forward removing target attach sequence on the client side. So that we can notify about target front immediately from TargetCommand. I had to tweak TargetMixin destroy to avoid failures in browser_dbg_listtabs-01.js a call to targetFront.reconfigure was never resolving, because the target destroy was stuck on this call to detach(). We were trying to call detach() while the descriptor was destroyed (from a server side notification). The target being a child of descriptor it ends up destroy itself, but the request is meant to fail. Depends on D118585 Differential Revision: https://phabricator.services.mozilla.com/D118586 --- .../framework/test/browser_target_parents.js | 10 +- devtools/client/fronts/descriptors/worker.js | 4 +- .../client/fronts/targets/content-process.js | 5 - .../client/fronts/targets/target-mixin.js | 13 -- .../client/fronts/targets/window-global.js | 6 - .../shared/test/browser_dbg_listtabs-01.js | 140 +++++++----------- 6 files changed, 62 insertions(+), 116 deletions(-) diff --git a/devtools/client/framework/test/browser_target_parents.js b/devtools/client/framework/test/browser_target_parents.js index 93265e08d0c4..43cc1fde3b5f 100644 --- a/devtools/client/framework/test/browser_target_parents.js +++ b/devtools/client/framework/test/browser_target_parents.js @@ -20,8 +20,9 @@ add_task(async function() { const tabDescriptors = await mainRoot.listTabs(); await testGetTargetWithConcurrentCalls(tabDescriptors, tabTarget => { - // Tab Target is attached when it has a console front. - return !!tabTarget.getCachedFront("console"); + // We only call BrowsingContextTargetFront.attach and not TargetMixin.attachAndInitThread. + // So very few things are done. + return !!tabTarget.traits; }); await client.close(); @@ -40,8 +41,9 @@ add_task(async function() { // happens between the instantiation of ContentProcessTarget and its call to attach() from getTarget // function. await testGetTargetWithConcurrentCalls(processes, processTarget => { - // Content Process Target is attached when it has a console front. - return !!processTarget.getCachedFront("console"); + // We only call ContentProcessTargetFront.attach and not TargetMixin.attachAndInitThread. + // So nothing is done for content process targets. + return true; }); await client.close(); diff --git a/devtools/client/fronts/descriptors/worker.js b/devtools/client/fronts/descriptors/worker.js index 369c5ec5a974..05bab7b31702 100644 --- a/devtools/client/fronts/descriptors/worker.js +++ b/devtools/client/fronts/descriptors/worker.js @@ -95,8 +95,7 @@ class WorkerDescriptorFront extends DescriptorMixin( const workerTargetForm = await super.getTarget(); - // Set the console actor ID on the form to expose it to Target.attachConsole - // Set the ThreadActor on the target form so it is accessible by getFront + // Set the console and thread actor IDs on the form so it is accessible by TargetMixin.getFront this.targetForm.consoleActor = workerTargetForm.consoleActor; this.targetForm.threadActor = workerTargetForm.threadActor; @@ -104,7 +103,6 @@ class WorkerDescriptorFront extends DescriptorMixin( return this; } - await this.attachConsole(); return this; })(); return this._attach; diff --git a/devtools/client/fronts/targets/content-process.js b/devtools/client/fronts/targets/content-process.js index 3247fd572181..16b38847424e 100644 --- a/devtools/client/fronts/targets/content-process.js +++ b/devtools/client/fronts/targets/content-process.js @@ -44,11 +44,6 @@ class ContentProcessTargetFront extends TargetMixin( } attach() { - // All target actors have a console actor to attach. - // All but xpcshell test actors... which is using a ContentProcessTargetActor - if (this.targetForm.consoleActor) { - return this.attachConsole(); - } return Promise.resolve(); } diff --git a/devtools/client/fronts/targets/target-mixin.js b/devtools/client/fronts/targets/target-mixin.js index 42c7201919bd..4cb10a513c42 100644 --- a/devtools/client/fronts/targets/target-mixin.js +++ b/devtools/client/fronts/targets/target-mixin.js @@ -468,19 +468,6 @@ function TargetMixin(parentClass) { } } - // Attach the console actor - async attachConsole() { - const consoleFront = await this.getFront("console"); - - if (this.isDestroyedOrBeingDestroyed()) { - return; - } - - // Calling startListeners will populate the traits as it's the first request we - // make to the front. - await consoleFront.startListeners([]); - } - /** * This method attaches the target and then attaches its related thread, sending it * the options it needs (e.g. breakpoints, pause on exception setting, …). diff --git a/devtools/client/fronts/targets/window-global.js b/devtools/client/fronts/targets/window-global.js index 707a3cce8434..a793e909060a 100644 --- a/devtools/client/fronts/targets/window-global.js +++ b/devtools/client/fronts/targets/window-global.js @@ -125,12 +125,6 @@ class WindowGlobalTargetFront extends TargetMixin( // @backward-compat { version 93 } Remove this. All the traits are on form and can be accessed // using getTraits. this.traits = response.traits || {}; - - // xpcshell tests from devtools/server/tests/xpcshell/ are implementing - // fake WindowGlobalTargetActor which do not expose any console actor. - if (this.targetForm.consoleActor) { - await this.attachConsole(); - } })(); return this._attach; } diff --git a/devtools/client/shared/test/browser_dbg_listtabs-01.js b/devtools/client/shared/test/browser_dbg_listtabs-01.js index 09c1844ca29e..ac6b3c2c1e19 100644 --- a/devtools/client/shared/test/browser_dbg_listtabs-01.js +++ b/devtools/client/shared/test/browser_dbg_listtabs-01.js @@ -13,98 +13,68 @@ var { DevToolsClient } = require("devtools/client/devtools-client"); const TAB1_URL = EXAMPLE_URL + "doc_empty-tab-01.html"; const TAB2_URL = EXAMPLE_URL + "doc_empty-tab-02.html"; -var gTab1, gTab1Front, gTab2, gTab2Front, gClient; - -function test() { +add_task(async function test() { DevToolsServer.init(); DevToolsServer.registerAllActors(); const transport = DevToolsServer.connectPipe(); - gClient = new DevToolsClient(transport); - gClient.connect().then(([aType, aTraits]) => { - is(aType, "browser", "Root actor should identify itself as a browser."); + const client = new DevToolsClient(transport); + const [aType] = await client.connect(); + is(aType, "browser", "Root actor should identify itself as a browser."); - Promise.resolve(null) - .then(testFirstTab) - .then(testSecondTab) - .then(testRemoveTab) - .then(testAttachRemovedTab) - .then(() => gClient.close()) - .then(finish) - .catch(error => { - ok(false, "Got an error: " + error.message + "\n" + error.stack); - }); - }); -} - -function testFirstTab() { - return addTab(TAB1_URL).then(tab => { - gTab1 = tab; - - return getTargetActorForUrl(gClient, TAB1_URL).then(front => { - ok(front, "Should find a target actor for the first tab."); - gTab1Front = front; - }); - }); -} - -function testSecondTab() { - return addTab(TAB2_URL).then(tab => { - gTab2 = tab; - - return getTargetActorForUrl(gClient, TAB1_URL).then(firstFront => { - return getTargetActorForUrl(gClient, TAB2_URL).then(secondFront => { - is(firstFront, gTab1Front, "First tab's actor shouldn't have changed."); - ok(secondFront, "Should find a target actor for the second tab."); - gTab2Front = secondFront; - }); - }); - }); -} - -function testRemoveTab() { - return removeTab(gTab1).then(() => { - return getTargetActorForUrl(gClient, TAB1_URL).then(front => { - ok(!front, "Shouldn't find a target actor for the first tab anymore."); - }); - }); -} - -function testAttachRemovedTab() { - return removeTab(gTab2).then(() => { - return new Promise((resolve, reject) => { - gClient.on("paused", () => { - ok( - false, - "Attaching to an exited target actor shouldn't generate a pause." - ); - reject(); - }); - - const { actorID } = gTab2Front; - gTab2Front.reconfigure({}).then(null, error => { - ok( - error.message.includes( - `Connection closed, pending request to ${actorID}, type reconfigure failed` - ), - "Actor is gone since the tab was removed." - ); - resolve(); - }); - }); - }); -} - -registerCleanupFunction(function() { - gTab1 = null; - gTab1Front = null; - gTab2 = null; - gTab2Front = null; - gClient = null; + const firstTab = await testFirstTab(client); + const secondTab = await testSecondTab(client, firstTab.front); + await testRemoveTab(client, firstTab.tab); + await testAttachRemovedTab(secondTab.tab, secondTab.front); + await client.close(); }); -async function getTargetActorForUrl(client, url) { +async function testFirstTab(client) { + const tab = await addTab(TAB1_URL); + + const front = await getDescriptorActorForUrl(client, TAB1_URL); + ok(front, "Should find a target actor for the first tab."); + return { tab, front }; +} + +async function testSecondTab(client, firstTabFront) { + const tab = await addTab(TAB2_URL); + + const firstFront = await getDescriptorActorForUrl(client, TAB1_URL); + const secondFront = await getDescriptorActorForUrl(client, TAB2_URL); + is(firstFront, firstTabFront, "First tab's actor shouldn't have changed."); + ok(secondFront, "Should find a target actor for the second tab."); + return { tab, front: secondFront }; +} + +async function testRemoveTab(client, firstTab) { + await removeTab(firstTab); + const front = await getDescriptorActorForUrl(client, TAB1_URL); + ok(!front, "Shouldn't find a target actor for the first tab anymore."); +} + +async function testAttachRemovedTab(secondTab, secondTabFront) { + await removeTab(secondTab); + + const { actorID } = secondTabFront; + try { + await secondTabFront.getFavicon({}); + ok( + false, + "any request made to the descriptor for a closed tab should have failed" + ); + } catch (error) { + ok( + error.message.includes( + `Connection closed, pending request to ${actorID}, type getFavicon failed` + ), + "Actor is gone since the tab was removed." + ); + } +} + +async function getDescriptorActorForUrl(client, url) { const tabDescriptors = await client.mainRoot.listTabs(); const tabDescriptor = tabDescriptors.find(front => front.url == url); - return tabDescriptor?.getTarget(); + return tabDescriptor; } From ed2a06315641b616f7bcc0035cc4f9c20f225b50 Mon Sep 17 00:00:00 2001 From: Andrei Oprea Date: Tue, 19 Oct 2021 12:57:32 +0000 Subject: [PATCH 05/66] Bug 1731796 - Add ability to support extraParams via search Nimbus Feature r=k88hudson,Standard8 Differential Revision: https://phabricator.services.mozilla.com/D127580 --- .../test/xpcshell/data/test/manifest.json | 10 +++ ..._ext_settings_overrides_search_mozParam.js | 84 ++++++++++++++++++- toolkit/components/nimbus/FeatureManifest.js | 5 ++ toolkit/components/search/SearchEngine.jsm | 18 +++- .../xpcshell/searchconfigs/test_google.js | 67 +++++++++++++++ 5 files changed, 182 insertions(+), 2 deletions(-) diff --git a/browser/components/extensions/test/xpcshell/data/test/manifest.json b/browser/components/extensions/test/xpcshell/data/test/manifest.json index 5b75ba271de0..f4545029aa93 100644 --- a/browser/components/extensions/test/xpcshell/data/test/manifest.json +++ b/browser/components/extensions/test/xpcshell/data/test/manifest.json @@ -63,6 +63,16 @@ "name": "prefval", "condition": "pref", "pref": "code" + }, + { + "name": "experimenter-1", + "condition": "pref", + "pref": "nimbus-key-1" + }, + { + "name": "experimenter-2", + "condition": "pref", + "pref": "nimbus-key-2" } ] } diff --git a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js index 94f2742fdc73..81197d002358 100644 --- a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js +++ b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js @@ -6,10 +6,13 @@ const { AddonTestUtils } = ChromeUtils.import( "resource://testing-common/AddonTestUtils.jsm" ); - const { SearchTestUtils } = ChromeUtils.import( "resource://testing-common/SearchTestUtils.jsm" ); +const { NimbusFeatures } = ChromeUtils.import( + "resource://nimbus/ExperimentAPI.jsm" +); +const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm"); AddonTestUtils.init(this); AddonTestUtils.overrideCertDB(); @@ -50,6 +53,8 @@ const params = [ ]; add_task(async function setup() { + let readyStub = sinon.stub(NimbusFeatures.search, "ready").resolves(); + let updateStub = sinon.stub(NimbusFeatures.search, "onUpdate"); await promiseStartupManager(); await SearchTestUtils.useTestEngines("data", null, [ { @@ -67,6 +72,8 @@ add_task(async function setup() { await Services.search.init(); registerCleanupFunction(async () => { await promiseShutdownManager(); + readyStub.restore(); + updateStub.restore(); }); }); @@ -105,6 +112,81 @@ add_task(async function test_extension_setting_moz_params() { "search url is expected" ); } + + defaultBranch.setCharPref("param.code", ""); +}); + +add_task(async function test_nimbus_params() { + let sandbox = sinon.createSandbox(); + let stub = sandbox.stub(NimbusFeatures.search, "getVariable"); + // These values should match the nimbusParams below and the data/test/manifest.json + // search engine configuration + stub.withArgs("extraParams").returns([ + { + key: "nimbus-key-1", + value: "nimbus-value-1", + }, + { + key: "nimbus-key-2", + value: "nimbus-value-2", + }, + ]); + + Assert.ok( + NimbusFeatures.search.onUpdate.called, + "Called to initialize the cache" + ); + + // Populate the cache with the `getVariable` mock values + NimbusFeatures.search.onUpdate.firstCall.args[0](); + + let engine = Services.search.getEngineByName("MozParamsTest"); + + // Note: these lists should be kept in sync with the lists in + // browser/components/extensions/test/xpcshell/data/test/manifest.json + // These params are conditional based on how search is initiated. + const nimbusParams = [ + { name: "experimenter-1", condition: "pref", pref: "nimbus-key-1" }, + { name: "experimenter-2", condition: "pref", pref: "nimbus-key-2" }, + ]; + const experimentCache = { + "nimbus-key-1": "nimbus-value-1", + "nimbus-key-2": "nimbus-value-2", + }; + + let extraParams = []; + for (let p of params) { + if (p.value == "{searchTerms}") { + extraParams.push(`${p.name}=test`); + } else if (p.value == "{language}") { + extraParams.push(`${p.name}=${Services.locale.requestedLocale || "*"}`); + } else if (p.value == "{moz:locale}") { + extraParams.push(`${p.name}=${Services.locale.requestedLocale}`); + } else if (p.condition !== "pref") { + // Ignoring pref parameters + extraParams.push(`${p.name}=${p.value}`); + } + } + for (let p of nimbusParams) { + if (p.condition == "pref") { + extraParams.push(`${p.name}=${experimentCache[p.pref]}`); + } + } + let paramStr = extraParams.join("&"); + for (let p of mozParams) { + let expectedURL = engine.getSubmission( + "test", + null, + p.condition == "purpose" ? p.purpose : null + ).uri.spec; + equal( + expectedURL, + `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`, + "search url is expected" + ); + } + + sandbox.restore(); }); add_task(async function test_extension_setting_moz_params_fail() { diff --git a/toolkit/components/nimbus/FeatureManifest.js b/toolkit/components/nimbus/FeatureManifest.js index fc4a519ea764..b38137b572de 100644 --- a/toolkit/components/nimbus/FeatureManifest.js +++ b/toolkit/components/nimbus/FeatureManifest.js @@ -19,6 +19,11 @@ const FeatureManifest = { description: "Used to activate only matching configurations that contain the value in `experiment`", }, + extraParams: { + type: "json", + description: + "Query parameters values for search engine configurations.", + }, }, }, urlbar: { diff --git a/toolkit/components/search/SearchEngine.jsm b/toolkit/components/search/SearchEngine.jsm index fecc275f8f43..0a845dd5f323 100644 --- a/toolkit/components/search/SearchEngine.jsm +++ b/toolkit/components/search/SearchEngine.jsm @@ -14,6 +14,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { Region: "resource://gre/modules/Region.jsm", SearchUtils: "resource://gre/modules/SearchUtils.jsm", Services: "resource://gre/modules/Services.jsm", + NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm", }); const BinaryInputStream = Components.Constructor( @@ -126,21 +127,36 @@ const ParamPreferenceCache = { SearchUtils.BROWSER_SEARCH_PREF + "param." ); this.cache = new Map(); + this.nimbusCache = new Map(); for (let prefName of this.branch.getChildList("")) { this.cache.set(prefName, this.branch.getCharPref(prefName, null)); } this.branch.addObserver("", this, true); + + this.onNimbusUpdate = this.onNimbusUpdate.bind(this); + this.onNimbusUpdate(); + NimbusFeatures.search.onUpdate(this.onNimbusUpdate); + NimbusFeatures.search.ready().then(this.onNimbusUpdate); }, observe(subject, topic, data) { this.cache.set(data, this.branch.getCharPref(data, null)); }, + onNimbusUpdate() { + let extraParams = NimbusFeatures.search.getVariable("extraParams") || []; + for (const { key, value } of extraParams) { + this.nimbusCache.set(key, value); + } + }, + getPref(prefName) { if (!this.cache) { this.initCache(); } - return this.cache.get(prefName); + return this.nimbusCache.has(prefName) + ? this.nimbusCache.get(prefName) + : this.cache.get(prefName); }, }; diff --git a/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js b/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js index 2a7068c29f0f..967461fcf260 100644 --- a/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js +++ b/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js @@ -3,6 +3,10 @@ "use strict"; +XPCOMUtils.defineLazyModuleGetters(this, { + NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm", +}); + const test = new SearchConfigTest({ identifier: "google", aliases: ["@google"], @@ -64,6 +68,8 @@ const test = new SearchConfigTest({ }); add_task(async function setup() { + sinon.spy(NimbusFeatures.search, "onUpdate"); + sinon.stub(NimbusFeatures.search, "ready").resolves(); await test.setup(); }); @@ -111,4 +117,65 @@ add_task(async function test_searchConfig_google_with_mozparam() { "Should be including the correct MozParam parameter for the engine" ); } + + // Reset the pref values for next tests + for (const testData of TEST_DATA) { + defaultBranch.setCharPref("param." + testData.pref, ""); + } +}); + +add_task(async function test_searchConfig_google_with_nimbus() { + let sandbox = sinon.createSandbox(); + // Test a couple of configurations with a MozParam set up. + const TEST_DATA = [ + { + locale: "en-US", + region: "US", + expected: "nimbus_us_param", + }, + { + locale: "en-US", + region: "GB", + expected: "nimbus_row_param", + }, + ]; + + Assert.ok( + NimbusFeatures.search.onUpdate.called, + "Should register an update listener for Nimbus experiments" + ); + // Stub getVariable to populate the cache with our expected data + sandbox.stub(NimbusFeatures.search, "getVariable").returns([ + { key: "google_channel_us", value: "nimbus_us_param" }, + { key: "google_channel_row", value: "nimbus_row_param" }, + ]); + // Set the pref cache with Nimbus values + NimbusFeatures.search.onUpdate.firstCall.args[0](); + + for (const testData of TEST_DATA) { + info(`Checking region ${testData.region}, locale ${testData.locale}`); + const engines = await test._getEngines(testData.region, testData.locale); + + Assert.ok( + engines[0].identifier.startsWith("google"), + "Should have the correct engine" + ); + console.log(engines[0]); + + const submission = engines[0].getSubmission("test", URLTYPE_SEARCH_HTML); + Assert.ok( + NimbusFeatures.search.ready.called, + "Should wait for Nimbus to get ready" + ); + Assert.ok( + NimbusFeatures.search.getVariable, + "Should call NimbusFeatures.search.getVariable to populate the cache" + ); + Assert.ok( + submission.uri.query.split("&").includes("channel=" + testData.expected), + "Should be including the correct MozParam parameter for the engine" + ); + } + + sandbox.restore(); }); From 12447999594b69918dea222f2c02575dcd7a9248 Mon Sep 17 00:00:00 2001 From: Niklas Goegge Date: Tue, 19 Oct 2021 12:57:34 +0000 Subject: [PATCH 06/66] Bug 1732052: Remove pref privacy.file_unique_origin r=ckerschb,necko-reviewers,dragana Differential Revision: https://phabricator.services.mozilla.com/D126898 --- dom/fetch/tests/crashtests/1664514.html | 1 - dom/fetch/tests/crashtests/crashtests.list | 2 +- dom/workers/test/browser_fileURL.js | 102 --------------------- modules/libpref/init/StaticPrefList.yaml | 5 - netwerk/base/nsNetUtil.cpp | 31 ------- netwerk/test/browser/browser_fetch_lnk.js | 4 - 6 files changed, 1 insertion(+), 144 deletions(-) diff --git a/dom/fetch/tests/crashtests/1664514.html b/dom/fetch/tests/crashtests/1664514.html index dae325d2a783..b033d842fadb 100644 --- a/dom/fetch/tests/crashtests/1664514.html +++ b/dom/fetch/tests/crashtests/1664514.html @@ -1,6 +1,5 @@ -

Set privacy.file_unique_origin to false when testing this.

diff --git a/dom/fetch/tests/crashtests/crashtests.list b/dom/fetch/tests/crashtests/crashtests.list index b3210cd4d8e1..f79a12273478 100644 --- a/dom/fetch/tests/crashtests/crashtests.list +++ b/dom/fetch/tests/crashtests/crashtests.list @@ -1,2 +1,2 @@ load 1577196.html -pref(privacy.file_unique_origin,false) load 1664514.html +load 1664514.html diff --git a/dom/workers/test/browser_fileURL.js b/dom/workers/test/browser_fileURL.js index c109e1d30f7d..0f017e2c0e0c 100644 --- a/dom/workers/test/browser_fileURL.js +++ b/dom/workers/test/browser_fileURL.js @@ -3,108 +3,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; -const WORKER_BODY = "postMessage(42);\n"; - -// file:// tests. -add_task(async function() { - await SpecialPowers.pushPrefEnv({ - set: [["privacy.file_unique_origin", false]], - }); - - info("Creating the tmp directory."); - let parent = Cc["@mozilla.org/file/directory_service;1"] - .getService(Ci.nsIDirectoryService) - .QueryInterface(Ci.nsIProperties) - .get("TmpD", Ci.nsIFile); - parent.append("worker-dir-test"); - parent.createUnique(Ci.nsIFile.DIRECTORY_TYPE, 0o700); - - let dir_a = parent.clone(); - dir_a.append("a"); - dir_a.create(Ci.nsIFile.DIRECTORY_TYPE, 0o700); - - let page_a = dir_a.clone(); - page_a.append("empty.html"); - page_a.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o600); - - let url_a = Services.io.newFileURI(page_a); - - let worker = dir_a.clone(); - worker.append("worker.js"); - - let stream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance( - Ci.nsIFileOutputStream - ); - stream.init( - worker, - 0x02 | 0x08 | 0x20, // write, create, truncate - 0o666, - 0 - ); - stream.write(WORKER_BODY, WORKER_BODY.length); - stream.close(); - - let url_worker = Services.io.newFileURI(worker); - - let dir_b = parent.clone(); - dir_b.append("b"); - dir_b.create(Ci.nsIFile.DIRECTORY_TYPE, 0o700); - - let page_b = dir_b.clone(); - page_b.append("empty.html"); - page_b.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o600); - - let url_b = Services.io.newFileURI(page_b); - - let tab = BrowserTestUtils.addTab(gBrowser, url_a.spec); - gBrowser.selectedTab = tab; - - let browser = gBrowser.getBrowserForTab(tab); - await BrowserTestUtils.browserLoaded(browser); - - await SpecialPowers.spawn(browser, [url_worker.spec], function(spec) { - return new content.Promise((resolve, reject) => { - let w = new content.window.Worker(spec); - w.onerror = _ => { - reject(); - }; - w.onmessage = _ => { - resolve(); - }; - }); - }); - ok(true, "The worker is loaded when the script is on the same directory."); - - BrowserTestUtils.removeTab(tab); - - tab = BrowserTestUtils.addTab(gBrowser, url_b.spec); - gBrowser.selectedTab = tab; - - browser = gBrowser.getBrowserForTab(tab); - await BrowserTestUtils.browserLoaded(browser); - - await SpecialPowers.spawn(browser, [url_worker.spec], function(spec) { - return new content.Promise((resolve, reject) => { - let w = new content.window.Worker(spec); - w.onerror = _ => { - resolve(); - }; - w.onmessage = _ => { - reject(); - }; - }); - }); - ok( - true, - "The worker is not loaded when the script is on a different directory." - ); - - BrowserTestUtils.removeTab(tab); - - info("Removing the tmp directory."); - parent.remove(true); -}); - const EMPTY_URL = "/browser/dom/workers/test/empty.html"; const WORKER_URL = "/browser/dom/workers/test/empty_worker.js"; diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 6ebee2a9b0e7..2ac597e84a8a 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -10258,11 +10258,6 @@ # Prefs starting with "privacy." #--------------------------------------------------------------------------- -- name: privacy.file_unique_origin - type: bool - value: true - mirror: always - - name: privacy.fuzzyfox.clockgrainus type: RelaxedAtomicUint32 value: 100 diff --git a/netwerk/base/nsNetUtil.cpp b/netwerk/base/nsNetUtil.cpp index 8c55559352dd..755afad788d7 100644 --- a/netwerk/base/nsNetUtil.cpp +++ b/netwerk/base/nsNetUtil.cpp @@ -2538,37 +2538,6 @@ bool NS_RelaxStrictFileOriginPolicy(nsIURI* aTargetURI, nsIURI* aSourceURI, return false; } - if (!StaticPrefs::privacy_file_unique_origin()) { - // - // If the file to be loaded is in a subdirectory of the source - // (or same-dir if source is not a directory) then it will - // inherit its source principal and be scriptable by that source. - // - bool sourceIsDir; - bool allowed = false; - nsresult rv = sourceFile->IsDirectory(&sourceIsDir); - if (NS_SUCCEEDED(rv) && sourceIsDir) { - rv = sourceFile->Contains(targetFile, &allowed); - } else { - nsCOMPtr sourceParent; - rv = sourceFile->GetParent(getter_AddRefs(sourceParent)); - if (NS_SUCCEEDED(rv) && sourceParent) { - rv = sourceParent->Equals(targetFile, &allowed); - if (NS_FAILED(rv) || !allowed) { - rv = sourceParent->Contains(targetFile, &allowed); - } else { - MOZ_ASSERT(aAllowDirectoryTarget, - "sourceFile->Parent == targetFile, but targetFile " - "should've been disallowed if it is a directory"); - } - } - } - - if (NS_SUCCEEDED(rv) && allowed) { - return true; - } - } - return false; } diff --git a/netwerk/test/browser/browser_fetch_lnk.js b/netwerk/test/browser/browser_fetch_lnk.js index cbfc6a4c4b4f..ea8ef5798422 100644 --- a/netwerk/test/browser/browser_fetch_lnk.js +++ b/netwerk/test/browser/browser_fetch_lnk.js @@ -4,10 +4,6 @@ "use strict"; add_task(async () => { - await SpecialPowers.pushPrefEnv({ - set: [["privacy.file_unique_origin", false]], - }); - const FILE_PAGE = Services.io.newFileURI( new FileUtils.File(getTestFilePath("dummy.html")) ).spec; From e3470aac9e5bbfd5544b3f780c8717c832bcf107 Mon Sep 17 00:00:00 2001 From: ffxbld Date: Tue, 19 Oct 2021 13:04:19 +0000 Subject: [PATCH 07/66] No Bug, mozilla-central repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=RyanVM Differential Revision: https://phabricator.services.mozilla.com/D128723 --- netwerk/dns/effective_tld_names.dat | 26 +- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 424 +++++------- .../dumps/blocklists/addons-bloomfilters.json | 30 + .../dumps/security-state/intermediates.json | 618 +++++++++--------- 5 files changed, 539 insertions(+), 561 deletions(-) diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index df996ec63c39..5cc95b9000c3 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -842,7 +842,13 @@ gov.cu inf.cu // cv : https://en.wikipedia.org/wiki/.cv +// cv : http://www.dns.cv/tldcv_portal/do?com=DS;5446457100;111;+PAGE(4000018)+K-CAT-CODIGO(RDOM)+RCNT(100); <- registration rules cv +com.cv +edu.cv +int.cv +nome.cv +org.cv // cw : http://www.una.cw/cw_registry/ // Confirmed by registry 2013-03-26 @@ -1179,6 +1185,7 @@ org.gu web.gu // gw : https://en.wikipedia.org/wiki/.gw +// gw : https://nic.gw/regras/ gw // gy : https://en.wikipedia.org/wiki/.gy @@ -5853,7 +5860,7 @@ com.ps org.ps net.ps -// pt : http://online.dns.pt/dns/start_dns +// pt : https://www.dns.pt/en/domain/pt-terms-and-conditions-registration-rules/ pt net.pt gov.pt @@ -10791,6 +10798,10 @@ tele.amune.org // Submitted by Apigee Security Team apigee.io +// Apphud : https://apphud.com +// Submitted by Alexander Selivanov +siiites.com + // Appspace : https://www.appspace.com // Submitted by Appspace Security Team appspacehosted.com @@ -11665,10 +11676,6 @@ tuleap-partners.com onred.one staging.onred.one -// One.com: https://www.one.com/ -// Submitted by Jacob Bunk Nielsen -service.one - // EU.org https://eu.org/ // Submitted by Pierre Beyssac eu.org @@ -12912,6 +12919,10 @@ cloudycluster.net // Submitted by Vicary Archangel omniwe.site +// One.com: https://www.one.com/ +// Submitted by Jacob Bunk Nielsen +service.one + // One Fold Media : http://www.onefoldmedia.com/ // Submitted by Eddie Jones nid.io @@ -13466,6 +13477,11 @@ tabitorder.co.il // Submitted by Bjoern Henke taifun-dns.de +// Tailscale Inc. : https://www.tailscale.com +// Submitted by David Anderson +beta.tailscale.net +ts.net + // TASK geographical domains (www.task.gda.pl/uslugi/dns) gda.pl gdansk.pl diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index f695335a0117..96327e568a66 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1149,4 +1149,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = { static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1642675615870000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1643021232351000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index 9a7d9ade2e1a..6a8ebaa92750 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); +const PRTime gPreloadListExpirationTime = INT64_C(1645440425708000); %% 0--1.de, 1 0-1.party, 1 @@ -900,6 +900,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 1234365w.com, 1 1234365x.com, 1 1234365y.com, 1 +1234365z.com, 0 12345.lv, 1 12345678365.com, 1 123456789365.com, 1 @@ -1997,8 +1998,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 26ck.com, 1 26gt.com, 1 26ja.com, 1 -26nc.com, 1 -26nd.com, 1 26pg.com, 1 26pn.com, 1 26sn.com, 1 @@ -2146,9 +2145,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 300llll.com, 1 300mmmm.com, 1 300oooo.com, 1 -300qqqq.com, 1 300rrrr.com, 1 -300uuuu.com, 1 300xxxx.com, 1 301.moe, 1 301.technology, 1 @@ -2199,7 +2196,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 3178888888.com, 1 31789999.com, 1 317899999.com, 1 -3178aaa.com, 1 3178b.com, 1 3178bbb.com, 1 3178c.com, 1 @@ -2628,7 +2624,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 375422.com, 1 377625.com, 1 377632.com, 1 -3778vip.com, 0 377ks.com, 1 377zzz.com, 1 37879.com, 0 @@ -2710,8 +2705,13 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 3957f.com, 1 3957g.com, 1 396228.com, 1 +396301.com, 0 +396303.com, 0 +396304.com, 0 +396305.com, 0 3963aa.com, 1 3963bb.com, 1 +3963cc.com, 0 3963dd.com, 1 396422.com, 1 3970a.com, 1 @@ -2840,7 +2840,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 3haeuserprojekt.org, 1 3haueserprojekt.org, 1 3hh365.com, 1 -3hl0.net, 1 3i-infotech.com, 1 3ii365.com, 1 3james.com, 1 @@ -2949,20 +2948,14 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 4000sf.com, 1 40010monogatari.com, 1 4005365.com, 1 -400bbbb.com, 1 -400cccc.com, 1 400eeee.com, 1 400gggg.com, 1 400iiii.com, 1 -400jjjj.com, 1 400llll.com, 1 400nnnn.com, 1 -400pppp.com, 1 400tttt.com, 1 400uuuu.com, 1 -400vvvv.com, 1 400yaahc.gov, 1 -400yyyy.com, 1 4025360.com, 1 4025361.com, 1 4025362.com, 1 @@ -3318,7 +3311,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 4kitchenknives.com, 1 4kpi.eu, 1 4kprojektory.cz, 1 -4kvids.com, 1 4lados.tk, 1 4lephants.tk, 1 4list.ml, 1 @@ -3385,8 +3377,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 500eeee.com, 1 500fcw.com, 1 500foods.com, 1 -500iiii.com, 1 -500jjjj.com, 1 500k.nl, 1 500k8.com, 1 500mmmm.com, 1 @@ -3394,7 +3384,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 500p.xyz, 1 500promokodov.ru, 1 500qqqq.com, 1 -500rrrr.com, 1 500tttt.com, 1 500uuuu.com, 1 500vvvv.com, 1 @@ -3781,16 +3770,13 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 600bbbb.com, 1 600cao.com, 1 600dddd.com, 1 -600iiii.com, 1 600k8.com, 1 600kkkk.com, 1 -600llll.com, 1 600mmmm.com, 1 600pppp.com, 1 600ssss.com, 1 600tttt.com, 1 600vvvv.com, 1 -600wwww.com, 1 600xxxx.com, 1 602422.com, 1 602yb.com, 1 @@ -3913,6 +3899,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 6396ddd.com, 1 6396eee.com, 1 6396fff.com, 1 +6396ggg.com, 0 6396iii.com, 1 6396jjj.com, 1 6396ooo.com, 1 @@ -4410,16 +4397,9 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 7-it.ml, 1 700.az, 1 700bbbb.com, 1 -700cccc.com, 1 700dddd.com, 1 -700gggg.com, 1 -700hhhh.com, 1 -700iiii.com, 1 -700mmmm.com, 1 700uuuu.com, 1 700wns.com, 1 -700yyyy.com, 1 -700zzzz.com, 1 701605.com, 1 701squad.tk, 1 70365365.com, 0 @@ -4716,21 +4696,17 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 8007d88.com, 1 800999.xyz, 1 800bbbb.com, 1 -800cccc.com, 1 800dddd.com, 1 800eeee.com, 1 800hhhh.com, 1 800iiii.com, 1 800kkkk.com, 1 800llll.com, 1 -800nnnn.com, 1 800qqqq.com, 1 800rrrr.com, 1 800sf.com, 1 800vvvv.com, 1 800wwww.com, 1 -800xxxx.com, 1 -800zzzz.com, 1 8010d88.com, 1 8012d88.com, 1 8017d.com, 1 @@ -5087,6 +5063,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 861365k.com, 1 861365l.com, 1 861365m.com, 1 +861365n.com, 0 861365o.com, 1 861365q.com, 1 861365r.com, 1 @@ -5343,9 +5320,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 9009019.com, 1 900aaaa.com, 1 900bbbb.com, 1 -900cccc.com, 1 900dddd.com, 1 -900eeee.com, 1 900gggg.com, 1 900hosting.com, 1 900iiii.com, 1 @@ -5354,11 +5329,9 @@ const PRTime gPreloadListExpirationTime = INT64_C(1645094807534000); 900nnnn.com, 1 900pk.com, 1 900qqqq.com, 1 -900tttt.com, 1 900uuuu.com, 1 900wwww.com, 1 900yyyy.com, 1 -900zzzz.com, 1 901543.com, 1 903422.com, 1 905422.com, 1 @@ -6723,7 +6696,6 @@ aceinflatables.com, 1 aceinstituteonline.com, 1 aceitedelcampo.com, 1 aceleraguria.com.br, 1 -aceleratuweb.com, 1 acelpb.com, 1 acem.org.au, 1 acemadeira.pt, 1 @@ -6737,7 +6709,6 @@ acephalafashion.com, 1 acercapartners.com, 1 acerentalandsales.com, 1 acerislaw.com, 1 -acerosfortuna.com.mx, 1 acerostrevino.com.mx, 1 aceshop702.com, 1 acessoeducacao.com, 1 @@ -7065,6 +7036,7 @@ adamov.tk, 1 adamradocz.com, 1 adamraoof.tk, 1 adamricheimer.com, 1 +adams-gonczi.fun, 1 adams.dk, 1 adams.es, 1 adamsasphaltpaving.com, 1 @@ -7094,6 +7066,7 @@ adaptyourlifeacademy.com, 1 adarixconsultores.com, 1 adarshcloud.in, 1 adarshthapa.in, 1 +adarshthapa.net, 0 adarsvidler.me, 1 adasbench.com, 1 adata.kz, 1 @@ -7493,7 +7466,6 @@ adventureforest.nz, 1 adventuregamers.com, 1 adventurenow.nl, 1 adventureprooutdoors.com, 1 -adventures-abroad.com, 1 adventures.com, 1 adventuresinparanoia.com, 1 adventureswithlillie.ca, 1 @@ -7532,6 +7504,7 @@ advokat-dtp.gq, 1 advokat-dtp.ml, 1 advokat-dtp.tk, 1 advokat-malinovskii.ml, 1 +advokat-romanov.com, 1 advokat-vvp.com.ua, 1 advokat73.gq, 1 advokati-ceva.cz, 1 @@ -8218,7 +8191,6 @@ agrente.pl, 1 agreor.com, 1 agri-meet.com, 1 agri.ee, 1 -agrichamber.com.ua, 1 agricult.tk, 1 agricultural-technology.tk, 1 agriculture-schools.com, 1 @@ -8687,7 +8659,6 @@ airportbarking.eu, 1 airportcoc.cf, 1 airportcoc.ga, 1 airportcoc.ml, 1 -airportlimototoronto.com, 1 airportstuttgart.com, 1 airporttaxibudapest.com, 1 airporttransferbudapest.co.uk, 1 @@ -9281,6 +9252,7 @@ alexandraschmidt.coach, 1 alexandrastrauss.fr, 1 alexandrawett.net, 1 alexandre-acaries.fr, 1 +alexandre-barret.fr, 1 alexandre-gallais.fr, 1 alexandreguarita.com.br, 1 alexandremottier.tk, 1 @@ -10228,6 +10200,7 @@ alza.sk, 1 alzashop.com, 1 alziamoiltetto.it, 1 alzon.cf, 1 +alzulej.pt, 1 am-39.com, 1 am-dd.com, 1 am-executive-consulting.com, 1 @@ -10631,6 +10604,7 @@ amoxilonline.gq, 1 amp-logistics.com, 1 amped4ski.co.nz, 1 amper.kharkov.ua, 1 +amperaa.net, 1 ampersandnbspsemicolon.com, 1 ampetronic.com, 1 ampgroep.nl, 1 @@ -12407,6 +12381,7 @@ archauthority.com, 1 archbishop.ga, 1 archdetal.com.ua, 1 archeologicatoscana.it, 1 +archeologiegorinchem.com, 1 archerconsulting.llc, 1 archerlong.com, 1 archerlongx.com, 1 @@ -12638,6 +12613,7 @@ arivo.com.br, 1 arizona-fake.tk, 1 arizonaautomobileclub.com, 1 arizonabondedtitle.com, 1 +arizonamasterworks.com, 1 arizonaonlinedivorce.com, 1 arizonatech.tk, 1 arjan.nl, 1 @@ -13015,6 +12991,7 @@ artlab.tk, 1 artlantis.nl, 1 artleading.ru, 1 artlifeisgood.com, 1 +artlinestix.com.au, 1 artlogo.biz, 1 artlogo.cz, 1 artlogo.sk, 1 @@ -13089,7 +13066,6 @@ arweth.com, 1 arx-libertatis.org, 1 arx.vg, 1 arx8x.net, 1 -arxcs.com, 1 aryabusines.com, 1 aryacollege.me, 1 aryalaroca.de, 1 @@ -13256,7 +13232,7 @@ asiacommerce.id, 1 asiaflash.com, 1 asiafood-curator.com, 1 asiagate.ga, 1 -asiahabit.com, 1 +asiahabit.com, 0 asiaheavens.com, 1 asiakartu.tk, 1 asialeonding.at, 1 @@ -13335,7 +13311,8 @@ asm802.es, 1 asmbsurvey.com, 1 asmdz.com, 1 asmeets.nl, 1 -asmm.cc, 0 +asmita.ru, 1 +asmm.cc, 1 asmobox.ga, 1 asmood.net, 1 asmrbuluo.com, 0 @@ -13557,7 +13534,6 @@ astypic.fr, 1 asua.ca, 1 asuamaytinh.com, 1 asucrews.com, 1 -asuhe.win, 1 asukalangley.tk, 1 asun.co, 1 asur.store, 1 @@ -13862,7 +13838,6 @@ atwatermn.gov, 1 atwonline.org, 1 atxchirocoverage.com, 1 atxtraumatherapycenter.com, 1 -atyafesolutions.com, 1 atyourleisureculinary.com, 1 atyourprice.net, 1 atypicom.es, 1 @@ -14219,6 +14194,7 @@ autofornal.pl, 1 autofresh.tk, 1 autogear.ga, 1 autoglass.com.my, 1 +autograder.ml, 1 autohausmf-nord.de, 1 autohaussued.de, 1 autohit.ro, 1 @@ -14485,7 +14461,7 @@ autotimez.com, 1 autotitleloansnu.ga, 1 autoto.hr, 1 autotonic.tk, 1 -autotrac.com.br, 0 +autotrac.com.br, 1 autotransportquoteservices.com, 1 autotras.com, 1 autotyreprest.ro, 1 @@ -14515,7 +14491,6 @@ autowatch.tk, 1 autowerkstatt-puchheim.de, 1 autozaz.ml, 1 autozuki.com, 1 -autre.cn, 1 autres-talents.fr, 1 autshir.com, 1 autumnhungary.tk, 1 @@ -14775,6 +14750,7 @@ avondaleestatesga.gov, 1 avonlearningcampus.com, 1 avonture.be, 1 avonvets.co.uk, 1 +avova.de, 1 avpres.net, 0 avptp.org, 1 avqueen.cn, 1 @@ -15349,6 +15325,7 @@ b960.com, 1 b96899.com, 1 b9728.co, 1 b979333.com, 1 +b979365.com, 0 b979555.com, 1 b979666.com, 1 b979999.com, 1 @@ -15408,6 +15385,7 @@ b9999pp.com, 1 b9999qq.com, 1 b9999tt.com, 1 b9999vv.com, 1 +b9999ww.com, 0 b9999yy.com, 1 b9999zz.com, 1 b99iosapp.com, 1 @@ -17403,7 +17381,6 @@ berichtsheft-vorlage.de, 1 berightthere.eu, 1 berikod.ru, 1 beris.us, 1 -berita.press, 0 beritalima.com, 1 beritamotor.tk, 1 beritanow.tk, 1 @@ -17515,7 +17492,6 @@ besidemetal.tk, 1 besnard.me, 1 besnik.de, 0 besnik.tk, 1 -besola.de, 1 besole.ch, 1 besolov.tk, 1 besonders-s.at, 1 @@ -17866,6 +17842,7 @@ besured.nl, 1 besv.com, 1 beszerzokozpont.hu, 1 bet-platform.com, 1 +bet031.com, 0 bet03vip.com, 0 bet064.com, 1 bet06vip.com, 1 @@ -18308,7 +18285,7 @@ bgm.bg, 1 bgmall.tk, 1 bgmedia.tk, 1 bgmn.me, 1 -bgmsquad.com, 1 +bgmsquad.com, 0 bgp.space, 1 bgr34.cz, 1 bgs-game.com, 1 @@ -18416,6 +18393,7 @@ bicicletassym.com, 1 bicicletassym.com.co, 1 bicignet.ga, 1 bicommarketing.com, 1 +bicranial.io, 0 bicromoestudio.com, 1 bicstone.me, 1 bicubic.tk, 1 @@ -18776,7 +18754,7 @@ bingowinkel.nl, 1 binhdang.me, 0 binhex.net, 1 binhminhpc.com, 1 -bini-solution.com, 1 +bini-solution.com, 0 binimo.com, 1 biniou.net, 1 binkanhada.biz, 1 @@ -19191,6 +19169,7 @@ bitroll.com, 0 bitrush.nl, 1 bits-hr.de, 0 bitsafe.com.my, 1 +bitsalt.com, 1 bitsellx.com, 1 bitseo.ga, 1 bitseo.tk, 1 @@ -19284,7 +19263,6 @@ bizor.tk, 1 bizpay.su, 1 bizprom.ga, 1 bizstart.ga, 1 -bizstarter.cz, 1 bizsugar.ga, 1 bizteam.ga, 1 biztera.com, 1 @@ -19601,7 +19579,6 @@ blegalservicespty.com, 1 blekingeopen.tk, 1 blenderinsider.com, 1 blenderrecipereviews.com, 1 -blenderwallet.io, 1 blendessencial.com, 1 blending.kr, 1 blendle.com, 1 @@ -19636,6 +19613,7 @@ blindfold.cf, 1 blindfold.ga, 1 blindpigandtheacorn.com, 1 blinds-unlimited.com, 1 +blindscribblings.com, 1 blindsjoburg.com, 1 blingbusinessest.ga, 1 blingsparkleshine.com, 1 @@ -19787,6 +19765,7 @@ blogsked.com, 1 blogsnote.xyz, 1 blogspasest.ga, 1 blogstar.tk, 1 +blogtechnologiczny.pl, 1 blogthetindung.com, 1 blogtroterzy.pl, 1 bloguser.ru, 1 @@ -19891,7 +19870,6 @@ bluemoonrescue.org, 1 bluemosh.com, 1 bluemtnrentalmanagement.ca, 1 bluenailsstudio.nl, 1 -bluenet-26.com, 1 blueneuron.tk, 1 blueoakart.com, 1 blueparrotpainting.com, 1 @@ -19902,7 +19880,6 @@ blueprintrealtytn.com, 1 bluepromocode.com, 1 bluerange.io, 1 blueridge.social, 1 -bluerootsmarketing.com, 1 blues-and-pictures.com, 1 bluesbarn.tk, 1 bluesbuyers.com, 1 @@ -19943,6 +19920,7 @@ bluffcitytn.gov, 1 bluffelectrician.co.za, 1 bluffplumber.co.za, 1 bluheron.ca, 1 +blui.cf, 0 blui.xyz, 1 bluiandaj.ml, 1 bluicraft.tk, 1 @@ -20111,6 +20089,7 @@ bodyhealthcare.tk, 1 bodymassage.cf, 1 bodymod.tk, 1 bodymusclejournal.com, 1 +bodypainter.pl, 1 bodypainting.waw.pl, 1 bodyshaping.ml, 1 bodyshopnews.net, 1 @@ -20443,7 +20422,6 @@ boost.ink, 1 boostdesign.tk, 1 boostgame.win, 1 boostplm.com, 1 -boostrpro.pl, 1 booths.cyou, 1 bootina.com, 1 bootlesshacker.com, 1 @@ -20674,6 +20652,7 @@ bouncingbuddiesleicester.co.uk, 1 bouncingbuzzybees.co.uk, 1 bouncinghigher.co.uk, 1 bouncingscotland.com, 1 +bouncourseplanner.net, 1 bouncy-castles-surrey.co.uk, 1 bouncy-tots.co.uk, 1 bouncybaileys.co.uk, 1 @@ -21270,13 +21249,13 @@ brickwerks.io, 1 bricmon.tk, 1 brico-volet.com, 1 bricolajeux.ch, 0 +bricolea.fr, 1 bricomag-media.com, 1 bricomium.com, 1 brid.gy, 0 bridal.tk, 1 bridalfabrics.ru, 1 bridalweddingshow.ga, 1 -bride-forever.com, 1 bride.vn, 1 bridesbouquet.ml, 1 bridestarco.com, 1 @@ -22737,7 +22716,6 @@ bypassgfw.tk, 1 bypetula.cz, 1 byprata.com.br, 1 byraje.com, 1 -byrddogpaving.com, 1 byrest.com, 1 byriderfranchise.com, 1 byrko.cz, 1 @@ -23714,6 +23692,7 @@ capsulesubs.fr, 1 capsulezone.tk, 1 captainark.net, 1 captainclaw.tk, 1 +captainfit.in, 1 captainjanks.tk, 1 captainratnesh.tk, 1 captainscarlet.tk, 1 @@ -23784,7 +23763,6 @@ carbonadvantage.tk, 1 carboneventsupport.be, 1 carboneventsupport.lu, 1 carbonholic.org, 1 -carboniaccessori.com.br, 1 carbonkiller.org, 1 carbonlib.com, 0 carbonmonoxidelawyer.net, 1 @@ -24703,6 +24681,7 @@ cbc-hire.co.uk, 1 cbca.gov, 1 cbcentelles.tk, 1 cbcf.info, 1 +cbchslax.com, 1 cbcnet.co.za, 1 cbcnet.info, 1 cbd-natural.de, 1 @@ -24776,7 +24755,6 @@ ccbin.tk, 1 ccc-ch.ch, 1 ccc-checker.cn, 1 ccc-cloud.de, 1 -ccc.xxx, 1 cccleaner.tk, 1 cccp-o.tk, 1 cccpublishing.com, 1 @@ -24865,6 +24843,7 @@ cdmhp.org.nz, 1 cdmon.tech, 1 cdn.ampproject.org, 1 cdn1shweflix.xyz, 1 +cdn6.de, 1 cdnaval.tk, 1 cdncompanies.com, 1 cdnjs.com, 1 @@ -25025,6 +25004,7 @@ cennelly.com, 1 cennetfm.tk, 1 cennetforum.tk, 1 censamatil.net, 1 +censeo-financial.com, 1 censored.ml, 1 censurfridns.dk, 1 censurfridns.nu, 1 @@ -25993,7 +25973,7 @@ chili.ml, 1 chilian.de, 1 chilihosting.eu, 1 chilikin.pro, 1 -chilimath.com, 1 +chilimath.com, 0 chilimathwords.com, 1 chilio.net, 1 chilipepperhomes.com, 1 @@ -26483,7 +26463,6 @@ cialde.it, 1 cialis-trial.gq, 1 cialisfreetrial.ga, 1 cialisvtr.com, 1 -cialona.nl, 1 cialowruchu.pl, 1 ciancaiphotobooth.com, 1 ciancode.com, 1 @@ -27049,6 +27028,7 @@ claudiney.eti.br, 1 claudiney.id, 1 claudiney.info, 1 claudiohdz.com, 1 +claumarservice.com, 1 claus-bahr.de, 1 claus-cremer.tk, 1 clauseriksen.net, 1 @@ -27252,7 +27232,6 @@ cliksource.com, 1 climaencusco.com, 1 climateactionfestival.org, 1 climatechange2021.org, 1 -climatecrafters.com, 1 climateinteractive.org, 1 climatgate.tk, 1 climaticequipment.tk, 1 @@ -27663,7 +27642,6 @@ cnabogota.tk, 1 cnam-idf.fr, 1 cnaprograms.online, 1 cnatraining.network, 1 -cnb.ie, 1 cnbs.ch, 1 cnc-lehrgang.de, 1 cncado.net, 1 @@ -27702,6 +27680,7 @@ co.td, 1 co2eco.cn, 0 co2fr.ee, 0 co50.com, 1 +coach-immobilier-neuf.fr, 1 coach.org.uk, 0 coachapp-ipass.herokuapp.com, 1 coachbakery.com, 1 @@ -28246,7 +28225,6 @@ columbushydroxide.com, 1 columbushydroxide.net, 1 columbushydroxide.org, 1 columbusks.gov, 1 -columbuswines.com, 1 colwichks.gov, 1 colyakoomusic.com, 1 com-b.vn, 1 @@ -28774,6 +28752,7 @@ connectmath.com, 1 connectme.com.mx, 1 connectmy.car, 1 connecto-data.com, 1 +connecto.group, 1 connectum.eu, 1 connelink.fr, 1 conner.work, 1 @@ -29353,7 +29332,6 @@ cosmasiakraft.tk, 1 cosmechic.fr, 1 cosmekaitori.jp, 1 cosmetic-surgery-prices.co.uk, 1 -cosmeticappraisal.com, 1 cosmeticasimple.com, 1 cosmeticenter.com.br, 1 cosmeticosdelivery.com.br, 1 @@ -29451,6 +29429,7 @@ counselingfw.com, 1 counsellingtime.co.uk, 1 counsellingtime.com, 1 counstellor.com, 0 +count.sh, 0 countdowntrader.com, 1 counterenlol.com, 1 counterespionage.com, 1 @@ -30479,7 +30458,6 @@ ctor.ch, 1 ctoresms.com, 1 ctpe.info, 1 ctpe.net, 1 -ctr-sante.eu, 1 ctr.id, 0 ctrl.blog, 1 ctrl.gr, 0 @@ -31672,7 +31650,6 @@ dannymoran.com, 1 dannyoficial.tk, 1 dannyroh.de, 1 dannyrohde.de, 1 -dannys.cloud, 0 dannys.space, 1 dannyscloud.tk, 1 dannystevens.co.uk, 1 @@ -31687,6 +31664,7 @@ danpiel.net, 1 danq.me, 1 danramer.tk, 1 dansa.com.co, 1 +dansage.co, 0 dansaunders.me, 1 dansdiscounttools.com, 1 dansedesalonsaintave.fr, 1 @@ -31802,7 +31780,6 @@ darkgames.cf, 1 darkgrid.eu, 1 darkhall.tk, 1 darkhuntersworld.tk, 1 -darkillusion.us, 1 darkishgreen.com, 1 darkknights.tk, 1 darklang.com, 1 @@ -32041,7 +32018,6 @@ datenreiter.cf, 1 datenreiter.gq, 1 datenreiter.org, 1 datensalat.info, 1 -datenschutz-consult.de, 1 datenschutz-gruenwald.de, 1 datenschutz-individuell.de, 1 datenschutz-isny.de, 1 @@ -32222,7 +32198,6 @@ davulcuyuz.com, 1 davy-server.com, 1 davyatletiek.tk, 1 davyjones.com.br, 1 -davyjonesatacado.com.br, 1 davypropper.com, 1 davys.com.br, 1 daware.io, 1 @@ -32624,7 +32599,6 @@ decorativecosmetics.tk, 1 decorativeflooring.com, 1 decorator.uk, 1 decoratore.roma.it, 1 -decorauvent.ca, 1 decorestilo.com.br, 1 decorincasa.com.br, 1 decorlux.bg, 1 @@ -33415,7 +33389,6 @@ desipandora.com, 1 desiplex.tk, 1 desire-host.tk, 1 desish.cf, 1 -desiskinscience.com, 0 desivideos.tk, 1 deskaservices.com, 1 deskdesign.me, 1 @@ -33506,7 +33479,6 @@ detelefoonboer.nl, 1 detenterprise.com, 1 determapp.de, 1 determinatie.tk, 1 -dethemium.com, 1 deti-online.com, 1 deti-vse.ml, 1 deti.ga, 1 @@ -33717,6 +33689,7 @@ dexerto.fr, 1 dexign.ro, 1 dexigner.com, 1 dexonrest.azurewebsites.net, 1 +dexonservicedeskws.azurewebsites.net, 1 dexonsoftware.com, 0 dexterseries.ru, 1 dextra.tk, 1 @@ -34002,7 +33975,6 @@ didierfle.com, 1 didierghez.com, 1 didierlaumen.be, 1 didigotoffer.com, 1 -didntdoitbailbonds.com, 1 didtrumpopengovernmentyet.com, 1 die-bergfuehrer.de, 1 die-besten-weisheiten.de, 1 @@ -34278,6 +34250,7 @@ digitalphoto.tech, 1 digitalpiloten.org, 1 digitalplaymakers.co.uk, 1 digitalpocketpedometer.tk, 1 +digitalponsel.com, 0 digitalposition.com, 1 digitalprimate.my, 1 digitalprofilers.com, 1 @@ -34297,7 +34270,6 @@ digitalskillswap.com, 1 digitalsphere.tk, 1 digitalsurge.io, 1 digitaltcertifikat.dk, 1 -digitaltepee.co.uk, 1 digitaltry.tk, 1 digitalupcoming.tk, 1 digitalvag.tk, 1 @@ -35268,7 +35240,7 @@ do.search.yahoo.com, 0 do13.net, 1 do67.de, 1 do67.net, 1 -doamatto.xyz, 0 +doamatto.xyz, 1 doanhai.tk, 1 dobavki.club, 1 dobbshvac.com, 1 @@ -36707,7 +36679,6 @@ dryashplasticsurgery.com, 1 dryasinakgul.com, 1 drybjed.net, 1 drybysuperior.com, 1 -drycleancoalition.org, 1 drycreekphoto.com, 1 drydensfairfax.com, 1 drydor.com, 1 @@ -36959,6 +36930,7 @@ dumb-laws.net.ru, 1 dumbeartech.com, 1 dumberger-bau.de, 1 dumbfunded.co.uk, 1 +dumbsolpunks.com, 1 dumino.bg, 1 dummo.tk, 1 dumnezeu.tk, 1 @@ -37829,6 +37801,7 @@ eaglewreck.info, 1 eaglexiang.org, 1 eagleyecs.com, 1 eaimty.com, 1 +eajglobal.com, 1 ealadel.com, 1 ealekseyev.ml, 1 ealev.de, 1 @@ -37855,7 +37828,6 @@ earlyvoting.gq, 1 earlyvoting.ml, 1 earlyyearshub.com, 1 earmarks.gov, 1 -earn99.co, 1 earnet.tk, 1 earningsgames.tk, 1 earningthatis.tk, 1 @@ -37905,7 +37877,6 @@ eastsideroofingcontractor.com, 1 eaststudios.net, 1 eastvalleyautorebuild.com, 1 eastwashingtonpa.gov, 1 -eastwesttmc.com.au, 1 eastwindsorhistory.tk, 1 eastyorkshirebuses.co.uk, 1 easukasbestos.co.uk, 1 @@ -38097,6 +38068,7 @@ eboxtenders.com, 1 ebpgateway.com, 1 ebrahimhadimarket.com, 1 ebrdbusinessguide.com, 1 +ebrea.ch, 1 ebregrow.com, 1 ebrnd.de, 1 ebrowz.com, 1 @@ -38275,7 +38247,6 @@ ecopak.org, 1 ecopark.asia, 1 ecorak.de, 1 ecorp-australia.tk, 1 -ecos-eguilles.com, 1 ecos-ev.de, 1 ecos.srl, 1 ecosas.org, 1 @@ -38359,7 +38330,6 @@ edeals.co.com, 1 edeals.com.co, 1 edeca.net, 1 ededdeddy.tk, 1 -edefrutos.me, 1 edefrutos2020.com, 1 edegembicycleclub.tk, 1 edegulkoyu.tk, 1 @@ -38450,7 +38420,6 @@ edrepay.com, 1 edrgroup.nl, 1 edrosd.cf, 1 edrost.tk, 1 -edsby.com, 1 edscolors.com, 1 edshogg.co.uk, 1 edsm.net, 1 @@ -38723,6 +38692,7 @@ egglestonyouthcenter.org, 1 eggman.tk, 1 eggqvq.com, 1 eggrolls.ml, 1 +eggy.com.au, 0 eggzr.com, 1 egh.ir, 1 egiftcards.be, 1 @@ -39078,6 +39048,7 @@ electricalcamarillo.com, 1 electricalconejovalley.com, 1 electricaldosvientos.com, 1 electricalengineers.tk, 1 +electricalfencingfourways.co.za, 1 electricalfencinggermiston.co.za, 1 electricalhiddenhills.com, 1 electricallakesherwood.com, 1 @@ -39097,7 +39068,6 @@ electriccitysf.com, 1 electricconejovalley.com, 1 electricdosvientos.com, 1 electricdreams.xyz, 1 -electricfencebenoni.co.za, 1 electricfenceboksburg.co.za, 1 electricfencemidrand.co.za, 1 electricfenceroodepoort.co.za, 1 @@ -39583,7 +39553,6 @@ elskling.no, 1 elstopstelten.nl, 0 elsuccionador.com, 1 elsvanderlugt.nl, 1 -elswickllc.com, 1 elsword.moe, 0 elta.com.ua, 1 eltair.com, 1 @@ -40004,6 +39973,7 @@ ender.co.at, 1 ender.fr, 1 ender.moe, 1 ender3.info, 1 +enderandrew.com, 1 enderbycamping.com, 1 enderdrachelp.ddns.net, 1 enderhost.tk, 1 @@ -40548,7 +40518,6 @@ epublibre.org, 1 epvd.tk, 1 epyonsuniverse.net, 1 eq-serve.com, 1 -eqab.net, 1 eqassociates.com, 1 eqibank.com, 1 eqlplayground.io, 1 @@ -40824,6 +40793,7 @@ es8888.net, 1 es888999.com, 1 es999.net, 1 esaborit.ddns.net, 0 +esadoggy.com, 0 esagente.com, 1 esajokinen.net, 1 esale.co, 1 @@ -41185,6 +41155,7 @@ estudiarcocinaonline.es, 1 estudiarenergiasrenovablesonline.es, 1 estudiaresteticaonline.es, 1 estudiarparaser.com, 1 +estudiarseguridadprivada.es, 1 estudiaryaprenderingles.com, 1 estudiemosvirtualmente.com, 1 estudio21pattern.com, 0 @@ -41225,7 +41196,6 @@ etaoinwu.com, 1 etaoinwu.win, 1 etath.com, 1 etaxigraz.com, 1 -etbtoursegypt.com, 1 etccooperative.org, 0 etch.co, 1 etch44.com, 1 @@ -41327,7 +41297,6 @@ etiqa.tk, 1 etiquetaunica.com.br, 1 etkaddict.com, 1 etkarle.de, 1 -etkinpatent.com, 1 etnis.id, 1 etnoforum.tk, 1 etnoria.com, 1 @@ -41527,6 +41496,7 @@ euruni.edu, 1 eusarse.tk, 1 euskaltzaleak.tk, 1 eusou.ml, 1 +euterpiaradio.ch, 1 eutiximo.com, 1 eutotal.com, 1 euvo.tk, 0 @@ -41617,7 +41587,7 @@ evenstargames.com, 1 event-blick.de, 1 event-fullyyours.com, 1 event-reisen.tk, 1 -event1teamstore.com, 1 +event1teamstore.com, 0 event4fun.no, 1 eventact.com, 0 eventaro.com, 1 @@ -42140,7 +42110,6 @@ exquisito.tk, 1 exs.lv, 1 exsanio.de, 1 exside.com, 1 -extact.com, 1 extantsoft.biz, 1 extendet.tk, 1 extendwings.com, 1 @@ -42764,7 +42733,7 @@ faktenfaktenfakten.tk, 1 faktotum.tech, 0 fakturar.com, 1 fakturi.com, 1 -faktury.co, 1 +faktury.co, 0 falaeapp.org, 1 falaowang.com, 1 falasteenjobs.com, 1 @@ -43328,6 +43297,7 @@ fbi.gov, 1 fbigame.com, 1 fbihr.gov, 1 fbiic.gov, 1 +fbijobs.gov, 1 fbo.gov, 1 fbo.network, 1 fboerman.nl, 1 @@ -43350,7 +43320,6 @@ fcblueboys.be, 1 fcbrasov.tk, 1 fcburk.de, 1 fccarbon.com, 0 -fccpvirtual.com.ve, 1 fcdauwendaele-dames.tk, 1 fcdekampioenen.tk, 1 fcdemuis.tk, 1 @@ -43393,7 +43362,6 @@ fdpbrig.ch, 1 fdresearch.ca, 1 fdsl.eu, 1 fe-data.nl, 1 -feac.us, 1 feaden.me, 1 feandc.com, 1 fear-crowd.tk, 1 @@ -44870,7 +44838,6 @@ flipping.land, 0 flipsidevr.com, 1 fliptable.org, 1 flipthebrain.com, 1 -fliptracker.io, 1 flipweb.tk, 1 flirt-norden.de, 1 flirtbox.tk, 1 @@ -45650,6 +45617,7 @@ formulacionquimica.com, 1 formulastudent.de, 1 formulaveevictoria.com.au, 1 formup.com.pl, 1 +formvibes.com, 1 fornarisandres.com, 1 foro-coopfuture.tk, 1 foro.io, 0 @@ -45662,6 +45630,7 @@ forocio.tk, 1 forocoches.com, 1 forocristiano.tk, 1 forodebanfield.tk, 1 +forodeespanol.com, 1 forodieta.com, 0 foroenguera.tk, 1 forojovensanfernando.tk, 1 @@ -46017,6 +45986,7 @@ fragzona.tk, 1 fraho.eu, 1 frahub.com, 1 frail.gq, 1 +fralef.me, 0 fralippolippi.tk, 1 frama.link, 1 frama.site, 1 @@ -46514,6 +46484,7 @@ freeza.tk, 1 freezander.tk, 1 freezemea.com, 1 freezerrepairaustin.com, 1 +freezvon.com, 1 frei.social, 1 freibesetzt.tk, 1 freiboth.ddns.net, 1 @@ -47384,6 +47355,7 @@ fynchmobility.com, 1 fyol.pw, 1 fyp-aiman.com, 1 fyphb.com, 1 +fyrehost.net, 1 fyrehost.xyz, 1 fyretrine.com, 1 fyroeo.fr, 0 @@ -47470,7 +47442,6 @@ gabe.cooking, 1 gabe.download, 1 gabe.house, 1 gabe.link, 1 -gabe.pics, 1 gabe.space, 1 gabe.watch, 1 gabe565.com, 1 @@ -47862,7 +47833,6 @@ gameswitchers.uk, 1 gametium.com, 1 gametium.es, 1 gametowndev.tk, 1 -gametriot.com, 1 gametube.website, 1 gameview.tk, 1 gamewayz.online, 1 @@ -47919,7 +47889,6 @@ gancedo.com.es, 1 gandalfcz.tk, 1 gandalfservice.com, 1 gandalfthefeline.com, 1 -gandgliquors.com, 1 gandul.ro, 1 gangbangs.tk, 1 gangbangteen.net, 1 @@ -49183,7 +49152,6 @@ giannoug.gr, 1 gianproperties.com, 1 giant-panda.com, 1 giant-tortoise.com, 1 -giantbrandsolutions.com, 1 giantratesers.ga, 1 giantratesest.ga, 1 giantslipandslide.co.uk, 1 @@ -49272,6 +49240,7 @@ gigawa.lt, 1 gigawattz.com, 1 giggletotz.co.uk, 1 gigharborwa.gov, 1 +gigiena-ruk.ru, 1 gigiscloud.servebeer.com, 1 giglink.club, 1 gigloog.tk, 1 @@ -49434,6 +49403,7 @@ gitns.nl, 1 gitns.org, 1 gitstuff.tk, 1 gittigidiyor.com, 1 +gittr.ch, 1 giuem.com, 1 giuliabonati.com, 1 giuliawylde.com, 1 @@ -49825,7 +49795,6 @@ gmpartsgiant.com, 1 gmpartsprime.com, 1 gmslparking.co.uk, 1 gmsociety.tk, 1 -gmsurveyingms.com, 1 gmta.nl, 1 gmtplus.co.za, 1 gmuh.fr, 1 @@ -50722,7 +50691,6 @@ graphic-shot.com, 1 graphicbuffet.co.th, 1 graphicdesignresources.net, 1 graphicdream.tk, 1 -graphicnab.com, 1 graphicspace.tk, 1 graphicwallet.com, 1 graphire.io, 1 @@ -50775,7 +50743,6 @@ gratiz.nl, 1 grattan.co.uk, 1 gratuitweb.tk, 1 graumeier.de, 1 -grauwasser-blog.de, 1 gravedigger.tk, 1 gravelshooters.com, 1 gravelshooters.net, 1 @@ -52114,7 +52081,6 @@ hairhardstyle.tk, 1 hairhumanextensions.tk, 1 hairloss.com, 1 hairlossadvice.tk, 1 -hairmitage.pl, 0 hairphoto.tk, 1 hairpins.tk, 1 hairsalon-wish.com, 1 @@ -52308,7 +52274,6 @@ handmadebuy.ru, 1 handmadehechoamano.com, 1 handmadetutorials.ro, 1 handphones.tk, 1 -handrollschile.cl, 1 handsaccounting.com, 1 handsomeabel.tk, 1 handstandstudio.ga, 1 @@ -52613,6 +52578,7 @@ harriedrecords.tk, 1 harrietjohnston.tk, 1 harrimantn.gov, 1 harringtonca.com, 1 +harrisandharris.com.au, 1 harrisconsulting.ie, 1 harrisexteriors.com, 1 harrisonar.gov, 1 @@ -53130,7 +53096,6 @@ healthhuntsville.tk, 1 healthhusky.ga, 1 healthiercompany.com, 1 healthiergenerations.co.uk, 1 -healthierweight.co.uk, 1 healthimagine.ga, 1 healthintergrity.ga, 1 healthiraq.ga, 1 @@ -53459,6 +53424,7 @@ heiden-wir-helfen.de, 1 heidifuller.com, 1 heidihills.com, 1 heidirange.tk, 1 +heidisheroes.org, 1 heidns.cn, 0 heightselectrical.com.au, 1 heijdel.nl, 1 @@ -53516,6 +53482,7 @@ hekwerken.tk, 1 heladospipos.ga, 1 helagotaland.ga, 1 helagotaland.gq, 1 +helali.me, 1 helastel.com, 1 helbreath.tk, 1 helco.xyz, 1 @@ -53963,8 +53930,9 @@ hexstream.xyz, 1 hexstreamsoft.com, 1 hexxagon.com, 1 hey.pw, 1 -heyapakabar.com, 0 +heyapakabar.com, 1 heybaker.com.au, 1 +heyboldface.com, 1 heybookmark.ga, 1 heybookmark.gq, 1 heybritney.tk, 1 @@ -56110,7 +56078,6 @@ hurricanecarroll.com, 1 hurricanelabs.com, 0 hurricaneplaneers.ga, 1 hurricaneplaneest.ga, 1 -hurrikane.us, 1 hurriyetseriilan.tk, 1 hurstiharrell.tk, 1 hurtigtinternet.dk, 1 @@ -56119,7 +56086,6 @@ husakbau.at, 1 hushbabysleep.com, 1 hushfile.it, 1 husic.net, 0 -husk.house, 1 husky-in-nood.tk, 1 huskyeye.de, 1 huskyinc.us, 0 @@ -56667,7 +56633,6 @@ icon-programming.tk, 1 iconecoiffure.ca, 1 iconintegration.com.au, 1 iconoarte.tk, 1 -iconomi.net, 1 icons4free.tk, 1 iconsuppstore.com, 1 iconworld.ml, 1 @@ -56685,6 +56650,7 @@ ics.edu.hn, 1 icst.tk, 1 ict-concept.nl, 1 ict-crew.nl, 1 +ict-kerk.nl, 1 ict-oldehove.nl, 1 ict-radar.com, 1 ict-radar.nl, 1 @@ -56850,6 +56816,7 @@ idontexist.me, 0 idonthaveawebsite.tk, 1 idontplaydarts.com, 1 idoparadoxon.hu, 1 +idowp.net, 1 idp.onl, 1 idraetsmusik.dk, 1 idratherbequilting.com, 1 @@ -57441,7 +57408,6 @@ imfacademy.com, 1 imforza.com, 1 img.mg, 1 img.ovh, 1 -imgaa.com, 1 imgbb.com, 1 imgbu.com, 1 imgencrypt.com, 1 @@ -57933,6 +57899,7 @@ inevitavelbrasil.com.br, 1 inex.one, 1 inexlog.fr, 1 inexpensivecomputers.net, 1 +inextmovies.link, 1 ineztheminiatureelephant.com, 1 inf-fusion.ca, 1 inf0sec.nl, 1 @@ -58719,6 +58686,7 @@ intelhost.com.mx, 1 intelhost.com.pe, 1 intelhost.net, 1 inteli.com.pl, 1 +intelics.com.au, 1 intellar.com, 1 intelldynamics.com, 1 intellecta.is, 1 @@ -59566,6 +59534,7 @@ ishimen.co.jp, 1 ishiro.me, 1 ishland.com, 1 ishopforpowerserg.com, 1 +ishotagency.com, 1 ishtyl.com, 1 isidore.uk, 1 isif-ostewg.org, 1 @@ -59796,7 +59765,6 @@ it-expert.tk, 1 it-faul.de, 1 it-inside.ch, 1 it-jobbank.dk, 1 -it-kron.de, 1 it-maker.eu, 1 it-meneer.nl, 0 it-novosti.tk, 1 @@ -60305,6 +60273,7 @@ j9507.com, 1 j9508.com, 1 j9511.com, 1 j9512.com, 1 +j9514.com, 0 j9515.com, 1 j9516.com, 1 j9517.com, 1 @@ -60769,7 +60738,6 @@ jarrods.tech, 1 jarsater.com, 0 jas-ac.com, 1 jas-team.net, 1 -jasalokal.id, 1 jasawebbisnis.com, 0 jaseng.ga, 1 jashinchan.cn, 1 @@ -61019,7 +60987,6 @@ jdcdirectsales.com.ph, 1 jdd888.cc, 1 jdecommastermind.com, 1 jdefreitas.com, 1 -jdegbau.com, 1 jdelgado.fr, 1 jdieselmusic.com, 1 jdinjury.com, 1 @@ -61237,7 +61204,6 @@ jeremywinn.com, 1 jeremywinn.xyz, 1 jericamacmillan.com, 1 jerichoproject.org, 1 -jering.tech, 1 jerisandoval.tk, 1 jerixmx.com, 1 jermann.biz, 1 @@ -61270,6 +61236,7 @@ jerusalempersonals.ml, 1 jerusalempersonalsers.ga, 1 jerusalempersonalsest.ga, 1 jesec.cn, 1 +jesec.io, 1 jesiensredniowiecza.pl, 1 jesmh.de, 1 jesperandersson.tk, 1 @@ -61505,6 +61472,7 @@ jimucho.online, 1 jimvophotography.tk, 1 jimwoodrealty.com, 1 jimwoodrealty.help, 1 +jin-dan.site, 0 jinancy.fr, 1 jinanshen.com, 1 jinbijin.nl, 1 @@ -61604,7 +61572,7 @@ jlot.org, 1 jlpn.eu, 1 jlpn.nl, 1 jlponsetto.com, 1 -jlqwer.com, 0 +jlqwer.com, 1 jlr-luxembourg.com, 1 jls.idv.tw, 1 jltcsecuritygroup.com, 1 @@ -62443,7 +62411,6 @@ julenetxaniz.eus, 1 julenlanda.com, 0 julesfrans.be, 1 julesroovers.nl, 1 -julestern.com, 1 julia-clarete.tk, 1 julia-jones.org, 1 julia-pink.org, 1 @@ -62451,7 +62418,7 @@ julia.school, 1 juliaexclusiv.com, 1 juliajuice.net, 1 julian-miller.de, 1 -julian-post.de, 1 +julian-post.de, 0 julian-uphoff.de, 1 julian-weigle.de, 1 julian.tech, 1 @@ -62691,6 +62658,7 @@ justsome.info, 1 justtalk.site, 1 justthinktwice.gov, 0 justupdate.me, 1 +justyardsign.com, 1 justyy.com, 1 justzz.xyz, 1 juszczak.io, 1 @@ -63127,7 +63095,6 @@ kalevlamps.co.uk, 1 kalex.nl, 1 kaleylocks.com, 1 kalhufvudet.se, 1 -kali.training, 1 kaliaa.fi, 1 kalian.cz, 1 kaliboairport.tk, 1 @@ -63305,7 +63272,6 @@ kanzashi.com, 1 kanzlei-gaengler.de, 1 kanzlei-hhh.de, 1 kanzlei-oehler.com, 1 -kanzlei-sixt.de, 1 kanzshop.com, 1 kaohongshu.blog, 1 kaosintesta.tk, 1 @@ -64567,7 +64533,6 @@ kingdommindsmentorsclub.com, 1 kingdoms.gg, 1 kingfast.cc, 1 kingfast.eu.org, 1 -kingfin.com, 1 kingiescastles.co.uk, 1 kingjamesbibleonline.org, 1 kingjamesgospel.com, 1 @@ -64763,6 +64728,7 @@ kisvasut.tk, 1 kita-freie-schule.de, 1 kita-sun.com, 1 kitabat.com, 1 +kitabgaul.com, 0 kitabnamabayi.com, 1 kitacoffee.com, 1 kitagawa-internal-medicine-clinic.com, 1 @@ -65120,7 +65086,6 @@ knighki-knighki.ml, 1 knighkidoma.tk, 1 knightsblog.de, 1 knightsbridge.net, 1 -knightsbridgewine.com, 1 knightsweep.com, 1 knighulki.cf, 1 knigi-free.cf, 1 @@ -65153,7 +65118,6 @@ knovator.com, 1 know.cf, 1 knowarth.com, 1 knowdebt.org, 1 -knowit-now.com, 1 knowl365.com, 1 knowledge-base.info, 0 knowledgeforce.com, 1 @@ -65297,6 +65261,7 @@ koineuno.com, 1 koing.de, 1 koirala.email, 1 koiro.fi, 1 +koishi.pro, 1 koizumidesign.com, 1 koj.co, 1 koji-tsujitani.net, 1 @@ -65794,6 +65759,7 @@ kratom-k.com, 1 krattk.de, 1 krauseent.com, 0 krauskopf-it.de, 1 +krautomat.com, 1 kraynik.com, 1 krazy.net.au, 1 krazykastles.co.uk, 1 @@ -65958,7 +65924,6 @@ kroyou.com, 0 krozilla.tk, 1 krpaforum.org, 1 krsaustralia.com.au, 1 -krsn.de, 1 krsvrs.nl, 1 krti.com.ua, 1 krubik.tk, 1 @@ -66004,7 +65969,6 @@ kryshodel.ml, 1 krystal-framework.ml, 1 krytykawszystkiego.com, 1 krytykawszystkiego.pl, 1 -kryx.de, 1 ks-19.com, 1 ks-39.com, 1 ks-59.com, 1 @@ -66664,6 +66628,7 @@ labordayauction.org, 1 laborriquita.tk, 1 labortogether.com, 1 labouncycastlehire.co.uk, 1 +labourreedevergheas.fr, 1 laboutiquedejuliette.com, 1 laboutiquemarocaineduconvoyeur.com, 1 laboutiquemarocaineduconvoyeur.ma, 1 @@ -67028,6 +66993,7 @@ lan.biz.tr, 1 lan4.life, 1 lana.swedbank.se, 1 lanabello.com.br, 1 +lanaengel.com, 1 lanagiselle.net, 1 lanahallen.com, 1 lanasomething.com, 1 @@ -67075,7 +67041,7 @@ landoftherisingson.com, 1 landoncreekapartments.com, 1 landoverhillsmd.gov, 1 landroverexpo.com.au, 1 -landsbref.is, 1 +landsbref.is, 0 landscape-photography.org, 1 landscapelightingagoura.com, 1 landscapelightingagourahills.com, 1 @@ -67123,7 +67089,6 @@ langenberg.tk, 1 langenu.tk, 1 langgasse-baar.ch, 1 langhof-immobilien.de, 1 -langhun.me, 1 langjp.com, 0 langley.tk, 1 langleyporter.com, 1 @@ -67405,7 +67370,6 @@ laszlo.sh, 1 laszloinstitute.com, 1 laszlotamas.hu, 1 lat.sk, 1 -lat46.ch, 0 latabaccheria.net, 1 latabledebry.be, 1 latabledemontebello.com, 1 @@ -67441,7 +67405,6 @@ latestdeals.co.uk, 1 latestimmigrationnews.today, 1 latestmata.com, 1 latestmobiles.tk, 1 -latestmyanmarnews.com, 0 latestonmarketing.com, 1 latetrain.cn, 1 lathamlabs.com, 1 @@ -67671,7 +67634,6 @@ lazyhelp.com, 1 lazysoftware.fr, 1 lazytux.org, 1 lazywaves.tk, 1 -lazzzy.com, 1 lb-music.tk, 1 lb-toner.de, 1 lb366.cc, 1 @@ -68614,7 +68576,6 @@ lesprofsplacotent.com, 1 lesptitspasdelyne.fr, 1 lesptitstutos.fr, 1 lesquerda.cat, 0 -lessavonnables.fr, 1 lessets-graphiques.com, 1 lessiamia.net, 1 lessis.moe, 1 @@ -68835,7 +68796,6 @@ lgbtventures.com, 1 lgbusiness.es, 0 lgerman.de, 1 lgesteticaautomotiva.com.br, 1 -lgf.im, 0 lghfinancialstrategy.ch, 0 lgiswa.com.au, 1 lgnsh.fr, 1 @@ -69217,7 +69177,6 @@ lightningseed.net, 1 lightningwirelabs.com, 1 lighto.pk, 1 lightography.com, 1 -lightquantum.moe, 1 lights.co.uk, 1 lights0123.com, 1 lightscale.com, 1 @@ -69401,7 +69360,6 @@ lincolncountymoclerk.gov, 1 lincolncountysheriffok.gov, 1 lincolncountytn.gov, 1 lincolncountywy.gov, 1 -lincolnfinewines.com, 1 lincolnimps.tk, 1 lincolnmoneyman.com, 1 lincolnpedsgroup.com, 1 @@ -69840,7 +69798,7 @@ littlerphotographie.fr, 1 littles.moe, 1 littlescallywagsplay.co.uk, 1 littleservice.cn, 1 -littlesk.in, 1 +littlesk.in, 0 littleskin.cn, 1 littleson.com.br, 1 littlesouls.ml, 1 @@ -69941,7 +69899,6 @@ livelondon.fr, 1 livelong.tk, 1 livelonglife.tk, 1 livelovelaughlg.com, 1 -livelyapps.com, 1 liveman.dk, 1 livemomentum.ml, 1 livemosspointe.com, 1 @@ -70276,13 +70233,11 @@ locksmithgarland-tx.com, 1 locksmithgermiston24-7.co.za, 1 locksmithgrapevinetx.com, 1 locksmithhillcrest.co.za, 1 -locksmithindurban.co.za, 1 locksmithlakewaytx.com, 1 locksmithlivoniami.com, 1 locksmithmadisonheights.com, 1 locksmithmesquitetexas.com, 1 locksmithmesquitetx.com, 1 -locksmithmidrand24-7.co.za, 1 locksmithmissouricity.com, 1 locksmithopen.com, 1 locksmithresidentialspringtx.com, 1 @@ -70476,7 +70431,6 @@ lojj.pt, 1 lokaal.org, 1 lokal-speisen.de, 1 lokalna.net, 1 -lokan.id, 1 loker.id, 1 lokjagruktafoundation.com, 1 lokomotivaplzen.cz, 1 @@ -70494,7 +70448,6 @@ lolcorp.pl, 1 lolcosplay.ga, 1 lolcow.farm, 1 lolcow.org, 1 -lolcow.su, 1 loldudes.com, 1 lolfunny.tk, 1 loli.art, 1 @@ -70673,6 +70626,7 @@ loodsen.ru, 1 look-books.tk, 1 look-info.tk, 1 look-like.tk, 1 +look.co.il, 1 lookae.com, 0 lookagain.co.uk, 1 lookasik.eu, 1 @@ -70694,7 +70648,7 @@ loonbedrijfdenboer.nl, 1 looneymooney.com, 1 loony.info, 0 loonylatke.com, 1 -loopback.kr, 0 +loopback.kr, 1 loopcore.de, 1 loopkey.com.br, 1 loopool.tk, 1 @@ -71244,7 +71198,6 @@ ludum-polus.xyz, 1 ludum.pl, 1 ludunwayoo.com, 1 ludwig.im, 1 -ludwiggrill.de, 1 ludwigjohnson.se, 1 ludwigpro.net, 1 lueck-bertram.de, 1 @@ -71330,6 +71283,7 @@ luke6887.me, 1 lukeistschuld.de, 1 lukekuza.com, 1 lukekuza.me, 1 +lukem.eu, 0 lukem.net, 1 lukeng.net, 1 lukepeltier.com, 1 @@ -71495,7 +71449,6 @@ luukuton.fi, 1 luuppi.fi, 1 luv-scent.com, 1 luv.asn.au, 1 -luv2watchmycam.com, 1 luvare.com, 1 luvbridal.com.au, 1 luvey.com, 1 @@ -71908,7 +71861,6 @@ mademoe.com, 1 maden.com, 1 mader.jp, 1 maderasbrown.com, 1 -madewellwoodworks.com, 1 madewithopendata.org, 1 madge.tk, 1 madhawaweb.tk, 1 @@ -71918,6 +71870,7 @@ madinina.tk, 1 madirc.net, 1 madisoncountyhelps.com, 1 madisonent-facialplasticsurgery.com, 1 +madisonivy.space, 1 madisonprocaccini.tk, 1 madisonsjewelersorlando.com, 1 madisonsquarerealestate.com, 1 @@ -72043,6 +71996,7 @@ maggot.cf, 1 magi-cake.com, 1 magiamgiatot.tk, 1 magic-cards.info, 1 +magic-carpetcleaning.co.uk, 1 magic-cheerleading.tk, 1 magic-network.tk, 1 magic-photo-events.fr, 1 @@ -72140,6 +72094,7 @@ magnetto.ga, 1 magnettracker.com, 1 magniezetassocies.fr, 1 magnific.tk, 1 +magnificentdata.com, 1 magniflood.com, 1 magnitgang.ml, 1 magnitola.ml, 1 @@ -73270,7 +73225,7 @@ marktguru.at, 1 marktguru.de, 1 markup-ua.com, 1 markus-blog.de, 1 -markus-dev.com, 1 +markus-dev.com, 0 markus-keppeler.de, 1 markus-musiker.de, 1 markus-ullmann.de, 1 @@ -74046,7 +74001,6 @@ maxrandolph.com, 1 maxratmeyer.com, 1 maxrickettsuy.com, 1 maxrider.tk, 1 -maxs.com, 1 maxtruxa.com, 1 maxundlara.at, 1 maxundlara.com, 1 @@ -75546,6 +75500,7 @@ meridanas.me, 1 meridiangroup.ml, 1 meridianmetals.com, 1 meridianoshop.com.br, 1 +meridianstore.com.br, 1 merikserver.tk, 1 merkattumaa.tk, 1 merkchest.tk, 1 @@ -75767,7 +75722,6 @@ metrodemaracaibo.tk, 1 metrofree.ga, 1 metroline.ml, 1 metrolush.com, 1 -metromas.com, 1 metron-eging.com, 1 metron-networks.com, 1 metron-online.com, 1 @@ -75949,7 +75903,6 @@ mianbao.ga, 1 miankamran.tk, 1 miao.team, 1 miaoft.com, 1 -miaomiao.eu.org, 1 miaovps.com, 1 miaowo.org, 1 miap.eu, 1 @@ -75990,6 +75943,7 @@ michaelabbas.tk, 1 michaelamead.com, 1 michaelasawyer.com, 1 michaelband.co, 1 +michaelband.com, 1 michaelbeer.co.uk, 1 michaelbondar.tk, 1 michaelboogerd.tk, 1 @@ -76231,7 +76185,6 @@ miguelmenendez.pro, 1 miguelmoura.com, 1 migueloblitas.tk, 1 miguelpallardo.tk, 1 -miguia.tv, 1 mihaiordean.com, 1 mihalgrameno.ml, 1 mihalicka.com, 1 @@ -76343,6 +76296,7 @@ mikkelscheike.com, 1 mikkelvej.dk, 1 mikkohuupponen.com, 1 mikkonen.bio, 1 +mikkosa.fi, 0 miklagard.dk, 1 miklcct.com, 1 mikmik.co.il, 1 @@ -76439,7 +76393,6 @@ milleron.xyz, 1 millerpaving.com, 1 millersminibarns.com, 1 millersprolandscape.com, 0 -millerwalker.com, 1 millettable.com, 1 milliarden-liste.de, 1 millibirlik.tk, 1 @@ -77063,7 +77016,6 @@ mjasm.org, 1 mjhs.org, 1 mjhsfoundation.org, 1 mjjlab.com, 1 -mjkholding.nl, 1 mjmedia.co.za, 1 mjniessen.com, 1 mjollnir.fr, 1 @@ -78399,6 +78351,7 @@ moy-biznes.tk, 1 moy-gorod.od.ua, 0 moy.cat, 1 moybiznes.tk, 1 +moyer.pub, 0 moyideal.tk, 1 moylen.eu, 1 moyminsk.tk, 1 @@ -78766,6 +78719,7 @@ mudanzasytransportesbh.com, 1 mudaomundo.org, 1 mudareganhar.pt, 0 mudasobwa.tk, 1 +mudaustralia.com, 1 mudbenesov.cz, 1 mudcomplex.ga, 1 mudcomplexers.ga, 1 @@ -78803,7 +78757,6 @@ muhafazakarkiralikvilla.com, 1 muhammed.tk, 1 muhasebekurslari.tk, 1 muhcow.dk, 1 -muhelheim.com, 1 muhibbulislam.tk, 1 muhiminulhasan.me, 1 muhlenbergtwppa.gov, 1 @@ -80115,7 +80068,6 @@ n37.co, 1 n3oxid.fr, 1 n3rd0rama.tk, 1 n4mullingartolongford.ie, 1 -n4zm.com, 1 n5118.com, 1 n5197.co, 1 n61roscommon.ie, 1 @@ -80218,6 +80170,7 @@ nadjabenaissa.tk, 1 nadjasummer.com, 1 nadlerdentistry.com, 1 nadomna-rabota.tk, 1 +nadoske.info, 1 nadsandgams.com, 1 naduvilathu.tk, 1 nadyaolcer.fr, 1 @@ -80294,7 +80247,6 @@ nakacide.com, 1 nakada4610.com, 1 nakagawa-d.co.jp, 1 nakagawa-s.jp, 1 -nakajims.net, 1 nakalabo.jp, 1 nakama.tv, 1 nakamastudios.com, 1 @@ -80350,6 +80302,7 @@ nameid.org, 1 namepros.com, 1 nameproscdn.com, 1 namereel.com, 1 +namesbee.com, 0 nameshield.com, 1 nameshield.net, 1 namesnack.com, 1 @@ -80603,6 +80556,7 @@ natashavaz.nl, 1 natashki.tk, 1 natasjaversantvoort.nl, 1 natation-nsh.com, 0 +natchmatch.com, 1 nate.sh, 1 nateandxtina.wedding, 1 nategreen.org, 0 @@ -80634,7 +80588,6 @@ nathanielsigal.com, 1 nathankonopinski.com, 0 nathanmfarrugia.com, 1 nathanphoenix.com, 1 -nathans.com.au, 1 nathansmetana.com, 1 nathenmaxwell.tk, 1 nathumarket.com.br, 1 @@ -80914,6 +80867,7 @@ ndaal.eu, 1 ndarville.com, 1 ndbt.com, 1 ndcpolipak.com, 1 +nder.be, 1 ndev.tk, 1 ndfirefighter.com, 1 ndhlink.com, 1 @@ -81540,6 +81494,7 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 +netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -81715,7 +81670,7 @@ newinf.at, 1 newinternet.media, 1 newizv.ru, 0 newjerseyvideography.com, 1 -newjianzhi.com, 1 +newjianzhi.com, 0 newknd.com, 1 newlegalsteroid.com, 1 newlifehempoil.com, 1 @@ -82807,6 +82762,7 @@ nomial.co.uk, 1 nomifensine.com, 1 nomik.xyz, 1 nomio.com, 1 +nomo.my, 1 nomoondev.azurewebsites.net, 1 nomsing.tk, 1 nomsy.net, 1 @@ -82923,6 +82879,7 @@ norichanmama.com, 1 noriel.ro, 1 norikazumatsuno.tk, 1 noris.de, 0 +noriskit.nl, 1 noritakechina.com, 1 normaculta.com.br, 1 normalady.com, 1 @@ -83154,6 +83111,7 @@ notora.tech, 1 notoriousdev.com, 1 nototema.com, 1 notre-planete.info, 1 +notrecinema.com, 1 notrefuse.tk, 1 notrero13.com, 1 notresiteduvercors.tk, 1 @@ -83275,7 +83233,6 @@ nowbb.tk, 1 nowcomplete.com.br, 1 nowebsite.tk, 1 nowecor.de, 1 -noweigh.co.uk, 1 nowhere.dk, 1 nowinkijedynki.tk, 1 nowitzki.network, 1 @@ -83342,6 +83299,7 @@ nrkn.fr, 1 nrldc.in, 0 nrm.co.nz, 1 nrmc.pt, 1 +nrnjn.xyz, 0 nrsmart.com, 1 nrsweb.org, 1 nrthcdn.me, 1 @@ -84010,7 +83968,6 @@ oceansidetour.tk, 1 oceanspringsarchives.net, 1 oceansurplus.tk, 1 oceanviewde.gov, 1 -oceanvisuals.com, 1 ocebot.net, 1 ocenilla.ml, 1 ocenilla.tk, 1 @@ -84134,7 +84091,6 @@ odorucinema.ga, 1 odosblog.de, 1 odpikedoslike.com, 1 odsylvie.cz, 1 -oduachambers.com, 1 oducs.org, 1 odvps.com, 0 odxin.com, 1 @@ -84180,7 +84136,6 @@ oetzies-quiz.com, 1 oevkg.at, 1 of-sound-mind.com, 1 of2106.dnsalias.org, 0 -of2m.fr, 1 ofallonil.gov, 1 ofaqim.city, 1 ofasoft.com, 1 @@ -84203,7 +84158,6 @@ offensity.com, 1 offentligsektormedmoln.se, 1 offer-today.ml, 1 offerhome.com, 1 -offerito.com, 1 offermann-koeln.de, 1 offers-daraghmehstores.com, 1 offerte-gas.it, 1 @@ -84346,7 +84300,7 @@ ohsohairy.co.uk, 1 ohyooo.com, 1 ohype.ga, 1 ohype.gq, 1 -oi-wiki.org, 0 +oi-wiki.org, 1 oiahe.org.uk, 1 oic-ci.gc.ca, 1 oidrava.tk, 1 @@ -84492,7 +84446,6 @@ oldcitysmokehouse.com, 1 oldcold.co, 1 oldcraft-mc.ru, 1 olddisk.ml, 1 -oldenglishsheepdog.com.br, 1 oldenzaal.tk, 1 older-racer.com, 1 oldfarming.tk, 1 @@ -84664,6 +84617,7 @@ om1.com, 1 omachi.top, 1 omaedu.ro, 1 omag.gov, 1 +omahachapterone.org, 1 omaharoofpros.com, 1 omahcoin.com, 1 omandatapark.com, 1 @@ -84811,7 +84765,6 @@ one-clue.com, 1 one-cozmic.com, 1 one-dot.de, 1 one-host.ga, 1 -one-million-places.com, 1 one-news.net, 0 one-page.org, 1 one-pixel.tk, 1 @@ -85349,6 +85302,7 @@ openvz.org, 1 openwaveguide.de, 1 openwifi.gr, 1 openwrt-dist.tk, 1 +opera.im, 1 operacdn.com, 1 operacionlimpieza.com, 1 operad.fr, 1 @@ -85782,7 +85736,6 @@ oruggt.is, 1 orum.in, 1 orunodoy.com, 1 orwell.tk, 1 -orwell1984.today, 1 oryva.com, 1 orz.uno, 1 orzechot.pl, 1 @@ -85824,6 +85777,7 @@ oscarspatiobar.com, 1 oscarvk.ch, 1 osceolacountyia.gov, 1 osci.io, 1 +oscie.net, 1 oscillation-services.fr, 1 oscloud.com, 1 oscom.tk, 1 @@ -85865,7 +85819,6 @@ osm.org, 1 osm.ovh, 1 osmaniyehaber.tk, 1 osmanlitakilari.tk, 1 -osmanlitorunu.com, 1 osmarks.net, 1 osmarks.tk, 1 osmdroid.net, 1 @@ -86336,7 +86289,6 @@ p-s-b.com, 1 p-soc.com.br, 1 p-store.net, 1 p-t.io, 1 -p-vegas.com, 1 p.linode.com, 0 p.lu, 1 p.sb, 1 @@ -86433,7 +86385,6 @@ pablonadiecomotu.tk, 1 pabloroblesminister.com, 1 pablosaraiva.com, 1 pabpunk.tk, 1 -pacaom.com, 1 pacatlantic.com, 1 pacay.id, 1 pacch.io, 1 @@ -86712,7 +86663,6 @@ palfut.com, 1 paliucuiciucci.tk, 1 palladium46.com, 1 palladiumprivate.com, 1 -palladiumtechs.com, 1 palletflow.com, 1 palli.ch, 0 palmaprop.com, 1 @@ -86888,7 +86838,6 @@ panzers.tk, 1 panzerwarmodsru.tk, 1 pao.moe, 1 paocaibang.net, 1 -paocloud.co.th, 1 paolodemichele.it, 0 paolomargari.tk, 1 paolotagliaferri.com, 1 @@ -86993,7 +86942,6 @@ paramaquetas.com, 1 paramascotas.vip, 1 parameterizer.me, 1 paramo-pineiro.tk, 1 -paramo.me, 1 paramountdentalcenter.com, 1 paramountelectronics.co.uk, 1 paranoidandroid.tk, 1 @@ -87129,6 +87077,7 @@ parmatoday.it, 1 parmels.com.br, 1 parmoli.tk, 1 parnassys.net, 1 +parniplus.com, 1 parnizaziteksasko.cz, 1 parodesigns.com, 1 paroisses-theix-surzur.com, 1 @@ -87744,6 +87693,7 @@ pcpirates.tk, 1 pcplaza.tk, 1 pcprkolo.pl, 1 pcproblem.tk, 1 +pcpromaroc.ma, 1 pcpuhastaja.tk, 1 pcrab.ml, 1 pcrecovery.ga, 1 @@ -89160,6 +89110,7 @@ pierreterrien.fr, 1 pierreyvesdick.fr, 1 piersmana.com, 1 pierson.tk, 1 +piesel-piepser.de, 1 pietbrakman.tk, 1 pietechsf.com, 0 pieter-verweij.nl, 1 @@ -89175,7 +89126,6 @@ piezus.ru, 1 pif.email, 1 piffer.ind.br, 1 pig-breeding.tk, 1 -pigb.net, 1 pigeonracinginformation.com, 1 pigeons-rings.com, 1 pigfox.com, 1 @@ -89223,7 +89173,6 @@ pillowexpertsest.ga, 1 pillowfort.pub, 1 pilot-colleges.com, 1 pilot.co, 0 -pilot.com, 1 pilotandy.com, 1 pilotcareercenter.com, 1 pilotcareercentre.com, 1 @@ -89562,6 +89511,7 @@ pixojo.tk, 1 pixshop.fr, 1 pixstash.net, 1 pixxxels.cc, 1 +pixyship.com, 1 pizala.de, 1 pizdelka.tk, 1 pizponim.co.il, 1 @@ -89778,7 +89728,6 @@ plaredo.tk, 1 plaros.ml, 1 plasapulsa.tk, 1 plasesolev.tk, 1 -plashenkov.com, 1 plaskiewicz.pl, 1 plasofficial.it, 1 plassmann.ws, 1 @@ -90643,6 +90592,7 @@ poolsonline.tk, 1 poolspa.es, 1 pooltest.co.uk, 1 pooltools.net, 1 +poolvilla-margarita.net, 1 poopjournal.rocks, 1 poopr.ru, 1 poopthereitisla.com, 1 @@ -91050,7 +91000,6 @@ pottcountyks.gov, 1 potteranderson.com, 1 potterish.com, 1 potterperfect.tk, 1 -pottersheartministry.org, 1 pottershouse.tk, 1 potterybroker.ga, 1 pottshome.co.uk, 1 @@ -91676,6 +91625,7 @@ princovi.cz, 1 prinesec.com, 1 prinice.org, 1 print-street.tk, 1 +print3dgifts.co.uk, 1 printbase.cz, 1 printbigjournal.tk, 1 printedmailbags.co.uk, 1 @@ -91938,7 +91888,6 @@ prodegree.com, 1 prodentalsantacruz.es, 1 prodesigntools.com, 1 prodesk.bg, 1 -prodevsblog.com, 1 prodhealthcare.org, 1 prodietix.cz, 1 prodigibook.com, 1 @@ -92034,6 +91983,7 @@ profloorstl.com, 1 profmetod.com, 1 proformer.io, 1 proformi.com, 1 +proforo.co, 1 profritual.ru, 1 profsaranya.com, 1 proft.eu, 1 @@ -92210,6 +92160,7 @@ promocion2007.tk, 1 promocjedladzieci.pl, 1 promocodius.com, 1 promodance.cz, 1 +promodesigns.co.za, 1 promodoble.com, 1 promods.cn, 1 promods.download, 1 @@ -92377,6 +92328,7 @@ protection.ga, 1 protectionformula.com.ua, 1 protectwrap.ml, 1 protege.moi, 1 +protegetudescanso.com, 1 proteh.com.ua, 1 protein-riegel-test.de, 1 proteinreport.org, 1 @@ -92578,6 +92530,7 @@ psihology.gq, 1 psihology.tk, 1 psihoterapevt1.by, 1 psihotest.tk, 1 +psikokoro.com, 1 psinergy.info, 1 psinergyhealth.com, 1 psinergytech.com, 1 @@ -92826,7 +92779,6 @@ pukeking.com, 1 pukfalkenberg.dk, 1 pulcinella.tk, 1 puli.com.br, 1 -pulinkai.xyz, 1 pulizia.milano.it, 1 pulizia.roma.it, 1 pulizieuffici.milano.it, 1 @@ -93105,7 +93057,6 @@ pyjiaoyi.cc, 1 pyjy.org, 1 pylad.se, 1 pylon.bot, 1 -pymebi.cl, 1 pymescentro.net, 1 pymtreceipt.com, 1 pyopenssl.org, 1 @@ -93192,7 +93143,7 @@ qask.ml, 1 qatartimes.tk, 1 qatouch.com, 1 qaz.cloud, 1 -qazweek.kz, 1 +qazweek.kz, 0 qbasic.tk, 1 qbasicsite.tk, 1 qbd.eu, 1 @@ -93393,7 +93344,6 @@ qttransformation.com, 1 qtv.ge, 1 qtvr.com, 1 qtxh.net, 1 -qtzhi.com, 1 quackerswaterproofing.com, 1 quackquack.in, 1 quad9.net, 1 @@ -93771,6 +93721,7 @@ qx.se, 1 qxin.info, 1 qxpress.com.py, 1 qxq.moe, 0 +qxxllw.com, 1 qxzg.org, 1 qxzg.xyz, 1 qxzgssr.xyz, 1 @@ -94810,7 +94761,6 @@ ready4bf.tk, 1 readyblinds.com.au, 1 readychurchsites.com, 1 readycolorado.gov, 1 -readydedis.com, 1 readyelec.com, 1 readync.gov, 1 readyrosie.com, 1 @@ -95273,7 +95223,6 @@ redwiki.tk, 1 redzonedaily.com, 1 reececustom.com, 1 reed-sensor.com, 1 -reedloden.com, 1 reedy.tk, 1 reeftrip.com, 1 reeladventurefishing.com, 1 @@ -95631,7 +95580,6 @@ remont-45.tk, 1 remont-kazan.tk, 1 remont-kvartirvmoskve.ga, 1 remont-naushnikov.tk, 1 -remont-p.com, 1 remont-rollet-izgotovlenie.cf, 1 remont-rukami.tk, 1 remontdot.tk, 1 @@ -95909,7 +95857,6 @@ resolved.tk, 1 resolvefa.co.uk, 1 resolvefa.com, 1 resolveit.gq, 1 -resolvergroup.com.au, 1 resolvo.com, 1 resolvs.com, 1 resoplus.ch, 0 @@ -96121,6 +96068,7 @@ reverencestudios.com, 1 revers.tk, 1 reverseaustralia.com, 1 reversecanada.com, 1 +reversecrucifixkm.altervista.org, 1 reversedns.tk, 1 reverseloansolutions.com, 1 reverselookupphone.us, 1 @@ -96345,7 +96293,6 @@ ricaud.me, 1 riccardopiccioni.it, 1 riccy.org, 1 riceadvice.info, 1 -ricettesemplicieveloci.altervista.org, 1 rich-good.com, 1 richadams.me, 1 richamorindonesia.com, 1 @@ -96591,6 +96538,7 @@ riscascape.net, 1 risco.ro, 1 riscoshardware.tk, 1 rise-technologies.com, 1 +rise.africa, 1 rise.com, 1 rise.global, 1 riseandrank.com, 1 @@ -96650,7 +96598,6 @@ rittau.org, 1 ritual.ml, 1 ritus.md, 1 ritzlux.com.tw, 1 -riunioni.online, 1 rivaforum.de, 1 rivals.space, 1 rivalsa.cn, 1 @@ -96665,7 +96612,6 @@ riverbanktearooms.co.uk, 1 riverbednetflowsupport.com, 1 riverbendroofingnd.com, 1 rivercitybni.com, 1 -riverdale.net.au, 1 riverford.co.uk, 1 riveroaksdentaljax.com, 1 riverotravel.cl, 1 @@ -96886,7 +96832,6 @@ robot-invest.cf, 1 robot-invest.ml, 1 robot.car, 1 robotask.in, 1 -robotattack.org, 1 robotbattle.tk, 1 robotdecocinaya.com, 1 roboth.am, 1 @@ -97178,7 +97123,6 @@ romegafire.gov, 1 romegapolice.gov, 1 romeoferraris.com, 1 romeoijulio.tk, 1 -romeroeletro.com.br, 1 rometoptentravel.com, 1 rommelhuntermusic.tk, 1 rommelmark.nl, 1 @@ -97209,7 +97153,6 @@ ronem.com.au, 1 ronforeman.com, 1 ronghexx.com, 1 rongreenbaum.com, 1 -ronhose.com, 1 roninathletics.com, 1 roninf.ch, 1 roninitconsulting.com, 1 @@ -97277,7 +97220,6 @@ rootlair.com, 1 rootless.ga, 1 rootless.tk, 1 rootly.com, 1 -rootly.io, 1 rootonline.de, 1 rootpak.com, 1 rootpigeon.com, 1 @@ -97442,11 +97384,10 @@ rout0r.org, 1 route-wird-berechnet.de, 1 routechoices.com, 1 routerchart.com, 1 -routerclub.ru, 1 routeto.com, 1 routetracker.co, 1 routeur4g.fr, 0 -rouwcentrumterheide.be, 1 +rouwcentrumterheide.be, 0 rovatronic.tk, 1 roverglobal.ga, 1 roveridx.com, 1 @@ -97709,7 +97650,6 @@ rte.radio, 1 rte1.ie, 1 rte2fm.ie, 1 rteaertel.ie, 1 -rtechservices.io, 1 rteguide.ie, 1 rteinternational.ie, 1 rtejr.ie, 1 @@ -98598,6 +98538,7 @@ saintpolycarp.org, 1 saintseiya-temple.tk, 1 saintshopoficial.com.br, 1 saintvincent.tk, 1 +saintw.com, 0 sainzderozas.com, 1 saipariwar.com, 1 saipeople.net, 1 @@ -99351,7 +99292,6 @@ sattaresult.net, 1 saturdayenterprises.ga, 1 saturnbb.com, 1 saturne.tk, 1 -saturuang.id, 1 satyamshivamsundaram.in, 1 sauber.dk, 1 saubooks.tk, 1 @@ -99551,6 +99491,7 @@ sbst.gov, 1 sbstattoo.com, 1 sc-artworks.co.uk, 0 sc019.com, 1 +sc2pte.eu, 0 sc5.jp, 1 scaarus.com, 1 scabieslice.com, 1 @@ -100043,6 +99984,7 @@ scounter.tk, 1 scour.cc, 1 scourgesofcarpathia.tk, 1 scout-korting.tk, 1 +scoutbee.com, 1 scoutbee.io, 1 scouteridano.tk, 1 scouting-kontiki.nl, 1 @@ -100081,7 +100023,6 @@ scrapbookdecorations.ga, 1 scrapcarbrampton.ca, 1 scrapcarremovalmississauga.ca, 1 scrapcars.net.au, 1 -scraperhireaustralia.com.au, 1 scrapmartine.tk, 1 scrapmycarperth.com.au, 0 scratch-ppp.jp, 1 @@ -100151,6 +100092,7 @@ sculpture.support, 1 sculpturesworldwide.tk, 1 sculpturos.com, 1 scungioborst.com, 1 +scunthorpemoneyman.com, 1 scuolaguidalame.ch, 0 scuolamazzini.livorno.it, 1 scuolatdm.com, 1 @@ -100304,7 +100246,6 @@ seb.surf, 1 seb8iaan.com, 1 sebald.com, 1 sebald.org, 1 -sebandroid.com, 1 sebar-iklan.gq, 1 sebariklanmassal.gq, 1 sebarin.tk, 1 @@ -100918,6 +100859,7 @@ sentry.io, 1 sentry.nu, 1 sentrybay.com, 1 sentworks.com, 1 +senu.pro, 1 senzaparole.de, 1 senzei.tk, 1 seo-analyse.com, 1 @@ -100938,7 +100880,6 @@ seo-reklama.tk, 1 seo-smo.ml, 1 seo-smo.tk, 1 seo-url.tk, 1 -seo.consulting, 1 seo.domains, 1 seo.london, 1 seoagentur-hamburg.com, 0 @@ -101150,7 +101091,6 @@ sertaovivo.tk, 1 sertasimmons.com, 1 sertim.tk, 1 seru.eu, 1 -serukan.com, 1 serval-concept.com, 1 servantweb.fr, 1 servcom.net.au, 1 @@ -101267,7 +101207,6 @@ serw.org, 1 serwetki-papierowe.pl, 1 serwis-telewizorow.pl, 1 serwis-wroclaw.pl, 1 -serwislukit.pl, 1 serwistomy.pl, 1 seryovpn.com, 1 seryox.com, 1 @@ -101430,6 +101369,7 @@ sfa.sk, 1 sfaparish.org, 1 sfarc.ml, 1 sfat.llc, 1 +sfaturiit.ro, 1 sfbao.com, 1 sfdcopens.com, 1 sfdev.ovh, 1 @@ -102676,7 +102616,6 @@ sigurnost.online, 1 sigvik.ru, 1 siika.solutions, 1 siikaflix.tv, 1 -siirtutkusu.com, 0 sijbesmaverhuizingen.nl, 1 sijimi.cn, 1 sik-it.nl, 1 @@ -102898,7 +102837,6 @@ simon-mueller.de, 1 simon.butcher.name, 1 simon.lc, 1 simon3k.moe, 1 -simonagancia.com, 1 simonastallone.com, 1 simonberard.garden, 1 simonbondo.dk, 1 @@ -103295,7 +103233,6 @@ siterencontre.me, 1 siteru.tk, 1 sites.google.com, 1 sitesara.com, 1 -sitesdel.ru, 1 sitesdesign.tk, 1 sitesforward.com, 1 sitesko.de, 1 @@ -104184,6 +104121,7 @@ smsfa.ir, 1 smsg-dev.ch, 0 smsinger.com, 1 smsk.email, 1 +smsk.io, 1 smskeywords.co.uk, 1 smskmail.com, 1 smsprivacy.org, 1 @@ -104245,12 +104183,10 @@ snapware.tk, 1 snarf.in, 1 snargol.com, 1 snatch-note.tk, 1 -snatek.net, 1 snatertlc.it, 1 snatti.com, 1 snazel.ae, 1 snazel.co.il, 1 -snazel.co.uk, 1 snazel.de, 1 snazel.ee, 1 snazel.uk, 1 @@ -104434,6 +104370,7 @@ social-network.tk, 1 social-work-colleges.com, 1 social-work.tk, 1 social.com.co, 1 +socialab.gr, 1 socialair.tk, 1 socialblaze.com.au, 1 socialbook2015.ga, 1 @@ -104476,6 +104413,7 @@ socialtactics.gq, 1 socialtactics.ml, 1 socialtournaments.com, 0 socialtranslation.ga, 1 +socialtrends.pl, 0 socialwave.tk, 1 socialworkout.com, 1 socialworkout.net, 1 @@ -104668,7 +104606,6 @@ solarace.tk, 1 solaradventures.icu, 1 solarbattery.ga, 1 solareagricola.it, 1 -solarfaa.ir, 1 solarfever.ga, 1 solargaming.tk, 1 solarhome.ml, 1 @@ -104812,7 +104749,6 @@ solvemethod.com, 1 solvewebmedia.com, 1 solviejo.tk, 1 solvin.com, 1 -solvingproblems.com.au, 1 solviq.com, 1 solvops.com, 1 solwaveovens.com, 1 @@ -104869,6 +104805,7 @@ son-tolkovatel.ga, 1 son-tolkovatel.gq, 1 son-tolkovatel.ml, 1 son-tolkovatel.tk, 1 +son.ru, 1 sona-gaming.com, 1 sona.fr, 1 sonacupalova.cz, 1 @@ -105360,6 +105297,7 @@ spamhunter360.gq, 1 spamloco.net, 1 spammable.com, 1 spamty.eu, 1 +spamwc.de, 1 spanch.cf, 1 spanch.ga, 1 spanch.gq, 1 @@ -106188,7 +106126,6 @@ ssmm88.cc, 1 ssmothership.tk, 1 ssmpuc.com, 1 ssmrca.ca, 1 -ssnet.vip, 1 ssnetwork.jp, 1 ssone.ee, 1 sspanel.host, 1 @@ -106323,7 +106260,6 @@ stalker-eyes.ga, 1 stalker-shop.com, 1 stalker-source.tk, 1 stalkerteam.pl, 1 -stalkr.net, 1 stalkthe.net, 1 stall-frei.de, 1 stallardjw.me, 1 @@ -106347,7 +106283,6 @@ stamparmakarije.me, 1 stampederadon.com, 1 stampsbar.co.uk, 1 stamurai.com, 1 -stan.moe, 1 stanandjerre.org, 1 stanchierifamilylaw.com, 1 standard.co.uk, 1 @@ -106583,7 +106518,6 @@ stationsvakt.tk, 1 statisticalsurveys.com, 1 statistician-online.com, 0 statistik-seminare.de, 1 -statistikian.com, 1 statnevlajky.sk, 1 statnivlajky.cz, 1 statrix.org, 1 @@ -106761,7 +106695,6 @@ steinibox.de, 1 steinmassl.org, 1 steinmetz.cloud, 1 stekelenburg.me, 1 -steklein.de, 1 stekosouthamerica.com, 1 stelfox.net, 1 stelga.ca, 1 @@ -107173,7 +107106,7 @@ stomt.com, 1 stoneagehealth.com.au, 1 stonechatjewellers.ie, 1 stonecutgods.com, 1 -stonedwarf5.net, 1 +stonedwarf5.net, 0 stonedworms.de, 0 stoneedgeconcrete.com, 1 stonefoot.de, 1 @@ -108407,7 +108340,6 @@ suprememale.tk, 1 supremestandards.com, 1 supriville.com.br, 1 supropionegocio.tk, 1 -supweb.ovh, 1 sur-v.com, 1 suranganet.tk, 1 surasak.org, 1 @@ -109146,6 +109078,7 @@ t.net.co, 1 t00228.com, 1 t00ts.com, 0 t060.com, 1 +t070.com, 0 t0kie.space, 1 t0ny.name, 1 t12u.com, 1 @@ -109889,7 +109822,6 @@ taxihungary.com, 1 taxikraken.tk, 1 taximinvody.ml, 1 taximovies.gq, 1 -taxipool.co.il, 1 taxis-collectifs.ch, 0 taxisafmatosinhos.pt, 1 taxisantandreudelabarca.es, 1 @@ -109903,7 +109835,6 @@ taxmadras.com, 1 taxo.fi, 1 taxpackagesupport.com, 1 taxprocpa.com, 1 -taxteam.co.il, 1 tayar2u.my, 1 taybee.net, 1 tayebbayri.com, 0 @@ -110053,6 +109984,7 @@ teachercreatedmaterials.com, 1 teacherfrancis.com, 1 teachermommylife.com, 1 teacherph.com, 1 +teacherph.review, 1 teacherpowered.org, 1 teacherquinten.com, 1 teacherquotes.gq, 1 @@ -110165,7 +110097,6 @@ teamshirts.net, 1 teamshirts.nl, 1 teamshirts.no, 1 teamshirts.se, 1 -teamsimplythebest.com, 1 teamsomeday.tk, 1 teamsudan.cf, 1 teamtomorrow.tk, 1 @@ -110281,6 +110212,7 @@ techexpert.tips, 1 techexplorist.com, 1 techfibian.tk, 1 techfishnews.com, 1 +techformator.pl, 0 techfreepro.ml, 1 techfuze.com, 0 techfuze.io, 0 @@ -110335,7 +110267,6 @@ technicalforensic.com, 1 technicalhelps.org, 1 technicallyeasy.net, 1 technicalproblem.tk, 1 -technicalramblings.com, 1 technicaltrainer.co.za, 1 technicalustad.com, 1 techniclab.net, 0 @@ -110566,6 +110497,7 @@ teiron.ml, 1 teiseken.tk, 1 teixobactin.com, 1 tejas1835.com, 1 +tejaswi.biz, 1 tejo.tk, 1 teka.ro, 1 tekanswer.com, 1 @@ -110762,6 +110694,7 @@ tempsoundsolutions.tk, 1 tempus-aquilae.de, 1 tempus.tf, 1 temtekco.com, 1 +temydee.com, 1 tena.ml, 1 tena.tk, 1 tenable.com.au, 1 @@ -112016,6 +111949,7 @@ theoldbrewhouse.info, 1 theoldmill.tk, 1 theoldnews.net, 1 theoldsewingfactory.com, 1 +theolodewijk.nl, 1 theologique.ch, 0 theomg.co, 1 theonegroup.co.uk, 0 @@ -112243,7 +112177,6 @@ thesocialmediacentral.com, 1 thesomepeople.org, 1 thesoundstageatstrangeland.com, 1 thespacegame.tk, 1 -thesphinx.ca, 1 thespiritfm.tk, 1 thesplashlab.com, 1 thesslstore.com, 1 @@ -112378,7 +112311,6 @@ thewebhut.com.au, 1 thewebmasters.tk, 1 thewebsitedoctors.co.uk, 1 thewebsitemarketingagency.com, 1 -theweddingsociety.co, 1 theweed.tk, 1 thewest.tk, 1 thewhiteboxxx.com, 1 @@ -112504,7 +112436,6 @@ thinkingnull.com, 0 thinkingplanet.net, 1 thinkmarketing.ca, 1 thinkprocedural.com, 1 -thinktac.com, 1 thinktankofthree.com, 1 thinkwisesoftware.com, 1 thinkwits.com, 1 @@ -112634,6 +112565,7 @@ threadythready.com, 1 threatcentral.io, 1 threatcon.io, 1 threatdetection.info, 1 +threatint.eu, 1 threatmonitor.io, 1 threatnix.io, 1 threatutic.gq, 1 @@ -113014,7 +112946,6 @@ timeserver3.de, 1 timesheetcomics.com, 1 timeslive.co.ke, 1 timespace.eu.org, 1 -timespowerofprint.com, 1 timespreader.com, 0 timeswiki.org, 1 timetab.org, 1 @@ -113117,7 +113048,7 @@ tinyemily.com, 1 tinyfont.cf, 1 tinyfont.ml, 1 tinyguitars.tk, 1 -tinyhouse-bimify.fr, 1 +tinyhouse-bimify.fr, 0 tinyhousebarat.com, 1 tinyhousebarat.de, 1 tinyhousefinance.com.au, 1 @@ -113165,7 +113096,6 @@ tipstersweb.com, 1 tipsypresent.com, 1 tiptoptransmissions.com, 1 tipulnagish.co.il, 1 -tipwho.com, 1 tiqets.com, 1 tir-mauperthuis.fr, 1 tiraloche.com, 1 @@ -113524,6 +113454,7 @@ together.gov, 1 togetter.com, 1 togglename.ml, 1 togoweed.co, 1 +togruta.com, 1 togtider.dk, 1 toh25unblocked.tk, 1 toheb.de, 0 @@ -113679,6 +113610,7 @@ tomik.cloud, 1 tomik.fun, 1 tomikoyco.com, 1 tomiler.com, 1 +tomjans.nl, 1 tomjepp.uk, 1 tomjn.com, 1 tomkempers.nl, 1 @@ -113808,7 +113740,6 @@ tonytan.cn, 1 tonytan.io, 1 tonytan.net, 1 tonytron.com.br, 1 -tonyw.xyz, 1 tonywebster.com, 1 tonyzhao.xyz, 1 too.com.ua, 1 @@ -113961,6 +113892,7 @@ topknot.gq, 1 topkorea.ml, 1 toplevel.mx, 1 toplifesaudaveis.com.br, 1 +toplink.co.il, 1 toplist.cz, 1 toplist.eu, 1 toplist.sk, 1 @@ -116539,6 +116471,7 @@ ufopaedia.org, 1 ufplanets.com, 1 ufroo.com, 1 ufuq.de, 1 +ugameclub.com, 1 ugb-verlag.de, 0 ugcdn.com, 1 ugeek.tk, 1 @@ -116801,7 +116734,6 @@ unblocked.mx, 1 unblocked.nz, 1 unblocked.one, 1 unblocked.pet, 1 -unblocked.pl, 1 unblocked.pro, 1 unblocked.sh, 1 unblocked.uno, 1 @@ -117199,6 +117131,7 @@ unpkg.com, 1 unpleasant.tk, 1 unpluggedjuice.dk, 1 unplugstore.it, 1 +unpoditalia.se, 1 unpossible.xyz, 1 unpost.net, 1 unpr.dk, 1 @@ -117231,7 +117164,6 @@ unstoppable.money, 1 unstoppableever.com.br, 1 unstoppableunits.com, 1 unsupervised.ca, 1 -unsuspicious.click, 1 unterhaltungsbox.com, 1 unternehmensbewertung.pro, 1 unternehmer-radio.de, 1 @@ -117320,6 +117252,7 @@ upload.facebook.com, 0 uploadbeta.com, 1 uploadbro.com, 1 uploaddatanow.com, 1 +uploads.su, 1 uploadscript.tk, 1 uploadtokiosk.com, 1 uploadyourtestament.com, 1 @@ -117367,6 +117300,7 @@ uptoon.jp, 1 uptoplay.ovh, 1 uptownbabe.com, 1 uptownlocators.com, 1 +uptrends.com, 1 uptrends.de, 1 uptrex.co.uk, 1 upturn.org, 1 @@ -117890,7 +117824,6 @@ v3025.com, 1 v33v33.com, 1 v36533.com, 1 v44v44.com, 1 -v4f.com, 1 v5017.com, 1 v5075.com, 1 v51365.com, 1 @@ -118463,7 +118396,7 @@ ve.search.yahoo.com, 0 ve3oat.ca, 1 ve3zsh.ca, 0 veadoscomfome.tk, 1 -veast.network, 1 +veast.network, 0 vebbankir-zajm-onlajn.gq, 1 vebdengi.tk, 1 veber.bg, 1 @@ -119836,11 +119769,9 @@ vizit.tk, 1 vizitfree.ml, 1 vizitnik.tk, 1 vizmart.ml, 1 -vizualbits.com, 1 vjeff.com, 1 vjeff.net, 1 vjhfoundation.org, 1 -vjshi.xyz, 1 vk-agent.ru, 1 vk-group.com, 1 vk-k.com, 1 @@ -120471,6 +120402,8 @@ vulnerability.ch, 1 vulnerabilityscans.nl, 1 vulnerable.af, 1 vulners.com, 1 +vulns.sexy, 1 +vulns.xyz, 1 vulnscan.org, 1 vulpine.club, 1 vulpr.com, 1 @@ -120790,7 +120723,6 @@ waixingrenfuli.vip, 1 wajtc.com, 1 wak.io, 1 waka-mono.com, 1 -wakandasun.com, 0 wakarandroid.com, 1 wakastream.cc, 1 wakatime.com, 1 @@ -120816,7 +120748,7 @@ waldvogel.family, 1 walent.in, 1 walentin.co, 1 walhal.la, 1 -waligorska.pl, 0 +waligorska.pl, 1 walk.onl, 1 walkaround.tk, 1 walker-foundation.org, 1 @@ -121164,7 +121096,6 @@ waterlemons2k.top, 1 waterlens.moe, 1 waterliteracy.tk, 1 waterloofaucets.com, 1 -watermarkly.com, 1 watermitigationspecialists.com, 1 watermonitor.gov, 1 wateroutlook.com, 1 @@ -121206,7 +121137,6 @@ waukeect.com, 1 waukeshairon.com, 1 waupacacounty-wi.gov, 1 wav-productions.com, 1 -wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -121710,7 +121640,6 @@ webrepresalia.tk, 1 webs4all.ro, 0 websanlamuerte.tk, 1 webschool21.ml, 1 -websdeweb.com, 1 websec.nu, 1 websectools.com, 1 websecurity.is, 1 @@ -121718,6 +121647,7 @@ webseitendesigner.com, 0 webseitenserver.com, 0 websenat.de, 1 webshan.ir, 0 +webshaped.de, 1 webshop.nl, 1 website-engineering.co.za, 0 website-traffic.shop, 1 @@ -122387,6 +122317,7 @@ whereveryougo.space, 1 whexit.nl, 1 whey-protein.ch, 1 wheyteck.com, 1 +whi.tw, 0 whichdoctor.com, 1 whichgender.today, 1 whiff-of-grape.ca, 1 @@ -122492,6 +122423,7 @@ who.pm, 0 whoagirls.com, 1 whoagirls.net, 0 whoagirls.org, 1 +whoami.eu.org, 1 whoami.io, 1 whocalld.com, 1 whocalled.us, 1 @@ -122802,6 +122734,7 @@ wildanalysis.ga, 1 wildandisle.com, 1 wildandwonderfulbodycare.com, 1 wildandwonderfulketo.com, 1 +wildanfauzy.com, 0 wildbergh.tk, 1 wildberries.cf, 1 wildbirds.dk, 1 @@ -123004,7 +122937,6 @@ winegadgets.ru, 1 winek.tk, 1 wineparis.com, 1 winerytoursanfrancisco.com, 1 -wineworksonline.com, 1 winfar.co.za, 1 winfieldchen.me, 1 winfilestorage.tk, 1 @@ -123725,6 +123657,7 @@ worldnewsinbox.ga, 1 worldnewsphoto.tk, 1 worldofarganoil.com, 1 worldofbelia.de, 1 +worldofgeekstuff.com, 1 worldofghibli.id, 1 worldofheroes.ml, 1 worldoflegion.ml, 1 @@ -123934,7 +123867,6 @@ wptorium.com, 1 wptotal.com, 1 wptrigone.net, 1 wpuse.ru, 1 -wpvibes.com, 1 wq.ro, 1 wqaw3.tk, 1 wr.su, 1 @@ -124313,7 +124245,6 @@ x-charge.uk, 1 x-embed.com, 1 x-files.tk, 1 x-iweb.ru, 1 -x-lan.be, 1 x-net24.pl, 1 x-one.co.jp, 1 x-orbit.dk, 1 @@ -124677,7 +124608,6 @@ xiangweiqing.co.uk, 1 xianjianruishiyouyiyuan.com, 1 xiao-sheng.gq, 1 xiaobai.pro, 0 -xiaobude.cn, 1 xiaocg.xyz, 1 xiaodingyi.cn, 1 xiaofengsky.com, 0 @@ -124846,9 +124776,9 @@ xinpujing518.com, 0 xinpujing918.com, 0 xinsane.com, 1 xinshanla.com, 1 -xinsto.com, 1 xinu.xyz, 1 xinxin.pl, 1 +xinyezx.com, 1 xinyitour.tw, 1 xio.moe, 1 xion.nu, 1 @@ -124873,7 +124803,6 @@ xkcd.pw, 1 xkeyc.cn, 1 xkviz.net, 1 xkwy2018.cn, 1 -xlan.be, 1 xlange.com, 1 xlaw.com.br, 1 xldl.ml, 1 @@ -124888,6 +124817,7 @@ xluxes.jp, 1 xlyingyuan.com, 0 xm.digital, 1 xmag.pl, 1 +xmdhs.top, 1 xmediabigz.tk, 1 xmediazxy.tk, 1 xmedius.ca, 0 @@ -125983,7 +125913,6 @@ yasmin.ml, 1 yasmingarcia.tk, 1 yasraiting.tk, 1 yasrating.tk, 1 -yassine-ayari.com, 1 yassinesmael.tk, 1 yasudaseiki.cn, 1 yasukevicious.com, 1 @@ -126396,7 +126325,6 @@ yoshibaworks.com, 1 yoshitsugu.net, 1 yoshiya2020.com, 1 yoshkar-ola-city.tk, 1 -yosida-dental.com, 1 yosida95.com, 1 yospos.org, 1 yoti.com, 1 @@ -126416,7 +126344,7 @@ youbehero.com, 1 youber.cz, 1 youbil.com, 1 youc.ir, 1 -youcanbook.me, 1 +youcanbook.me, 0 youcanfinance.com.au, 1 youcanfuckoff.xyz, 1 youcanhelp.tk, 1 @@ -126927,7 +126855,6 @@ z-konzept-nutrition.ru, 1 z-pc.net, 1 z-rejstejna.cz, 1 z-vector.com, 1 -z.ai, 1 z.cash, 1 z.is, 1 z.md, 1 @@ -127434,6 +127361,7 @@ zd9090.com, 1 zd9797.com, 1 zdbl.de, 1 zdenek-hejl.com, 1 +zdenekpasek.com, 1 zdenekpasek.cz, 1 zdenekspacek.cz, 1 zdenekvecera.cz, 1 @@ -127477,6 +127405,7 @@ zectazepia.tk, 1 zecuur.nl, 1 zedeko.pl, 1 zedern-welt.de, 1 +zedex.cn, 1 zednet.tk, 1 zeds-official.com, 1 zeedroom.be, 0 @@ -127725,6 +127654,7 @@ zhaoeq.com, 1 zhaopage.com, 1 zhaostephen.com, 1 zhaoxixiangban.cc, 1 +zhaozhiru.com, 1 zhattyt.com, 1 zhbot.org, 1 zhcexo.com, 1 @@ -127811,6 +127741,7 @@ ziggletech.com, 1 zighinetto.org, 1 zigi.io, 1 zigottos.fr, 1 +zigsphere.com, 0 zigzagmart.com, 1 zihao.me, 0 zihari.com, 1 @@ -128235,6 +128166,7 @@ zsdublovice.cz, 1 zseartcc.org, 1 zselicivt.hu, 1 zserver.fr, 1 +zsi.com.tr, 1 zsien.cn, 1 zskomenskeho.cz, 1 zsoltbereczki.tk, 1 @@ -128258,7 +128190,7 @@ zubenciy.tk, 1 zubilo-perm.ru, 1 zubnivodni.cz, 1 zubr.net, 1 -zubro.net, 1 +zubro.net, 0 zudomc.me, 1 zuefle.net, 1 zuehlcke.de, 1 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index 758ff8a93295..6c66062f8a14 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,35 @@ { "data": [ + { + "stash": { + "blocked": [ + "vipkdy@com.vipkdy:5.5.1.32", + "vipkdy@com.vipkdy:5.5.1.26", + "vipkdy@com.vipkdy:5.5.1.8", + "@ultimateshoppingsearch:1.1.8", + "vipkdy@com.vipkdy:5.5.1.30", + "vipkdy@com.vipkdy:5.5.1.9", + "vipkdy@com.vipkdy:5.5.1.33", + "@ultimateshoppingsearch:1.1.6", + "vipkdy@com.vipkdy:5.5.1.20", + "@ultimateshoppingsearch:1.2.0", + "@ultimateshoppingsearch:1.1.9", + "vipkdy@com.vipkdy:5.5.1.28", + "vipkdy@com.vipkdy:5.5.1.36", + "vipkdy@com.vipkdy:5.5.1.3", + "@ultimateshoppingsearch:1.2.2", + "vipkdy@com.vipkdy:5.5.1.21", + "@ultimateshoppingsearch:1.2.1", + "@ultimateshoppingsearch:1.1.7" + ], + "unblocked": [] + }, + "schema": 1634206554527, + "key_format": "{guid}:{version}", + "stash_time": 1634236509443, + "id": "9737d55d-c647-485e-a801-c9ca425a5432", + "last_modified": 1634236664195 + }, { "stash": { "blocked": [ diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 14d684d93c01..2a615ea8a71c 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,7 +1,313 @@ { "data": [ { - "schema": 1634131327830, + "schema": 1634309429571, + "derHash": "q97sUxSQmPigsH79lys0Wom+3o7eaXXmG+le4Cbafvo=", + "subject": "CN=Actalis Client Authentication CA G1,O=Actalis S.p.A./03358520967,L=Milano,ST=Milano,C=IT", + "subjectDN": "MIGCMQswCQYDVQQGEwJJVDEPMA0GA1UECAwGTWlsYW5vMQ8wDQYDVQQHDAZNaWxhbm8xIzAhBgNVBAoMGkFjdGFsaXMgUy5wLkEuLzAzMzU4NTIwOTY3MSwwKgYDVQQDDCNBY3RhbGlzIENsaWVudCBBdXRoZW50aWNhdGlvbiBDQSBHMQ==", + "whitelist": false, + "attachment": { + "hash": "737f0f0ce1590b65bb7efa52f0521e84ec1ac16313c8b4c6cd288064af2d127d", + "size": 2235, + "filename": "YsqG87ugr7iITRNFFaHeNX5oMmY80JlEVuqBCxAhZAM=.pem", + "location": "security-state-staging/intermediates/5df58a07-e383-4a1a-8af4-9471aa61c013.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "YsqG87ugr7iITRNFFaHeNX5oMmY80JlEVuqBCxAhZAM=", + "crlite_enrolled": false, + "id": "621a2382-280e-48de-b859-5293ba5379b7", + "last_modified": 1634309862997 + }, + { + "schema": 1634309428400, + "derHash": "d4xRba7HAO5Ys1geQR5cDdR4ZjpRY6KYlTQVB9bpZN0=", + "subject": "CN=SHECA DV Server CA G5,O=UniTrust,C=CN", + "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgRFYgU2VydmVyIENBIEc1", + "whitelist": false, + "attachment": { + "hash": "4153674bf85308618da92043981bdd2d2f7ca5a4ed109d39c822cdd2408d1775", + "size": 2008, + "filename": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=.pem", + "location": "security-state-staging/intermediates/9e707aa9-a13b-417d-ac93-377ab92b3136.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=", + "crlite_enrolled": false, + "id": "3884a378-6d9c-42ab-a578-6a20d7e609a8", + "last_modified": 1634309862974 + }, + { + "schema": 1634309626145, + "derHash": "d4xRba7HAO5Ys1geQR5cDdR4ZjpRY6KYlTQVB9bpZN0=", + "subject": "CN=SHECA DV Server CA G5,O=UniTrust,C=CN", + "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgRFYgU2VydmVyIENBIEc1", + "whitelist": false, + "attachment": { + "hash": "4153674bf85308618da92043981bdd2d2f7ca5a4ed109d39c822cdd2408d1775", + "size": 2008, + "filename": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=.pem", + "location": "security-state-staging/intermediates/616b8c10-5e1d-4a6f-9d4b-0e50a8fd9dc5.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=", + "crlite_enrolled": false, + "id": "0b34f843-08b5-4719-befd-242cfb5b537c", + "last_modified": 1634309862951 + }, + { + "schema": 1634309425878, + "derHash": "/mtvnkS2cHl9UuXxbvG7ELSes61mJSL8Yys335pQRM0=", + "subject": "CN=Staclar TLS Issuing CA R1,O=Staclar\\, Inc.,L=Claymont,ST=Delaware,C=US", + "subjectDN": "MG8xCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhEZWxhd2FyZTERMA8GA1UEBwwIQ2xheW1vbnQxFjAUBgNVBAoMDVN0YWNsYXIsIEluYy4xIjAgBgNVBAMMGVN0YWNsYXIgVExTIElzc3VpbmcgQ0EgUjE=", + "whitelist": false, + "attachment": { + "hash": "54038b6768167a2d4b10ab95d2f8e93b47ab7b8e6233e07343f621a977f51f34", + "size": 2495, + "filename": "2hrK22IRCeQc0huhCCGTSKY2R0LmyeFUaH4ArRR6YUc=.pem", + "location": "security-state-staging/intermediates/3efc8703-5c7e-45d9-b345-9857aec25425.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "2hrK22IRCeQc0huhCCGTSKY2R0LmyeFUaH4ArRR6YUc=", + "crlite_enrolled": true, + "id": "b3bfb57e-84e5-459a-93ea-751a8c706623", + "last_modified": 1634309862928 + }, + { + "schema": 1634309427798, + "derHash": "/M986IpkKHTRwQf00QxqfdM0eXY5upgTBFRWLDA68XA=", + "subject": "CN=Quantum Basic TLS DV RSA R1,O=Quantum CA Limited,C=GB", + "subjectDN": "MFAxCzAJBgNVBAYTAkdCMRswGQYDVQQKDBJRdWFudHVtIENBIExpbWl0ZWQxJDAiBgNVBAMMG1F1YW50dW0gQmFzaWMgVExTIERWIFJTQSBSMQ==", + "whitelist": false, + "attachment": { + "hash": "9a5b9cf6da2c98fb4d3adb057a8cb4c74161b112407d57a29dd0fc9cb2d24904", + "size": 2381, + "filename": "OB3HSFDxykZYkZCziJA-6l6iHYbsqNrhFIrMg_L45mU=.pem", + "location": "security-state-staging/intermediates/0f12f590-b4c0-47a3-a66e-78070f6bfe7f.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "OB3HSFDxykZYkZCziJA+6l6iHYbsqNrhFIrMg/L45mU=", + "crlite_enrolled": true, + "id": "10b10ba7-6c85-4583-9814-eda266ae2416", + "last_modified": 1634309862903 + }, + { + "schema": 1634309426524, + "derHash": "N/0pxwHWl3mY8gUVPqikwumWNU3wctSYTcXYsfdaK2E=", + "subject": "CN=SwissNS TLS Issuing RSA CA R1,O=swissns GmbH,L=Luzern,ST=Luzern,C=CH", + "subjectDN": "MG4xCzAJBgNVBAYTAkNIMQ8wDQYDVQQIDAZMdXplcm4xDzANBgNVBAcMBkx1emVybjEVMBMGA1UECgwMc3dpc3NucyBHbWJIMSYwJAYDVQQDDB1Td2lzc05TIFRMUyBJc3N1aW5nIFJTQSBDQSBSMQ==", + "whitelist": false, + "attachment": { + "hash": "712a44aa441a1572aa92968b2b418a8c979bfb72b6b17653fed5888d76210828", + "size": 2544, + "filename": "KAda-LJFeGtGthCqCejer2EUArFZNe-fmlkLdhkdcJc=.pem", + "location": "security-state-staging/intermediates/2b761dc1-930d-4dc0-ba17-650c271bfb95.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "KAda+LJFeGtGthCqCejer2EUArFZNe+fmlkLdhkdcJc=", + "crlite_enrolled": true, + "id": "32fe68ce-7d4c-4d54-bab1-b2aab2d02223", + "last_modified": 1634309862879 + }, + { + "schema": 1634291406255, + "derHash": "NtGanN5gKdFNpNlRc1GQu0zG2yBtZD9kdNdzlHSRIpk=", + "subject": "CN=Quantum Secure Site OV Pro TLS CN RSA R1,O=Quantum CA Limited,C=GB", + "subjectDN": "MF0xCzAJBgNVBAYTAkdCMRswGQYDVQQKDBJRdWFudHVtIENBIExpbWl0ZWQxMTAvBgNVBAMMKFF1YW50dW0gU2VjdXJlIFNpdGUgT1YgUHJvIFRMUyBDTiBSU0EgUjE=", + "whitelist": false, + "attachment": { + "hash": "37e8e536a1b1e7f4996f53b272104ddf40c3497a8ed88f0be057d22bdedfb8ad", + "size": 2402, + "filename": "wmkhucJk0k_u-vh155sN1sgtdzW537s_eYqcbeYm4PU=.pem", + "location": "security-state-staging/intermediates/271cdd84-3255-4317-bf48-4451169b8dae.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "wmkhucJk0k/u+vh155sN1sgtdzW537s/eYqcbeYm4PU=", + "crlite_enrolled": true, + "id": "0dbf6d16-da28-4b79-98b6-478b71d6b156", + "last_modified": 1634309862856 + }, + { + "schema": 1634309425224, + "derHash": "5Hft8R61T28u3VaYez2/ivprhVB655KsY81BzkGsE5c=", + "subject": "CN=Quantum Secure Site DV TLS CN RSA R1,O=Quantum CA Limited,C=GB", + "subjectDN": "MFkxCzAJBgNVBAYTAkdCMRswGQYDVQQKDBJRdWFudHVtIENBIExpbWl0ZWQxLTArBgNVBAMMJFF1YW50dW0gU2VjdXJlIFNpdGUgRFYgVExTIENOIFJTQSBSMQ==", + "whitelist": false, + "attachment": { + "hash": "4a8292642e07c7a31a3e646b5dee0077bb31ab11611979dd57528a38af3c0f4e", + "size": 2398, + "filename": "iZz0oapRjKvmsylcqDwbwcsBGfrjtSeUvrbqeWauFlo=.pem", + "location": "security-state-staging/intermediates/3884e68e-5ff3-4f81-8755-d774a966e23c.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "iZz0oapRjKvmsylcqDwbwcsBGfrjtSeUvrbqeWauFlo=", + "crlite_enrolled": true, + "id": "5730e704-8d00-4b00-acc9-6c9fb8d6a310", + "last_modified": 1634309862829 + }, + { + "schema": 1634309427217, + "derHash": "VYRK03slu02z/+fc3DkCOkGzxIikepX60fz61Qi3AoU=", + "subject": "CN=Dodo Sign TLS ICA RSA R1,O=Dodo Sign Ltd,L=Ebene,ST=Plaines Wilhems,C=MU", + "subjectDN": "MHIxCzAJBgNVBAYTAk1VMRgwFgYDVQQIDA9QbGFpbmVzIFdpbGhlbXMxDjAMBgNVBAcMBUViZW5lMRYwFAYDVQQKDA1Eb2RvIFNpZ24gTHRkMSEwHwYDVQQDDBhEb2RvIFNpZ24gVExTIElDQSBSU0EgUjE=", + "whitelist": false, + "attachment": { + "hash": "9bbab79fdec346cdda828bc4486cedf2582bee9d80c23587c1c2f05407854b6e", + "size": 2438, + "filename": "QBni1na5RD10V0ehoagk-O8mlEaC8kPw1gH8_uoYYTY=.pem", + "location": "security-state-staging/intermediates/512c8ed9-74cb-4a34-a0b5-79f8a0f953b2.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "QBni1na5RD10V0ehoagk+O8mlEaC8kPw1gH8/uoYYTY=", + "crlite_enrolled": true, + "id": "d63929e7-804a-4e7f-9657-ccb49438e6ad", + "last_modified": 1634309862789 + }, + { + "schema": 1634309424611, + "derHash": "lItxEa9C9UbVec/1ziveyCE03ZkUhCvdsMUocutgTjk=", + "subject": "CN=SSL.com SSL Intermediate CA ECC R2,O=SSL Corp,L=Houston,ST=Texas,C=US", + "subjectDN": "MG8xCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjERMA8GA1UECgwIU1NMIENvcnAxKzApBgNVBAMMIlNTTC5jb20gU1NMIEludGVybWVkaWF0ZSBDQSBFQ0MgUjI=", + "whitelist": false, + "attachment": { + "hash": "29138ba36283c37133babfb45ad6da91b908056c4bc777229a9b6114c29bb9d7", + "size": 1264, + "filename": "zGgA4OU4DjJdvpRYUqbi5Vh2g9W5Oc_PgKihy9mkLsE=.pem", + "location": "security-state-staging/intermediates/583bc538-020a-40af-92a9-40c3653a90e8.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "zGgA4OU4DjJdvpRYUqbi5Vh2g9W5Oc/PgKihy9mkLsE=", + "crlite_enrolled": true, + "id": "a0acdb7c-e477-4e0c-8f54-b838e76497f5", + "last_modified": 1634309862765 + }, + { + "schema": 1634309428987, + "derHash": "UnpgsCq/OkpVGcT2L7vVYOMDQHTu7IuHmaqTaGk/420=", + "subject": "CN=SSL.com RSA SSL subCA,O=SSL Corporation,L=Houston,ST=Texas,C=US", + "subjectDN": "MGkxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMR4wHAYDVQQDDBVTU0wuY29tIFJTQSBTU0wgc3ViQ0E=", + "whitelist": false, + "attachment": { + "hash": "19883ec948ba65cabab87774d50633120945ef053a62f8362d2e09b43597fe1a", + "size": 2292, + "filename": "7LcB5Z8ATVz4rcQtIY5xJir8_-F3e_HPi8IDdCnjCaE=.pem", + "location": "security-state-staging/intermediates/23914bfd-6f12-4a9d-8c1a-a2c9e445a1bf.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "7LcB5Z8ATVz4rcQtIY5xJir8/+F3e/HPi8IDdCnjCaE=", + "crlite_enrolled": true, + "id": "b976a3a6-3c96-4aca-9c5f-fc654e3c4f6c", + "last_modified": 1634309862738 + }, + { + "schema": 1634309430157, + "derHash": "N/0pxwHWl3mY8gUVPqikwumWNU3wctSYTcXYsfdaK2E=", + "subject": "CN=SwissNS TLS Issuing RSA CA R1,O=swissns GmbH,L=Luzern,ST=Luzern,C=CH", + "subjectDN": "MG4xCzAJBgNVBAYTAkNIMQ8wDQYDVQQIDAZMdXplcm4xDzANBgNVBAcMBkx1emVybjEVMBMGA1UECgwMc3dpc3NucyBHbWJIMSYwJAYDVQQDDB1Td2lzc05TIFRMUyBJc3N1aW5nIFJTQSBDQSBSMQ==", + "whitelist": false, + "attachment": { + "hash": "712a44aa441a1572aa92968b2b418a8c979bfb72b6b17653fed5888d76210828", + "size": 2544, + "filename": "KAda-LJFeGtGthCqCejer2EUArFZNe-fmlkLdhkdcJc=.pem", + "location": "security-state-staging/intermediates/c7fb95b1-4e6e-44da-b797-1b64a448dbfb.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "KAda+LJFeGtGthCqCejer2EUArFZNe+fmlkLdhkdcJc=", + "crlite_enrolled": true, + "id": "1c713ec1-22b4-4bb9-a642-d8188603e3c9", + "last_modified": 1634309862715 + }, + { + "schema": 1634287827544, + "derHash": "irOgrPKJ5u91S+RJI2hD1n9FwZG93WZIS4Xm5gVWqa8=", + "subject": "CN=SHECA OV Server CA G5,O=UniTrust,C=CN", + "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgT1YgU2VydmVyIENBIEc1", + "whitelist": false, + "attachment": { + "hash": "f80efdafc27d6bb8367919d6877b83658178c312d7ff4c7951be66667c2a033e", + "size": 2008, + "filename": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC-AQOHP17SXtCk=.pem", + "location": "security-state-staging/intermediates/ecb85ef3-60a6-486c-a07a-96efc94a8698.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC+AQOHP17SXtCk=", + "crlite_enrolled": false, + "id": "317681eb-a6d1-4ecd-bf18-a7af01dde81d", + "last_modified": 1634288243929 + }, + { + "schema": 1634288024219, + "derHash": "irOgrPKJ5u91S+RJI2hD1n9FwZG93WZIS4Xm5gVWqa8=", + "subject": "CN=SHECA OV Server CA G5,O=UniTrust,C=CN", + "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgT1YgU2VydmVyIENBIEc1", + "whitelist": false, + "attachment": { + "hash": "f80efdafc27d6bb8367919d6877b83658178c312d7ff4c7951be66667c2a033e", + "size": 2008, + "filename": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC-AQOHP17SXtCk=.pem", + "location": "security-state-staging/intermediates/9bd0ec19-9f61-45d1-a9f4-651e6aa64389.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC+AQOHP17SXtCk=", + "crlite_enrolled": false, + "id": "61ad8f77-7825-42e3-a828-72ff88095f6e", + "last_modified": 1634288243904 + }, + { + "schema": 1634266228965, + "derHash": "6uWboswzKBpc3exQz7/Z3QylVl8872mMk2ahDOwIf5c=", + "subject": "CN=Domain The Net Technologies Ltd CA for SSL R2,O=Domain The Net Technologies Ltd,C=IL", + "subjectDN": "MG8xCzAJBgNVBAYTAklMMSgwJgYDVQQKDB9Eb21haW4gVGhlIE5ldCBUZWNobm9sb2dpZXMgTHRkMTYwNAYDVQQDDC1Eb21haW4gVGhlIE5ldCBUZWNobm9sb2dpZXMgTHRkIENBIGZvciBTU0wgUjI=", + "whitelist": false, + "attachment": { + "hash": "dc6270566751505a7936c7847e06bc81b9c0a9ca4b21fd6512fbeaa3d7d3bc7d", + "size": 2483, + "filename": "1FBqLyRsP8ibxXXsW64LYWGTeYMGSsUTMFEetUQakD8=.pem", + "location": "security-state-staging/intermediates/c052ede4-8c2e-4eed-97b4-5d3e127c78f8.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "1FBqLyRsP8ibxXXsW64LYWGTeYMGSsUTMFEetUQakD8=", + "crlite_enrolled": false, + "id": "461724c9-5ae7-4021-be3d-b5c081e3b8d7", + "last_modified": 1634266676073 + }, + { + "schema": 1634266231951, + "derHash": "NsfjKXUKQD2wuvBpyanzOWPlyYpmqKtXAW22+IzFYU0=", + "subject": "CN=MilleniumSign SSL Certificate CA RSA R2,O=MilleniumSign Limited,L=Ebene,ST=Plaines Wilhems,C=MU", + "subjectDN": "MIGJMQswCQYDVQQGEwJNVTEYMBYGA1UECAwPUGxhaW5lcyBXaWxoZW1zMQ4wDAYDVQQHDAVFYmVuZTEeMBwGA1UECgwVTWlsbGVuaXVtU2lnbiBMaW1pdGVkMTAwLgYDVQQDDCdNaWxsZW5pdW1TaWduIFNTTCBDZXJ0aWZpY2F0ZSBDQSBSU0EgUjI=", + "whitelist": false, + "attachment": { + "hash": "3c3182c3f974165726acb2e2b6c35f9306b120ba4684e22ac91eef26e5ef70a1", + "size": 2552, + "filename": "1jNByu9N5tc5kL0IfWW4-AIUQnp6ljVLB3ROX-cA6b4=.pem", + "location": "security-state-staging/intermediates/03421df1-3916-4c0a-87eb-0d83ea93a06f.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "1jNByu9N5tc5kL0IfWW4+AIUQnp6ljVLB3ROX+cA6b4=", + "crlite_enrolled": false, + "id": "17e6f300-d0c1-4ef6-ae0f-36ecd026b133", + "last_modified": 1634266676048 + }, + { + "schema": 1634223513998, + "derHash": "zJ9yVE/2F8FM6+goMZSnDx6Jgc8WPVo/2NzP2EbV3Bo=", + "subject": "CN=NetLock OnlineSSL (Class Online) Tanúsítványkiadó,OU=Tanúsítványkiadók (Certification Services),O=NetLock Kft.,L=Budapest,C=HU", + "subjectDN": "MIGwMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE+MDwGA1UEAww1TmV0TG9jayBPbmxpbmVTU0wgKENsYXNzIE9ubGluZSkgVGFuw7pzw610dsOhbnlraWFkw7M=", + "whitelist": false, + "attachment": { + "hash": "72ae8f0a0087c7b13f79d2f02193b9bca142172f3053cad4b927af716cd0534a", + "size": 2190, + "filename": "He6eOdoX1CHCLhtg75AtdDdI18-x-VfWOYW5_LCt5kk=.pem", + "location": "security-state-staging/intermediates/6bab6451-8f63-49f3-a556-455c6b868bd1.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "He6eOdoX1CHCLhtg75AtdDdI18+x+VfWOYW5/LCt5kk=", + "crlite_enrolled": false, + "id": "ca8f61c9-fe67-45a0-8bc2-f0a8348e2cdb", + "last_modified": 1634245155970 + }, + { + "schema": 1634206552959, "derHash": "ClUqZfIv+CDn7D1Du/iLAqvDS9JH4MNQWJG2NC8WpfI=", "subject": "CN=SHECA RSA Domain Validation Server CA G3,O=UniTrust,C=CN", "subjectDN": "MFMxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDExMC8GA1UEAwwoU0hFQ0EgUlNBIERvbWFpbiBWYWxpZGF0aW9uIFNlcnZlciBDQSBHMw==", @@ -14,9 +320,9 @@ "mimetype": "application/x-pem-file" }, "pubKeyHash": "N6OrM0KKQgR1zORoDKkLLFEKAYCmS/84dpbLl/qNOnU=", - "crlite_enrolled": false, + "crlite_enrolled": true, "id": "4b6a2421-1677-41c0-8103-bc13fb7e09f9", - "last_modified": 1634201855983 + "last_modified": 1634223512841 }, { "schema": 1634079014715, @@ -5814,78 +6120,6 @@ "id": "f554221d-77da-41bd-a565-b33663f72018", "last_modified": 1631735851199 }, - { - "schema": 1631713981163, - "derHash": "d4xRba7HAO5Ys1geQR5cDdR4ZjpRY6KYlTQVB9bpZN0=", - "subject": "CN=SHECA DV Server CA G5,O=UniTrust,C=CN", - "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgRFYgU2VydmVyIENBIEc1", - "whitelist": false, - "attachment": { - "hash": "4153674bf85308618da92043981bdd2d2f7ca5a4ed109d39c822cdd2408d1775", - "size": 2008, - "filename": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=.pem", - "location": "security-state-staging/intermediates/616b8c10-5e1d-4a6f-9d4b-0e50a8fd9dc5.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=", - "crlite_enrolled": true, - "id": "0b34f843-08b5-4719-befd-242cfb5b537c", - "last_modified": 1631714250659 - }, - { - "schema": 1631713814405, - "derHash": "d4xRba7HAO5Ys1geQR5cDdR4ZjpRY6KYlTQVB9bpZN0=", - "subject": "CN=SHECA DV Server CA G5,O=UniTrust,C=CN", - "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgRFYgU2VydmVyIENBIEc1", - "whitelist": false, - "attachment": { - "hash": "4153674bf85308618da92043981bdd2d2f7ca5a4ed109d39c822cdd2408d1775", - "size": 2008, - "filename": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=.pem", - "location": "security-state-staging/intermediates/9e707aa9-a13b-417d-ac93-377ab92b3136.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "LSv8B00n0rDwNaioIz0qIgnC9J7YkSK9NS35qVjVZK4=", - "crlite_enrolled": true, - "id": "3884a378-6d9c-42ab-a578-6a20d7e609a8", - "last_modified": 1631714250636 - }, - { - "schema": 1631692196540, - "derHash": "irOgrPKJ5u91S+RJI2hD1n9FwZG93WZIS4Xm5gVWqa8=", - "subject": "CN=SHECA OV Server CA G5,O=UniTrust,C=CN", - "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgT1YgU2VydmVyIENBIEc1", - "whitelist": false, - "attachment": { - "hash": "f80efdafc27d6bb8367919d6877b83658178c312d7ff4c7951be66667c2a033e", - "size": 2008, - "filename": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC-AQOHP17SXtCk=.pem", - "location": "security-state-staging/intermediates/9bd0ec19-9f61-45d1-a9f4-651e6aa64389.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC+AQOHP17SXtCk=", - "crlite_enrolled": true, - "id": "61ad8f77-7825-42e3-a828-72ff88095f6e", - "last_modified": 1631692720459 - }, - { - "schema": 1631584648305, - "derHash": "irOgrPKJ5u91S+RJI2hD1n9FwZG93WZIS4Xm5gVWqa8=", - "subject": "CN=SHECA OV Server CA G5,O=UniTrust,C=CN", - "subjectDN": "MEAxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEeMBwGA1UEAwwVU0hFQ0EgT1YgU2VydmVyIENBIEc1", - "whitelist": false, - "attachment": { - "hash": "f80efdafc27d6bb8367919d6877b83658178c312d7ff4c7951be66667c2a033e", - "size": 2008, - "filename": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC-AQOHP17SXtCk=.pem", - "location": "security-state-staging/intermediates/ecb85ef3-60a6-486c-a07a-96efc94a8698.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "Ml9jtIo6CaZwLt7q6tlW9x4oQNlrHC+AQOHP17SXtCk=", - "crlite_enrolled": true, - "id": "317681eb-a6d1-4ecd-bf18-a7af01dde81d", - "last_modified": 1631692720437 - }, { "schema": 1631545045582, "derHash": "+RYG0bxSxhATbKqFarUAxIw7mTusSAjNgrxLeKvyQVY=", @@ -7434,24 +7668,6 @@ "id": "060fd0ef-9267-43a4-be6a-5844fda14113", "last_modified": 1624676239258 }, - { - "schema": 1624673275803, - "derHash": "/mtvnkS2cHl9UuXxbvG7ELSes61mJSL8Yys335pQRM0=", - "subject": "CN=Staclar TLS Issuing CA R1,O=Staclar\\, Inc.,L=Claymont,ST=Delaware,C=US", - "subjectDN": "MG8xCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhEZWxhd2FyZTERMA8GA1UEBwwIQ2xheW1vbnQxFjAUBgNVBAoMDVN0YWNsYXIsIEluYy4xIjAgBgNVBAMMGVN0YWNsYXIgVExTIElzc3VpbmcgQ0EgUjE=", - "whitelist": false, - "attachment": { - "hash": "54038b6768167a2d4b10ab95d2f8e93b47ab7b8e6233e07343f621a977f51f34", - "size": 2495, - "filename": "2hrK22IRCeQc0huhCCGTSKY2R0LmyeFUaH4ArRR6YUc=.pem", - "location": "security-state-staging/intermediates/3efc8703-5c7e-45d9-b345-9857aec25425.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "2hrK22IRCeQc0huhCCGTSKY2R0LmyeFUaH4ArRR6YUc=", - "crlite_enrolled": true, - "id": "b3bfb57e-84e5-459a-93ea-751a8c706623", - "last_modified": 1624676239228 - }, { "schema": 1624525053378, "derHash": "yeQPToM5bzSnyGGBe07as9wfi6xpn9UMsmH6kSPVXvQ=", @@ -7830,24 +8046,6 @@ "id": "44261107-8d3f-48ac-8a0d-8b9ef00b4189", "last_modified": 1622559454515 }, - { - "schema": 1622515801648, - "derHash": "/M986IpkKHTRwQf00QxqfdM0eXY5upgTBFRWLDA68XA=", - "subject": "CN=Quantum Basic TLS DV RSA R1,O=Quantum CA Limited,C=GB", - "subjectDN": "MFAxCzAJBgNVBAYTAkdCMRswGQYDVQQKDBJRdWFudHVtIENBIExpbWl0ZWQxJDAiBgNVBAMMG1F1YW50dW0gQmFzaWMgVExTIERWIFJTQSBSMQ==", - "whitelist": false, - "attachment": { - "hash": "9a5b9cf6da2c98fb4d3adb057a8cb4c74161b112407d57a29dd0fc9cb2d24904", - "size": 2381, - "filename": "OB3HSFDxykZYkZCziJA-6l6iHYbsqNrhFIrMg_L45mU=.pem", - "location": "security-state-staging/intermediates/0f12f590-b4c0-47a3-a66e-78070f6bfe7f.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "OB3HSFDxykZYkZCziJA+6l6iHYbsqNrhFIrMg/L45mU=", - "crlite_enrolled": true, - "id": "10b10ba7-6c85-4583-9814-eda266ae2416", - "last_modified": 1622516241262 - }, { "schema": 1621954724552, "derHash": "tBpIZPDU7E6mMtAbPn8jJ3XlXiKzv9hkLuEpIoDQ5Ho=", @@ -8442,42 +8640,6 @@ "id": "97a0ce0e-92ed-4238-acbe-bca68817608d", "last_modified": 1620928650018 }, - { - "schema": 1620917550568, - "derHash": "N/0pxwHWl3mY8gUVPqikwumWNU3wctSYTcXYsfdaK2E=", - "subject": "CN=SwissNS TLS Issuing RSA CA R1,O=swissns GmbH,L=Luzern,ST=Luzern,C=CH", - "subjectDN": "MG4xCzAJBgNVBAYTAkNIMQ8wDQYDVQQIDAZMdXplcm4xDzANBgNVBAcMBkx1emVybjEVMBMGA1UECgwMc3dpc3NucyBHbWJIMSYwJAYDVQQDDB1Td2lzc05TIFRMUyBJc3N1aW5nIFJTQSBDQSBSMQ==", - "whitelist": false, - "attachment": { - "hash": "712a44aa441a1572aa92968b2b418a8c979bfb72b6b17653fed5888d76210828", - "size": 2544, - "filename": "KAda-LJFeGtGthCqCejer2EUArFZNe-fmlkLdhkdcJc=.pem", - "location": "security-state-staging/intermediates/c7fb95b1-4e6e-44da-b797-1b64a448dbfb.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "KAda+LJFeGtGthCqCejer2EUArFZNe+fmlkLdhkdcJc=", - "crlite_enrolled": true, - "id": "1c713ec1-22b4-4bb9-a642-d8188603e3c9", - "last_modified": 1620928649990 - }, - { - "schema": 1620914372260, - "derHash": "N/0pxwHWl3mY8gUVPqikwumWNU3wctSYTcXYsfdaK2E=", - "subject": "CN=SwissNS TLS Issuing RSA CA R1,O=swissns GmbH,L=Luzern,ST=Luzern,C=CH", - "subjectDN": "MG4xCzAJBgNVBAYTAkNIMQ8wDQYDVQQIDAZMdXplcm4xDzANBgNVBAcMBkx1emVybjEVMBMGA1UECgwMc3dpc3NucyBHbWJIMSYwJAYDVQQDDB1Td2lzc05TIFRMUyBJc3N1aW5nIFJTQSBDQSBSMQ==", - "whitelist": false, - "attachment": { - "hash": "712a44aa441a1572aa92968b2b418a8c979bfb72b6b17653fed5888d76210828", - "size": 2544, - "filename": "KAda-LJFeGtGthCqCejer2EUArFZNe-fmlkLdhkdcJc=.pem", - "location": "security-state-staging/intermediates/2b761dc1-930d-4dc0-ba17-650c271bfb95.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "KAda+LJFeGtGthCqCejer2EUArFZNe+fmlkLdhkdcJc=", - "crlite_enrolled": true, - "id": "32fe68ce-7d4c-4d54-bab1-b2aab2d02223", - "last_modified": 1620928649971 - }, { "schema": 1620917551037, "derHash": "Qi+dTmgTTjYrdWnlKYoXPOxAx8cnSyJjqbyK2h0aI/o=", @@ -9306,24 +9468,6 @@ "id": "9bc8e3bb-0a99-4d29-a7f9-6256977d6e41", "last_modified": 1618102648358 }, - { - "schema": 1617770984230, - "derHash": "NtGanN5gKdFNpNlRc1GQu0zG2yBtZD9kdNdzlHSRIpk=", - "subject": "CN=Quantum Secure Site OV Pro TLS CN RSA R1,O=Quantum CA Limited,C=GB", - "subjectDN": "MF0xCzAJBgNVBAYTAkdCMRswGQYDVQQKDBJRdWFudHVtIENBIExpbWl0ZWQxMTAvBgNVBAMMKFF1YW50dW0gU2VjdXJlIFNpdGUgT1YgUHJvIFRMUyBDTiBSU0EgUjE=", - "whitelist": false, - "attachment": { - "hash": "37e8e536a1b1e7f4996f53b272104ddf40c3497a8ed88f0be057d22bdedfb8ad", - "size": 2402, - "filename": "wmkhucJk0k_u-vh155sN1sgtdzW537s_eYqcbeYm4PU=.pem", - "location": "security-state-staging/intermediates/271cdd84-3255-4317-bf48-4451169b8dae.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "wmkhucJk0k/u+vh155sN1sgtdzW537s/eYqcbeYm4PU=", - "crlite_enrolled": true, - "id": "0dbf6d16-da28-4b79-98b6-478b71d6b156", - "last_modified": 1618102648339 - }, { "schema": 1617256194859, "derHash": "KFBuM/VaYHIRXz4Eyb2/WvUxLKj8EyUIuXrJn+4FFug=", @@ -12546,24 +12690,6 @@ "id": "e80e13e0-9ae0-4852-86c7-1c266fe0906a", "last_modified": 1614391116607 }, - { - "schema": 1614390579264, - "derHash": "5Hft8R61T28u3VaYez2/ivprhVB655KsY81BzkGsE5c=", - "subject": "CN=Quantum Secure Site DV TLS CN RSA R1,O=Quantum CA Limited,C=GB", - "subjectDN": "MFkxCzAJBgNVBAYTAkdCMRswGQYDVQQKDBJRdWFudHVtIENBIExpbWl0ZWQxLTArBgNVBAMMJFF1YW50dW0gU2VjdXJlIFNpdGUgRFYgVExTIENOIFJTQSBSMQ==", - "whitelist": false, - "attachment": { - "hash": "4a8292642e07c7a31a3e646b5dee0077bb31ab11611979dd57528a38af3c0f4e", - "size": 2398, - "filename": "iZz0oapRjKvmsylcqDwbwcsBGfrjtSeUvrbqeWauFlo=.pem", - "location": "security-state-staging/intermediates/3884e68e-5ff3-4f81-8755-d774a966e23c.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "iZz0oapRjKvmsylcqDwbwcsBGfrjtSeUvrbqeWauFlo=", - "crlite_enrolled": true, - "id": "5730e704-8d00-4b00-acc9-6c9fb8d6a310", - "last_modified": 1614391116588 - }, { "schema": 1614347385669, "derHash": "53V7sMSUKtwQjQkqF7gSsQQ+BqCU3V4hSSAyVVb8aSQ=", @@ -27576,24 +27702,6 @@ "id": "d02db623-261b-4357-8746-76ac75242c86", "last_modified": 1591199861175 }, - { - "schema": 1591167097545, - "derHash": "VYRK03slu02z/+fc3DkCOkGzxIikepX60fz61Qi3AoU=", - "subject": "CN=Dodo Sign TLS ICA RSA R1,O=Dodo Sign Ltd,L=Ebene,ST=Plaines Wilhems,C=MU", - "subjectDN": "MHIxCzAJBgNVBAYTAk1VMRgwFgYDVQQIDA9QbGFpbmVzIFdpbGhlbXMxDjAMBgNVBAcMBUViZW5lMRYwFAYDVQQKDA1Eb2RvIFNpZ24gTHRkMSEwHwYDVQQDDBhEb2RvIFNpZ24gVExTIElDQSBSU0EgUjE=", - "whitelist": false, - "attachment": { - "hash": "9bbab79fdec346cdda828bc4486cedf2582bee9d80c23587c1c2f05407854b6e", - "size": 2438, - "filename": "QBni1na5RD10V0ehoagk-O8mlEaC8kPw1gH8_uoYYTY=.pem", - "location": "security-state-staging/intermediates/512c8ed9-74cb-4a34-a0b5-79f8a0f953b2.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "QBni1na5RD10V0ehoagk+O8mlEaC8kPw1gH8/uoYYTY=", - "crlite_enrolled": true, - "id": "d63929e7-804a-4e7f-9657-ccb49438e6ad", - "last_modified": 1591199861147 - }, { "schema": 1591167131818, "derHash": "G/2HAtj5uzQPNTggMwwLun5SLGMWTJHylUFNrHl/CGM=", @@ -34740,24 +34848,6 @@ "id": "3d7a069a-f29d-4118-9ac6-49aa45da46c3", "last_modified": 1576536531856 }, - { - "schema": 1576536094670, - "derHash": "NsfjKXUKQD2wuvBpyanzOWPlyYpmqKtXAW22+IzFYU0=", - "subject": "CN=MilleniumSign SSL Certificate CA RSA R2,O=MilleniumSign Limited,L=Ebene,ST=Plaines Wilhems,C=MU", - "subjectDN": "MIGJMQswCQYDVQQGEwJNVTEYMBYGA1UECAwPUGxhaW5lcyBXaWxoZW1zMQ4wDAYDVQQHDAVFYmVuZTEeMBwGA1UECgwVTWlsbGVuaXVtU2lnbiBMaW1pdGVkMTAwLgYDVQQDDCdNaWxsZW5pdW1TaWduIFNTTCBDZXJ0aWZpY2F0ZSBDQSBSU0EgUjI=", - "whitelist": false, - "attachment": { - "hash": "3c3182c3f974165726acb2e2b6c35f9306b120ba4684e22ac91eef26e5ef70a1", - "size": 2552, - "filename": "1jNByu9N5tc5kL0IfWW4-AIUQnp6ljVLB3ROX-cA6b4=.pem", - "location": "security-state-staging/intermediates/03421df1-3916-4c0a-87eb-0d83ea93a06f.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "1jNByu9N5tc5kL0IfWW4+AIUQnp6ljVLB3ROX+cA6b4=", - "crlite_enrolled": true, - "id": "17e6f300-d0c1-4ef6-ae0f-36ecd026b133", - "last_modified": 1576536531841 - }, { "schema": 1576536072963, "derHash": "pBaiukkMRU4juFvwh9t7E39PR9l0fmD4aS/0yN8OBis=", @@ -39204,24 +39294,6 @@ "id": "f9d6e124-3ddc-44f9-bbe1-dbb93eca419a", "last_modified": 1562025697178 }, - { - "schema": 1562025694846, - "derHash": "q97sUxSQmPigsH79lys0Wom+3o7eaXXmG+le4Cbafvo=", - "subject": "CN=Actalis Client Authentication CA G1,O=Actalis S.p.A./03358520967,L=Milano,ST=Milano,C=IT", - "subjectDN": "MIGCMQswCQYDVQQGEwJJVDEPMA0GA1UECAwGTWlsYW5vMQ8wDQYDVQQHDAZNaWxhbm8xIzAhBgNVBAoMGkFjdGFsaXMgUy5wLkEuLzAzMzU4NTIwOTY3MSwwKgYDVQQDDCNBY3RhbGlzIENsaWVudCBBdXRoZW50aWNhdGlvbiBDQSBHMQ==", - "whitelist": false, - "attachment": { - "hash": "737f0f0ce1590b65bb7efa52f0521e84ec1ac16313c8b4c6cd288064af2d127d", - "size": 2235, - "filename": "YsqG87ugr7iITRNFFaHeNX5oMmY80JlEVuqBCxAhZAM=.pem", - "location": "security-state-staging/intermediates/5df58a07-e383-4a1a-8af4-9471aa61c013.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "YsqG87ugr7iITRNFFaHeNX5oMmY80JlEVuqBCxAhZAM=", - "crlite_enrolled": true, - "id": "621a2382-280e-48de-b859-5293ba5379b7", - "last_modified": 1562025695624 - }, { "schema": 1562025691799, "derHash": "Dc3Afsq7v+OKRga6ZjmHzbO9mBf8Z9HdDPCUrIyieH0=", @@ -41094,24 +41166,6 @@ "id": "bab7ff8a-caf1-417f-8c18-45de6956da8b", "last_modified": 1562025501666 }, - { - "schema": 1562025500166, - "derHash": "6uWboswzKBpc3exQz7/Z3QylVl8872mMk2ahDOwIf5c=", - "subject": "CN=Domain The Net Technologies Ltd CA for SSL R2,O=Domain The Net Technologies Ltd,C=IL", - "subjectDN": "MG8xCzAJBgNVBAYTAklMMSgwJgYDVQQKDB9Eb21haW4gVGhlIE5ldCBUZWNobm9sb2dpZXMgTHRkMTYwNAYDVQQDDC1Eb21haW4gVGhlIE5ldCBUZWNobm9sb2dpZXMgTHRkIENBIGZvciBTU0wgUjI=", - "whitelist": false, - "attachment": { - "hash": "dc6270566751505a7936c7847e06bc81b9c0a9ca4b21fd6512fbeaa3d7d3bc7d", - "size": 2483, - "filename": "1FBqLyRsP8ibxXXsW64LYWGTeYMGSsUTMFEetUQakD8=.pem", - "location": "security-state-staging/intermediates/c052ede4-8c2e-4eed-97b4-5d3e127c78f8.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "1FBqLyRsP8ibxXXsW64LYWGTeYMGSsUTMFEetUQakD8=", - "crlite_enrolled": true, - "id": "461724c9-5ae7-4021-be3d-b5c081e3b8d7", - "last_modified": 1562025500918 - }, { "schema": 1562025497127, "derHash": "/CJFvlncZGHUEZw6Bu2+5NKIVWvYjEeeMO1fPoFhZGk=", @@ -42372,24 +42426,6 @@ "id": "de1e3c3e-b52c-47c5-b13a-b6c6fe5ba8f9", "last_modified": 1562025378352 }, - { - "schema": 1562025376125, - "derHash": "lItxEa9C9UbVec/1ziveyCE03ZkUhCvdsMUocutgTjk=", - "subject": "CN=SSL.com SSL Intermediate CA ECC R2,O=SSL Corp,L=Houston,ST=Texas,C=US", - "subjectDN": "MG8xCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjERMA8GA1UECgwIU1NMIENvcnAxKzApBgNVBAMMIlNTTC5jb20gU1NMIEludGVybWVkaWF0ZSBDQSBFQ0MgUjI=", - "whitelist": false, - "attachment": { - "hash": "29138ba36283c37133babfb45ad6da91b908056c4bc777229a9b6114c29bb9d7", - "size": 1264, - "filename": "zGgA4OU4DjJdvpRYUqbi5Vh2g9W5Oc_PgKihy9mkLsE=.pem", - "location": "security-state-staging/intermediates/583bc538-020a-40af-92a9-40c3653a90e8.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "zGgA4OU4DjJdvpRYUqbi5Vh2g9W5Oc/PgKihy9mkLsE=", - "crlite_enrolled": true, - "id": "a0acdb7c-e477-4e0c-8f54-b838e76497f5", - "last_modified": 1562025376857 - }, { "schema": 1562025375368, "derHash": "O8UYVgQK1/9mg6qFoNNPnqaAzSPDfLigQjsPiaJEBbk=", @@ -48168,24 +48204,6 @@ "id": "2a05f09e-4930-43ff-891b-351f3751cce6", "last_modified": 1562024771677 }, - { - "schema": 1562024767927, - "derHash": "UnpgsCq/OkpVGcT2L7vVYOMDQHTu7IuHmaqTaGk/420=", - "subject": "CN=SSL.com RSA SSL subCA,O=SSL Corporation,L=Houston,ST=Texas,C=US", - "subjectDN": "MGkxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMR4wHAYDVQQDDBVTU0wuY29tIFJTQSBTU0wgc3ViQ0E=", - "whitelist": false, - "attachment": { - "hash": "19883ec948ba65cabab87774d50633120945ef053a62f8362d2e09b43597fe1a", - "size": 2292, - "filename": "7LcB5Z8ATVz4rcQtIY5xJir8_-F3e_HPi8IDdCnjCaE=.pem", - "location": "security-state-staging/intermediates/23914bfd-6f12-4a9d-8c1a-a2c9e445a1bf.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "7LcB5Z8ATVz4rcQtIY5xJir8/+F3e/HPi8IDdCnjCaE=", - "crlite_enrolled": true, - "id": "b976a3a6-3c96-4aca-9c5f-fc654e3c4f6c", - "last_modified": 1562024768658 - }, { "schema": 1562024767188, "derHash": "cx09nPqgYUh6HXFEWkL2ffCvyipsLS+Y/3s84RKx9Wg=", @@ -50508,24 +50526,6 @@ "id": "3bc639af-b93f-4769-a1de-d9721dba182a", "last_modified": 1562023920713 }, - { - "schema": 1562023919206, - "derHash": "zJ9yVE/2F8FM6+goMZSnDx6Jgc8WPVo/2NzP2EbV3Bo=", - "subject": "CN=NetLock OnlineSSL (Class Online) Tanúsítványkiadó,OU=Tanúsítványkiadók (Certification Services),O=NetLock Kft.,L=Budapest,C=HU", - "subjectDN": "MIGwMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE+MDwGA1UEAww1TmV0TG9jayBPbmxpbmVTU0wgKENsYXNzIE9ubGluZSkgVGFuw7pzw610dsOhbnlraWFkw7M=", - "whitelist": false, - "attachment": { - "hash": "72ae8f0a0087c7b13f79d2f02193b9bca142172f3053cad4b927af716cd0534a", - "size": 2190, - "filename": "He6eOdoX1CHCLhtg75AtdDdI18-x-VfWOYW5_LCt5kk=.pem", - "location": "security-state-staging/intermediates/6bab6451-8f63-49f3-a556-455c6b868bd1.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "He6eOdoX1CHCLhtg75AtdDdI18+x+VfWOYW5/LCt5kk=", - "crlite_enrolled": true, - "id": "ca8f61c9-fe67-45a0-8bc2-f0a8348e2cdb", - "last_modified": 1562023919950 - }, { "schema": 1562023917707, "derHash": "2GoYtfdpUrc26Jots/D9+QcHEUYBFLagjWScpieTXJY=", From 1aa3a9e868f8576faf63ad5b99f42550735646d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Tue, 19 Oct 2021 13:04:19 +0000 Subject: [PATCH 08/66] Bug 1736545 - WindowGlobal.getExistingActor can return null. r=nika Differential Revision: https://phabricator.services.mozilla.com/D128870 --- dom/chrome-webidl/WindowGlobalActors.webidl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dom/chrome-webidl/WindowGlobalActors.webidl b/dom/chrome-webidl/WindowGlobalActors.webidl index 39d6a1f9955c..a6d9e3e75e97 100644 --- a/dom/chrome-webidl/WindowGlobalActors.webidl +++ b/dom/chrome-webidl/WindowGlobalActors.webidl @@ -121,7 +121,7 @@ interface WindowGlobalParent : WindowContext { */ [Throws] JSWindowActorParent getActor(UTF8String name); - JSWindowActorParent getExistingActor(UTF8String name); + JSWindowActorParent? getExistingActor(UTF8String name); /** * Renders a region of the frame into an image bitmap. @@ -191,5 +191,5 @@ interface WindowGlobalChild { */ [Throws] JSWindowActorChild getActor(UTF8String name); - JSWindowActorChild getExistingActor(UTF8String name); + JSWindowActorChild? getExistingActor(UTF8String name); }; From 9f67437d11e992b0ab3a54b2a5d4c85c40caf963 Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Tue, 19 Oct 2021 13:11:37 +0000 Subject: [PATCH 09/66] Bug 1736393 - Don't use ScriptBreak for Tibetan, just treat Tsheg character like a hyphen instead. r=m_kato Differential Revision: https://phabricator.services.mozilla.com/D128756 --- intl/lwbrk/LineBreaker.cpp | 11 ++++++----- intl/lwbrk/LineBreaker.h | 4 ++-- .../i18n/css3-text-line-break-baspglwj-082.html.ini | 4 ++++ .../i18n/css3-text-line-break-baspglwj-126.html.ini | 4 ++++ .../i18n/css3-text-line-break-baspglwj-127.html.ini | 4 ++++ .../i18n/css3-text-line-break-baspglwj-128.html.ini | 4 ++++ .../word-break/word-break-normal-bo-000.html.ini | 3 --- 7 files changed, 24 insertions(+), 10 deletions(-) delete mode 100644 testing/web-platform/meta/css/css-text/word-break/word-break-normal-bo-000.html.ini diff --git a/intl/lwbrk/LineBreaker.cpp b/intl/lwbrk/LineBreaker.cpp index 31f45b9e484d..13c171ed08ea 100644 --- a/intl/lwbrk/LineBreaker.cpp +++ b/intl/lwbrk/LineBreaker.cpp @@ -370,11 +370,12 @@ static inline bool IS_HYPHEN(char16_t u) { return (u == U_HYPHEN || u == 0x2010 || // HYPHEN u == 0x2012 || // FIGURE DASH u == 0x2013 || // EN DASH -#if ANDROID - /* Bug 1647377: On Android, we don't have a "platform" backend - * that supports Tibetan (nsRuleBreaker.cpp only knows about - * Thai), so instead we just treat the TSHEG like a hyphen to - * provide basic line-breaking possibilities. +#if ANDROID || XP_WIN + /* Bug 1647377: On Android and Windows, we don't have a "platform" + * backend that supports Tibetan (nsRuleBreaker.cpp only knows about + * Thai, and ScriptBreak doesn't handle Tibetan well either), so + * instead we just treat the TSHEG like a hyphen to provide basic + * line-breaking possibilities. */ u == 0x0F0B || // TIBETAN MARK INTERSYLLABIC TSHEG #endif diff --git a/intl/lwbrk/LineBreaker.h b/intl/lwbrk/LineBreaker.h index 77ac8bd4f601..73450bdb58ff 100644 --- a/intl/lwbrk/LineBreaker.h +++ b/intl/lwbrk/LineBreaker.h @@ -76,8 +76,8 @@ static inline bool NS_IsSpace(char16_t u) { static inline bool NS_NeedsPlatformNativeHandling(char16_t aChar) { return -#if ANDROID // Bug 1647377: no "platform native" support for Tibetan; - // better to just use our class-based breaker. +#if ANDROID || XP_WIN // Bug 1647377/1736393: no "platform native" support for + // Tibetan; better to just use our class-based breaker. (0x0e01 <= aChar && aChar <= 0x0eff) || // Thai, Lao #else (0x0e01 <= aChar && aChar <= 0x0fff) || // Thai, Lao, Tibetan diff --git a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-082.html.ini b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-082.html.ini index 9f570a412fb5..d71d7fcb864e 100644 --- a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-082.html.ini +++ b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-082.html.ini @@ -2,19 +2,23 @@ [white-space:pre-wrap] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:pre-line] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:break-spaces] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:normal] expected: if os == "android": PASS + if os == "win": PASS FAIL diff --git a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-126.html.ini b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-126.html.ini index 62015761d908..64cfcaea127d 100644 --- a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-126.html.ini +++ b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-126.html.ini @@ -2,20 +2,24 @@ [white-space:pre-wrap] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:pre-line] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:break-spaces] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:normal] expected: if os == "android": PASS + if os == "win": PASS FAIL diff --git a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-127.html.ini b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-127.html.ini index 9d3a4dec8fad..d5a82d983270 100644 --- a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-127.html.ini +++ b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-127.html.ini @@ -2,20 +2,24 @@ [white-space:pre-wrap] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:pre-line] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:break-spaces] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:normal] expected: if os == "android": PASS + if os == "win": PASS FAIL diff --git a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-128.html.ini b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-128.html.ini index 6db100deca1b..8934d708f1ab 100644 --- a/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-128.html.ini +++ b/testing/web-platform/meta/css/css-text/i18n/css3-text-line-break-baspglwj-128.html.ini @@ -2,20 +2,24 @@ [white-space:pre-wrap] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:pre-line] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:break-spaces] expected: if os == "android": PASS + if os == "win": PASS FAIL [white-space:normal] expected: if os == "android": PASS + if os == "win": PASS FAIL diff --git a/testing/web-platform/meta/css/css-text/word-break/word-break-normal-bo-000.html.ini b/testing/web-platform/meta/css/css-text/word-break/word-break-normal-bo-000.html.ini deleted file mode 100644 index 4f5c3109749d..000000000000 --- a/testing/web-platform/meta/css/css-text/word-break/word-break-normal-bo-000.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[word-break-normal-bo-000.html] - expected: - if (os == "win"): FAIL From b7053f318eef2f4866e1bb905774f8f6bc6ee7e4 Mon Sep 17 00:00:00 2001 From: criss Date: Tue, 19 Oct 2021 16:49:45 +0300 Subject: [PATCH 10/66] Backed out changeset 6353bdbe1604 (bug 1731796) for causing failures on browser_search_nimbus_reload.js. CLOSED TREE --- .../test/xpcshell/data/test/manifest.json | 10 --- ..._ext_settings_overrides_search_mozParam.js | 84 +------------------ toolkit/components/nimbus/FeatureManifest.js | 5 -- toolkit/components/search/SearchEngine.jsm | 18 +--- .../xpcshell/searchconfigs/test_google.js | 67 --------------- 5 files changed, 2 insertions(+), 182 deletions(-) diff --git a/browser/components/extensions/test/xpcshell/data/test/manifest.json b/browser/components/extensions/test/xpcshell/data/test/manifest.json index f4545029aa93..5b75ba271de0 100644 --- a/browser/components/extensions/test/xpcshell/data/test/manifest.json +++ b/browser/components/extensions/test/xpcshell/data/test/manifest.json @@ -63,16 +63,6 @@ "name": "prefval", "condition": "pref", "pref": "code" - }, - { - "name": "experimenter-1", - "condition": "pref", - "pref": "nimbus-key-1" - }, - { - "name": "experimenter-2", - "condition": "pref", - "pref": "nimbus-key-2" } ] } diff --git a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js index 81197d002358..94f2742fdc73 100644 --- a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js +++ b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js @@ -6,13 +6,10 @@ const { AddonTestUtils } = ChromeUtils.import( "resource://testing-common/AddonTestUtils.jsm" ); + const { SearchTestUtils } = ChromeUtils.import( "resource://testing-common/SearchTestUtils.jsm" ); -const { NimbusFeatures } = ChromeUtils.import( - "resource://nimbus/ExperimentAPI.jsm" -); -const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm"); AddonTestUtils.init(this); AddonTestUtils.overrideCertDB(); @@ -53,8 +50,6 @@ const params = [ ]; add_task(async function setup() { - let readyStub = sinon.stub(NimbusFeatures.search, "ready").resolves(); - let updateStub = sinon.stub(NimbusFeatures.search, "onUpdate"); await promiseStartupManager(); await SearchTestUtils.useTestEngines("data", null, [ { @@ -72,8 +67,6 @@ add_task(async function setup() { await Services.search.init(); registerCleanupFunction(async () => { await promiseShutdownManager(); - readyStub.restore(); - updateStub.restore(); }); }); @@ -112,81 +105,6 @@ add_task(async function test_extension_setting_moz_params() { "search url is expected" ); } - - defaultBranch.setCharPref("param.code", ""); -}); - -add_task(async function test_nimbus_params() { - let sandbox = sinon.createSandbox(); - let stub = sandbox.stub(NimbusFeatures.search, "getVariable"); - // These values should match the nimbusParams below and the data/test/manifest.json - // search engine configuration - stub.withArgs("extraParams").returns([ - { - key: "nimbus-key-1", - value: "nimbus-value-1", - }, - { - key: "nimbus-key-2", - value: "nimbus-value-2", - }, - ]); - - Assert.ok( - NimbusFeatures.search.onUpdate.called, - "Called to initialize the cache" - ); - - // Populate the cache with the `getVariable` mock values - NimbusFeatures.search.onUpdate.firstCall.args[0](); - - let engine = Services.search.getEngineByName("MozParamsTest"); - - // Note: these lists should be kept in sync with the lists in - // browser/components/extensions/test/xpcshell/data/test/manifest.json - // These params are conditional based on how search is initiated. - const nimbusParams = [ - { name: "experimenter-1", condition: "pref", pref: "nimbus-key-1" }, - { name: "experimenter-2", condition: "pref", pref: "nimbus-key-2" }, - ]; - const experimentCache = { - "nimbus-key-1": "nimbus-value-1", - "nimbus-key-2": "nimbus-value-2", - }; - - let extraParams = []; - for (let p of params) { - if (p.value == "{searchTerms}") { - extraParams.push(`${p.name}=test`); - } else if (p.value == "{language}") { - extraParams.push(`${p.name}=${Services.locale.requestedLocale || "*"}`); - } else if (p.value == "{moz:locale}") { - extraParams.push(`${p.name}=${Services.locale.requestedLocale}`); - } else if (p.condition !== "pref") { - // Ignoring pref parameters - extraParams.push(`${p.name}=${p.value}`); - } - } - for (let p of nimbusParams) { - if (p.condition == "pref") { - extraParams.push(`${p.name}=${experimentCache[p.pref]}`); - } - } - let paramStr = extraParams.join("&"); - for (let p of mozParams) { - let expectedURL = engine.getSubmission( - "test", - null, - p.condition == "purpose" ? p.purpose : null - ).uri.spec; - equal( - expectedURL, - `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`, - "search url is expected" - ); - } - - sandbox.restore(); }); add_task(async function test_extension_setting_moz_params_fail() { diff --git a/toolkit/components/nimbus/FeatureManifest.js b/toolkit/components/nimbus/FeatureManifest.js index b38137b572de..fc4a519ea764 100644 --- a/toolkit/components/nimbus/FeatureManifest.js +++ b/toolkit/components/nimbus/FeatureManifest.js @@ -19,11 +19,6 @@ const FeatureManifest = { description: "Used to activate only matching configurations that contain the value in `experiment`", }, - extraParams: { - type: "json", - description: - "Query parameters values for search engine configurations.", - }, }, }, urlbar: { diff --git a/toolkit/components/search/SearchEngine.jsm b/toolkit/components/search/SearchEngine.jsm index 0a845dd5f323..fecc275f8f43 100644 --- a/toolkit/components/search/SearchEngine.jsm +++ b/toolkit/components/search/SearchEngine.jsm @@ -14,7 +14,6 @@ XPCOMUtils.defineLazyModuleGetters(this, { Region: "resource://gre/modules/Region.jsm", SearchUtils: "resource://gre/modules/SearchUtils.jsm", Services: "resource://gre/modules/Services.jsm", - NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm", }); const BinaryInputStream = Components.Constructor( @@ -127,36 +126,21 @@ const ParamPreferenceCache = { SearchUtils.BROWSER_SEARCH_PREF + "param." ); this.cache = new Map(); - this.nimbusCache = new Map(); for (let prefName of this.branch.getChildList("")) { this.cache.set(prefName, this.branch.getCharPref(prefName, null)); } this.branch.addObserver("", this, true); - - this.onNimbusUpdate = this.onNimbusUpdate.bind(this); - this.onNimbusUpdate(); - NimbusFeatures.search.onUpdate(this.onNimbusUpdate); - NimbusFeatures.search.ready().then(this.onNimbusUpdate); }, observe(subject, topic, data) { this.cache.set(data, this.branch.getCharPref(data, null)); }, - onNimbusUpdate() { - let extraParams = NimbusFeatures.search.getVariable("extraParams") || []; - for (const { key, value } of extraParams) { - this.nimbusCache.set(key, value); - } - }, - getPref(prefName) { if (!this.cache) { this.initCache(); } - return this.nimbusCache.has(prefName) - ? this.nimbusCache.get(prefName) - : this.cache.get(prefName); + return this.cache.get(prefName); }, }; diff --git a/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js b/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js index 967461fcf260..2a7068c29f0f 100644 --- a/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js +++ b/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js @@ -3,10 +3,6 @@ "use strict"; -XPCOMUtils.defineLazyModuleGetters(this, { - NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm", -}); - const test = new SearchConfigTest({ identifier: "google", aliases: ["@google"], @@ -68,8 +64,6 @@ const test = new SearchConfigTest({ }); add_task(async function setup() { - sinon.spy(NimbusFeatures.search, "onUpdate"); - sinon.stub(NimbusFeatures.search, "ready").resolves(); await test.setup(); }); @@ -117,65 +111,4 @@ add_task(async function test_searchConfig_google_with_mozparam() { "Should be including the correct MozParam parameter for the engine" ); } - - // Reset the pref values for next tests - for (const testData of TEST_DATA) { - defaultBranch.setCharPref("param." + testData.pref, ""); - } -}); - -add_task(async function test_searchConfig_google_with_nimbus() { - let sandbox = sinon.createSandbox(); - // Test a couple of configurations with a MozParam set up. - const TEST_DATA = [ - { - locale: "en-US", - region: "US", - expected: "nimbus_us_param", - }, - { - locale: "en-US", - region: "GB", - expected: "nimbus_row_param", - }, - ]; - - Assert.ok( - NimbusFeatures.search.onUpdate.called, - "Should register an update listener for Nimbus experiments" - ); - // Stub getVariable to populate the cache with our expected data - sandbox.stub(NimbusFeatures.search, "getVariable").returns([ - { key: "google_channel_us", value: "nimbus_us_param" }, - { key: "google_channel_row", value: "nimbus_row_param" }, - ]); - // Set the pref cache with Nimbus values - NimbusFeatures.search.onUpdate.firstCall.args[0](); - - for (const testData of TEST_DATA) { - info(`Checking region ${testData.region}, locale ${testData.locale}`); - const engines = await test._getEngines(testData.region, testData.locale); - - Assert.ok( - engines[0].identifier.startsWith("google"), - "Should have the correct engine" - ); - console.log(engines[0]); - - const submission = engines[0].getSubmission("test", URLTYPE_SEARCH_HTML); - Assert.ok( - NimbusFeatures.search.ready.called, - "Should wait for Nimbus to get ready" - ); - Assert.ok( - NimbusFeatures.search.getVariable, - "Should call NimbusFeatures.search.getVariable to populate the cache" - ); - Assert.ok( - submission.uri.query.split("&").includes("channel=" + testData.expected), - "Should be including the correct MozParam parameter for the engine" - ); - } - - sandbox.restore(); }); From 1b6ed324350130684b303b31f52ceeccf3ae2aa1 Mon Sep 17 00:00:00 2001 From: Heitor Neiva Date: Tue, 19 Oct 2021 13:43:51 +0000 Subject: [PATCH 11/66] Bug 527670 - Refactor Update Verify readme, r=aki Added instructions to run update-verify locally Differential Revision: https://phabricator.services.mozilla.com/D128796 --- tools/update-verify/README.md | 119 +++++++++++++++++++++++++ tools/update-verify/release/README.txt | 46 ---------- 2 files changed, 119 insertions(+), 46 deletions(-) create mode 100644 tools/update-verify/README.md delete mode 100644 tools/update-verify/release/README.txt diff --git a/tools/update-verify/README.md b/tools/update-verify/README.md new file mode 100644 index 000000000000..f1e8f4329b37 --- /dev/null +++ b/tools/update-verify/README.md @@ -0,0 +1,119 @@ +Mozilla Build Verification Scripts +================================== + +Contents +-------- + +updates -> AUS and update verification + +l10n -> l10n vs. en-US verification + +common -> useful utility scripts + +Update Verification +------------------- + +`verify.sh` + +> Does a low-level check of all advertised MAR files. Expects to have a +> file named all-locales, but does not (yet) handle platform exceptions, so +> these should be removed from the locales file. +> +> Prints errors on both STDOUT and STDIN, the intention is to run the +> script with STDOUT redirected to an output log. If there is not output +> on the console and an exit code of 0 then all tests pass; otherwise one +> or more tests failed. +> +> Does the following: +> +> 1) download update.xml from AUS for a particular release +> 2) download the partial and full mar advertised +> 3) check that the partial and full match the advertised size and sha1sum +> 4) downloads the latest release, and an older release +> 5) applies MAR to the older release, and compares the two releases. +> +> Step 5 is repeated for both the complete and partial MAR. +> +> Expects to have an updates.cfg file, describing all releases to try updating +> from. + +Valid Platforms for AUS +----------------------- +- Linux_x86-gcc3 +- Darwin_Universal-gcc3 +- Linux_x86-gcc3 +- WINNT_x86-msvc +- Darwin_ppc-gcc3 + +--- +Running it locally +================== + +Requirements: +------------- + +- [Docker](https://docs.docker.com/get-docker/) +- [optional | Mac] zstd (`brew install zst`) + +Docker Image +------------ + +1. [Ship-it](https://shipit.mozilla-releng.net/recent) holds the latest builds. +1. Clicking on "Ship task" of latest build will open the task group in +Taskcluster. +1. On the "Name contains" lookup box, search for `release-update-verify-firefox` +and open a `update-verify` task +1. Make note of the `CHANNEL` under Payload. ie: `beta-localtest` +1. Click "See more" under Task Details and open the `docker-image-update-verify` +task. + +Download the image artifact from *docker-image-update-verify* task and load it +manually +``` +zstd -d image.tar.zst +docker image load -i image.tar +``` + +**OR** + +Load docker image using mach and a task +``` +# Replace TASK-ID with the ID of a docker-image-update-verify task +./mach taskcluster-load-image --task-id= +``` + +Update Verify Config +-------------------- + +1. Open Taskcluster Task Group +1. Search for `update-verify-config` and open the task +1. Under Artifacts, download `update-verify.cfg` file + +Run Docker +---------- + +To run the container interactively: +> Replace `` with gecko repository path on local host
+> Replace `` with path to `update-verify.cfg` file on local host. +ie.: `~/Downloads/update-verify.cfg` +> Replace `` with value from `update-verify` task (Docker steps) + +``` +docker run \ + -it \ + --rm \ + -e CHANNEL=beta-localtest \ + -e MOZ_FETCHES_DIR=/builds/worker/fetches \ + -e MOZBUILD_STATE_PATH=/builds/worker/.mozbuild \ + -v :/builds/worker/fetches/update-verify.cfg + -v :/builds/worker/checkouts/gecko \ + -w /builds/worker/checkouts/gecko \ + update-verify +``` +> Note that `MOZ_FETCHES_DIR` here is different from what is used in production. + +`total-chunks` and `this-chunk` refer to the number of lines in `update-verify.cfg` +``` +./mach create-mach-environment +./tools/update-verify/scripts/chunked-verify.sh --total-chunks=228 --this-chunk=4 +``` diff --git a/tools/update-verify/release/README.txt b/tools/update-verify/release/README.txt deleted file mode 100644 index 7c79fcf4ecf7..000000000000 --- a/tools/update-verify/release/README.txt +++ /dev/null @@ -1,46 +0,0 @@ -Mozilla Build Verification Scripts ---- - --- -Contents --- - -updates -> AUS and update verification -l10n -> l10n vs. en-US verification -common -> useful utility scripts - --- -Update verification --- - -verify.sh - does a low-level check of all advertised MAR files. Expects to have a - file named all-locales, but does not (yet) handle platform exceptions, so - these should be removed from the locales file. - - prints errors on both STDOUT and STDIN, the intention is to run the - script with STDOUT redirected to an output log. If there is not output - on the console and an exit code of 0 then all tests pass; otherwise one - or more tests failed. - - Does the following: - - 1) download update.xml from AUS for a particular release - 2) download the partial and full mar advertised - 3) check that the partial and full match the advertised size and sha1sum - 4) downloads the latest release, and an older release - 5) applies MAR to the older release, and compares the two releases. - - Step 5 is repeated for both the complete and partial MAR. - - Expects to have an updates.cfg file, describing all releases to try updating - from. - -- -Valid Platforms for AUS -- -Linux_x86-gcc3 -Darwin_Universal-gcc3 -Linux_x86-gcc3 -WINNT_x86-msvc -Darwin_ppc-gcc3 From cc8b1ac57922fa0e57b87de722ab0f128a6ee159 Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Tue, 19 Oct 2021 13:44:24 +0000 Subject: [PATCH 12/66] Bug 1735299 - Use fewer NS_ADDREF in netwerk/ r=nhnt11 Differential Revision: https://phabricator.services.mozilla.com/D128176 --- netwerk/base/BackgroundFileSaver.cpp | 3 +- netwerk/base/LoadInfo.cpp | 8 ++--- netwerk/base/TLSServerSocket.cpp | 12 +++---- netwerk/base/nsDNSPrefetch.cpp | 6 ++-- netwerk/base/nsIncrementalStreamLoader.cpp | 2 +- netwerk/base/nsInputStreamChannel.cpp | 5 ++- netwerk/base/nsInputStreamPump.cpp | 2 +- netwerk/base/nsMIMEInputStream.cpp | 3 +- netwerk/base/nsRedirectHistoryEntry.cpp | 4 +-- netwerk/base/nsSocketTransport2.cpp | 4 +-- netwerk/base/nsUDPSocket.cpp | 4 +-- netwerk/base/nsURLHelper.cpp | 21 +++++------ netwerk/cache2/CacheEntry.cpp | 4 +-- netwerk/protocol/file/nsFileChannel.cpp | 2 +- netwerk/protocol/gio/nsGIOProtocolHandler.cpp | 35 +++++++------------ .../protocol/http/ClassifierDummyChannel.cpp | 6 ++-- netwerk/protocol/http/HttpBaseChannel.cpp | 24 +++++-------- netwerk/protocol/http/HttpChannelChild.cpp | 2 +- netwerk/protocol/http/HttpConnectionBase.h | 2 +- netwerk/protocol/http/NullHttpChannel.cpp | 4 +-- netwerk/protocol/http/TRRServiceChannel.cpp | 8 ++--- netwerk/protocol/http/nsHttpChannel.cpp | 8 ++--- .../viewsource/nsViewSourceChannel.cpp | 3 +- .../websocket/BaseWebSocketChannel.cpp | 6 ++-- .../converters/nsDirIndexParser.cpp | 2 +- .../converters/nsMultiMixedConv.cpp | 7 ++-- 26 files changed, 75 insertions(+), 112 deletions(-) diff --git a/netwerk/base/BackgroundFileSaver.cpp b/netwerk/base/BackgroundFileSaver.cpp index dab314307c3e..b4bc87eb3c5c 100644 --- a/netwerk/base/BackgroundFileSaver.cpp +++ b/netwerk/base/BackgroundFileSaver.cpp @@ -121,8 +121,7 @@ nsresult BackgroundFileSaver::Init() { NS_IMETHODIMP BackgroundFileSaver::GetObserver(nsIBackgroundFileSaverObserver** aObserver) { NS_ENSURE_ARG_POINTER(aObserver); - *aObserver = mObserver; - NS_IF_ADDREF(*aObserver); + *aObserver = do_AddRef(mObserver).take(); return NS_OK; } diff --git a/netwerk/base/LoadInfo.cpp b/netwerk/base/LoadInfo.cpp index 4f20e864ffd4..86b3991d83a4 100644 --- a/netwerk/base/LoadInfo.cpp +++ b/netwerk/base/LoadInfo.cpp @@ -815,7 +815,7 @@ already_AddRefed LoadInfo::CloneForNewRequest() const { NS_IMETHODIMP LoadInfo::GetLoadingPrincipal(nsIPrincipal** aLoadingPrincipal) { - NS_IF_ADDREF(*aLoadingPrincipal = mLoadingPrincipal); + *aLoadingPrincipal = do_AddRef(mLoadingPrincipal).take(); return NS_OK; } @@ -833,7 +833,7 @@ nsIPrincipal* LoadInfo::TriggeringPrincipal() { return mTriggeringPrincipal; } NS_IMETHODIMP LoadInfo::GetPrincipalToInherit(nsIPrincipal** aPrincipalToInherit) { - NS_IF_ADDREF(*aPrincipalToInherit = mPrincipalToInherit); + *aPrincipalToInherit = do_AddRef(mPrincipalToInherit).take(); return NS_OK; } @@ -1752,7 +1752,7 @@ LoadInfo::GetIsFromObjectOrEmbed(bool* aIsFromObjectOrEmbed) { NS_IMETHODIMP LoadInfo::GetResultPrincipalURI(nsIURI** aURI) { - NS_IF_ADDREF(*aURI = mResultPrincipalURI); + *aURI = do_AddRef(mResultPrincipalURI).take(); return NS_OK; } @@ -1893,7 +1893,7 @@ PerformanceStorage* LoadInfo::GetPerformanceStorage() { NS_IMETHODIMP LoadInfo::GetCspEventListener(nsICSPEventListener** aCSPEventListener) { - NS_IF_ADDREF(*aCSPEventListener = mCSPEventListener); + *aCSPEventListener = do_AddRef(mCSPEventListener).take(); return NS_OK; } diff --git a/netwerk/base/TLSServerSocket.cpp b/netwerk/base/TLSServerSocket.cpp index 66b0a990c70b..9a863da7e47b 100644 --- a/netwerk/base/TLSServerSocket.cpp +++ b/netwerk/base/TLSServerSocket.cpp @@ -134,8 +134,7 @@ TLSServerSocket::GetServerCert(nsIX509Cert** aCert) { if (NS_WARN_IF(!aCert)) { return NS_ERROR_INVALID_POINTER; } - *aCert = mServerCert; - NS_IF_ADDREF(*aCert); + *aCert = do_AddRef(mServerCert).take(); return NS_OK; } @@ -305,8 +304,7 @@ TLSServerConnectionInfo::GetServerSocket(nsITLSServerSocket** aSocket) { if (NS_WARN_IF(!aSocket)) { return NS_ERROR_INVALID_POINTER; } - *aSocket = mServerSocket; - NS_IF_ADDREF(*aSocket); + *aSocket = do_AddRef(mServerSocket).take(); return NS_OK; } @@ -315,8 +313,7 @@ TLSServerConnectionInfo::GetStatus(nsITLSClientStatus** aStatus) { if (NS_WARN_IF(!aStatus)) { return NS_ERROR_INVALID_POINTER; } - *aStatus = this; - NS_IF_ADDREF(*aStatus); + *aStatus = do_AddRef(this).take(); return NS_OK; } @@ -325,8 +322,7 @@ TLSServerConnectionInfo::GetPeerCert(nsIX509Cert** aCert) { if (NS_WARN_IF(!aCert)) { return NS_ERROR_INVALID_POINTER; } - *aCert = mPeerCert; - NS_IF_ADDREF(*aCert); + *aCert = do_AddRef(mPeerCert).take(); return NS_OK; } diff --git a/netwerk/base/nsDNSPrefetch.cpp b/netwerk/base/nsDNSPrefetch.cpp index 529171a34749..ddc4b6208681 100644 --- a/netwerk/base/nsDNSPrefetch.cpp +++ b/netwerk/base/nsDNSPrefetch.cpp @@ -16,19 +16,17 @@ #include "mozilla/Atomics.h" #include "mozilla/Preferences.h" -static nsIDNSService* sDNSService = nullptr; +static mozilla::StaticRefPtr sDNSService; nsresult nsDNSPrefetch::Initialize(nsIDNSService* aDNSService) { MOZ_ASSERT(NS_IsMainThread()); - NS_IF_RELEASE(sDNSService); sDNSService = aDNSService; - NS_IF_ADDREF(sDNSService); return NS_OK; } nsresult nsDNSPrefetch::Shutdown() { - NS_IF_RELEASE(sDNSService); + sDNSService = nullptr; return NS_OK; } diff --git a/netwerk/base/nsIncrementalStreamLoader.cpp b/netwerk/base/nsIncrementalStreamLoader.cpp index 586743e6a654..00475d146eb2 100644 --- a/netwerk/base/nsIncrementalStreamLoader.cpp +++ b/netwerk/base/nsIncrementalStreamLoader.cpp @@ -41,7 +41,7 @@ nsIncrementalStreamLoader::GetNumBytesRead(uint32_t* aNumBytes) { /* readonly attribute nsIRequest request; */ NS_IMETHODIMP nsIncrementalStreamLoader::GetRequest(nsIRequest** aRequest) { - NS_IF_ADDREF(*aRequest = mRequest); + *aRequest = do_AddRef(mRequest).take(); return NS_OK; } diff --git a/netwerk/base/nsInputStreamChannel.cpp b/netwerk/base/nsInputStreamChannel.cpp index 53e003948b34..e00bc85ad590 100644 --- a/netwerk/base/nsInputStreamChannel.cpp +++ b/netwerk/base/nsInputStreamChannel.cpp @@ -55,7 +55,7 @@ nsInputStreamChannel::SetURI(nsIURI* uri) { NS_IMETHODIMP nsInputStreamChannel::GetContentStream(nsIInputStream** stream) { - NS_IF_ADDREF(*stream = mContentStream); + *stream = do_AddRef(mContentStream).take(); return NS_OK; } @@ -87,8 +87,7 @@ nsInputStreamChannel::GetIsSrcdocChannel(bool* aIsSrcdocChannel) { NS_IMETHODIMP nsInputStreamChannel::GetBaseURI(nsIURI** aBaseURI) { - *aBaseURI = mBaseURI; - NS_IF_ADDREF(*aBaseURI); + *aBaseURI = do_AddRef(mBaseURI).take(); return NS_OK; } diff --git a/netwerk/base/nsInputStreamPump.cpp b/netwerk/base/nsInputStreamPump.cpp index d6d4ac33eb3d..7423da359c05 100644 --- a/netwerk/base/nsInputStreamPump.cpp +++ b/netwerk/base/nsInputStreamPump.cpp @@ -256,7 +256,7 @@ NS_IMETHODIMP nsInputStreamPump::GetLoadGroup(nsILoadGroup** aLoadGroup) { RecursiveMutexAutoLock lock(mMutex); - NS_IF_ADDREF(*aLoadGroup = mLoadGroup); + *aLoadGroup = do_AddRef(mLoadGroup).take(); return NS_OK; } diff --git a/netwerk/base/nsMIMEInputStream.cpp b/netwerk/base/nsMIMEInputStream.cpp index c0ed6047a845..39d084e1f38d 100644 --- a/netwerk/base/nsMIMEInputStream.cpp +++ b/netwerk/base/nsMIMEInputStream.cpp @@ -166,8 +166,7 @@ nsMIMEInputStream::SetData(nsIInputStream* aStream) { NS_IMETHODIMP nsMIMEInputStream::GetData(nsIInputStream** aStream) { NS_ENSURE_ARG_POINTER(aStream); - *aStream = mStream; - NS_IF_ADDREF(*aStream); + *aStream = do_AddRef(mStream).take(); return NS_OK; } diff --git a/netwerk/base/nsRedirectHistoryEntry.cpp b/netwerk/base/nsRedirectHistoryEntry.cpp index 527bb1597f90..da1a18cb953e 100644 --- a/netwerk/base/nsRedirectHistoryEntry.cpp +++ b/netwerk/base/nsRedirectHistoryEntry.cpp @@ -29,13 +29,13 @@ nsRedirectHistoryEntry::GetRemoteAddress(nsACString& result) { NS_IMETHODIMP nsRedirectHistoryEntry::GetReferrerURI(nsIURI** referrer) { - NS_IF_ADDREF(*referrer = mReferrer); + *referrer = do_AddRef(mReferrer).take(); return NS_OK; } NS_IMETHODIMP nsRedirectHistoryEntry::GetPrincipal(nsIPrincipal** principal) { - NS_IF_ADDREF(*principal = mPrincipal); + *principal = do_AddRef(mPrincipal).take(); return NS_OK; } diff --git a/netwerk/base/nsSocketTransport2.cpp b/netwerk/base/nsSocketTransport2.cpp index 441695fed61a..04fff3867858 100644 --- a/netwerk/base/nsSocketTransport2.cpp +++ b/netwerk/base/nsSocketTransport2.cpp @@ -2371,14 +2371,14 @@ nsSocketTransport::Close(nsresult reason) { NS_IMETHODIMP nsSocketTransport::GetSecurityInfo(nsISupports** secinfo) { MutexAutoLock lock(mLock); - NS_IF_ADDREF(*secinfo = mSecInfo); + *secinfo = do_AddRef(mSecInfo).take(); return NS_OK; } NS_IMETHODIMP nsSocketTransport::GetSecurityCallbacks(nsIInterfaceRequestor** callbacks) { MutexAutoLock lock(mLock); - NS_IF_ADDREF(*callbacks = mCallbacks); + *callbacks = do_AddRef(mCallbacks).take(); return NS_OK; } diff --git a/netwerk/base/nsUDPSocket.cpp b/netwerk/base/nsUDPSocket.cpp index 817b2d42f28e..3059eea769a4 100644 --- a/netwerk/base/nsUDPSocket.cpp +++ b/netwerk/base/nsUDPSocket.cpp @@ -205,7 +205,7 @@ nsUDPMessage::GetData(nsACString& aData) { NS_IMETHODIMP nsUDPMessage::GetOutputStream(nsIOutputStream** aOutputStream) { NS_ENSURE_ARG_POINTER(aOutputStream); - NS_IF_ADDREF(*aOutputStream = mOutputStream); + *aOutputStream = do_AddRef(mOutputStream).take(); return NS_OK; } @@ -369,7 +369,7 @@ UDPMessageProxy::GetRawData(JSContext* cx, JS::MutableHandleValue aRawData) { NS_IMETHODIMP UDPMessageProxy::GetOutputStream(nsIOutputStream** aOutputStream) { NS_ENSURE_ARG_POINTER(aOutputStream); - NS_IF_ADDREF(*aOutputStream = mOutputStream); + *aOutputStream = do_AddRef(mOutputStream).take(); return NS_OK; } diff --git a/netwerk/base/nsURLHelper.cpp b/netwerk/base/nsURLHelper.cpp index 3092f264a83c..29b04352ce2f 100644 --- a/netwerk/base/nsURLHelper.cpp +++ b/netwerk/base/nsURLHelper.cpp @@ -35,9 +35,9 @@ using namespace mozilla; //---------------------------------------------------------------------------- static bool gInitialized = false; -static nsIURLParser* gNoAuthURLParser = nullptr; -static nsIURLParser* gAuthURLParser = nullptr; -static nsIURLParser* gStdURLParser = nullptr; +static StaticRefPtr gNoAuthURLParser; +static StaticRefPtr gAuthURLParser; +static StaticRefPtr gStdURLParser; static void InitGlobals() { nsCOMPtr parser; @@ -45,22 +45,19 @@ static void InitGlobals() { parser = do_GetService(NS_NOAUTHURLPARSER_CONTRACTID); NS_ASSERTION(parser, "failed getting 'noauth' url parser"); if (parser) { - gNoAuthURLParser = parser.get(); - NS_ADDREF(gNoAuthURLParser); + gNoAuthURLParser = parser; } parser = do_GetService(NS_AUTHURLPARSER_CONTRACTID); NS_ASSERTION(parser, "failed getting 'auth' url parser"); if (parser) { - gAuthURLParser = parser.get(); - NS_ADDREF(gAuthURLParser); + gAuthURLParser = parser; } parser = do_GetService(NS_STDURLPARSER_CONTRACTID); NS_ASSERTION(parser, "failed getting 'std' url parser"); if (parser) { - gStdURLParser = parser.get(); - NS_ADDREF(gStdURLParser); + gStdURLParser = parser; } gInitialized = true; @@ -68,11 +65,11 @@ static void InitGlobals() { void net_ShutdownURLHelper() { if (gInitialized) { - NS_IF_RELEASE(gNoAuthURLParser); - NS_IF_RELEASE(gAuthURLParser); - NS_IF_RELEASE(gStdURLParser); gInitialized = false; } + gNoAuthURLParser = nullptr; + gAuthURLParser = nullptr; + gStdURLParser = nullptr; } //---------------------------------------------------------------------------- diff --git a/netwerk/cache2/CacheEntry.cpp b/netwerk/cache2/CacheEntry.cpp index 71b329d0426b..320f51484530 100644 --- a/netwerk/cache2/CacheEntry.cpp +++ b/netwerk/cache2/CacheEntry.cpp @@ -1325,7 +1325,7 @@ nsresult CacheEntry::GetSecurityInfo(nsISupports** aSecurityInfo) { { mozilla::MutexAutoLock lock(mLock); if (mSecurityInfoLoaded) { - NS_IF_ADDREF(*aSecurityInfo = mSecurityInfo); + *aSecurityInfo = do_AddRef(mSecurityInfo).take(); return NS_OK; } } @@ -1350,7 +1350,7 @@ nsresult CacheEntry::GetSecurityInfo(nsISupports** aSecurityInfo) { mSecurityInfo.swap(secInfo); mSecurityInfoLoaded = true; - NS_IF_ADDREF(*aSecurityInfo = mSecurityInfo); + *aSecurityInfo = do_AddRef(mSecurityInfo).take(); } return NS_OK; diff --git a/netwerk/protocol/file/nsFileChannel.cpp b/netwerk/protocol/file/nsFileChannel.cpp index 4c754ce3c353..499640426ee6 100644 --- a/netwerk/protocol/file/nsFileChannel.cpp +++ b/netwerk/protocol/file/nsFileChannel.cpp @@ -513,6 +513,6 @@ nsFileChannel::SetUploadStream(nsIInputStream* stream, NS_IMETHODIMP nsFileChannel::GetUploadStream(nsIInputStream** result) { - NS_IF_ADDREF(*result = mUploadStream); + *result = do_AddRef(mUploadStream).take(); return NS_OK; } diff --git a/netwerk/protocol/gio/nsGIOProtocolHandler.cpp b/netwerk/protocol/gio/nsGIOProtocolHandler.cpp index 8341f609c8cd..ac4b18ea191a 100644 --- a/netwerk/protocol/gio/nsGIOProtocolHandler.cpp +++ b/netwerk/protocol/gio/nsGIOProtocolHandler.cpp @@ -164,18 +164,7 @@ class nsGIOInputStream final : public nsIInputStream { NS_DECL_THREADSAFE_ISUPPORTS NS_DECL_NSIINPUTSTREAM - explicit nsGIOInputStream(const nsCString& uriSpec) - : mSpec(uriSpec), - mChannel(nullptr), - mHandle(nullptr), - mStream(nullptr), - mBytesRemaining(UINT64_MAX), - mStatus(NS_OK), - mDirList(nullptr), - mDirListPtr(nullptr), - mDirBufCursor(0), - mDirOpen(false), - mMonitorMountInProgress("GIOInputStream::MountFinished") {} + explicit nsGIOInputStream(const nsCString& uriSpec) : mSpec(uriSpec) {} void SetChannel(nsIChannel* channel) { // We need to hold an owning reference to our channel. This is done @@ -191,7 +180,7 @@ class nsGIOInputStream final : public nsIInputStream { // cycle since the channel likely owns this stream. This reference // cycle is broken in our Close method. - NS_ADDREF(mChannel = channel); + mChannel = do_AddRef(channel).take(); } void SetMountResult(MountOperationResult result, gint error_code); @@ -204,19 +193,19 @@ class nsGIOInputStream final : public nsIInputStream { nsresult DoOpenDirectory(); nsresult DoOpenFile(GFileInfo* info); nsCString mSpec; - nsIChannel* mChannel; // manually refcounted - GFile* mHandle; - GFileInputStream* mStream; - uint64_t mBytesRemaining; - nsresult mStatus; - GList* mDirList; - GList* mDirListPtr; + nsIChannel* mChannel{nullptr}; // manually refcounted + GFile* mHandle{nullptr}; + GFileInputStream* mStream{nullptr}; + uint64_t mBytesRemaining{UINT64_MAX}; + nsresult mStatus{NS_OK}; + GList* mDirList{nullptr}; + GList* mDirListPtr{nullptr}; nsCString mDirBuf; - uint32_t mDirBufCursor; - bool mDirOpen; + uint32_t mDirBufCursor{0}; + bool mDirOpen{false}; MountOperationResult mMountRes = MountOperationResult::MOUNT_OPERATION_SUCCESS; - mozilla::Monitor mMonitorMountInProgress; + mozilla::Monitor mMonitorMountInProgress{"GIOInputStream::MountFinished"}; gint mMountErrorCode{}; }; diff --git a/netwerk/protocol/http/ClassifierDummyChannel.cpp b/netwerk/protocol/http/ClassifierDummyChannel.cpp index a87af634a6f7..3c15baf83c87 100644 --- a/netwerk/protocol/http/ClassifierDummyChannel.cpp +++ b/netwerk/protocol/http/ClassifierDummyChannel.cpp @@ -117,7 +117,7 @@ void ClassifierDummyChannel::AddClassificationFlags( NS_IMETHODIMP ClassifierDummyChannel::GetOriginalURI(nsIURI** aOriginalURI) { - NS_IF_ADDREF(*aOriginalURI = mURI); + *aOriginalURI = do_AddRef(mURI).take(); return NS_OK; } @@ -129,7 +129,7 @@ ClassifierDummyChannel::SetOriginalURI(nsIURI* aOriginalURI) { NS_IMETHODIMP ClassifierDummyChannel::GetURI(nsIURI** aURI) { - NS_IF_ADDREF(*aURI = mURI); + *aURI = do_AddRef(mURI).take(); return NS_OK; } @@ -239,7 +239,7 @@ ClassifierDummyChannel::GetContentDispositionHeader( NS_IMETHODIMP ClassifierDummyChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) { - NS_IF_ADDREF(*aLoadInfo = mLoadInfo); + *aLoadInfo = do_AddRef(mLoadInfo).take(); return NS_OK; } diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp index 0a002f6def9c..c5411fe21d6d 100644 --- a/netwerk/protocol/http/HttpBaseChannel.cpp +++ b/netwerk/protocol/http/HttpBaseChannel.cpp @@ -434,8 +434,7 @@ HttpBaseChannel::GetStatus(nsresult* aStatus) { NS_IMETHODIMP HttpBaseChannel::GetLoadGroup(nsILoadGroup** aLoadGroup) { NS_ENSURE_ARG_POINTER(aLoadGroup); - *aLoadGroup = mLoadGroup; - NS_IF_ADDREF(*aLoadGroup); + *aLoadGroup = do_AddRef(mLoadGroup).take(); return NS_OK; } @@ -542,8 +541,7 @@ HttpBaseChannel::GetURI(nsIURI** aURI) { NS_IMETHODIMP HttpBaseChannel::GetOwner(nsISupports** aOwner) { NS_ENSURE_ARG_POINTER(aOwner); - *aOwner = mOwner; - NS_IF_ADDREF(*aOwner); + *aOwner = do_AddRef(mOwner).take(); return NS_OK; } @@ -562,7 +560,7 @@ HttpBaseChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) { NS_IMETHODIMP HttpBaseChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) { - NS_IF_ADDREF(*aLoadInfo = mLoadInfo); + *aLoadInfo = do_AddRef(mLoadInfo).take(); return NS_OK; } @@ -573,8 +571,7 @@ HttpBaseChannel::GetIsDocument(bool* aIsDocument) { NS_IMETHODIMP HttpBaseChannel::GetNotificationCallbacks(nsIInterfaceRequestor** aCallbacks) { - *aCallbacks = mCallbacks; - NS_IF_ADDREF(*aCallbacks); + *aCallbacks = do_AddRef(mCallbacks).take(); return NS_OK; } @@ -797,8 +794,7 @@ HttpBaseChannel::Open(nsIInputStream** aStream) { NS_IMETHODIMP HttpBaseChannel::GetUploadStream(nsIInputStream** stream) { NS_ENSURE_ARG_POINTER(stream); - *stream = mUploadStream; - NS_IF_ADDREF(*stream); + *stream = do_AddRef(mUploadStream).take(); return NS_OK; } @@ -1280,8 +1276,7 @@ HttpBaseChannel::DoApplyContentConversions(nsIStreamListener* aNextListener, if (val) LOG(("Unknown content encoding '%s', ignoring\n", val)); } } - *aNewNextListener = nextListener; - NS_IF_ADDREF(*aNewNextListener); + *aNewNextListener = do_AddRef(nextListener).take(); return NS_OK; } @@ -2124,15 +2119,14 @@ nsresult HttpBaseChannel::GetTopWindowURI(nsIURI* aURIBeingLoaded, #endif } } - NS_IF_ADDREF(*aTopWindowURI = mTopWindowURI); + *aTopWindowURI = do_AddRef(mTopWindowURI).take(); return rv; } NS_IMETHODIMP HttpBaseChannel::GetDocumentURI(nsIURI** aDocumentURI) { NS_ENSURE_ARG_POINTER(aDocumentURI); - *aDocumentURI = mDocumentURI; - NS_IF_ADDREF(*aDocumentURI); + *aDocumentURI = do_AddRef(mDocumentURI).take(); return NS_OK; } @@ -3414,7 +3408,7 @@ HttpBaseChannel::SetTlsFlags(uint32_t aTlsFlags) { NS_IMETHODIMP HttpBaseChannel::GetApiRedirectToURI(nsIURI** aResult) { NS_ENSURE_ARG_POINTER(aResult); - NS_IF_ADDREF(*aResult = mAPIRedirectToURI); + *aResult = do_AddRef(mAPIRedirectToURI).take(); return NS_OK; } diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp index f62333e80eee..c793e39da2ea 100644 --- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -1886,7 +1886,7 @@ HttpChannelChild::Resume() { NS_IMETHODIMP HttpChannelChild::GetSecurityInfo(nsISupports** aSecurityInfo) { NS_ENSURE_ARG_POINTER(aSecurityInfo); - NS_IF_ADDREF(*aSecurityInfo = mSecurityInfo); + *aSecurityInfo = do_AddRef(mSecurityInfo).take(); return NS_OK; } diff --git a/netwerk/protocol/http/HttpConnectionBase.h b/netwerk/protocol/http/HttpConnectionBase.h index b75db10bb89d..6235b7af5e92 100644 --- a/netwerk/protocol/http/HttpConnectionBase.h +++ b/netwerk/protocol/http/HttpConnectionBase.h @@ -105,7 +105,7 @@ class HttpConnectionBase : public nsSupportsWeakReference { virtual bool CanAcceptWebsocket() { return false; } void GetConnectionInfo(nsHttpConnectionInfo** ci) { - NS_IF_ADDREF(*ci = mConnInfo); + *ci = do_AddRef(mConnInfo).take(); } virtual void GetSecurityInfo(nsISupports** result) = 0; diff --git a/netwerk/protocol/http/NullHttpChannel.cpp b/netwerk/protocol/http/NullHttpChannel.cpp index f2af466aa570..bc0d13616ccf 100644 --- a/netwerk/protocol/http/NullHttpChannel.cpp +++ b/netwerk/protocol/http/NullHttpChannel.cpp @@ -292,7 +292,7 @@ NullHttpChannel::GetEncodedBodySize(uint64_t* aEncodedBodySize) { NS_IMETHODIMP NullHttpChannel::GetOriginalURI(nsIURI** aOriginalURI) { - NS_IF_ADDREF(*aOriginalURI = mOriginalURI); + *aOriginalURI = do_AddRef(mOriginalURI).take(); return NS_OK; } @@ -304,7 +304,7 @@ NullHttpChannel::SetOriginalURI(nsIURI* aOriginalURI) { NS_IMETHODIMP NullHttpChannel::GetURI(nsIURI** aURI) { - NS_IF_ADDREF(*aURI = mURI); + *aURI = do_AddRef(mURI).take(); return NS_OK; } diff --git a/netwerk/protocol/http/TRRServiceChannel.cpp b/netwerk/protocol/http/TRRServiceChannel.cpp index ba202fef3df8..b600251289f8 100644 --- a/netwerk/protocol/http/TRRServiceChannel.cpp +++ b/netwerk/protocol/http/TRRServiceChannel.cpp @@ -162,8 +162,7 @@ TRRServiceChannel::Resume() { NS_IMETHODIMP TRRServiceChannel::GetSecurityInfo(nsISupports** securityInfo) { NS_ENSURE_ARG_POINTER(securityInfo); - *securityInfo = mSecurityInfo; - NS_IF_ADDREF(*securityInfo); + *securityInfo = do_AddRef(mSecurityInfo).take(); return NS_OK; } @@ -1339,11 +1338,10 @@ void TRRServiceChannel::DoAsyncAbort(nsresult aStatus) { NS_IMETHODIMP TRRServiceChannel::GetProxyInfo(nsIProxyInfo** result) { if (!mConnectionInfo) { - *result = mProxyInfo; + *result = do_AddRef(mProxyInfo).take(); } else { - *result = mConnectionInfo->ProxyInfo(); + *result = do_AddRef(mConnectionInfo->ProxyInfo()).take(); } - NS_IF_ADDREF(*result); return NS_OK; } diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp index ef696934a8d2..21cc66fe979f 100644 --- a/netwerk/protocol/http/nsHttpChannel.cpp +++ b/netwerk/protocol/http/nsHttpChannel.cpp @@ -5733,8 +5733,7 @@ nsHttpChannel::Resume() { NS_IMETHODIMP nsHttpChannel::GetSecurityInfo(nsISupports** securityInfo) { NS_ENSURE_ARG_POINTER(securityInfo); - *securityInfo = mSecurityInfo; - NS_IF_ADDREF(*securityInfo); + *securityInfo = do_AddRef(mSecurityInfo).take(); return NS_OK; } @@ -6552,11 +6551,10 @@ nsHttpChannel::OnProxyAvailable(nsICancelable* request, nsIChannel* channel, NS_IMETHODIMP nsHttpChannel::GetProxyInfo(nsIProxyInfo** result) { if (!mConnectionInfo) { - *result = mProxyInfo; + *result = do_AddRef(mProxyInfo).take(); } else { - *result = mConnectionInfo->ProxyInfo(); + *result = do_AddRef(mConnectionInfo->ProxyInfo()).take(); } - NS_IF_ADDREF(*result); return NS_OK; } diff --git a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp index 9958933d5ccf..fb754a2ee56a 100644 --- a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp +++ b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp @@ -659,8 +659,7 @@ nsViewSourceChannel::GetBaseURI(nsIURI** aBaseURI) { return isc->GetBaseURI(aBaseURI); } } - *aBaseURI = mBaseURI; - NS_IF_ADDREF(*aBaseURI); + *aBaseURI = do_AddRef(mBaseURI).take(); return NS_OK; } diff --git a/netwerk/protocol/websocket/BaseWebSocketChannel.cpp b/netwerk/protocol/websocket/BaseWebSocketChannel.cpp index f8b6708ab231..ddc55246909a 100644 --- a/netwerk/protocol/websocket/BaseWebSocketChannel.cpp +++ b/netwerk/protocol/websocket/BaseWebSocketChannel.cpp @@ -94,7 +94,7 @@ NS_IMETHODIMP BaseWebSocketChannel::GetNotificationCallbacks( nsIInterfaceRequestor** aNotificationCallbacks) { LOG(("BaseWebSocketChannel::GetNotificationCallbacks() %p\n", this)); - NS_IF_ADDREF(*aNotificationCallbacks = mCallbacks); + *aNotificationCallbacks = do_AddRef(mCallbacks).take(); return NS_OK; } @@ -109,7 +109,7 @@ BaseWebSocketChannel::SetNotificationCallbacks( NS_IMETHODIMP BaseWebSocketChannel::GetLoadGroup(nsILoadGroup** aLoadGroup) { LOG(("BaseWebSocketChannel::GetLoadGroup() %p\n", this)); - NS_IF_ADDREF(*aLoadGroup = mLoadGroup); + *aLoadGroup = do_AddRef(mLoadGroup).take(); return NS_OK; } @@ -129,7 +129,7 @@ BaseWebSocketChannel::SetLoadInfo(nsILoadInfo* aLoadInfo) { NS_IMETHODIMP BaseWebSocketChannel::GetLoadInfo(nsILoadInfo** aLoadInfo) { - NS_IF_ADDREF(*aLoadInfo = mLoadInfo); + *aLoadInfo = do_AddRef(mLoadInfo).take(); return NS_OK; } diff --git a/netwerk/streamconv/converters/nsDirIndexParser.cpp b/netwerk/streamconv/converters/nsDirIndexParser.cpp index c2db8c771c9a..a1d9e0a26f0a 100644 --- a/netwerk/streamconv/converters/nsDirIndexParser.cpp +++ b/netwerk/streamconv/converters/nsDirIndexParser.cpp @@ -115,7 +115,7 @@ nsDirIndexParser::SetListener(nsIDirIndexListener* aListener) { NS_IMETHODIMP nsDirIndexParser::GetListener(nsIDirIndexListener** aListener) { - NS_IF_ADDREF(*aListener = mListener.get()); + *aListener = do_AddRef(mListener).take(); return NS_OK; } diff --git a/netwerk/streamconv/converters/nsMultiMixedConv.cpp b/netwerk/streamconv/converters/nsMultiMixedConv.cpp index 320e771d3848..277d78a4e35b 100644 --- a/netwerk/streamconv/converters/nsMultiMixedConv.cpp +++ b/netwerk/streamconv/converters/nsMultiMixedConv.cpp @@ -212,9 +212,7 @@ nsPartChannel::GetIsDocument(bool* aIsDocument) { NS_IMETHODIMP nsPartChannel::GetLoadGroup(nsILoadGroup** aLoadGroup) { - *aLoadGroup = mLoadGroup; - NS_IF_ADDREF(*aLoadGroup); - + *aLoadGroup = do_AddRef(mLoadGroup).take(); return NS_OK; } @@ -375,8 +373,7 @@ NS_IMETHODIMP nsPartChannel::GetBaseChannel(nsIChannel** aReturn) { NS_ENSURE_ARG_POINTER(aReturn); - *aReturn = mMultipartChannel; - NS_IF_ADDREF(*aReturn); + *aReturn = do_AddRef(mMultipartChannel).take(); return NS_OK; } From 0ebf02902612acc315dc05689f435b85ff4cc35b Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Tue, 19 Oct 2021 13:44:25 +0000 Subject: [PATCH 13/66] Bug 1735299 - Remove last use of unnammed NS_ReleaseOnMainThread r=extension-reviewers,rpl,nhnt11 Differential Revision: https://phabricator.services.mozilla.com/D128177 --- .../extensions/webidl-api/ExtensionEventListener.h | 3 ++- xpcom/threads/nsProxyRelease.h | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/toolkit/components/extensions/webidl-api/ExtensionEventListener.h b/toolkit/components/extensions/webidl-api/ExtensionEventListener.h index 572162536620..4cc95777bce9 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionEventListener.h +++ b/toolkit/components/extensions/webidl-api/ExtensionEventListener.h @@ -155,7 +155,8 @@ class ExtensionListenerCallWorkerRunnable : public dom::WorkerRunnable { private: ~ExtensionListenerCallWorkerRunnable() { - NS_ReleaseOnMainThread(mPromiseResult.forget()); + NS_ReleaseOnMainThread("~ExtensionListenerCallWorkerRunnable", + mPromiseResult.forget()); ReleaseArgsHolder(); mListener = nullptr; } diff --git a/xpcom/threads/nsProxyRelease.h b/xpcom/threads/nsProxyRelease.h index c27722f6264c..69114fbce353 100644 --- a/xpcom/threads/nsProxyRelease.h +++ b/xpcom/threads/nsProxyRelease.h @@ -185,13 +185,6 @@ inline NS_HIDDEN_(void) NS_ProxyRelease(aName, target, doomed.forget(), aAlwaysProxy); } -template -inline NS_HIDDEN_(void) NS_ReleaseOnMainThread(already_AddRefed aDoomed, - bool aAlwaysProxy = false) { - NS_ReleaseOnMainThread("NS_ReleaseOnMainThread", std::move(aDoomed), - aAlwaysProxy); -} - /** * Class to safely handle main-thread-only pointers off the main thread. * From 182d9a39b104e82d431e924c736d42fdd551c3fe Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Tue, 19 Oct 2021 13:44:25 +0000 Subject: [PATCH 14/66] Bug 1735299 - We don't need to proxy release of URIs r=nhnt11 Previously nsIURIs were not thread safe. Now they are, so releasing them on any thread is fine. Differential Revision: https://phabricator.services.mozilla.com/D128178 --- netwerk/protocol/http/ClassifierDummyChannel.cpp | 6 ------ netwerk/protocol/http/ClassifierDummyChannel.h | 2 +- netwerk/url-classifier/AsyncUrlChannelClassifier.cpp | 4 +--- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/netwerk/protocol/http/ClassifierDummyChannel.cpp b/netwerk/protocol/http/ClassifierDummyChannel.cpp index 3c15baf83c87..59f8645df1bb 100644 --- a/netwerk/protocol/http/ClassifierDummyChannel.cpp +++ b/netwerk/protocol/http/ClassifierDummyChannel.cpp @@ -96,12 +96,6 @@ ClassifierDummyChannel::ClassifierDummyChannel(nsIURI* aURI, SetLoadInfo(aLoadInfo); } -ClassifierDummyChannel::~ClassifierDummyChannel() { - NS_ReleaseOnMainThread("ClassifierDummyChannel::mURI", mURI.forget()); - NS_ReleaseOnMainThread("ClassifierDummyChannel::mTopWindowURI", - mTopWindowURI.forget()); -} - void ClassifierDummyChannel::AddClassificationFlags( uint32_t aClassificationFlags, bool aThirdParty) { if (aThirdParty) { diff --git a/netwerk/protocol/http/ClassifierDummyChannel.h b/netwerk/protocol/http/ClassifierDummyChannel.h index ed97cddf0f56..81b8187d3ad1 100644 --- a/netwerk/protocol/http/ClassifierDummyChannel.h +++ b/netwerk/protocol/http/ClassifierDummyChannel.h @@ -71,7 +71,7 @@ class ClassifierDummyChannel final : public nsIChannel, void AddClassificationFlags(uint32_t aClassificationFlags, bool aThirdParty); private: - ~ClassifierDummyChannel(); + ~ClassifierDummyChannel() = default; nsCOMPtr mLoadInfo; nsCOMPtr mURI; diff --git a/netwerk/url-classifier/AsyncUrlChannelClassifier.cpp b/netwerk/url-classifier/AsyncUrlChannelClassifier.cpp index 254d2bfb0757..e89960a50992 100644 --- a/netwerk/url-classifier/AsyncUrlChannelClassifier.cpp +++ b/netwerk/url-classifier/AsyncUrlChannelClassifier.cpp @@ -76,7 +76,7 @@ class URIData { private: URIData(); - ~URIData(); + ~URIData() = default; nsCOMPtr mURI; nsCString mURISpec; @@ -117,8 +117,6 @@ nsresult URIData::Create(nsIURI* aURI, nsIURI* aInnermostURI, URIData::URIData() { MOZ_ASSERT(NS_IsMainThread()); } -URIData::~URIData() { NS_ReleaseOnMainThread("URIData:mURI", mURI.forget()); } - bool URIData::IsEqual(nsIURI* aURI) const { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aURI); From edd2c5903f5b9f2cc82d298933da1c5bd7d1d810 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:21:53 +0000 Subject: [PATCH 15/66] Bug 1588830 - Use TraceWeakEdge for tracing WeakMap keys r=sfink This refactors some of the code to remove indirection from Zone methods to WeakMapBase where it's simpler just to implement the method on Zone. Differential Revision: https://phabricator.services.mozilla.com/D128352 --- js/src/gc/Compacting.cpp | 16 ++++------------ js/src/gc/Sweeping.cpp | 3 ++- js/src/gc/WeakMap-inl.h | 6 +++--- js/src/gc/WeakMap.cpp | 20 ++++++++++---------- js/src/gc/WeakMap.h | 11 ++--------- js/src/gc/Zone.cpp | 5 ----- js/src/gc/Zone.h | 8 +++++++- 7 files changed, 28 insertions(+), 41 deletions(-) diff --git a/js/src/gc/Compacting.cpp b/js/src/gc/Compacting.cpp index 34757052aef7..61080c015d18 100644 --- a/js/src/gc/Compacting.cpp +++ b/js/src/gc/Compacting.cpp @@ -459,11 +459,10 @@ void GCRuntime::sweepZoneAfterCompacting(MovingTracer* trc, Zone* zone) { traceWeakFinalizationRegistryEdges(trc, zone); zone->weakRefMap().sweep(&storeBuffer()); - { - zone->sweepWeakMaps(); - for (auto* cache : zone->weakCaches()) { - cache->sweep(nullptr); - } + zone->traceWeakMaps(trc); + + for (auto* cache : zone->weakCaches()) { + cache->sweep(nullptr); } if (jit::JitZone* jitZone = zone->jitZone()) { @@ -797,13 +796,6 @@ void GCRuntime::updateZonePointersToRelocatedCells(Zone* zone) { // as much as possible. updateAllCellPointers(&trc, zone); - // Mark roots to update them. - { - gcstats::AutoPhase ap(stats(), gcstats::PhaseKind::MARK_ROOTS); - - WeakMapBase::traceZone(zone, &trc); - } - // Sweep everything to fix up weak pointers. sweepZoneAfterCompacting(&trc, zone); diff --git a/js/src/gc/Sweeping.cpp b/js/src/gc/Sweeping.cpp index 25f6bd8f3a07..5c4c0688b03b 100644 --- a/js/src/gc/Sweeping.cpp +++ b/js/src/gc/Sweeping.cpp @@ -1237,6 +1237,7 @@ void GCRuntime::sweepCompressionTasks() { } void GCRuntime::sweepWeakMaps() { + SweepingTracer trc(rt); AutoSetThreadIsSweeping threadIsSweeping; // This may touch any zone. for (SweepGroupZonesIter zone(this); !zone.done(); zone.next()) { /* No need to look up any more weakmap keys from this sweep group. */ @@ -1248,7 +1249,7 @@ void GCRuntime::sweepWeakMaps() { // Lock the storebuffer since this may access it when rehashing or resizing // the tables. AutoLockStoreBuffer lock(&storeBuffer()); - zone->sweepWeakMaps(); + zone->sweepWeakMaps(&trc); } } diff --git a/js/src/gc/WeakMap-inl.h b/js/src/gc/WeakMap-inl.h index b640270c1bf6..e70093493742 100644 --- a/js/src/gc/WeakMap-inl.h +++ b/js/src/gc/WeakMap-inl.h @@ -336,10 +336,10 @@ bool WeakMap::markEntries(GCMarker* marker) { } template -void WeakMap::sweep() { - /* Remove all entries whose keys remain unmarked. */ +void WeakMap::traceWeakEdges(JSTracer* trc) { + // Remove all entries whose keys remain unmarked. for (Enum e(*this); !e.empty(); e.popFront()) { - if (gc::IsAboutToBeFinalized(&e.front().mutableKey())) { + if (!TraceWeakEdge(trc, &e.front().mutableKey(), "WeakMap key")) { e.removeFront(); } } diff --git a/js/src/gc/WeakMap.cpp b/js/src/gc/WeakMap.cpp index e9be358ad180..afe350c57b41 100644 --- a/js/src/gc/WeakMap.cpp +++ b/js/src/gc/WeakMap.cpp @@ -41,11 +41,11 @@ void WeakMapBase::unmarkZone(JS::Zone* zone) { } } -void WeakMapBase::traceZone(JS::Zone* zone, JSTracer* tracer) { - MOZ_ASSERT(tracer->weakMapAction() != JS::WeakMapTraceAction::Skip); - for (WeakMapBase* m : zone->gcWeakMapList()) { - m->trace(tracer); - TraceNullableEdge(tracer, &m->memberOf, "memberOf"); +void Zone::traceWeakMaps(JSTracer* trc) { + MOZ_ASSERT(trc->weakMapAction() != JS::WeakMapTraceAction::Skip); + for (WeakMapBase* m : gcWeakMapList()) { + m->trace(trc); + TraceNullableEdge(trc, &m->memberOf, "memberOf"); } } @@ -84,20 +84,20 @@ bool WeakMapBase::findSweepGroupEdgesForZone(JS::Zone* zone) { return true; } -void WeakMapBase::sweepZone(JS::Zone* zone) { - for (WeakMapBase* m = zone->gcWeakMapList().getFirst(); m;) { +void Zone::sweepWeakMaps(JSTracer* trc) { + for (WeakMapBase* m = gcWeakMapList().getFirst(); m;) { WeakMapBase* next = m->getNext(); if (m->mapColor) { - m->sweep(); + m->traceWeakEdges(trc); } else { m->clearAndCompact(); - m->removeFrom(zone->gcWeakMapList()); + m->removeFrom(gcWeakMapList()); } m = next; } #ifdef DEBUG - for (WeakMapBase* m : zone->gcWeakMapList()) { + for (WeakMapBase* m : gcWeakMapList()) { MOZ_ASSERT(m->isInList() && m->mapColor); } #endif diff --git a/js/src/gc/WeakMap.h b/js/src/gc/WeakMap.h index 9db768cb9f53..b004983aca89 100644 --- a/js/src/gc/WeakMap.h +++ b/js/src/gc/WeakMap.h @@ -107,9 +107,6 @@ class WeakMapBase : public mozilla::LinkedListElement { // Unmark all weak maps in a zone. static void unmarkZone(JS::Zone* zone); - // Trace all the weakmaps in a zone. - static void traceZone(JS::Zone* zone, JSTracer* tracer); - // Check all weak maps in a zone that have been marked as live in this garbage // collection, and mark the values of all entries that have become strong // references to them. Return true if we marked any new values, indicating @@ -120,10 +117,6 @@ class WeakMapBase : public mozilla::LinkedListElement { // Add zone edges for weakmaps with key delegates in a different zone. [[nodiscard]] static bool findSweepGroupEdgesForZone(JS::Zone* zone); - // Sweep the weak maps in a zone, removing dead weak maps and removing - // entries of live weak maps whose keys are dead. - static void sweepZone(JS::Zone* zone); - // Sweep the marked weak maps in a zone, updating moved keys. static void sweepZoneAfterMinorGC(JS::Zone* zone); @@ -146,7 +139,7 @@ class WeakMapBase : public mozilla::LinkedListElement { // override these with definitions appropriate for their Key and Value types. virtual void trace(JSTracer* tracer) = 0; virtual bool findSweepGroupEdges() = 0; - virtual void sweep() = 0; + virtual void traceWeakEdges(JSTracer* trc) = 0; virtual void traceMappings(WeakMapTracer* tracer) = 0; virtual void clearAndCompact() = 0; @@ -316,7 +309,7 @@ class WeakMap JS::ExposeObjectToActiveJS(obj); } - void sweep() override; + void traceWeakEdges(JSTracer* trc) override; void clearAndCompact() override { Base::clear(); diff --git a/js/src/gc/Zone.cpp b/js/src/gc/Zone.cpp index f0cf779e9603..e97d1486abbe 100644 --- a/js/src/gc/Zone.cpp +++ b/js/src/gc/Zone.cpp @@ -392,11 +392,6 @@ void Zone::checkStringWrappersAfterMovingGC() { } #endif -void Zone::sweepWeakMaps() { - /* Finalize unreachable (key,value) pairs in all weak maps. */ - WeakMapBase::sweepZone(this); -} - void Zone::discardJitCode(JSFreeOp* fop, const DiscardOptions& options) { if (!jitZone()) { return; diff --git a/js/src/gc/Zone.h b/js/src/gc/Zone.h index 0486220d97f0..e512707b874c 100644 --- a/js/src/gc/Zone.h +++ b/js/src/gc/Zone.h @@ -480,9 +480,15 @@ class Zone : public js::ZoneAllocator, public js::gc::GraphNodeBase { void sweepAfterMinorGC(JSTracer* trc); void sweepUniqueIds(); - void sweepWeakMaps(); void sweepCompartments(JSFreeOp* fop, bool keepAtleastOne, bool lastGC); + // Remove dead weak maps from gcWeakMapList_ and remove entries from the + // remaining weak maps whose keys are dead. + void sweepWeakMaps(JSTracer* trc); + + // Trace all weak maps in this zone. Used to update edges after a moving GC. + void traceWeakMaps(JSTracer* trc); + js::gc::UniqueIdMap& uniqueIds() { return uniqueIds_.ref(); } void notifyObservingDebuggers(); From 26baa599bc98fc46fe483d9b822f1695226b3e18 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:43:30 +0000 Subject: [PATCH 16/66] Bug 1736397 - Part 1: Change the WeakCache interface to traceWeak(), but still call sweep() internally r=sfink Differential Revision: https://phabricator.services.mozilla.com/D128856 --- js/public/GCHashTable.h | 4 ++-- js/public/SweepingAPI.h | 4 ++-- js/src/gc/Compacting.cpp | 6 +++--- js/src/gc/Sweeping.cpp | 10 +++++++--- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/js/public/GCHashTable.h b/js/public/GCHashTable.h index 29b5394f8148..3eff02f4dafd 100644 --- a/js/public/GCHashTable.h +++ b/js/public/GCHashTable.h @@ -426,7 +426,7 @@ class WeakCache> bool empty() override { return map.empty(); } - size_t sweep(js::gc::StoreBuffer* sbToLock) override { + size_t traceWeak(JSTracer* trc, js::gc::StoreBuffer* sbToLock) override { size_t steps = map.count(); // Create an Enum and sweep the table entries. @@ -622,7 +622,7 @@ class WeakCache> set(std::forward(args)...), needsBarrier(false) {} - size_t sweep(js::gc::StoreBuffer* sbToLock) override { + size_t traceWeak(JSTracer* trc, js::gc::StoreBuffer* sbToLock) override { size_t steps = set.count(); // Create an Enum and sweep the table entries. It's not necessary to take diff --git a/js/public/SweepingAPI.h b/js/public/SweepingAPI.h index 041c73b64b2e..f0b77d2b61a9 100644 --- a/js/public/SweepingAPI.h +++ b/js/public/SweepingAPI.h @@ -60,7 +60,7 @@ class WeakCacheBase : public mozilla::LinkedListElement { WeakCacheBase(WeakCacheBase&& other) = default; virtual ~WeakCacheBase() = default; - virtual size_t sweep(js::gc::StoreBuffer* sbToLock) = 0; + virtual size_t traceWeak(JSTracer* trc, js::gc::StoreBuffer* sbToLock) = 0; // Sweeping will be skipped if the cache is empty already. virtual bool empty() = 0; @@ -98,7 +98,7 @@ class WeakCache : protected detail::WeakCacheBase, const T& get() const { return cache; } T& get() { return cache; } - size_t sweep(js::gc::StoreBuffer* sbToLock) override { + size_t traceWeak(JSTracer* trc, js::gc::StoreBuffer* sbToLock) override { // Take the store buffer lock in case sweeping triggers any generational // post barriers. This is not always required and WeakCache specializations // may delay or skip taking the lock as appropriate. diff --git a/js/src/gc/Compacting.cpp b/js/src/gc/Compacting.cpp index 61080c015d18..9843e3b3374b 100644 --- a/js/src/gc/Compacting.cpp +++ b/js/src/gc/Compacting.cpp @@ -462,7 +462,7 @@ void GCRuntime::sweepZoneAfterCompacting(MovingTracer* trc, Zone* zone) { zone->traceWeakMaps(trc); for (auto* cache : zone->weakCaches()) { - cache->sweep(nullptr); + cache->traceWeak(trc, nullptr); } if (jit::JitZone* jitZone = zone->jitZone()) { @@ -655,7 +655,7 @@ void GCRuntime::updateRttValueObjects(MovingTracer* trc, Zone* zone) { // need to be updated. Do not update any non-reserved slots, since they might // point back to unprocessed descriptor objects. - zone->rttValueObjects().sweep(nullptr); + zone->rttValueObjects().traceWeak(trc, nullptr); for (auto r = zone->rttValueObjects().all(); !r.empty(); r.popFront()) { RttValue* obj = &MaybeForwardedObjectAs(r.front()); @@ -837,7 +837,7 @@ void GCRuntime::updateRuntimePointersToRelocatedCells(AutoGCSession& session) { // Sweep everything to fix up weak pointers. jit::JitRuntime::TraceWeakJitcodeGlobalTable(rt, &trc); for (JS::detail::WeakCacheBase* cache : rt->weakCaches()) { - cache->sweep(nullptr); + cache->traceWeak(&trc, nullptr); } // Type inference may put more blocks here to free. diff --git a/js/src/gc/Sweeping.cpp b/js/src/gc/Sweeping.cpp index 5c4c0688b03b..dffdc77a791c 100644 --- a/js/src/gc/Sweeping.cpp +++ b/js/src/gc/Sweeping.cpp @@ -1177,7 +1177,8 @@ class ImmediateSweepWeakCacheTask : public GCParallelTask { void run(AutoLockHelperThreadState& lock) override { AutoUnlockHelperThreadState unlock(lock); AutoSetThreadIsSweeping threadIsSweeping(zone); - cache.sweep(&gc->storeBuffer()); + SweepingTracer trc(gc->rt); + cache.traceWeak(&trc, &gc->storeBuffer()); } }; @@ -1431,11 +1432,12 @@ static bool PrepareWeakCacheTasks(JSRuntime* rt, static void SweepAllWeakCachesOnMainThread(JSRuntime* rt) { // If we ran out of memory, do all the work on the main thread. gcstats::AutoPhase ap(rt->gc.stats(), gcstats::PhaseKind::SWEEP_WEAK_CACHES); + SweepingTracer trc(rt); IterateWeakCaches(rt, [&](JS::detail::WeakCacheBase* cache, Zone* zone) { if (cache->needsIncrementalBarrier()) { cache->setNeedsIncrementalBarrier(false); } - cache->sweep(&rt->gc.storeBuffer()); + cache->traceWeak(&trc, &rt->gc.storeBuffer()); return true; }); } @@ -1844,7 +1846,9 @@ static size_t IncrementalSweepWeakCache(GCRuntime* gc, JS::detail::WeakCacheBase* cache = item.cache; MOZ_ASSERT(cache->needsIncrementalBarrier()); - size_t steps = cache->sweep(&gc->storeBuffer()); + + SweepingTracer trc(gc->rt); + size_t steps = cache->traceWeak(&trc, &gc->storeBuffer()); cache->setNeedsIncrementalBarrier(false); return steps; From 9f99318bb94c14722943d08752b75ce569ab012d Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:43:30 +0000 Subject: [PATCH 17/66] Bug 1736397 - Part 2: Give hash table traceWeak methods a boolean return value r=sfink Depends on D128856 Differential Revision: https://phabricator.services.mozilla.com/D128857 --- js/public/GCHashTable.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/js/public/GCHashTable.h b/js/public/GCHashTable.h index 3eff02f4dafd..4ef47d8f0e70 100644 --- a/js/public/GCHashTable.h +++ b/js/public/GCHashTable.h @@ -92,13 +92,14 @@ class GCHashMap : public js::HashMap { } } - void traceWeak(JSTracer* trc) { + bool traceWeak(JSTracer* trc) { for (typename Base::Enum e(*this); !e.empty(); e.popFront()) { if (!MapSweepPolicy::traceWeak(trc, &e.front().mutableKey(), &e.front().value())) { e.removeFront(); } } + return !this->empty(); } // GCHashMap is movable @@ -149,7 +150,7 @@ class GCRekeyableHashMap : public JS::GCHashMapempty(); } // GCRekeyableHashMap is movable @@ -288,12 +290,13 @@ class GCHashSet : public js::HashSet { } } - void traceWeak(JSTracer* trc) { + bool traceWeak(JSTracer* trc) { for (typename Base::Enum e(*this); !e.empty(); e.popFront()) { if (!GCPolicy::traceWeak(trc, &e.mutableFront())) { e.removeFront(); } } + return !this->empty(); } // GCHashSet is movable From 2c01ccaa7baeed6774ae07cf0c6b831a13aeb862 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:43:31 +0000 Subject: [PATCH 18/66] Bug 1736397 - Part 3: Replace sweeping with tracing weak edges for WeakCached HashMaps r=sfink Depends on D128857 Differential Revision: https://phabricator.services.mozilla.com/D128858 --- js/public/GCHashTable.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/js/public/GCHashTable.h b/js/public/GCHashTable.h index 4ef47d8f0e70..bd5a155274bf 100644 --- a/js/public/GCHashTable.h +++ b/js/public/GCHashTable.h @@ -79,12 +79,7 @@ class GCHashMap : public js::HashMap { } void sweep() { - typename Base::Enum e(*this); - sweepEntries(e); - } - - void sweepEntries(typename Base::Enum& e) { - for (; !e.empty(); e.popFront()) { + for (typename Base::Enum e(*this); !e.empty(); e.popFront()) { if (MapSweepPolicy::needsSweep(&e.front().mutableKey(), &e.front().value())) { e.removeFront(); @@ -93,13 +88,18 @@ class GCHashMap : public js::HashMap { } bool traceWeak(JSTracer* trc) { + typename Base::Enum e(*this); + traceWeakEntries(trc, e); + return !this->empty(); + } + + void traceWeakEntries(JSTracer* trc, typename Base::Enum& e) { for (typename Base::Enum e(*this); !e.empty(); e.popFront()) { if (!MapSweepPolicy::traceWeak(trc, &e.front().mutableKey(), &e.front().value())) { e.removeFront(); } } - return !this->empty(); } // GCHashMap is movable @@ -435,7 +435,7 @@ class WeakCache> // Create an Enum and sweep the table entries. mozilla::Maybe e; e.emplace(map); - map.sweepEntries(e.ref()); + map.traceWeakEntries(trc, e.ref()); // Potentially take a lock while the Enum's destructor is called as this can // rehash/resize the table and access the store buffer. From 2adab4bb085d8823c0615c3f6cfa755d825aec62 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:43:31 +0000 Subject: [PATCH 19/66] Bug 1736397 - Part 4: Replace sweeping with tracing weak edges for WeakCached HashSets r=sfink Depends on D128858 Differential Revision: https://phabricator.services.mozilla.com/D128859 --- js/public/GCHashTable.h | 24 ++++++++---------------- js/src/jsapi-tests/testGCWeakCache.cpp | 10 ++++++---- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/js/public/GCHashTable.h b/js/public/GCHashTable.h index bd5a155274bf..6a5f90dee989 100644 --- a/js/public/GCHashTable.h +++ b/js/public/GCHashTable.h @@ -277,26 +277,18 @@ class GCHashSet : public js::HashSet { } } - void sweep() { - typename Base::Enum e(*this); - sweepEntries(e); - } - - void sweepEntries(typename Base::Enum& e) { - for (; !e.empty(); e.popFront()) { - if (GCPolicy::needsSweep(&e.mutableFront())) { - e.removeFront(); - } - } - } - bool traceWeak(JSTracer* trc) { - for (typename Base::Enum e(*this); !e.empty(); e.popFront()) { + typename Base::Enum e(*this); + traceWeakEntries(trc, e); + return !this->empty(); + } + + void traceWeakEntries(JSTracer* trc, typename Base::Enum& e) { + for (; !e.empty(); e.popFront()) { if (!GCPolicy::traceWeak(trc, &e.mutableFront())) { e.removeFront(); } } - return !this->empty(); } // GCHashSet is movable @@ -632,7 +624,7 @@ class WeakCache> // the store buffer lock yet. mozilla::Maybe e; e.emplace(set); - set.sweepEntries(e.ref()); + set.traceWeakEntries(trc, e.ref()); // Destroy the Enum, potentially rehashing or resizing the table. Since this // can access the store buffer, we need to take a lock for this if we're diff --git a/js/src/jsapi-tests/testGCWeakCache.cpp b/js/src/jsapi-tests/testGCWeakCache.cpp index dd6153729884..837ce0e8b4fd 100644 --- a/js/src/jsapi-tests/testGCWeakCache.cpp +++ b/js/src/jsapi-tests/testGCWeakCache.cpp @@ -136,8 +136,9 @@ struct ObjectEntry { HeapPtr obj; explicit ObjectEntry(JSObject* o) : obj(o) {} bool operator==(const ObjectEntry& other) const { return obj == other.obj; } - bool needsSweep() { - return JS::GCPolicy>::needsSweep(&obj); + bool needsSweep() { return IsAboutToBeFinalized(&obj); } + bool traceWeak(JSTracer* trc) { + return TraceWeakEdge(trc, &obj, "ObjectEntry::obj"); } }; @@ -173,8 +174,9 @@ struct NumberAndObjectEntry { bool operator==(const NumberAndObjectEntry& other) const { return number == other.number && obj == other.obj; } - bool needsSweep() { - return JS::GCPolicy>::needsSweep(&obj); + bool needsSweep() { return IsAboutToBeFinalized(&obj); } + bool traceWeak(JSTracer* trc) { + return TraceWeakEdge(trc, &obj, "NumberAndObjectEntry::obj"); } }; From 3971108eb19e109781642e4ade5226f342ac98c4 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:43:32 +0000 Subject: [PATCH 20/66] Bug 1736397 - Part 5: Replace sweeping with tracing weak edges for unspecialized WeakCached things r=sfink Making this change meant fixing WeakCached things that supplied their own sweep method at the same time because the custom sweep method would no longer be called. This dragged in a bunch of other changes but it's all along the same lines as the previous patches. Depends on D128859 Differential Revision: https://phabricator.services.mozilla.com/D128860 --- js/public/SweepingAPI.h | 2 +- js/src/shell/jsshell.h | 7 +++---- js/src/vm/ArrayBufferObject.cpp | 16 ++++++++-------- js/src/vm/ArrayBufferObject.h | 4 ++-- js/src/vm/Compartment.cpp | 2 +- js/src/vm/Realm.cpp | 8 ++++---- js/src/vm/Realm.h | 4 ++-- 7 files changed, 21 insertions(+), 22 deletions(-) diff --git a/js/public/SweepingAPI.h b/js/public/SweepingAPI.h index f0b77d2b61a9..8337b639be41 100644 --- a/js/public/SweepingAPI.h +++ b/js/public/SweepingAPI.h @@ -107,7 +107,7 @@ class WeakCache : protected detail::WeakCacheBase, lock.emplace(sbToLock); } - GCPolicy::sweep(&cache); + GCPolicy::traceWeak(trc, &cache); return 0; } diff --git a/js/src/shell/jsshell.h b/js/src/shell/jsshell.h index fa25790ee130..7d48de747c3c 100644 --- a/js/src/shell/jsshell.h +++ b/js/src/shell/jsshell.h @@ -175,12 +175,11 @@ enum class ScriptKind { Script, ScriptStencil, DecodeScript, Module }; class NonshrinkingGCObjectVector : public GCVector { public: - void sweep() { + bool traceWeak(JSTracer* trc) { for (HeapPtrObject& obj : *this) { - if (JS::GCPolicy::needsSweep(&obj)) { - obj = nullptr; - } + TraceWeakEdge(trc, &obj, "NonshrinkingGCObjectVector element"); } + return true; } }; diff --git a/js/src/vm/ArrayBufferObject.cpp b/js/src/vm/ArrayBufferObject.cpp index e5afbb9b83d9..fe78b4452087 100644 --- a/js/src/vm/ArrayBufferObject.cpp +++ b/js/src/vm/ArrayBufferObject.cpp @@ -1731,27 +1731,27 @@ void InnerViewTable::removeViews(ArrayBufferObject* buffer) { map.remove(p); } -void InnerViewTable::sweep() { map.sweep(); } +bool InnerViewTable::traceWeak(JSTracer* trc) { return map.traceWeak(trc); } -void InnerViewTable::sweepAfterMinorGC() { +void InnerViewTable::sweepAfterMinorGC(JSTracer* trc) { MOZ_ASSERT(needsSweepAfterMinorGC()); if (nurseryKeysValid) { for (size_t i = 0; i < nurseryKeys.length(); i++) { JSObject* buffer = MaybeForwarded(nurseryKeys[i]); Map::Ptr p = map.lookup(buffer); - if (p && Map::SweepPolicy::needsSweep(&p->mutableKey(), &p->value())) { + if (p && + !Map::SweepPolicy::traceWeak(trc, &p->mutableKey(), &p->value())) { map.remove(p); } } - nurseryKeys.clear(); } else { // Do the required sweeping by looking at every map entry. - nurseryKeys.clear(); - sweep(); - - nurseryKeysValid = true; + map.traceWeak(trc); } + + nurseryKeys.clear(); + nurseryKeysValid = true; } size_t InnerViewTable::sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) { diff --git a/js/src/vm/ArrayBufferObject.h b/js/src/vm/ArrayBufferObject.h index 3db89413a4ac..0516415bce7c 100644 --- a/js/src/vm/ArrayBufferObject.h +++ b/js/src/vm/ArrayBufferObject.h @@ -564,8 +564,8 @@ class InnerViewTable { // Remove references to dead objects in the table and update table entries // to reflect moved objects. - void sweep(); - void sweepAfterMinorGC(); + bool traceWeak(JSTracer* trc); + void sweepAfterMinorGC(JSTracer* trc); bool empty() const { return map.empty(); } diff --git a/js/src/vm/Compartment.cpp b/js/src/vm/Compartment.cpp index 640fcb8bc682..46dfd15aa4a1 100644 --- a/js/src/vm/Compartment.cpp +++ b/js/src/vm/Compartment.cpp @@ -504,7 +504,7 @@ void Compartment::sweepAfterMinorGC(JSTracer* trc) { crossCompartmentObjectWrappers.sweepAfterMinorGC(trc); for (RealmsInCompartmentIter r(this); !r.done(); r.next()) { - r->sweepAfterMinorGC(); + r->sweepAfterMinorGC(trc); } } diff --git a/js/src/vm/Realm.cpp b/js/src/vm/Realm.cpp index 606cf70b3600..57e0707b1513 100644 --- a/js/src/vm/Realm.cpp +++ b/js/src/vm/Realm.cpp @@ -326,17 +326,17 @@ void Realm::finishRoots() { objects_.finishRoots(); } -void ObjectRealm::sweepAfterMinorGC() { +void ObjectRealm::sweepAfterMinorGC(JSTracer* trc) { InnerViewTable& table = innerViews.get(); if (table.needsSweepAfterMinorGC()) { - table.sweepAfterMinorGC(); + table.sweepAfterMinorGC(trc); } } -void Realm::sweepAfterMinorGC() { +void Realm::sweepAfterMinorGC(JSTracer* trc) { globalWriteBarriered = 0; dtoaCache.purge(); - objects_.sweepAfterMinorGC(); + objects_.sweepAfterMinorGC(trc); } void Realm::traceWeakSavedStacks(JSTracer* trc) { savedStacks_.traceWeak(trc); } diff --git a/js/src/vm/Realm.h b/js/src/vm/Realm.h index b32ca4aff496..e66fffee8491 100644 --- a/js/src/vm/Realm.h +++ b/js/src/vm/Realm.h @@ -265,7 +265,7 @@ class ObjectRealm { void finishRoots(); void trace(JSTracer* trc); - void sweepAfterMinorGC(); + void sweepAfterMinorGC(JSTracer* trc); void traceWeakNativeIterators(JSTracer* trc); void addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf, @@ -518,7 +518,7 @@ class JS::Realm : public JS::shadow::Realm { */ void finishRoots(); - void sweepAfterMinorGC(); + void sweepAfterMinorGC(JSTracer* trc); void traceWeakDebugEnvironmentEdges(JSTracer* trc); void traceWeakObjectRealm(JSTracer* trc); void traceWeakRegExps(JSTracer* trc); From eee6b4bd94855d0158b7a700809bf6a8b6cbbaf6 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Tue, 19 Oct 2021 14:43:32 +0000 Subject: [PATCH 21/66] Bug 1736397 - Part 6: Use tracing for the incremental read barrier on WeakCached maps and sets r=sfink It's slightly annoying that we now have to store a tracer rather than just a bool, but it's necessary because these container methods don't have any context we can get it from. Differential Revision: https://phabricator.services.mozilla.com/D128861 --- js/public/GCHashTable.h | 118 +++++++++++++++++++++------------------- js/public/SweepingAPI.h | 4 +- js/src/gc/GC.cpp | 1 + js/src/gc/GCInternals.h | 9 --- js/src/gc/GCRuntime.h | 10 ++++ js/src/gc/Sweeping.cpp | 9 +-- 6 files changed, 81 insertions(+), 70 deletions(-) diff --git a/js/public/GCHashTable.h b/js/public/GCHashTable.h index 6a5f90dee989..e38c6412f39a 100644 --- a/js/public/GCHashTable.h +++ b/js/public/GCHashTable.h @@ -399,25 +399,21 @@ namespace JS { template class WeakCache> - : protected detail::WeakCacheBase { + final : protected detail::WeakCacheBase { using Map = GCHashMap; using Self = WeakCache; Map map; - bool needsBarrier; + JSTracer* barrierTracer = nullptr; public: template explicit WeakCache(Zone* zone, Args&&... args) - : WeakCacheBase(zone), - map(std::forward(args)...), - needsBarrier(false) {} + : WeakCacheBase(zone), map(std::forward(args)...) {} template explicit WeakCache(JSRuntime* rt, Args&&... args) - : WeakCacheBase(rt), - map(std::forward(args)...), - needsBarrier(false) {} - ~WeakCache() { MOZ_ASSERT(!needsBarrier); } + : WeakCacheBase(rt), map(std::forward(args)...) {} + ~WeakCache() { MOZ_ASSERT(!barrierTracer); } bool empty() override { return map.empty(); } @@ -440,24 +436,26 @@ class WeakCache> return steps; } - bool setNeedsIncrementalBarrier(bool needs) override { - MOZ_ASSERT(needsBarrier != needs); - needsBarrier = needs; + bool setIncrementalBarrierTracer(JSTracer* trc) override { + MOZ_ASSERT(bool(barrierTracer) != bool(trc)); + barrierTracer = trc; return true; } - bool needsIncrementalBarrier() const override { return needsBarrier; } + bool needsIncrementalBarrier() const override { return barrierTracer; } private: using Entry = typename Map::Entry; - static bool entryNeedsSweep(const Entry& prior) { + static bool entryNeedsSweep(JSTracer* barrierTracer, const Entry& prior) { Key key(prior.key()); Value value(prior.value()); - bool result = MapSweepPolicy::needsSweep(&key, &value); - MOZ_ASSERT(prior.key() == key); // We shouldn't update here. - MOZ_ASSERT(prior.value() == value); // We shouldn't update here. - return result; + bool needsSweep = !MapSweepPolicy::traceWeak(barrierTracer, &key, &value); + MOZ_ASSERT_IF(!needsSweep, + prior.key() == key); // We shouldn't update here. + MOZ_ASSERT_IF(!needsSweep, + prior.value() == value); // We shouldn't update here. + return needsSweep; } public: @@ -465,8 +463,11 @@ class WeakCache> using Ptr = typename Map::Ptr; using AddPtr = typename Map::AddPtr; + // Iterator over the whole collection. struct Range { - explicit Range(const typename Map::Range& r) : range(r) { settle(); } + explicit Range(Self& self) : cache(self), range(self.map.all()) { + settle(); + } Range() = default; bool empty() const { return range.empty(); } @@ -478,11 +479,14 @@ class WeakCache> } private: + Self& cache; typename Map::Range range; void settle() { - while (!empty() && entryNeedsSweep(front())) { - popFront(); + if (JSTracer* trc = cache.barrierTracer) { + while (!empty() && entryNeedsSweep(trc, front())) { + popFront(); + } } } }; @@ -491,13 +495,13 @@ class WeakCache> explicit Enum(Self& cache) : Map::Enum(cache.map) { // This operation is not allowed while barriers are in place as we // may also need to enumerate the set for sweeping. - MOZ_ASSERT(!cache.needsBarrier); + MOZ_ASSERT(!cache.barrierTracer); } }; Ptr lookup(const Lookup& l) const { Ptr ptr = map.lookup(l); - if (needsBarrier && ptr && entryNeedsSweep(*ptr)) { + if (barrierTracer && ptr && entryNeedsSweep(barrierTracer, *ptr)) { const_cast(map).remove(ptr); return Ptr(); } @@ -506,20 +510,20 @@ class WeakCache> AddPtr lookupForAdd(const Lookup& l) { AddPtr ptr = map.lookupForAdd(l); - if (needsBarrier && ptr && entryNeedsSweep(*ptr)) { + if (barrierTracer && ptr && entryNeedsSweep(barrierTracer, *ptr)) { const_cast(map).remove(ptr); return map.lookupForAdd(l); } return ptr; } - Range all() const { return Range(map.all()); } + Range all() const { return Range(*const_cast(this)); } bool empty() const { // This operation is not currently allowed while barriers are in place // as it would require iterating the map and the caller expects a // constant time operation. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); return map.empty(); } @@ -527,7 +531,7 @@ class WeakCache> // This operation is not currently allowed while barriers are in place // as it would require iterating the set and the caller expects a // constant time operation. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); return map.count(); } @@ -545,14 +549,14 @@ class WeakCache> void clear() { // This operation is not currently allowed while barriers are in place // since it doesn't make sense to clear a cache while it is being swept. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); map.clear(); } void clearAndCompact() { // This operation is not currently allowed while barriers are in place // since it doesn't make sense to clear a cache while it is being swept. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); map.clearAndCompact(); } @@ -595,27 +599,23 @@ class WeakCache> // Specialize WeakCache for GCHashSet to provide a barriered set that does not // need to be swept immediately. template -class WeakCache> +class WeakCache> final : protected detail::WeakCacheBase { using Set = GCHashSet; using Self = WeakCache; Set set; - bool needsBarrier; + JSTracer* barrierTracer = nullptr; public: using Entry = typename Set::Entry; template explicit WeakCache(Zone* zone, Args&&... args) - : WeakCacheBase(zone), - set(std::forward(args)...), - needsBarrier(false) {} + : WeakCacheBase(zone), set(std::forward(args)...) {} template explicit WeakCache(JSRuntime* rt, Args&&... args) - : WeakCacheBase(rt), - set(std::forward(args)...), - needsBarrier(false) {} + : WeakCacheBase(rt), set(std::forward(args)...) {} size_t traceWeak(JSTracer* trc, js::gc::StoreBuffer* sbToLock) override { size_t steps = set.count(); @@ -640,20 +640,20 @@ class WeakCache> bool empty() override { return set.empty(); } - bool setNeedsIncrementalBarrier(bool needs) override { - MOZ_ASSERT(needsBarrier != needs); - needsBarrier = needs; + bool setIncrementalBarrierTracer(JSTracer* trc) override { + MOZ_ASSERT(bool(barrierTracer) != bool(trc)); + barrierTracer = trc; return true; } - bool needsIncrementalBarrier() const override { return needsBarrier; } + bool needsIncrementalBarrier() const override { return barrierTracer; } private: - static bool entryNeedsSweep(const Entry& prior) { + static bool entryNeedsSweep(JSTracer* barrierTracer, const Entry& prior) { Entry entry(prior); - bool result = GCPolicy::needsSweep(&entry); - MOZ_ASSERT(prior == entry); // We shouldn't update here. - return result; + bool needsSweep = !GCPolicy::traceWeak(barrierTracer, &entry); + MOZ_ASSERT_IF(!needsSweep, prior == entry); // We shouldn't update here. + return needsSweep; } public: @@ -661,8 +661,11 @@ class WeakCache> using Ptr = typename Set::Ptr; using AddPtr = typename Set::AddPtr; + // Iterator over the whole collection. struct Range { - explicit Range(const typename Set::Range& r) : range(r) { settle(); } + explicit Range(Self& self) : cache(self), range(self.set.all()) { + settle(); + } Range() = default; bool empty() const { return range.empty(); } @@ -674,11 +677,14 @@ class WeakCache> } private: + Self& cache; typename Set::Range range; void settle() { - while (!empty() && entryNeedsSweep(front())) { - popFront(); + if (JSTracer* trc = cache.barrierTracer) { + while (!empty() && entryNeedsSweep(trc, front())) { + popFront(); + } } } }; @@ -687,13 +693,13 @@ class WeakCache> explicit Enum(Self& cache) : Set::Enum(cache.set) { // This operation is not allowed while barriers are in place as we // may also need to enumerate the set for sweeping. - MOZ_ASSERT(!cache.needsBarrier); + MOZ_ASSERT(!cache.barrierTracer); } }; Ptr lookup(const Lookup& l) const { Ptr ptr = set.lookup(l); - if (needsBarrier && ptr && entryNeedsSweep(*ptr)) { + if (barrierTracer && ptr && entryNeedsSweep(barrierTracer, *ptr)) { const_cast(set).remove(ptr); return Ptr(); } @@ -702,20 +708,20 @@ class WeakCache> AddPtr lookupForAdd(const Lookup& l) { AddPtr ptr = set.lookupForAdd(l); - if (needsBarrier && ptr && entryNeedsSweep(*ptr)) { + if (barrierTracer && ptr && entryNeedsSweep(barrierTracer, *ptr)) { const_cast(set).remove(ptr); return set.lookupForAdd(l); } return ptr; } - Range all() const { return Range(set.all()); } + Range all() const { return Range(*const_cast(this)); } bool empty() const { // This operation is not currently allowed while barriers are in place // as it would require iterating the set and the caller expects a // constant time operation. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); return set.empty(); } @@ -723,7 +729,7 @@ class WeakCache> // This operation is not currently allowed while barriers are in place // as it would require iterating the set and the caller expects a // constant time operation. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); return set.count(); } @@ -741,14 +747,14 @@ class WeakCache> void clear() { // This operation is not currently allowed while barriers are in place // since it doesn't make sense to clear a cache while it is being swept. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); set.clear(); } void clearAndCompact() { // This operation is not currently allowed while barriers are in place // since it doesn't make sense to clear a cache while it is being swept. - MOZ_ASSERT(!needsBarrier); + MOZ_ASSERT(!barrierTracer); set.clearAndCompact(); } diff --git a/js/public/SweepingAPI.h b/js/public/SweepingAPI.h index 8337b639be41..7833d65b7ada 100644 --- a/js/public/SweepingAPI.h +++ b/js/public/SweepingAPI.h @@ -65,7 +65,9 @@ class WeakCacheBase : public mozilla::LinkedListElement { // Sweeping will be skipped if the cache is empty already. virtual bool empty() = 0; - virtual bool setNeedsIncrementalBarrier(bool needs) { + // Enable/disable read barrier during incremental sweeping and set the tracer + // to use. + virtual bool setIncrementalBarrierTracer(JSTracer* trc) { // Derived classes do not support incremental barriers by default. return false; } diff --git a/js/src/gc/GC.cpp b/js/src/gc/GC.cpp index e8d17cb5a51f..c297e9c1847b 100644 --- a/js/src/gc/GC.cpp +++ b/js/src/gc/GC.cpp @@ -370,6 +370,7 @@ GCRuntime::GCRuntime(JSRuntime* rt) stats_(this), marker(rt), barrierTracer(rt), + sweepingTracer(rt), heapSize(nullptr), helperThreadRatio(TuningDefaults::HelperThreadRatio), maxHelperThreads(TuningDefaults::MaxHelperThreads), diff --git a/js/src/gc/GCInternals.h b/js/src/gc/GCInternals.h index 39f09a14a643..556166d408bc 100644 --- a/js/src/gc/GCInternals.h +++ b/js/src/gc/GCInternals.h @@ -279,15 +279,6 @@ struct MovingTracer final : public GenericTracerImpl { friend class GenericTracerImpl; }; -struct SweepingTracer final : public GenericTracerImpl { - explicit SweepingTracer(JSRuntime* rt); - - private: - template - T* onEdge(T* thingp); - friend class GenericTracerImpl; -}; - struct MinorSweepingTracer final : public GenericTracerImpl { explicit MinorSweepingTracer(JSRuntime* rt); diff --git a/js/src/gc/GCRuntime.h b/js/src/gc/GCRuntime.h index fb8a1d765981..548f95385dfd 100644 --- a/js/src/gc/GCRuntime.h +++ b/js/src/gc/GCRuntime.h @@ -271,6 +271,15 @@ class BarrierTracer final : public GenericTracerImpl { GCMarker& marker; }; +struct SweepingTracer final : public GenericTracerImpl { + explicit SweepingTracer(JSRuntime* rt); + + private: + template + T* onEdge(T* thingp); + friend class GenericTracerImpl; +}; + class GCRuntime { friend GCMarker::MarkQueueProgress GCMarker::processMarkQueue(); @@ -912,6 +921,7 @@ class GCRuntime { GCMarker marker; BarrierTracer barrierTracer; + SweepingTracer sweepingTracer; Vector unmarkGrayStack; diff --git a/js/src/gc/Sweeping.cpp b/js/src/gc/Sweeping.cpp index dffdc77a791c..a3a6d9c4e2cd 100644 --- a/js/src/gc/Sweeping.cpp +++ b/js/src/gc/Sweeping.cpp @@ -1408,6 +1408,7 @@ static bool PrepareWeakCacheTasks(JSRuntime* rt, MOZ_ASSERT(immediateTasks->empty()); + GCRuntime* gc = &rt->gc; bool ok = IterateWeakCaches(rt, [&](JS::detail::WeakCacheBase* cache, Zone* zone) { if (cache->empty()) { @@ -1415,11 +1416,11 @@ static bool PrepareWeakCacheTasks(JSRuntime* rt, } // Caches that support incremental sweeping will be swept later. - if (zone && cache->setNeedsIncrementalBarrier(true)) { + if (zone && cache->setIncrementalBarrierTracer(&gc->sweepingTracer)) { return true; } - return immediateTasks->emplaceBack(&rt->gc, zone, *cache); + return immediateTasks->emplaceBack(gc, zone, *cache); }); if (!ok) { @@ -1435,7 +1436,7 @@ static void SweepAllWeakCachesOnMainThread(JSRuntime* rt) { SweepingTracer trc(rt); IterateWeakCaches(rt, [&](JS::detail::WeakCacheBase* cache, Zone* zone) { if (cache->needsIncrementalBarrier()) { - cache->setNeedsIncrementalBarrier(false); + cache->setIncrementalBarrierTracer(nullptr); } cache->traceWeak(&trc, &rt->gc.storeBuffer()); return true; @@ -1849,7 +1850,7 @@ static size_t IncrementalSweepWeakCache(GCRuntime* gc, SweepingTracer trc(gc->rt); size_t steps = cache->traceWeak(&trc, &gc->storeBuffer()); - cache->setNeedsIncrementalBarrier(false); + cache->setIncrementalBarrierTracer(nullptr); return steps; } From 151c81623a086ab401fcef05dcf983afd96c05e2 Mon Sep 17 00:00:00 2001 From: Andi-Bogdan Postelnicu Date: Tue, 19 Oct 2021 14:45:59 +0000 Subject: [PATCH 22/66] Bug 1731582 - Move to clang-13 r=firefox-build-system-reviewers,mhentges,decoder Join work with glandium. Differential Revision: https://phabricator.services.mozilla.com/D126208 --- build/build-clang/clang-12-linux64.json | 1 - ...-12-android.json => clang-13-android.json} | 4 +- build/build-clang/clang-13-linux64.json | 23 + ...2-macosx64.json => clang-13-macosx64.json} | 4 +- ...2stage.json => clang-13-win64-2stage.json} | 0 ...lang-12-win64.json => clang-13-win64.json} | 6 +- build/build-clang/clang-tidy-ci.patch | 12 +- build/build-clang/clang-tidy-macosx64.json | 2 +- .../compiler-rt-13-no-codesign.patch | 19 + build/build-clang/revert-ga478b0a199f4.patch | 123 ++ ...-llvmorg-12-init-16421-gb688c5875d08.patch | 1242 ----------------- ...t-llvmorg-13-init-7827-g2a078c307204.patch | 12 + .../revert-r362047-and-r362065_clang_12.patch | 68 - mobile/android/config/mozconfigs/common | 5 + mozglue/build/TsanOptions.cpp | 1 + taskcluster/ci/fetch/toolchains.yml | 7 + taskcluster/ci/instrumented-build/kind.yml | 2 + taskcluster/ci/spidermonkey/linux.yml | 4 +- taskcluster/ci/toolchain/cbindgen.yml | 10 +- taskcluster/ci/toolchain/cctools-port.yml | 6 +- taskcluster/ci/toolchain/clang-tidy.yml | 14 +- taskcluster/ci/toolchain/clang.yml | 169 ++- taskcluster/ci/toolchain/compiler-rt.yml | 82 +- taskcluster/ci/toolchain/dump-syms.yml | 10 +- taskcluster/ci/toolchain/fix-stacks.yml | 12 +- taskcluster/ci/toolchain/gn.yml | 4 +- .../ci/toolchain/minidump_stackwalk.yml | 12 +- taskcluster/ci/toolchain/misc.yml | 6 +- taskcluster/ci/toolchain/nasm.yml | 12 +- taskcluster/ci/toolchain/sccache.yml | 10 +- taskcluster/ci/toolchain/sysroot.yml | 4 +- taskcluster/ci/webrender/kind.yml | 6 +- taskcluster/scripts/misc/build-clang-mingw.sh | 120 +- taskcluster/scripts/misc/build-compiler-rt.sh | 1 + .../misc/repack-clang-linux-win-cross.sh | 3 +- 35 files changed, 462 insertions(+), 1554 deletions(-) rename build/build-clang/{clang-12-android.json => clang-13-android.json} (92%) create mode 100644 build/build-clang/clang-13-linux64.json rename build/build-clang/{clang-12-macosx64.json => clang-13-macosx64.json} (88%) rename build/build-clang/{clang-12-win64-2stage.json => clang-13-win64-2stage.json} (100%) rename build/build-clang/{clang-12-win64.json => clang-13-win64.json} (73%) create mode 100644 build/build-clang/compiler-rt-13-no-codesign.patch create mode 100644 build/build-clang/revert-ga478b0a199f4.patch delete mode 100644 build/build-clang/revert-llvmorg-12-init-16421-gb688c5875d08.patch create mode 100644 build/build-clang/revert-llvmorg-13-init-7827-g2a078c307204.patch delete mode 100644 build/build-clang/revert-r362047-and-r362065_clang_12.patch diff --git a/build/build-clang/clang-12-linux64.json b/build/build-clang/clang-12-linux64.json index 793528db21d8..13ec55338a82 100644 --- a/build/build-clang/clang-12-linux64.json +++ b/build/build-clang/clang-12-linux64.json @@ -8,7 +8,6 @@ "cc": "/usr/bin/gcc", "cxx": "/usr/bin/g++", "as": "/usr/bin/gcc", - "wasi-compiler-rt": "{MOZ_FETCHES_DIR}/compiler-rt", "patches": [ "static-llvm-symbolizer_clang_12.patch", "find_symbolizer_linux_clang_10.patch", diff --git a/build/build-clang/clang-12-android.json b/build/build-clang/clang-13-android.json similarity index 92% rename from build/build-clang/clang-12-android.json rename to build/build-clang/clang-13-android.json index bb31d8a3fe93..5e456250c548 100644 --- a/build/build-clang/clang-12-android.json +++ b/build/build-clang/clang-13-android.json @@ -49,8 +49,6 @@ "patches": [ "static-llvm-symbolizer_clang_12.patch", "find_symbolizer_linux_clang_10.patch", - "revert-llvmorg-12-init-7827-g2a078c307204.patch", - "revert-llvmorg-12-init-16421-gb688c5875d08.patch", - "revert-r362047-and-r362065_clang_12.patch" + "revert-ga478b0a199f4.patch" ] } diff --git a/build/build-clang/clang-13-linux64.json b/build/build-clang/clang-13-linux64.json new file mode 100644 index 000000000000..e3e4bf21f68c --- /dev/null +++ b/build/build-clang/clang-13-linux64.json @@ -0,0 +1,23 @@ +{ + "stages": "4", + "pgo" : true, + "build_libcxx": true, + "build_wasm": true, + "build_type": "Release", + "assertions": false, + "cc": "/usr/bin/gcc", + "cxx": "/usr/bin/g++", + "as": "/usr/bin/gcc", + "wasi-compiler-rt": "{MOZ_FETCHES_DIR}/compiler-rt", + "patches": [ + "static-llvm-symbolizer_clang_12.patch", + "find_symbolizer_linux_clang_10.patch", + "android-mangling-error_clang_12.patch", + "unpoison-thread-stacks_clang_10.patch", + "downgrade-mangling-error_clang_12.patch", + "revert-llvmorg-13-init-7827-g2a078c307204.patch", + "loosen-msvc-detection.patch", + "fuzzing_ccov_build_clang_12.patch", + "revert-ga478b0a199f4.patch" + ] +} diff --git a/build/build-clang/clang-12-macosx64.json b/build/build-clang/clang-13-macosx64.json similarity index 88% rename from build/build-clang/clang-12-macosx64.json rename to build/build-clang/clang-13-macosx64.json index 5bb87f9c7a9c..ea2ecf28e9f9 100644 --- a/build/build-clang/clang-12-macosx64.json +++ b/build/build-clang/clang-13-macosx64.json @@ -16,7 +16,7 @@ "patches": [ "static-llvm-symbolizer_clang_12.patch", "compiler-rt-cross-compile.patch", - "revert-llvmorg-12-init-7827-g2a078c307204.patch", - "compiler-rt-no-codesign.patch" + "revert-llvmorg-13-init-7827-g2a078c307204.patch", + "compiler-rt-13-no-codesign.patch" ] } diff --git a/build/build-clang/clang-12-win64-2stage.json b/build/build-clang/clang-13-win64-2stage.json similarity index 100% rename from build/build-clang/clang-12-win64-2stage.json rename to build/build-clang/clang-13-win64-2stage.json diff --git a/build/build-clang/clang-12-win64.json b/build/build-clang/clang-13-win64.json similarity index 73% rename from build/build-clang/clang-12-win64.json rename to build/build-clang/clang-13-win64.json index 553c6205d742..c607ea3f267d 100644 --- a/build/build-clang/clang-12-win64.json +++ b/build/build-clang/clang-13-win64.json @@ -13,8 +13,8 @@ "unpoison-thread-stacks_clang_10.patch", "downgrade-mangling-error_clang_12.patch", "bug47258-extract-symbols-mbcs.patch", - "revert-llvmorg-12-init-7827-g2a078c307204.patch", - "loosen-msvc-detection.patch", - "Remove-FlushViewOfFile-when-unmaping-gcda-files.patch" + "Remove-FlushViewOfFile-when-unmaping-gcda-files.patch", + "revert-llvmorg-13-init-7827-g2a078c307204.patch", + "loosen-msvc-detection.patch" ] } diff --git a/build/build-clang/clang-tidy-ci.patch b/build/build-clang/clang-tidy-ci.patch index 8d5d807ddf6b..12c6fadc4f91 100644 --- a/build/build-clang/clang-tidy-ci.patch +++ b/build/build-clang/clang-tidy-ci.patch @@ -1,20 +1,20 @@ diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp -index d6913dfd3c07..d031a163fdd7 100644 +index 73d66b980a5e..3b18de2176ba 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp -@@ -418,6 +418,7 @@ ClangTidyASTConsumerFactory::CreateASTConsumer( - if (!Check->isLanguageVersionSupported(Context.getLangOpts())) - continue; +@@ -432,6 +432,7 @@ ClangTidyASTConsumerFactory::CreateASTConsumer( + + for (auto &Check : Checks) { Check->registerMatchers(&*Finder); + Check->registerPPCallbacks(Compiler); Check->registerPPCallbacks(*SM, PP, ModuleExpanderPP); } diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h -index 54b725126752..200780e86804 100644 +index 20e9b8e47e6f..aded1f2e196c 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h -@@ -130,6 +130,9 @@ public: +@@ -70,6 +70,9 @@ public: return true; } diff --git a/build/build-clang/clang-tidy-macosx64.json b/build/build-clang/clang-tidy-macosx64.json index 7e6428291466..81ae1893af8f 100644 --- a/build/build-clang/clang-tidy-macosx64.json +++ b/build/build-clang/clang-tidy-macosx64.json @@ -15,6 +15,6 @@ "patches": [ "clang-tidy-ci.patch", "compiler-rt-cross-compile.patch", - "compiler-rt-no-codesign.patch" + "compiler-rt-13-no-codesign.patch" ] } diff --git a/build/build-clang/compiler-rt-13-no-codesign.patch b/build/build-clang/compiler-rt-13-no-codesign.patch new file mode 100644 index 000000000000..2678a249393d --- /dev/null +++ b/build/build-clang/compiler-rt-13-no-codesign.patch @@ -0,0 +1,19 @@ +diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake +index bc69ec95c419..9f100fdcec2f 100644 +--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake ++++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake +@@ -366,14 +366,6 @@ function(add_compiler_rt_runtime name type) + set_target_properties(${libname} PROPERTIES IMPORT_PREFIX "") + set_target_properties(${libname} PROPERTIES IMPORT_SUFFIX ".lib") + endif() +- if(APPLE) +- # Ad-hoc sign the dylibs +- add_custom_command(TARGET ${libname} +- POST_BUILD +- COMMAND codesign --sign - $ +- WORKING_DIRECTORY ${COMPILER_RT_OUTPUT_LIBRARY_DIR} +- ) +- endif() + endif() + + set(parent_target_arg) diff --git a/build/build-clang/revert-ga478b0a199f4.patch b/build/build-clang/revert-ga478b0a199f4.patch new file mode 100644 index 000000000000..2e00de010593 --- /dev/null +++ b/build/build-clang/revert-ga478b0a199f4.patch @@ -0,0 +1,123 @@ +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index c9360fc67165..b9451bde3dd8 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -310,12 +310,6 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, SysRoot + "/usr/lib", Paths); + } + +-ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { +- if (getTriple().isAndroid()) +- return ToolChain::RLT_CompilerRT; +- return Generic_ELF::GetDefaultRuntimeLibType(); +-} +- + ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const { + if (getTriple().isAndroid()) + return ToolChain::CST_Libcxx; +diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h +index 169a37c44072..65897631715a 100644 +--- a/clang/lib/Driver/ToolChains/Linux.h ++++ b/clang/lib/Driver/ToolChains/Linux.h +@@ -39,7 +39,6 @@ public: + llvm::opt::ArgStringList &CC1Args) const override; + void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; +- RuntimeLibType GetDefaultRuntimeLibType() const override; + CXXStdlibType GetDefaultCXXStdlibType() const override; + bool + IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override; +diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c +index cc505588331b..fc43acd07644 100644 +--- a/clang/test/Driver/linux-ld.c ++++ b/clang/test/Driver/linux-ld.c +@@ -283,7 +283,7 @@ + // RUN: --sysroot=%S/Inputs/basic_linux_tree \ + // RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-NONE %s + // CHECK-CLANG-ANDROID-NONE: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +-// CHECK-CLANG-ANDROID-NONE: "-l:libunwind.a" "-ldl" "-lc" ++// CHECK-CLANG-ANDROID-NONE: "-lgcc" "-ldl" "-lc" + // + // RUN: %clang -shared -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=aarch64-linux-android -rtlib=platform --unwindlib=platform \ +@@ -291,7 +291,7 @@ + // RUN: --sysroot=%S/Inputs/basic_linux_tree \ + // RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-SHARED %s + // CHECK-CLANG-ANDROID-SHARED: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +-// CHECK-CLANG-ANDROID-SHARED: "-l:libunwind.a" "-ldl" "-lc" ++// CHECK-CLANG-ANDROID-SHARED: "-lgcc" "-ldl" "-lc" + // + // RUN: %clang -static -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=aarch64-linux-android -rtlib=platform --unwindlib=platform \ +@@ -299,7 +299,7 @@ + // RUN: --sysroot=%S/Inputs/basic_linux_tree \ + // RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-STATIC %s + // CHECK-CLANG-ANDROID-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +-// CHECK-CLANG-ANDROID-STATIC: "--start-group" "{{[^"]*}}{{/|\\\\}}libclang_rt.builtins-aarch64-android.a" "-l:libunwind.a" "-lc" "--end-group" ++// CHECK-CLANG-ANDROID-STATIC: "--start-group" "-lgcc" "-lc" "--end-group" + // + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=x86_64-unknown-linux -rtlib=platform --unwindlib=platform \ +@@ -1081,12 +1081,10 @@ + // CHECK-ANDROID: "--enable-new-dtags" + // CHECK-ANDROID: "{{.*}}{{/|\\\\}}crtbegin_dynamic.o" + // CHECK-ANDROID: "-L[[SYSROOT]]/usr/lib" +-// CHECK-ANDROID-NOT: "-lgcc_s" +-// CHECK-ANDROID-NOT: "-lgcc" +-// CHECK-ANDROID: "-l:libunwind.a" ++// CHECK-ANDROID-NOT: "gcc_s" ++// CHECK-ANDROID: "-lgcc" + // CHECK-ANDROID: "-ldl" +-// CHECK-ANDROID-NOT: "-lgcc_s" +-// CHECK-ANDROID-NOT: "-lgcc" ++// CHECK-ANDROID-NOT: "gcc_s" + // CHECK-ANDROID: "{{.*}}{{/|\\\\}}crtend_android.o" + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=arm-linux-androideabi -rtlib=platform --unwindlib=platform \ +@@ -1139,12 +1137,10 @@ + // CHECK-ANDROID-SO-NOT: "-Bsymbolic" + // CHECK-ANDROID-SO: "{{.*}}{{/|\\\\}}crtbegin_so.o" + // CHECK-ANDROID-SO: "-L[[SYSROOT]]/usr/lib" +-// CHECK-ANDROID-SO-NOT: "-lgcc_s" +-// CHECK-ANDROID-SO-NOT: "-lgcc" +-// CHECK-ANDROID-SO: "-l:libunwind.a" ++// CHECK-ANDROID-SO-NOT: "gcc_s" ++// CHECK-ANDROID-SO: "-lgcc" + // CHECK-ANDROID-SO: "-ldl" +-// CHECK-ANDROID-SO-NOT: "-lgcc_s" +-// CHECK-ANDROID-SO-NOT: "-lgcc" ++// CHECK-ANDROID-SO-NOT: "gcc_s" + // CHECK-ANDROID-SO: "{{.*}}{{/|\\\\}}crtend_so.o" + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=arm-linux-androideabi -rtlib=platform --unwindlib=platform \ +@@ -1195,12 +1191,10 @@ + // CHECK-ANDROID-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" + // CHECK-ANDROID-STATIC: "{{.*}}{{/|\\\\}}crtbegin_static.o" + // CHECK-ANDROID-STATIC: "-L[[SYSROOT]]/usr/lib" +-// CHECK-ANDROID-STATIC-NOT: "-lgcc_eh" +-// CHECK-ANDROID-STATIC-NOT: "-lgcc" +-// CHECK-ANDROID-STATIC: "-l:libunwind.a" ++// CHECK-ANDROID-STATIC-NOT: "gcc_s" ++// CHECK-ANDROID-STATIC: "-lgcc" + // CHECK-ANDROID-STATIC-NOT: "-ldl" +-// CHECK-ANDROID-STATIC-NOT: "-lgcc_eh" +-// CHECK-ANDROID-STATIC-NOT: "-lgcc" ++// CHECK-ANDROID-STATIC-NOT: "gcc_s" + // CHECK-ANDROID-STATIC: "{{.*}}{{/|\\\\}}crtend_android.o" + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=arm-linux-androideabi -rtlib=platform --unwindlib=platform \ +@@ -1253,11 +1247,9 @@ + // CHECK-ANDROID-PIE: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" + // CHECK-ANDROID-PIE: "{{.*}}{{/|\\\\}}crtbegin_dynamic.o" + // CHECK-ANDROID-PIE: "-L[[SYSROOT]]/usr/lib" +-// CHECK-ANDROID-PIE-NOT: "-lgcc_s" +-// CHECK-ANDROID-PIE-NOT: "-lgcc" +-// CHECK-ANDROID-PIE: "-l:libunwind.a" +-// CHECK-ANDROID-PIE-NOT: "-lgcc_s" +-// CHECK-ANDROID-PIE-NOT: "-lgcc" ++// CHECK-ANDROID-PIE-NOT: "gcc_s" ++// CHECK-ANDROID-PIE: "-lgcc" ++// CHECK-ANDROID-PIE-NOT: "gcc_s" + // CHECK-ANDROID-PIE: "{{.*}}{{/|\\\\}}crtend_android.o" + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=arm-linux-androideabi \ diff --git a/build/build-clang/revert-llvmorg-12-init-16421-gb688c5875d08.patch b/build/build-clang/revert-llvmorg-12-init-16421-gb688c5875d08.patch deleted file mode 100644 index 9f6971001921..000000000000 --- a/build/build-clang/revert-llvmorg-12-init-16421-gb688c5875d08.patch +++ /dev/null @@ -1,1242 +0,0 @@ -Revert "[CMake] Split the target side of runtimes build" - -This reverts commit b688c5875d08c586f7b35b8f9da1493ebbf92b45. - -Commit 98c89ccfbd7467f946874c2af170d0f504355dd1 was in the revert path and is -also reverted by this patch. That commit doesn't affect us, so it's not worth -the extra patch-juggling to preserve it. - -This will make it easier to apply revert-r362047-and-r362065_clang_12.patch. - -diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt -index 243d6ceb2202..d2f5d6bf80f0 100644 ---- a/llvm/runtimes/CMakeLists.txt -+++ b/llvm/runtimes/CMakeLists.txt -@@ -1,13 +1,26 @@ --# TODO: This file assumes the Clang toolchain so it'd be better if it lived in --# Clang, except there already is clang/runtime directory which contains --# similar although simpler functionality. We should figure out how to merge --# the two files. -- --# TODO: Selecting runtimes should be always performed inside the runtimes --# build, see runtimes/CMakeLists.txt, except that we currently check whether --# compiler-rt is being built to determine whether to first build builtins --# or not so we need that information in this file as well. --set(LLVM_ALL_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind;openmp") -+# This file handles building LLVM runtime sub-projects. -+ -+# Runtimes are different from tools or other drop-in projects because runtimes -+# should be built with the LLVM toolchain from the build directory. This file is -+# a first step to formalizing runtime build interfaces. -+ -+# Setting CMake minimum required version should be at the very top of the file -+# if this is the entry point. -+if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) -+ cmake_minimum_required(VERSION 3.13.4) -+ project(Runtimes C CXX ASM) -+endif() -+ -+# Find all subdirectories containing CMake projects -+file(GLOB entries *) -+foreach(entry ${entries}) -+ if(IS_DIRECTORY ${entry} AND EXISTS ${entry}/CMakeLists.txt) -+ list(APPEND runtimes ${entry}) -+ endif() -+endforeach() -+ -+# Side-by-side subprojects layout. -+set(LLVM_ALL_RUNTIMES "libcxx;libcxxabi;libunwind;compiler-rt;openmp") - set(LLVM_ENABLE_RUNTIMES "" CACHE STRING - "Semicolon-separated list of runtimes to build (${LLVM_ALL_RUNTIMES}), or \"all\".") - if(LLVM_ENABLE_RUNTIMES STREQUAL "all" ) -@@ -35,436 +48,612 @@ function(get_compiler_rt_path path) - endforeach() - endfunction() - --include(LLVMExternalProjectUtils) -+# If this file is acting as a top-level CMake invocation, this code path is -+# triggered by the external project call for the runtimes target below. -+if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - --if(NOT LLVM_BUILD_RUNTIMES) -- set(EXTRA_ARGS EXCLUDE_FROM_ALL) --endif() -+ function(runtime_register_component name) -+ set_property(GLOBAL APPEND PROPERTY SUB_COMPONENTS ${name}) -+ endfunction() - --function(check_apple_target triple builtin_or_runtime) -- set(error "\ --compiler-rt for Darwin builds for all platforms and architectures using a \ --single configuration. Specify only a single darwin triple (e.g. x86_64-apple-darwin) \ --in your targets list (and not a triple for a specific platform such as macos). \ --You can use variables such as COMPILER_RT_ENABLE_IOS and DARWIN_ios_ARCHS to \ --control the specific platforms and architectures to build.") -+ cmake_minimum_required(VERSION 3.13.4) -+ project(Runtimes C CXX ASM) - -- set(seen_property ${builtin_or_runtime}_darwin_triple_seen) -- string(REPLACE "-" ";" triple_components ${triple}) -- foreach(component ${triple_components}) -- string(TOLOWER "${component}" component_lower) -- if(component_lower MATCHES "^darwin") -- get_property(darwin_triple_seen GLOBAL PROPERTY ${seen_property}) -- if(darwin_triple_seen) -- message(FATAL_ERROR "${error}") -- endif() -- set_property(GLOBAL PROPERTY ${seen_property} YES) -- if(NOT RUNTIMES_BUILD_ALLOW_DARWIN) -- message(FATAL_ERROR "\ --${error} Set RUNTIMES_BUILD_ALLOW_DARWIN to allow a single darwin triple.") -- endif() -- elseif(component_lower MATCHES "^ios|^macos|^tvos|^watchos") -- message(FATAL_ERROR "${error}") -- endif() -- endforeach() --endfunction() -+ find_package(LLVM PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) -+ find_package(Clang PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - --function(builtin_default_target compiler_rt_path) -- cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN}) -+ # Add the root project's CMake modules, and the LLVM build's modules to the -+ # CMake module path. -+ list(INSERT CMAKE_MODULE_PATH 0 -+ "${CMAKE_CURRENT_SOURCE_DIR}/../cmake" -+ "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules" -+ ) - -- set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default ON) -- # AIX should fold 32-bit & 64-bit arch libraries into a single archive. -- if (TARGET_TRIPLE MATCHES "aix") -- set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default OFF) -+ # Some of the runtimes will conditionally use the compiler-rt sanitizers -+ # to make this work smoothly we ensure that compiler-rt is added first in -+ # the list of sub-projects. This allows other sub-projects to have checks -+ # like `if(TARGET asan)` to enable building with asan. -+ get_compiler_rt_path(compiler_rt_path) -+ if(compiler_rt_path) -+ list(REMOVE_ITEM runtimes ${compiler_rt_path}) -+ if(NOT DEFINED LLVM_BUILD_COMPILER_RT OR LLVM_BUILD_COMPILER_RT) -+ list(INSERT runtimes 0 ${compiler_rt_path}) -+ endif() - endif() - -- llvm_ExternalProject_Add(builtins -- ${compiler_rt_path}/lib/builtins -- DEPENDS ${ARG_DEPENDS} -- CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} -- -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} -- -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} -- -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default} -- -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} -- -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE} -- -DCMAKE_C_COMPILER_WORKS=ON -- -DCMAKE_ASM_COMPILER_WORKS=ON -- ${BUILTINS_CMAKE_ARGS} -- PASSTHROUGH_PREFIXES COMPILER_RT -- USE_TOOLCHAIN -- ${EXTRA_ARGS}) --endfunction() -+ # Setting these variables will allow the sub-build to put their outputs into -+ # the library and bin directories of the top-level build. -+ set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR}) -+ set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR}) - --function(builtin_register_target compiler_rt_path target) -- cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN}) -+ # This variable makes sure that e.g. llvm-lit is found. -+ set(LLVM_MAIN_SRC_DIR ${LLVM_BUILD_MAIN_SRC_DIR}) -+ set(LLVM_CMAKE_PATH ${LLVM_MAIN_SRC_DIR}/cmake/modules) - -- check_apple_target(${target} builtin) -+ # This variable is used by individual runtimes to locate LLVM files. -+ set(LLVM_PATH ${LLVM_BUILD_MAIN_SRC_DIR}) - -- get_cmake_property(variableNames VARIABLES) -- foreach(variableName ${variableNames}) -- string(FIND "${variableName}" "BUILTINS_${target}" out) -- if("${out}" EQUAL 0) -- string(REPLACE "BUILTINS_${target}_" "" new_name ${variableName}) -- string(REPLACE ";" "|" new_value "${${variableName}}") -- list(APPEND ${target}_extra_args "-D${new_name}=${new_value}") -- endif() -- endforeach() -+ if(APPLE) -+ set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "") -+ endif() - -- llvm_ExternalProject_Add(builtins-${target} -- ${compiler_rt_path}/lib/builtins -- DEPENDS ${ARG_DEPENDS} -- CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} -- -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} -- -DLLVM_DEFAULT_TARGET_TRIPLE=${target} -- -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON -- -DCMAKE_C_COMPILER_TARGET=${target} -- -DCMAKE_ASM_COMPILER_TARGET=${target} -- -DCMAKE_C_COMPILER_WORKS=ON -- -DCMAKE_ASM_COMPILER_WORKS=ON -- -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -- ${${target}_extra_args} -- USE_TOOLCHAIN -- ${EXTRA_ARGS}) --endfunction() -+ include(CheckLibraryExists) -+ include(CheckCCompilerFlag) - --# If compiler-rt is present we need to build the builtin libraries first. This --# is required because the other runtimes need the builtin libraries present --# before the just-built compiler can pass the configuration tests. --get_compiler_rt_path(compiler_rt_path) --if(compiler_rt_path) -- if(NOT LLVM_BUILTIN_TARGETS) -- builtin_default_target(${compiler_rt_path} -- DEPENDS clang-resource-headers) -- else() -- if("default" IN_LIST LLVM_BUILTIN_TARGETS) -- builtin_default_target(${compiler_rt_path} -- DEPENDS clang-resource-headers) -- list(REMOVE_ITEM LLVM_BUILTIN_TARGETS "default") -- else() -- add_custom_target(builtins) -- add_custom_target(install-builtins) -- add_custom_target(install-builtins-stripped) -- endif() -+ # We don't have libc++ (yet)... -+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdinc++ -nostdlib++") - -- foreach(target ${LLVM_BUILTIN_TARGETS}) -- builtin_register_target(${compiler_rt_path} ${target} -- DEPENDS clang-resource-headers) -- -- add_dependencies(builtins builtins-${target}) -- add_dependencies(install-builtins install-builtins-${target}) -- add_dependencies(install-builtins-stripped install-builtins-${target}-stripped) -- endforeach() -+ # ...but we need access to libc++ headers for CMake checks to succeed. -+ if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR AND "libcxx" IN_LIST LLVM_ENABLE_RUNTIMES) -+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -isystem ${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}/include") - endif() -- set(deps builtins) -- # We don't need to depend on the builtins if we're building instrumented -- # because the next stage will use the same compiler used to build this stage. -- if(NOT LLVM_BUILD_INSTRUMENTED AND CLANG_ENABLE_BOOTSTRAP) -- add_dependencies(clang-bootstrap-deps builtins) -- endif() --endif() - --# We create a list the names of all the runtime projects in all uppercase and --# with dashes turned to underscores. This gives us the CMake variable prefixes --# for all variables that will apply to runtimes. --foreach(entry ${runtimes}) -- get_filename_component(projName ${entry} NAME) -- string(REPLACE "-" "_" canon_name ${projName}) -- string(TOUPPER ${canon_name} canon_name) -- list(APPEND prefixes ${canon_name}) -- if (${canon_name} STREQUAL "OPENMP") -- list(APPEND prefixes "LIBOMP" "LIBOMPTARGET") -- endif() -- # Many compiler-rt options start with SANITIZER_ rather than COMPILER_RT_, -- # so when compiler-rt is enabled, consider both. -- if(canon_name STREQUAL "COMPILER_RT") -- list(APPEND prefixes SANITIZER) -- endif() -+ # Avoid checking whether the compiler is working. -+ set(LLVM_COMPILER_CHECKED ON) -+ -+ # Handle common options used by all runtimes. -+ include(AddLLVM) -+ include(HandleLLVMOptions) -+ include(FindPythonInterp) - -- string(FIND ${projName} "lib" LIB_IDX) -- if(LIB_IDX EQUAL 0) -- string(SUBSTRING ${projName} 3 -1 projName) -+ # Remove the -nostdlib++ option we've added earlier. -+ string(REPLACE "-nostdlib++" "" CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") -+ -+ # Use libtool instead of ar if you are both on an Apple host, and targeting Apple. -+ if(CMAKE_HOST_APPLE AND APPLE) -+ include(UseLibtool) - endif() -- list(APPEND runtime_names ${projName}) --endforeach() - --if(LLVM_RUNTIME_BUILD_ID_LINK_TARGETS) -- configure_file( -- ${CMAKE_CURRENT_SOURCE_DIR}/llvm-strip-link.in -- ${CMAKE_CURRENT_BINARY_DIR}/llvm-strip-link -- @ONLY -- ) --endif() -+ # This can be used to detect whether we're in the runtimes build. -+ set(RUNTIMES_BUILD ON) - --function(runtime_default_target) -- cmake_parse_arguments(ARG "" "" "DEPENDS;PREFIXES" ${ARGN}) -+ foreach(entry ${runtimes}) -+ get_filename_component(projName ${entry} NAME) - -- include(${LLVM_BINARY_DIR}/runtimes/Components.cmake OPTIONAL) -- set(SUB_CHECK_TARGETS ${SUB_CHECK_TARGETS} PARENT_SCOPE) -- set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LLVM_BINARY_DIR}/runtimes/Components.cmake) -+ # TODO: Clean this up as part of an interface standardization -+ string(REPLACE "-" "_" canon_name ${projName}) -+ string(TOUPPER ${canon_name} canon_name) -+ -+ # The subdirectories need to treat this as standalone builds. D57992 tried -+ # to get rid of this, but the runtimes treat *_STANDALONE_BUILD=OFF as if -+ # llvm & clang are configured in the same CMake, and setup dependencies -+ # against their targets. OpenMP has fixed the issue so we don't set the -+ # variable. -+ if (NOT ${canon_name} STREQUAL "OPENMP") -+ set(${canon_name}_STANDALONE_BUILD ON) -+ endif() - -- foreach(runtime_name ${runtime_names}) -- list(APPEND extra_targets -- ${runtime_name} -- install-${runtime_name} -- install-${runtime_name}-stripped) -- if(LLVM_INCLUDE_TESTS) -- list(APPEND test_targets check-${runtime_name}) -+ if(LLVM_RUNTIMES_LIBDIR_SUBDIR) -+ set(${canon_name}_LIBDIR_SUBDIR "${LLVM_RUNTIMES_LIBDIR_SUBDIR}" CACHE STRING "" FORCE) - endif() -+ -+ # Setting a variable to let sub-projects detect which other projects -+ # will be included under here. -+ set(HAVE_${canon_name} ON) - endforeach() -- foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) -- if(NOT ${component} IN_LIST SUB_COMPONENTS) -- list(APPEND extra_targets ${component} install-${component} install-${component}-stripped) -- endif() -+ -+ # We do this in two loops so that HAVE_* is set for each runtime before the -+ # other runtimes are added. -+ foreach(entry ${runtimes}) -+ get_filename_component(projName ${entry} NAME) -+ -+ # Between each sub-project we want to cache and clear the LIT properties -+ set_property(GLOBAL PROPERTY LLVM_LIT_TESTSUITES) -+ set_property(GLOBAL PROPERTY LLVM_LIT_PARAMS) -+ set_property(GLOBAL PROPERTY LLVM_LIT_DEPENDS) -+ set_property(GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) -+ -+ add_subdirectory(${entry} ${projName}) -+ -+ get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) -+ get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) -+ get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) -+ get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) -+ -+ list(APPEND RUNTIMES_LIT_TESTSUITES ${LLVM_LIT_TESTSUITES}) -+ list(APPEND RUNTIMES_LIT_PARAMS ${LLVM_LIT_PARAMS}) -+ list(APPEND RUNTIMES_LIT_DEPENDS ${LLVM_LIT_DEPENDS}) -+ list(APPEND RUNTIMES_LIT_EXTRA_ARGS ${LLVM_LIT_EXTRA_ARGS}) - endforeach() - - if(LLVM_INCLUDE_TESTS) -- list(APPEND test_targets runtimes-test-depends check-runtimes) -- endif() -- -- set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default ON) -- # AIX should fold 32-bit & 64-bit arch libraries into a single archive. -- if (TARGET_TRIPLE MATCHES "aix") -- set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default OFF) -+ # Add a global check rule now that all subdirectories have been traversed -+ # and we know the total set of lit testsuites. -+ -+ add_lit_target(check-runtimes -+ "Running all regression tests" -+ ${RUNTIMES_LIT_TESTSUITES} -+ PARAMS ${RUNTIMES_LIT_PARAMS} -+ DEPENDS ${RUNTIMES_LIT_DEPENDS} -+ ARGS ${RUNTIMES_LIT_EXTRA_ARGS} -+ ) -+ add_custom_target(runtimes-test-depends DEPENDS ${RUNTIMES_LIT_DEPENDS}) - endif() - -- llvm_ExternalProject_Add(runtimes -- ${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes -- DEPENDS ${ARG_DEPENDS} -- # Builtins were built separately above -- CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off -- -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -- -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} -- -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} -- -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default} -- -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} -- -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} -- -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE} -- -DCMAKE_C_COMPILER_WORKS=ON -- -DCMAKE_CXX_COMPILER_WORKS=ON -- -DCMAKE_ASM_COMPILER_WORKS=ON -- ${RUNTIMES_CMAKE_ARGS} -- PASSTHROUGH_PREFIXES LLVM_ENABLE_RUNTIMES -- ${ARG_PREFIXES} -- EXTRA_TARGETS ${extra_targets} -- ${test_targets} -- ${SUB_COMPONENTS} -- ${SUB_CHECK_TARGETS} -- ${SUB_INSTALL_TARGETS} -- USE_TOOLCHAIN -- ${EXTRA_ARGS}) --endfunction() -+ get_property(SUB_COMPONENTS GLOBAL PROPERTY SUB_COMPONENTS) -+ if(SUB_COMPONENTS) -+ list(REMOVE_DUPLICATES SUB_COMPONENTS) -+ foreach(component ${SUB_COMPONENTS}) -+ if(NOT TARGET ${component}) -+ message(SEND_ERROR "Missing target for runtime component ${component}!") -+ continue() -+ endif() - --# runtime_register_target(target) --# Utility function to register external runtime target. --function(runtime_register_target name target) -- cmake_parse_arguments(ARG "" "" "DEPENDS;CMAKE_ARGS" ${ARGN}) -- include(${LLVM_BINARY_DIR}/runtimes/${name}/Components.cmake OPTIONAL) -- set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LLVM_BINARY_DIR}/runtimes/${name}/Components.cmake) -+ if(TARGET check-${component}) -+ list(APPEND SUB_CHECK_TARGETS check-${component}) -+ endif() - -- check_apple_target(${target} runtime) -+ if(TARGET install-${component}) -+ list(APPEND SUB_INSTALL_TARGETS install-${component}) -+ endif() -+ if(TARGET install-${component}-stripped) -+ list(APPEND SUB_INSTALL_TARGETS install-${component}-stripped) -+ endif() -+ endforeach() - -- set(${name}_deps ${ARG_DEPENDS}) -- if(NOT name STREQUAL target) -- list(APPEND ${name}_deps runtimes-${target}) -+ if(LLVM_RUNTIMES_TARGET) -+ configure_file( -+ ${CMAKE_CURRENT_SOURCE_DIR}/Components.cmake.in -+ ${LLVM_BINARY_DIR}/runtimes/${LLVM_RUNTIMES_TARGET}/Components.cmake) -+ else() -+ configure_file( -+ ${CMAKE_CURRENT_SOURCE_DIR}/Components.cmake.in -+ ${LLVM_BINARY_DIR}/runtimes/Components.cmake) -+ endif() - endif() - -- foreach(runtime_name ${runtime_names}) -- set(${runtime_name}-${name} ${runtime_name}) -- set(install-${runtime_name}-${name} install-${runtime_name}) -- set(install-${runtime_name}-${name}-stripped install-${runtime_name}-stripped) -- list(APPEND ${name}_extra_targets ${runtime_name}-${name} install-${runtime_name}-${name} install-${runtime_name}-${name}-stripped) -- if(LLVM_INCLUDE_TESTS) -- set(check-${runtime_name}-${name} check-${runtime_name} ) -- list(APPEND ${name}_test_targets check-${runtime_name}-${name}) -- endif() -- endforeach() -+else() # if this is included from LLVM's CMake -+ include(LLVMExternalProjectUtils) - -- foreach(target_name IN LISTS SUB_COMPONENTS SUB_INSTALL_TARGETS) -- set(${target_name}-${name} ${target_name}) -- list(APPEND ${name}_extra_targets ${target_name}-${name}) -- endforeach() -+ if(NOT LLVM_BUILD_RUNTIMES) -+ set(EXTRA_ARGS EXCLUDE_FROM_ALL) -+ endif() - -- foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) -- set(${component}-${name} ${component}) -- set(install-${component}-${name} install-${component}) -- set(install-${component}-${name}-stripped install-${component}-stripped) -- list(APPEND ${name}_extra_targets ${component}-${name} install-${component}-${name} install-${component}-${name}-stripped) -- endforeach() -+ function(check_apple_target triple builtin_or_runtime) -+ set(error "\ -+compiler-rt for Darwin builds for all platforms and architectures using a \ -+single configuration. Specify only a single darwin triple (e.g. x86_64-apple-darwin) \ -+in your targets list (and not a triple for a specific platform such as macos). \ -+You can use variables such as COMPILER_RT_ENABLE_IOS and DARWIN_ios_ARCHS to \ -+control the specific platforms and architectures to build.") - -- if(LLVM_INCLUDE_TESTS) -- set(runtimes-test-depends-${name} runtimes-test-depends) -- set(check-runtimes-${name} check-runtimes) -- list(APPEND ${name}_test_targets runtimes-test-depends-${name} check-runtimes-${name}) -- foreach(target_name IN LISTS SUB_CHECK_TARGETS) -- set(${target_name}-${name} ${target_name}) -- list(APPEND ${name}_test_targets ${target_name}-${name}) -- list(APPEND test_targets ${target_name}-${name}) -+ set(seen_property ${builtin_or_runtime}_darwin_triple_seen) -+ string(REPLACE "-" ";" triple_components ${triple}) -+ foreach(component ${triple_components}) -+ string(TOLOWER "${component}" component_lower) -+ if(component_lower MATCHES "^darwin") -+ get_property(darwin_triple_seen GLOBAL PROPERTY ${seen_property}) -+ if(darwin_triple_seen) -+ message(FATAL_ERROR "${error}") -+ endif() -+ set_property(GLOBAL PROPERTY ${seen_property} YES) -+ if(NOT RUNTIMES_BUILD_ALLOW_DARWIN) -+ message(FATAL_ERROR "\ -+${error} Set RUNTIMES_BUILD_ALLOW_DARWIN to allow a single darwin triple.") -+ endif() -+ elseif(component_lower MATCHES "^ios|^macos|^tvos|^watchos") -+ message(FATAL_ERROR "${error}") -+ endif() - endforeach() -- set(test_targets "${test_targets}" PARENT_SCOPE) -- endif() -+ endfunction() -+ -+ function(builtin_default_target compiler_rt_path) -+ cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN}) - -- set(${name}_extra_args ${ARG_CMAKE_ARGS}) -- get_cmake_property(variableNames VARIABLES) -- foreach(variableName ${variableNames}) -- string(FIND "${variableName}" "RUNTIMES_${target}_" out) -- if("${out}" EQUAL 0) -- string(REPLACE "RUNTIMES_${target}_" "" new_name ${variableName}) -- string(REPLACE ";" "|" new_value "${${variableName}}") -- list(APPEND ${name}_extra_args "-D${new_name}=${new_value}") -+ set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default ON) -+ # AIX should fold 32-bit & 64-bit arch libraries into a single archive. -+ if (TARGET_TRIPLE MATCHES "aix") -+ set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default OFF) - endif() -- endforeach() -- if(NOT "${name}" STREQUAL "${target}") -+ -+ llvm_ExternalProject_Add(builtins -+ ${compiler_rt_path}/lib/builtins -+ DEPENDS ${ARG_DEPENDS} -+ CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} -+ -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} -+ -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} -+ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default} -+ -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} -+ -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE} -+ -DCMAKE_C_COMPILER_WORKS=ON -+ -DCMAKE_ASM_COMPILER_WORKS=ON -+ ${BUILTINS_CMAKE_ARGS} -+ PASSTHROUGH_PREFIXES COMPILER_RT -+ USE_TOOLCHAIN -+ ${EXTRA_ARGS}) -+ endfunction() -+ -+ function(builtin_register_target compiler_rt_path target) -+ cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN}) -+ -+ check_apple_target(${target} builtin) -+ -+ get_cmake_property(variableNames VARIABLES) - foreach(variableName ${variableNames}) -- string(FIND "${variableName}" "RUNTIMES_${name}_" out) -+ string(FIND "${variableName}" "BUILTINS_${target}" out) - if("${out}" EQUAL 0) -- string(REPLACE "RUNTIMES_${name}_" "" new_name ${variableName}) -+ string(REPLACE "BUILTINS_${target}_" "" new_name ${variableName}) - string(REPLACE ";" "|" new_value "${${variableName}}") -- list(APPEND ${name}_extra_args "-D${new_name}=${new_value}") -+ list(APPEND ${target}_extra_args "-D${new_name}=${new_value}") - endif() - endforeach() -- endif() - -- if(NOT RUNTIMES_${name}_LLVM_ENABLE_RUNTIMES AND NOT RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES) -- string(REPLACE ";" "|" LLVM_ENABLE_RUNTIMES_PASSTHROUGH "${LLVM_ENABLE_RUNTIMES}") -- list(APPEND ${name}_extra_args -DLLVM_ENABLE_RUNTIMES=${LLVM_ENABLE_RUNTIMES_PASSTHROUGH}) -+ llvm_ExternalProject_Add(builtins-${target} -+ ${compiler_rt_path}/lib/builtins -+ DEPENDS ${ARG_DEPENDS} -+ CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} -+ -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} -+ -DLLVM_DEFAULT_TARGET_TRIPLE=${target} -+ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON -+ -DCMAKE_C_COMPILER_TARGET=${target} -+ -DCMAKE_ASM_COMPILER_TARGET=${target} -+ -DCMAKE_C_COMPILER_WORKS=ON -+ -DCMAKE_ASM_COMPILER_WORKS=ON -+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -+ ${${target}_extra_args} -+ USE_TOOLCHAIN -+ ${EXTRA_ARGS}) -+ endfunction() -+ -+ # If compiler-rt is present we need to build the builtin libraries first. This -+ # is required because the other runtimes need the builtin libraries present -+ # before the just-built compiler can pass the configuration tests. -+ get_compiler_rt_path(compiler_rt_path) -+ if(compiler_rt_path) -+ if(NOT LLVM_BUILTIN_TARGETS) -+ builtin_default_target(${compiler_rt_path} -+ DEPENDS clang-resource-headers) -+ else() -+ if("default" IN_LIST LLVM_BUILTIN_TARGETS) -+ builtin_default_target(${compiler_rt_path} -+ DEPENDS clang-resource-headers) -+ list(REMOVE_ITEM LLVM_BUILTIN_TARGETS "default") -+ else() -+ add_custom_target(builtins) -+ add_custom_target(install-builtins) -+ add_custom_target(install-builtins-stripped) -+ endif() -+ -+ foreach(target ${LLVM_BUILTIN_TARGETS}) -+ builtin_register_target(${compiler_rt_path} ${target} -+ DEPENDS clang-resource-headers) -+ -+ add_dependencies(builtins builtins-${target}) -+ add_dependencies(install-builtins install-builtins-${target}) -+ add_dependencies(install-builtins-stripped install-builtins-${target}-stripped) -+ endforeach() -+ endif() -+ set(deps builtins) -+ # We don't need to depend on the builtins if we're building instrumented -+ # because the next stage will use the same compiler used to build this stage. -+ if(NOT LLVM_BUILD_INSTRUMENTED AND CLANG_ENABLE_BOOTSTRAP) -+ add_dependencies(clang-bootstrap-deps builtins) -+ endif() - endif() - -- if(target IN_LIST LLVM_RUNTIME_BUILD_ID_LINK_TARGETS) -- list(APPEND EXTRA_ARGS STRIP_TOOL ${CMAKE_CURRENT_BINARY_DIR}/llvm-strip-link) -+ # We create a list the names of all the runtime projects in all uppercase and -+ # with dashes turned to underscores. This gives us the CMake variable prefixes -+ # for all variables that will apply to runtimes. -+ foreach(entry ${runtimes}) -+ get_filename_component(projName ${entry} NAME) -+ string(REPLACE "-" "_" canon_name ${projName}) -+ string(TOUPPER ${canon_name} canon_name) -+ list(APPEND prefixes ${canon_name}) -+ if (${canon_name} STREQUAL "OPENMP") -+ list(APPEND prefixes "LIBOMP" "LIBOMPTARGET") -+ endif() -+ # Many compiler-rt options start with SANITIZER_ rather than COMPILER_RT_, -+ # so when compiler-rt is enabled, consider both. -+ if(canon_name STREQUAL "COMPILER_RT") -+ list(APPEND prefixes SANITIZER) -+ endif() -+ -+ string(FIND ${projName} "lib" LIB_IDX) -+ if(LIB_IDX EQUAL 0) -+ string(SUBSTRING ${projName} 3 -1 projName) -+ endif() -+ list(APPEND runtime_names ${projName}) -+ endforeach() -+ -+ if(LLVM_RUNTIME_BUILD_ID_LINK_TARGETS) -+ configure_file( -+ ${CMAKE_CURRENT_SOURCE_DIR}/llvm-strip-link.in -+ ${CMAKE_CURRENT_BINARY_DIR}/llvm-strip-link -+ @ONLY -+ ) - endif() - -- llvm_ExternalProject_Add(runtimes-${name} -- ${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes -- DEPENDS ${${name}_deps} -- # Builtins were built separately above -- CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off -- -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -- -DLLVM_DEFAULT_TARGET_TRIPLE=${target} -- -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} -- -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON -- -DCMAKE_C_COMPILER_TARGET=${target} -- -DCMAKE_CXX_COMPILER_TARGET=${target} -- -DCMAKE_ASM_COMPILER_TARGET=${target} -- -DCMAKE_C_COMPILER_WORKS=ON -- -DCMAKE_CXX_COMPILER_WORKS=ON -- -DCMAKE_ASM_COMPILER_WORKS=ON -- -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -- -DLLVM_RUNTIMES_TARGET=${name} -- ${${name}_extra_args} -- EXTRA_TARGETS ${${name}_extra_targets} -- ${${name}_test_targets} -- USE_TOOLCHAIN -- ${EXTRA_ARGS}) --endfunction() -+ function(runtime_default_target) -+ cmake_parse_arguments(ARG "" "" "DEPENDS;PREFIXES" ${ARGN}) - --if(runtimes) -- # Create a runtimes target that uses this file as its top-level CMake file. -- # The runtimes target is a configuration of all the runtime libraries -- # together in a single CMake invocaiton. -- if(NOT LLVM_RUNTIME_TARGETS) -- runtime_default_target( -- DEPENDS ${deps} -- PREFIXES ${prefixes}) -- set(test_targets check-runtimes) -- else() -- if("default" IN_LIST LLVM_RUNTIME_TARGETS) -- runtime_default_target( -- DEPENDS ${deps} -- PREFIXES ${prefixes}) -- list(REMOVE_ITEM LLVM_RUNTIME_TARGETS "default") -- else() -- add_custom_target(runtimes) -- add_custom_target(runtimes-configure) -- add_custom_target(install-runtimes) -- add_custom_target(install-runtimes-stripped) -+ include(${LLVM_BINARY_DIR}/runtimes/Components.cmake OPTIONAL) -+ set(SUB_CHECK_TARGETS ${SUB_CHECK_TARGETS} PARENT_SCOPE) -+ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LLVM_BINARY_DIR}/runtimes/Components.cmake) -+ -+ foreach(runtime_name ${runtime_names}) -+ list(APPEND extra_targets -+ ${runtime_name} -+ install-${runtime_name} -+ install-${runtime_name}-stripped) - if(LLVM_INCLUDE_TESTS) -- add_custom_target(check-runtimes) -- add_custom_target(runtimes-test-depends) -- set(test_targets "") -+ list(APPEND test_targets check-${runtime_name}) - endif() -- foreach(runtime_name ${runtime_names}) -- add_custom_target(${runtime_name}) -- add_custom_target(install-${runtime_name}) -- add_custom_target(install-${runtime_name}-stripped) -- endforeach() -- if(LLVM_RUNTIME_DISTRIBUTION_COMPONENTS) -- foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) -- add_custom_target(${component}) -- add_custom_target(install-${component}) -- add_custom_target(install-${component}-stripped) -- endforeach() -+ endforeach() -+ foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) -+ if(NOT ${component} IN_LIST SUB_COMPONENTS) -+ list(APPEND extra_targets ${component} install-${component} install-${component}-stripped) - endif() -+ endforeach() -+ -+ if(LLVM_INCLUDE_TESTS) -+ list(APPEND test_targets runtimes-test-depends check-runtimes) - endif() - -- foreach(name ${LLVM_RUNTIME_TARGETS}) -- runtime_register_target(${name} ${name} -- DEPENDS ${deps}) -+ set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default ON) -+ # AIX should fold 32-bit & 64-bit arch libraries into a single archive. -+ if (TARGET_TRIPLE MATCHES "aix") -+ set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default OFF) -+ endif() -+ -+ llvm_ExternalProject_Add(runtimes -+ ${CMAKE_CURRENT_SOURCE_DIR} -+ DEPENDS ${ARG_DEPENDS} -+ # Builtins were built separately above -+ CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off -+ -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -+ -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} -+ -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} -+ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default} -+ -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} -+ -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} -+ -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE} -+ -DCMAKE_C_COMPILER_WORKS=ON -+ -DCMAKE_CXX_COMPILER_WORKS=ON -+ -DCMAKE_ASM_COMPILER_WORKS=ON -+ ${RUNTIMES_CMAKE_ARGS} -+ PASSTHROUGH_PREFIXES LLVM_ENABLE_RUNTIMES -+ ${ARG_PREFIXES} -+ EXTRA_TARGETS ${extra_targets} -+ ${test_targets} -+ ${SUB_COMPONENTS} -+ ${SUB_CHECK_TARGETS} -+ ${SUB_INSTALL_TARGETS} -+ USE_TOOLCHAIN -+ ${EXTRA_ARGS}) -+ endfunction() -+ -+ # runtime_register_target(target) -+ # Utility function to register external runtime target. -+ function(runtime_register_target name target) -+ cmake_parse_arguments(ARG "" "" "DEPENDS;CMAKE_ARGS" ${ARGN}) -+ include(${LLVM_BINARY_DIR}/runtimes/${name}/Components.cmake OPTIONAL) -+ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LLVM_BINARY_DIR}/runtimes/${name}/Components.cmake) -+ -+ check_apple_target(${target} runtime) -+ -+ set(${name}_deps ${ARG_DEPENDS}) -+ if(NOT name STREQUAL target) -+ list(APPEND ${name}_deps runtimes-${target}) -+ endif() - -- add_dependencies(runtimes runtimes-${name}) -- add_dependencies(runtimes-configure runtimes-${name}-configure) -- add_dependencies(install-runtimes install-runtimes-${name}) -- add_dependencies(install-runtimes-stripped install-runtimes-${name}-stripped) -+ foreach(runtime_name ${runtime_names}) -+ set(${runtime_name}-${name} ${runtime_name}) -+ set(install-${runtime_name}-${name} install-${runtime_name}) -+ set(install-${runtime_name}-${name}-stripped install-${runtime_name}-stripped) -+ list(APPEND ${name}_extra_targets ${runtime_name}-${name} install-${runtime_name}-${name} install-${runtime_name}-${name}-stripped) - if(LLVM_INCLUDE_TESTS) -- add_dependencies(check-runtimes check-runtimes-${name}) -- add_dependencies(runtimes-test-depends runtimes-test-depends-${name}) -+ set(check-${runtime_name}-${name} check-${runtime_name} ) -+ list(APPEND ${name}_test_targets check-${runtime_name}-${name}) - endif() -- foreach(runtime_name ${runtime_names}) -- add_dependencies(${runtime_name} ${runtime_name}-${name}) -- add_dependencies(install-${runtime_name} install-${runtime_name}-${name}) -- add_dependencies(install-${runtime_name}-stripped install-${runtime_name}-${name}-stripped) -+ endforeach() -+ -+ foreach(target_name IN LISTS SUB_COMPONENTS SUB_INSTALL_TARGETS) -+ set(${target_name}-${name} ${target_name}) -+ list(APPEND ${name}_extra_targets ${target_name}-${name}) -+ endforeach() -+ -+ foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) -+ set(${component}-${name} ${component}) -+ set(install-${component}-${name} install-${component}) -+ set(install-${component}-${name}-stripped install-${component}-stripped) -+ list(APPEND ${name}_extra_targets ${component}-${name} install-${component}-${name} install-${component}-${name}-stripped) -+ endforeach() -+ -+ if(LLVM_INCLUDE_TESTS) -+ set(runtimes-test-depends-${name} runtimes-test-depends) -+ set(check-runtimes-${name} check-runtimes) -+ list(APPEND ${name}_test_targets runtimes-test-depends-${name} check-runtimes-${name}) -+ foreach(target_name IN LISTS SUB_CHECK_TARGETS) -+ set(${target_name}-${name} ${target_name}) -+ list(APPEND ${name}_test_targets ${target_name}-${name}) -+ list(APPEND test_targets ${target_name}-${name}) - endforeach() -+ set(test_targets "${test_targets}" PARENT_SCOPE) -+ endif() -+ -+ set(${name}_extra_args ${ARG_CMAKE_ARGS}) -+ get_cmake_property(variableNames VARIABLES) -+ foreach(variableName ${variableNames}) -+ string(FIND "${variableName}" "RUNTIMES_${target}_" out) -+ if("${out}" EQUAL 0) -+ string(REPLACE "RUNTIMES_${target}_" "" new_name ${variableName}) -+ string(REPLACE ";" "|" new_value "${${variableName}}") -+ list(APPEND ${name}_extra_args "-D${new_name}=${new_value}") -+ endif() - endforeach() -+ if(NOT "${name}" STREQUAL "${target}") -+ foreach(variableName ${variableNames}) -+ string(FIND "${variableName}" "RUNTIMES_${name}_" out) -+ if("${out}" EQUAL 0) -+ string(REPLACE "RUNTIMES_${name}_" "" new_name ${variableName}) -+ string(REPLACE ";" "|" new_value "${${variableName}}") -+ list(APPEND ${name}_extra_args "-D${new_name}=${new_value}") -+ endif() -+ endforeach() -+ endif() -+ -+ if(NOT RUNTIMES_${name}_LLVM_ENABLE_RUNTIMES AND NOT RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES) -+ string(REPLACE ";" "|" LLVM_ENABLE_RUNTIMES_PASSTHROUGH "${LLVM_ENABLE_RUNTIMES}") -+ list(APPEND ${name}_extra_args -DLLVM_ENABLE_RUNTIMES=${LLVM_ENABLE_RUNTIMES_PASSTHROUGH}) -+ endif() -+ -+ if(target IN_LIST LLVM_RUNTIME_BUILD_ID_LINK_TARGETS) -+ list(APPEND EXTRA_ARGS STRIP_TOOL ${CMAKE_CURRENT_BINARY_DIR}/llvm-strip-link) -+ endif() - -- foreach(multilib ${LLVM_RUNTIME_MULTILIBS}) -- foreach(name ${LLVM_RUNTIME_MULTILIB_${multilib}_TARGETS}) -- runtime_register_target(${name}+${multilib} ${name} -- DEPENDS runtimes-${name} -- CMAKE_ARGS -DLLVM_RUNTIMES_PREFIX=${name}/ -- -DLLVM_RUNTIMES_LIBDIR_SUBDIR=${multilib}) -- add_dependencies(runtimes runtimes-${name}+${multilib}) -- add_dependencies(runtimes-configure runtimes-${name}+${multilib}-configure) -- add_dependencies(install-runtimes install-runtimes-${name}+${multilib}) -- add_dependencies(install-runtimes-stripped install-runtimes-${name}+${multilib}-stripped) -+ llvm_ExternalProject_Add(runtimes-${name} -+ ${CMAKE_CURRENT_SOURCE_DIR} -+ DEPENDS ${${name}_deps} -+ # Builtins were built separately above -+ CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off -+ -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -+ -DLLVM_DEFAULT_TARGET_TRIPLE=${target} -+ -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} -+ -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON -+ -DCMAKE_C_COMPILER_TARGET=${target} -+ -DCMAKE_CXX_COMPILER_TARGET=${target} -+ -DCMAKE_ASM_COMPILER_TARGET=${target} -+ -DCMAKE_C_COMPILER_WORKS=ON -+ -DCMAKE_CXX_COMPILER_WORKS=ON -+ -DCMAKE_ASM_COMPILER_WORKS=ON -+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -+ -DLLVM_RUNTIMES_TARGET=${name} -+ ${${name}_extra_args} -+ EXTRA_TARGETS ${${name}_extra_targets} -+ ${${name}_test_targets} -+ USE_TOOLCHAIN -+ ${EXTRA_ARGS}) -+ endfunction() -+ -+ if(runtimes) -+ # Create a runtimes target that uses this file as its top-level CMake file. -+ # The runtimes target is a configuration of all the runtime libraries -+ # together in a single CMake invocaiton. -+ if(NOT LLVM_RUNTIME_TARGETS) -+ runtime_default_target( -+ DEPENDS ${deps} -+ PREFIXES ${prefixes}) -+ set(test_targets check-runtimes) -+ else() -+ if("default" IN_LIST LLVM_RUNTIME_TARGETS) -+ runtime_default_target( -+ DEPENDS ${deps} -+ PREFIXES ${prefixes}) -+ list(REMOVE_ITEM LLVM_RUNTIME_TARGETS "default") -+ else() -+ add_custom_target(runtimes) -+ add_custom_target(runtimes-configure) -+ add_custom_target(install-runtimes) -+ add_custom_target(install-runtimes-stripped) -+ if(LLVM_INCLUDE_TESTS) -+ add_custom_target(check-runtimes) -+ add_custom_target(runtimes-test-depends) -+ set(test_targets "") -+ endif() -+ foreach(runtime_name ${runtime_names}) -+ add_custom_target(${runtime_name}) -+ add_custom_target(install-${runtime_name}) -+ add_custom_target(install-${runtime_name}-stripped) -+ endforeach() -+ if(LLVM_RUNTIME_DISTRIBUTION_COMPONENTS) -+ foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) -+ add_custom_target(${component}) -+ add_custom_target(install-${component}) -+ add_custom_target(install-${component}-stripped) -+ endforeach() -+ endif() -+ endif() -+ -+ foreach(name ${LLVM_RUNTIME_TARGETS}) -+ runtime_register_target(${name} ${name} -+ DEPENDS ${deps}) -+ -+ add_dependencies(runtimes runtimes-${name}) -+ add_dependencies(runtimes-configure runtimes-${name}-configure) -+ add_dependencies(install-runtimes install-runtimes-${name}) -+ add_dependencies(install-runtimes-stripped install-runtimes-${name}-stripped) -+ if(LLVM_INCLUDE_TESTS) -+ add_dependencies(check-runtimes check-runtimes-${name}) -+ add_dependencies(runtimes-test-depends runtimes-test-depends-${name}) -+ endif() - foreach(runtime_name ${runtime_names}) -- add_dependencies(${runtime_name} ${runtime_name}-${name}+${multilib}) -- add_dependencies(install-${runtime_name} install-${runtime_name}-${name}+${multilib}) -- add_dependencies(install-${runtime_name}-stripped install-${runtime_name}-${name}+${multilib}-stripped) -+ add_dependencies(${runtime_name} ${runtime_name}-${name}) -+ add_dependencies(install-${runtime_name} install-${runtime_name}-${name}) -+ add_dependencies(install-${runtime_name}-stripped install-${runtime_name}-${name}-stripped) - endforeach() - endforeach() -- endforeach() -- endif() - -- if(NOT LLVM_BUILD_INSTRUMENTED AND CLANG_ENABLE_BOOTSTRAP) -- # TODO: This is a hack needed because the libcxx headers are copied into the -- # build directory during configuration. Without that step the clang in the -- # build directory cannot find the C++ headers in certain configurations. -- # I need to build a mechanism for runtime projects to provide CMake code -- # that executes at LLVM configuration time to handle this case. -- add_dependencies(clang-bootstrap-deps runtimes-configure) -- # We need to add the runtimes as a dependency because compiler-rt can be -- # built as part of runtimes and we need the profile runtime for PGO -- add_dependencies(clang-bootstrap-deps runtimes) -- endif() -+ foreach(multilib ${LLVM_RUNTIME_MULTILIBS}) -+ foreach(name ${LLVM_RUNTIME_MULTILIB_${multilib}_TARGETS}) -+ runtime_register_target(${name}+${multilib} ${name} -+ DEPENDS runtimes-${name} -+ CMAKE_ARGS -DLLVM_RUNTIMES_PREFIX=${name}/ -+ -DLLVM_RUNTIMES_LIBDIR_SUBDIR=${multilib}) -+ add_dependencies(runtimes runtimes-${name}+${multilib}) -+ add_dependencies(runtimes-configure runtimes-${name}+${multilib}-configure) -+ add_dependencies(install-runtimes install-runtimes-${name}+${multilib}) -+ add_dependencies(install-runtimes-stripped install-runtimes-${name}+${multilib}-stripped) -+ foreach(runtime_name ${runtime_names}) -+ add_dependencies(${runtime_name} ${runtime_name}-${name}+${multilib}) -+ add_dependencies(install-${runtime_name} install-${runtime_name}-${name}+${multilib}) -+ add_dependencies(install-${runtime_name}-stripped install-${runtime_name}-${name}+${multilib}-stripped) -+ endforeach() -+ endforeach() -+ endforeach() -+ endif() - -- if(LLVM_INCLUDE_TESTS) -- set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS runtimes-test-depends) -- set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_TARGETS check-runtimes) -- -- set(RUNTIMES_TEST_DEPENDS -- FileCheck -- count -- llvm-nm -- llvm-objdump -- llvm-xray -- not -- obj2yaml -- sancov -- sanstats -- gtest_main -- gtest -- ) -- foreach(target ${test_targets} ${SUB_CHECK_TARGETS}) -- add_dependencies(${target} ${RUNTIMES_TEST_DEPENDS}) -- endforeach() -+ if(NOT LLVM_BUILD_INSTRUMENTED AND CLANG_ENABLE_BOOTSTRAP) -+ # TODO: This is a hack needed because the libcxx headers are copied into the -+ # build directory during configuration. Without that step the clang in the -+ # build directory cannot find the C++ headers in certain configurations. -+ # I need to build a mechanism for runtime projects to provide CMake code -+ # that executes at LLVM configuration time to handle this case. -+ add_dependencies(clang-bootstrap-deps runtimes-configure) -+ # We need to add the runtimes as a dependency because compiler-rt can be -+ # built as part of runtimes and we need the profile runtime for PGO -+ add_dependencies(clang-bootstrap-deps runtimes) -+ endif() -+ -+ if(LLVM_INCLUDE_TESTS) -+ set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS runtimes-test-depends) -+ set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_TARGETS check-runtimes) -+ -+ set(RUNTIMES_TEST_DEPENDS -+ FileCheck -+ count -+ llvm-nm -+ llvm-objdump -+ llvm-xray -+ not -+ obj2yaml -+ sancov -+ sanstats -+ gtest_main -+ gtest -+ ) -+ foreach(target ${test_targets} ${SUB_CHECK_TARGETS}) -+ add_dependencies(${target} ${RUNTIMES_TEST_DEPENDS}) -+ endforeach() -+ endif() - endif() - endif() -diff --git a/runtimes/Components.cmake.in b/llvm/runtimes/Components.cmake.in -similarity index 100% -rename from runtimes/Components.cmake.in -rename to llvm/runtimes/Components.cmake.in -diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt -deleted file mode 100644 -index a1017d91f36a..000000000000 ---- a/runtimes/CMakeLists.txt -+++ /dev/null -@@ -1,203 +0,0 @@ --# This file handles building LLVM runtime sub-projects. --cmake_minimum_required(VERSION 3.13.4) --project(Runtimes C CXX ASM) -- --set(LLVM_ALL_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind;openmp") --set(LLVM_ENABLE_RUNTIMES "" CACHE STRING -- "Semicolon-separated list of runtimes to build (${LLVM_ALL_RUNTIMES}), or \"all\".") --if(LLVM_ENABLE_RUNTIMES STREQUAL "all" ) -- set(LLVM_ENABLE_RUNTIMES ${LLVM_ALL_RUNTIMES}) --endif() -- --foreach(proj ${LLVM_ENABLE_RUNTIMES}) -- set(proj_dir "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") -- if(IS_DIRECTORY ${proj_dir} AND EXISTS ${proj_dir}/CMakeLists.txt) -- list(APPEND runtimes ${proj_dir}) -- else() -- message(FATAL_ERROR "LLVM_ENABLE_RUNTIMES requests ${proj} but directory not found: ${proj_dir}") -- endif() -- string(TOUPPER "${proj}" canon_name) -- STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) -- set(LLVM_EXTERNAL_${canon_name}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${proj}") --endforeach() -- --function(runtime_register_component name) -- set_property(GLOBAL APPEND PROPERTY SUB_COMPONENTS ${name}) --endfunction() -- --find_package(LLVM PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) --find_package(Clang PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) -- --# Add path for custom and the LLVM build's modules to the CMake module path. --list(INSERT CMAKE_MODULE_PATH 0 -- "${CMAKE_CURRENT_SOURCE_DIR}/cmake" -- "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" -- "${CMAKE_CURRENT_SOURCE_DIR}/../llvm/cmake" -- "${CMAKE_CURRENT_SOURCE_DIR}/../llvm/cmake/modules" --) -- --function(get_compiler_rt_path path) -- foreach(entry ${runtimes}) -- get_filename_component(projName ${entry} NAME) -- if("${projName}" MATCHES "compiler-rt") -- set(${path} ${entry} PARENT_SCOPE) -- return() -- endif() -- endforeach() --endfunction() -- --# Some of the runtimes will conditionally use the compiler-rt sanitizers --# to make this work smoothly we ensure that compiler-rt is added first in --# the list of sub-projects. This allows other sub-projects to have checks --# like `if(TARGET asan)` to enable building with asan. --get_compiler_rt_path(compiler_rt_path) --if(compiler_rt_path) -- list(REMOVE_ITEM runtimes ${compiler_rt_path}) -- if(NOT DEFINED LLVM_BUILD_COMPILER_RT OR LLVM_BUILD_COMPILER_RT) -- list(INSERT runtimes 0 ${compiler_rt_path}) -- endif() --endif() -- --# Setting these variables will allow the sub-build to put their outputs into --# the library and bin directories of the top-level build. --set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR}) --set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR}) -- --# This variable makes sure that e.g. llvm-lit is found. --set(LLVM_MAIN_SRC_DIR ${LLVM_BUILD_MAIN_SRC_DIR}) --set(LLVM_CMAKE_PATH ${LLVM_MAIN_SRC_DIR}/cmake/modules) -- --# This variable is used by individual runtimes to locate LLVM files. --set(LLVM_PATH ${LLVM_BUILD_MAIN_SRC_DIR}) -- --if(APPLE) -- set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "") --endif() -- --include(CheckLibraryExists) --include(CheckCCompilerFlag) -- --# Disable use of the installed C++ standard library when building runtimes. If --# MSVC is true, we must be using the clang-cl driver, which doesn't understand --# these flags. --if (NOT MSVC) -- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdinc++ -nostdlib++") -- -- if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR AND "libcxx" IN_LIST LLVM_ENABLE_RUNTIMES) -- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -isystem ${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}/include") -- endif() --endif() -- --# Avoid checking whether the compiler is working. --set(LLVM_COMPILER_CHECKED ON) -- --# Handle common options used by all runtimes. --include(AddLLVM) --include(HandleLLVMOptions) --include(FindPythonInterp) -- --# Remove the -nostdlib++ option we've added earlier. --string(REPLACE "-nostdlib++" "" CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") -- --# Use libtool instead of ar if you are both on an Apple host, and targeting Apple. --if(CMAKE_HOST_APPLE AND APPLE) -- include(UseLibtool) --endif() -- --# This can be used to detect whether we're in the runtimes build. --set(RUNTIMES_BUILD ON) -- --foreach(entry ${runtimes}) -- get_filename_component(projName ${entry} NAME) -- -- # TODO: Clean this up as part of an interface standardization -- string(REPLACE "-" "_" canon_name ${projName}) -- string(TOUPPER ${canon_name} canon_name) -- -- # The subdirectories need to treat this as standalone builds. D57992 tried -- # to get rid of this, but the runtimes treat *_STANDALONE_BUILD=OFF as if -- # llvm & clang are configured in the same CMake, and setup dependencies -- # against their targets. OpenMP has fixed the issue so we don't set the -- # variable. -- if (NOT ${canon_name} STREQUAL "OPENMP") -- set(${canon_name}_STANDALONE_BUILD ON) -- endif() -- -- if(LLVM_RUNTIMES_LIBDIR_SUBDIR) -- set(${canon_name}_LIBDIR_SUBDIR "${LLVM_RUNTIMES_LIBDIR_SUBDIR}" CACHE STRING "" FORCE) -- endif() -- -- # Setting a variable to let sub-projects detect which other projects -- # will be included under here. -- set(HAVE_${canon_name} ON) --endforeach() -- --# We do this in two loops so that HAVE_* is set for each runtime before the --# other runtimes are added. --foreach(entry ${runtimes}) -- get_filename_component(projName ${entry} NAME) -- -- # Between each sub-project we want to cache and clear the LIT properties -- set_property(GLOBAL PROPERTY LLVM_LIT_TESTSUITES) -- set_property(GLOBAL PROPERTY LLVM_LIT_PARAMS) -- set_property(GLOBAL PROPERTY LLVM_LIT_DEPENDS) -- set_property(GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) -- -- add_subdirectory(${entry} ${projName}) -- -- get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) -- get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) -- get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) -- get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) -- -- list(APPEND RUNTIMES_LIT_TESTSUITES ${LLVM_LIT_TESTSUITES}) -- list(APPEND RUNTIMES_LIT_PARAMS ${LLVM_LIT_PARAMS}) -- list(APPEND RUNTIMES_LIT_DEPENDS ${LLVM_LIT_DEPENDS}) -- list(APPEND RUNTIMES_LIT_EXTRA_ARGS ${LLVM_LIT_EXTRA_ARGS}) --endforeach() -- --if(LLVM_INCLUDE_TESTS) -- # Add a global check rule now that all subdirectories have been traversed -- # and we know the total set of lit testsuites. -- -- add_lit_target(check-runtimes -- "Running all regression tests" -- ${RUNTIMES_LIT_TESTSUITES} -- PARAMS ${RUNTIMES_LIT_PARAMS} -- DEPENDS ${RUNTIMES_LIT_DEPENDS} -- ARGS ${RUNTIMES_LIT_EXTRA_ARGS} -- ) -- add_custom_target(runtimes-test-depends DEPENDS ${RUNTIMES_LIT_DEPENDS}) --endif() -- --get_property(SUB_COMPONENTS GLOBAL PROPERTY SUB_COMPONENTS) --if(SUB_COMPONENTS) -- list(REMOVE_DUPLICATES SUB_COMPONENTS) -- foreach(component ${SUB_COMPONENTS}) -- if(NOT TARGET ${component}) -- message(SEND_ERROR "Missing target for runtime component ${component}!") -- continue() -- endif() -- -- if(TARGET check-${component}) -- list(APPEND SUB_CHECK_TARGETS check-${component}) -- endif() -- -- if(TARGET install-${component}) -- list(APPEND SUB_INSTALL_TARGETS install-${component}) -- endif() -- if(TARGET install-${component}-stripped) -- list(APPEND SUB_INSTALL_TARGETS install-${component}-stripped) -- endif() -- endforeach() -- -- if(LLVM_RUNTIMES_TARGET) -- configure_file( -- ${CMAKE_CURRENT_SOURCE_DIR}/Components.cmake.in -- ${LLVM_BINARY_DIR}/runtimes/${LLVM_RUNTIMES_TARGET}/Components.cmake) -- else() -- configure_file( -- ${CMAKE_CURRENT_SOURCE_DIR}/Components.cmake.in -- ${LLVM_BINARY_DIR}/runtimes/Components.cmake) -- endif() --endif() diff --git a/build/build-clang/revert-llvmorg-13-init-7827-g2a078c307204.patch b/build/build-clang/revert-llvmorg-13-init-7827-g2a078c307204.patch new file mode 100644 index 000000000000..b8df15f06eb0 --- /dev/null +++ b/build/build-clang/revert-llvmorg-13-init-7827-g2a078c307204.patch @@ -0,0 +1,12 @@ +diff --git a/llvm/lib/IR/Attributes.cpp b/llvm/lib/IR/Attributes.cpp +index 368fc87dc801..96c2388d776e 100644 +--- a/llvm/lib/IR/Attributes.cpp ++++ b/llvm/lib/IR/Attributes.cpp +@@ -1902,7 +1902,6 @@ AttrBuilder AttributeFuncs::typeIncompatible(Type *Ty) { + .addAttribute(Attribute::ReadNone) + .addAttribute(Attribute::ReadOnly) + .addAttribute(Attribute::SwiftError) +- .addAlignmentAttr(1) // the int here is ignored + .addDereferenceableAttr(1) // the int here is ignored + .addDereferenceableOrNullAttr(1) // the int here is ignored + .addPreallocatedAttr(Ty) diff --git a/build/build-clang/revert-r362047-and-r362065_clang_12.patch b/build/build-clang/revert-r362047-and-r362065_clang_12.patch deleted file mode 100644 index 881ffed4be5e..000000000000 --- a/build/build-clang/revert-r362047-and-r362065_clang_12.patch +++ /dev/null @@ -1,68 +0,0 @@ -Bisection found that r362047 (and its followup build fix r362065) cause the -build to install the android PGO library into the following location: -stage2/clang/lib/linux/libclang_rt.profile-arm-android.a -rather than the expected: -stage2/clang/lib64/clang/$VERSION/lib/linux/libclang_rt.profile-arm-android.a - -For lack of any progress in debugging this, revert those two patches. - -diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt -index d2f5d6bf80f0..424f4da01f77 100644 ---- a/llvm/runtimes/CMakeLists.txt -+++ b/llvm/runtimes/CMakeLists.txt -@@ -59,7 +59,6 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - cmake_minimum_required(VERSION 3.13.4) - project(Runtimes C CXX ASM) - -- find_package(LLVM PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - find_package(Clang PATHS "${LLVM_BINARY_DIR}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - - # Add the root project's CMake modules, and the LLVM build's modules to the -@@ -67,6 +66,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - list(INSERT CMAKE_MODULE_PATH 0 - "${CMAKE_CURRENT_SOURCE_DIR}/../cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules" -+ "${LLVM_LIBRARY_DIR}/cmake/llvm" - ) - - # Some of the runtimes will conditionally use the compiler-rt sanitizers -@@ -81,6 +81,11 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - endif() - endif() - -+ # LLVMConfig.cmake contains a bunch of CMake variables from the LLVM build. -+ # This file is installed as part of LLVM distributions, so this can be used -+ # either from a build directory or an installed LLVM. -+ include(LLVMConfig) -+ - # Setting these variables will allow the sub-build to put their outputs into - # the library and bin directories of the top-level build. - set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR}) -@@ -90,9 +95,6 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - set(LLVM_MAIN_SRC_DIR ${LLVM_BUILD_MAIN_SRC_DIR}) - set(LLVM_CMAKE_PATH ${LLVM_MAIN_SRC_DIR}/cmake/modules) - -- # This variable is used by individual runtimes to locate LLVM files. -- set(LLVM_PATH ${LLVM_BUILD_MAIN_SRC_DIR}) -- - if(APPLE) - set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "") - endif() -@@ -421,6 +423,8 @@ ${error} Set RUNTIMES_BUILD_ALLOW_DARWIN to allow a single darwin triple.") - # Builtins were built separately above - CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off - -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -+ -DLLVM_BINARY_DIR=${LLVM_BINARY_DIR} -+ -DLLVM_LIBRARY_DIR=${LLVM_LIBRARY_DIR} - -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} - -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} - -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default} -@@ -527,6 +531,8 @@ ${error} Set RUNTIMES_BUILD_ALLOW_DARWIN to allow a single darwin triple.") - # Builtins were built separately above - CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off - -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -+ -DLLVM_BINARY_DIR=${LLVM_BINARY_DIR} -+ -DLLVM_LIBRARY_DIR=${LLVM_LIBRARY_DIR} - -DLLVM_DEFAULT_TARGET_TRIPLE=${target} - -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} - -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON diff --git a/mobile/android/config/mozconfigs/common b/mobile/android/config/mozconfigs/common index 895d3386a930..a9d704370fb0 100644 --- a/mobile/android/config/mozconfigs/common +++ b/mobile/android/config/mozconfigs/common @@ -40,4 +40,9 @@ fi # Package js shell. export MOZ_PACKAGE_JSSHELL=1 +if [ -d "$MOZ_FETCHES_DIR/binutils/bin" ]; then + mk_add_options "export PATH=$MOZ_FETCHES_DIR/binutils/bin:$PATH" + export LDFLAGS="$LDFLAGS -B $MOZ_FETCHES_DIR/binutils/bin" +fi + JS_BINARY="$topsrcdir/mobile/android/config/js_wrapper.sh" diff --git a/mozglue/build/TsanOptions.cpp b/mozglue/build/TsanOptions.cpp index 97236a8c63ee..b048a62dd951 100644 --- a/mozglue/build/TsanOptions.cpp +++ b/mozglue/build/TsanOptions.cpp @@ -302,6 +302,7 @@ extern "C" const char* __tsan_default_suppressions() { "race:js::wasm::Code::bestTier\n" "race:js::wasm::Code::commitTier2\n" "race:js::wasm::Code::setTier2\n" + "race:js::wasm::Code::setAndBorrowTier2\n" // End of suppressions. ; // Please keep this semicolon. diff --git a/taskcluster/ci/fetch/toolchains.yml b/taskcluster/ci/fetch/toolchains.yml index 6be5cef8a527..7770bdb8d2b8 100644 --- a/taskcluster/ci/fetch/toolchains.yml +++ b/taskcluster/ci/fetch/toolchains.yml @@ -380,6 +380,13 @@ clang-12: repo: https://github.com/llvm/llvm-project revision: fed41342a82f5a3a9201819a82bf7a48313e296b +clang-13: + description: clang 13.0.0 source code + fetch: + type: git + repo: https://github.com/llvm/llvm-project + revision: d7b669b3a30345cfcdb2fde2af6f48aa4b94845d + clang-trunk: description: clang main branch source code attributes: diff --git a/taskcluster/ci/instrumented-build/kind.yml b/taskcluster/ci/instrumented-build/kind.yml index 0e6eb28b2b83..6337bcc64ee5 100644 --- a/taskcluster/ci/instrumented-build/kind.yml +++ b/taskcluster/ci/instrumented-build/kind.yml @@ -169,6 +169,8 @@ jobs: - android-gradle-dependencies - android-ndk-linux - android-sdk-linux + # Workaround issues in binutils from the ndk with the compiler-rt from clang-13 + - linux64-binutils - linux64-clang-android-cross - linux64-rust-android - linux64-rust-size diff --git a/taskcluster/ci/spidermonkey/linux.yml b/taskcluster/ci/spidermonkey/linux.yml index 7ba9e3d06f1f..aaa7c82b5bbd 100644 --- a/taskcluster/ci/spidermonkey/linux.yml +++ b/taskcluster/ci/spidermonkey/linux.yml @@ -430,7 +430,9 @@ sm-fuzzing-linux64/opt: spidermonkey-variant: fuzzing fetches: toolchain: - - linux64-clang + # Keep this with clang-12 until we move to rust 1.56 that uses the same + # LLVM-13 backend as clang-13 + - linux64-clang-12 - linux64-rust - linux64-cbindgen - linux64-dump_syms diff --git a/taskcluster/ci/toolchain/cbindgen.yml b/taskcluster/ci/toolchain/cbindgen.yml index 4bf6d57000b2..c142a9dd6f90 100644 --- a/taskcluster/ci/toolchain/cbindgen.yml +++ b/taskcluster/ci/toolchain/cbindgen.yml @@ -28,7 +28,7 @@ linux64-cbindgen: arguments: ['x86_64-unknown-linux-gnu'] fetches: toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-rust-1.47 - sysroot-x86_64-linux-gnu @@ -39,8 +39,8 @@ macosx64-cbindgen: arguments: ['x86_64-apple-darwin'] fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - linux64-rust-macos-1.47 - macosx64-sdk-11.0 @@ -51,8 +51,8 @@ macosx64-aarch64-cbindgen: arguments: ['aarch64-apple-darwin'] fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - linux64-rust-macos-1.49 - macosx64-sdk-11.0 diff --git a/taskcluster/ci/toolchain/cctools-port.yml b/taskcluster/ci/toolchain/cctools-port.yml index 9e6afda48803..20dfe24be472 100644 --- a/taskcluster/ci/toolchain/cctools-port.yml +++ b/taskcluster/ci/toolchain/cctools-port.yml @@ -13,15 +13,15 @@ job-defaults: - libtapi - ldid -linux64-cctools-port-clang-12: +linux64-cctools-port-clang-13: treeherder: - symbol: TL(cctools-clang-12) + symbol: TL(cctools-clang-13) run: script: build-cctools-port.sh toolchain-alias: linux64-cctools-port toolchain-artifact: public/build/cctools.tar.zst fetches: toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-binutils - linux64-toolchain-sysroot diff --git a/taskcluster/ci/toolchain/clang-tidy.yml b/taskcluster/ci/toolchain/clang-tidy.yml index dac5f3d24d84..06394193564f 100644 --- a/taskcluster/ci/toolchain/clang-tidy.yml +++ b/taskcluster/ci/toolchain/clang-tidy.yml @@ -23,7 +23,7 @@ job-defaults: - 'build/build-clang/build-clang.py' fetches: fetch: - - clang-12 + - clang-13 linux64-clang-tidy: index: @@ -40,7 +40,7 @@ linux64-clang-tidy: - trunk fetches: toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-toolchain-sysroot macosx64-clang-tidy: @@ -59,8 +59,8 @@ macosx64-clang-tidy: - trunk fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12-macosx-cross + - linux64-cctools-port-clang-13 + - linux64-clang-13-macosx-cross - macosx64-sdk-11.0 macosx64-arch64-clang-tidy: @@ -82,8 +82,8 @@ macosx64-arch64-clang-tidy: - trunk fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12-macosx-cross + - linux64-cctools-port-clang-13 + - linux64-clang-13-macosx-cross - macosx64-sdk-11.0 win64-clang-tidy: @@ -136,5 +136,5 @@ linux64-clang-tidy-external: fetch: - civet-source toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-toolchain-sysroot diff --git a/taskcluster/ci/toolchain/clang.yml b/taskcluster/ci/toolchain/clang.yml index cf344aaabfc2..6ff87c563984 100644 --- a/taskcluster/ci/toolchain/clang.yml +++ b/taskcluster/ci/toolchain/clang.yml @@ -46,8 +46,8 @@ linux64-clang-7: toolchain: - linux64-toolchain-sysroot -linux64-clang-12-mingw-x86: - description: "MinGW-Clang 12 x86 toolchain build" +linux64-clang-13-mingw-x86: + description: "MinGW-Clang 13 x86 toolchain build" treeherder: symbol: TMW(clang-x86) worker-type: b-linux @@ -59,16 +59,16 @@ linux64-clang-12-mingw-x86: toolchain-artifact: public/build/clangmingw.tar.zst fetches: fetch: - - clang-12 + - clang-13 - mingw-w64 - libunwind - llvm-mingw - gcc-9.3.0 toolchain: - - linux64-clang-12 + - linux64-clang-13 -linux64-clang-12-mingw-x64: - description: "MinGW-Clang 12 x64 toolchain build" +linux64-clang-13-mingw-x64: + description: "MinGW-Clang 13 x64 toolchain build" treeherder: symbol: TMW(clang-x64) tier: 1 @@ -81,13 +81,13 @@ linux64-clang-12-mingw-x64: toolchain-artifact: public/build/clangmingw.tar.zst fetches: fetch: - - clang-12 + - clang-13 - mingw-w64 - libunwind - llvm-mingw - gcc-9.3.0 toolchain: - - linux64-clang-12 + - linux64-clang-13 linux64-clang-10: description: "Clang 10 toolchain build" @@ -144,19 +144,40 @@ linux64-clang-12: - 'build/build-clang/clang-12-linux64.json' resources: - 'build/build-clang/clang-12-linux64.json' - toolchain-alias: linux64-clang toolchain-artifact: public/build/clang.tar.zst fetches: fetch: - clang-12 toolchain: - linux64-toolchain-sysroot - - wasm32-wasi-compiler-rt-12 -linux64-clang-12-android-cross: - description: "Clang 12 toolchain build" +linux64-clang-13: + description: "Clang 13 toolchain build" + attributes: + local-toolchain: true treeherder: - symbol: TL(clang12-android) + symbol: TL(clang13) + run-on-projects: [trunk] + run: + using: toolchain-script + script: build-clang.sh + arguments: + - 'build/build-clang/clang-13-linux64.json' + resources: + - 'build/build-clang/clang-13-linux64.json' + toolchain-alias: linux64-clang + toolchain-artifact: public/build/clang.tar.zst + fetches: + fetch: + - clang-13 + toolchain: + - linux64-toolchain-sysroot + - wasm32-wasi-compiler-rt-13 + +linux64-clang-13-android-cross: + description: "Clang 13 toolchain build" + treeherder: + symbol: TL(clang13-android) run: using: toolchain-script script: repack-clang-linux-cross.sh @@ -168,30 +189,30 @@ linux64-clang-12-android-cross: toolchain-alias: linux64-clang-android-cross toolchain-artifact: public/build/clang.tar.zst dependencies: - android-aarch64-compiler-rt-12: toolchain-android-aarch64-compiler-rt-12 - android-arm-compiler-rt-12: toolchain-android-arm-compiler-rt-12 - android-x86-compiler-rt-12: toolchain-android-x86-compiler-rt-12 - android-x64-compiler-rt-12: toolchain-android-x64-compiler-rt-12 + android-aarch64-compiler-rt-13: toolchain-android-aarch64-compiler-rt-13 + android-arm-compiler-rt-13: toolchain-android-arm-compiler-rt-13 + android-x86-compiler-rt-13: toolchain-android-x86-compiler-rt-13 + android-x64-compiler-rt-13: toolchain-android-x64-compiler-rt-13 fetches: toolchain: - - linux64-clang-12 - android-aarch64-compiler-rt-12: + - linux64-clang-13 + android-aarch64-compiler-rt-13: - artifact: compiler-rt.tar.zst dest: aarch64 - android-arm-compiler-rt-12: + android-arm-compiler-rt-13: - artifact: compiler-rt.tar.zst dest: arm - android-x86-compiler-rt-12: + android-x86-compiler-rt-13: - artifact: compiler-rt.tar.zst dest: x86 - android-x64-compiler-rt-12: + android-x64-compiler-rt-13: - artifact: compiler-rt.tar.zst dest: x64 -linux64-clang-12-aarch64-cross: - description: "Clang 12 toolchain build with aarch64 runtime" +linux64-clang-13-aarch64-cross: + description: "Clang 13 toolchain build with aarch64 runtime" treeherder: - symbol: TL(clang12-aarch64) + symbol: TL(clang13-aarch64) worker-type: b-linux worker: max-run-time: 600 @@ -200,17 +221,17 @@ linux64-clang-12-aarch64-cross: toolchain-alias: linux64-clang-aarch64-cross toolchain-artifact: public/build/clang.tar.zst dependencies: - linux64-aarch64-compiler-rt-12: toolchain-linux64-aarch64-compiler-rt-12 + linux64-aarch64-compiler-rt-13: toolchain-linux64-aarch64-compiler-rt-13 fetches: toolchain: - - linux64-clang-12 - linux64-aarch64-compiler-rt-12: + - linux64-clang-13 + linux64-aarch64-compiler-rt-13: - artifact: compiler-rt.tar.zst -linux64-clang-12-macosx-cross: - description: "Clang 12 toolchain repack with MacOS Compiler RT libs" +linux64-clang-13-macosx-cross: + description: "Clang 13 toolchain repack with MacOS Compiler RT libs" treeherder: - symbol: TL(clang12-macosx-cross) + symbol: TL(clang13-macosx-cross) worker-type: b-linux worker: max-run-time: 600 @@ -219,23 +240,23 @@ linux64-clang-12-macosx-cross: toolchain-alias: linux64-clang-macosx-cross toolchain-artifact: public/build/clang.tar.zst dependencies: - macosx64-aarch64-compiler-rt-12: toolchain-macosx64-aarch64-compiler-rt-12 - macosx64-x64-compiler-rt-12: toolchain-macosx64-x64-compiler-rt-12 + macosx64-aarch64-compiler-rt-13: toolchain-macosx64-aarch64-compiler-rt-13 + macosx64-x64-compiler-rt-13: toolchain-macosx64-x64-compiler-rt-13 fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 - macosx64-aarch64-compiler-rt-12: + - linux64-cctools-port-clang-13 + - linux64-clang-13 + macosx64-aarch64-compiler-rt-13: - artifact: compiler-rt.tar.zst dest: aarch64 - macosx64-x64-compiler-rt-12: + macosx64-x64-compiler-rt-13: - artifact: compiler-rt.tar.zst dest: x86_64 -linux64-clang-12-win-cross: - description: "Clang 12 toolchain repack with Windows Compiler RT libs" +linux64-clang-13-win-cross: + description: "Clang 13 toolchain repack with Windows Compiler RT libs" treeherder: - symbol: TL(clang12-win-cross) + symbol: TL(clang13-win-cross) worker-type: b-linux worker: max-run-time: 600 @@ -244,22 +265,22 @@ linux64-clang-12-win-cross: toolchain-alias: linux64-clang-win-cross toolchain-artifact: public/build/clang.tar.zst dependencies: - win64-clang-12-2stage: toolchain-win64-clang-12-2stage + win64-clang-13-2stage: toolchain-win64-clang-13-2stage fetches: toolchain: - - linux64-clang-12 - win64-clang-12-2stage: + - linux64-clang-13 + win64-clang-13-2stage: # Put this into a new directory so it doesn't conflict with the linux toolchain - artifact: clang.tar.zst dest: clang-cl extract: false -macosx64-clang-12: - description: "Clang 12 toolchain build" +macosx64-clang-13: + description: "Clang 13 toolchain build" attributes: local-toolchain: true treeherder: - symbol: TM(clang-12) + symbol: TM(clang-13) worker-type: b-linux-large worker: max-run-time: 3600 @@ -268,26 +289,26 @@ macosx64-clang-12: run: script: build-clang.sh arguments: - - 'build/build-clang/clang-12-macosx64.json' + - 'build/build-clang/clang-13-macosx64.json' resources: - - 'build/build-clang/clang-12-macosx64.json' + - 'build/build-clang/clang-13-macosx64.json' toolchain-alias: macosx64-clang toolchain-artifact: public/build/clang.tar.zst fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12-macosx-cross + - linux64-cctools-port-clang-13 + - linux64-clang-13-macosx-cross - macosx64-sdk-11.0 - - wasm32-wasi-compiler-rt-12 + - wasm32-wasi-compiler-rt-13 -macosx64-aarch64-clang-12: - description: "Clang 12 toolchain build" +macosx64-aarch64-clang-13: + description: "Clang 13 toolchain build" attributes: local-toolchain: true treeherder: - symbol: TM(clang-12-aarch64) + symbol: TM(clang-13-aarch64) worker-type: b-linux-large worker: env: @@ -298,26 +319,26 @@ macosx64-aarch64-clang-12: run: script: build-clang.sh arguments: - - 'build/build-clang/clang-12-macosx64.json' + - 'build/build-clang/clang-13-macosx64.json' resources: - - 'build/build-clang/clang-12-macosx64.json' + - 'build/build-clang/clang-13-macosx64.json' toolchain-alias: macosx64-aarch64-clang toolchain-artifact: public/build/clang.tar.zst fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12-macosx-cross + - linux64-cctools-port-clang-13 + - linux64-clang-13-macosx-cross - macosx64-sdk-11.0 - - wasm32-wasi-compiler-rt-12 + - wasm32-wasi-compiler-rt-13 -win64-clang-12: - description: "Clang-cl 12 toolchain build" +win64-clang-13: + description: "Clang-cl 13 toolchain build" attributes: local-toolchain: true treeherder: - symbol: TW64(clang-12) + symbol: TW64(clang-13) worker-type: b-win2012 worker: env: @@ -328,25 +349,25 @@ win64-clang-12: run: script: build-clang.sh arguments: - - 'build/build-clang/clang-12-win64.json' + - 'build/build-clang/clang-13-win64.json' resources: - - 'build/build-clang/clang-12-win64.json' + - 'build/build-clang/clang-13-win64.json' - 'taskcluster/scripts/misc/tooltool-download.sh' toolchain-alias: win64-clang toolchain-artifact: public/build/clang.tar.zst tooltool-downloads: internal fetches: fetch: - - clang-12 + - clang-13 - cmake - ninja toolchain: - - wasm32-wasi-compiler-rt-12 + - wasm32-wasi-compiler-rt-13 -win64-clang-12-2stage: - description: "Clang-cl 12 toolchain 2-stage quick build" +win64-clang-13-2stage: + description: "Clang-cl 13 toolchain 2-stage quick build" treeherder: - symbol: TW64(clang-12-2stage) + symbol: TW64(clang-13-2stage) worker-type: b-win2012 worker: env: @@ -354,15 +375,15 @@ win64-clang-12-2stage: run: script: build-clang.sh arguments: - - 'build/build-clang/clang-12-win64-2stage.json' + - 'build/build-clang/clang-13-win64-2stage.json' resources: - - 'build/build-clang/clang-12-win64-2stage.json' + - 'build/build-clang/clang-13-win64-2stage.json' - 'taskcluster/scripts/misc/tooltool-download.sh' toolchain-alias: win64-clang-2stage toolchain-artifact: public/build/clang.tar.zst tooltool-downloads: internal fetches: fetch: - - clang-12 + - clang-13 - cmake - ninja diff --git a/taskcluster/ci/toolchain/compiler-rt.yml b/taskcluster/ci/toolchain/compiler-rt.yml index dc0b062d7c8e..b90495d30ac7 100644 --- a/taskcluster/ci/toolchain/compiler-rt.yml +++ b/taskcluster/ci/toolchain/compiler-rt.yml @@ -11,10 +11,10 @@ job-defaults: script: build-compiler-rt.sh toolchain-artifact: public/build/compiler-rt.tar.zst -android-aarch64-compiler-rt-12: - description: "android aarch64 Compiler-rt for Clang 12 toolchain build" +android-aarch64-compiler-rt-13: + description: "android aarch64 Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TA(aarch64-crt-12) + symbol: TA(aarch64-crt-13) run: arguments: - aarch64-linux-android @@ -23,15 +23,15 @@ android-aarch64-compiler-rt-12: - 'build/build-clang/find_symbolizer_linux_clang_10.patch' fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-android-ndk-linux-repack -android-arm-compiler-rt-12: - description: "android arm Compiler-rt for Clang 12 toolchain build" +android-arm-compiler-rt-13: + description: "android arm Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TA(arm-crt-12) + symbol: TA(arm-crt-13) run: arguments: - armv7-linux-android @@ -40,15 +40,15 @@ android-arm-compiler-rt-12: - 'build/build-clang/find_symbolizer_linux_clang_10.patch' fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-android-ndk-linux-repack -android-x86-compiler-rt-12: - description: "android x86 Compiler-rt for Clang 12 toolchain build" +android-x86-compiler-rt-13: + description: "android x86 Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TA(x86-crt-12) + symbol: TA(x86-crt-13) run: arguments: - i686-linux-android @@ -57,15 +57,15 @@ android-x86-compiler-rt-12: - 'build/build-clang/find_symbolizer_linux_clang_10.patch' fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-android-ndk-linux-repack -android-x64-compiler-rt-12: - description: "android x64 Compiler-rt for Clang 12 toolchain build" +android-x64-compiler-rt-13: + description: "android x64 Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TA(x64-crt-12) + symbol: TA(x64-crt-13) run: arguments: - x86_64-linux-android @@ -74,15 +74,15 @@ android-x64-compiler-rt-12: - 'build/build-clang/find_symbolizer_linux_clang_10.patch' fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-android-ndk-linux-repack -linux64-aarch64-compiler-rt-12: - description: "Linux aarch64 Compiler-rt for Clang 12 toolchain build" +linux64-aarch64-compiler-rt-13: + description: "Linux aarch64 Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TL(aarch64-crt-12) + symbol: TL(aarch64-crt-13) run: arguments: - aarch64-unknown-linux-gnu @@ -91,53 +91,53 @@ linux64-aarch64-compiler-rt-12: - 'build/build-clang/find_symbolizer_linux_clang_10.patch' fetches: fetch: - - clang-12 + - clang-13 toolchain: - linux64-binutils - - linux64-clang-12 + - linux64-clang-13 - sysroot-aarch64-linux-gnu -macosx64-x64-compiler-rt-12: - description: "macOS x64 Compiler-rt for Clang 12 toolchain build" +macosx64-x64-compiler-rt-13: + description: "macOS x64 Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TM(x64-crt-12) + symbol: TM(x64-crt-13) run: arguments: - x86_64-apple-darwin fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - macosx64-sdk-11.0 -macosx64-aarch64-compiler-rt-12: - description: "macOS aarch64 Compiler-rt for Clang 12 toolchain build" +macosx64-aarch64-compiler-rt-13: + description: "macOS aarch64 Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TM(aarch64-crt-12) + symbol: TM(aarch64-crt-13) run: arguments: - aarch64-apple-darwin fetches: fetch: - - clang-12 + - clang-13 toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - macosx64-sdk-11.0 -wasm32-wasi-compiler-rt-12: - description: "wasm32-wasi Compiler-rt for Clang 12 toolchain build" +wasm32-wasi-compiler-rt-13: + description: "wasm32-wasi Compiler-rt for Clang 13 toolchain build" treeherder: - symbol: TL(wasi-crt-12) + symbol: TL(wasi-crt-13) worker-type: b-linux-xlarge run: script: build-compiler-rt-wasi.sh toolchain-alias: wasm32-wasi-compiler-rt fetches: fetch: - - clang-12 + - clang-13 - wasi-sdk wasm32-wasi-compiler-rt-10: diff --git a/taskcluster/ci/toolchain/dump-syms.yml b/taskcluster/ci/toolchain/dump-syms.yml index 7e119661167c..640d2fda2247 100644 --- a/taskcluster/ci/toolchain/dump-syms.yml +++ b/taskcluster/ci/toolchain/dump-syms.yml @@ -24,7 +24,7 @@ linux64-dump_syms: fetches: toolchain: - linux64-binutils - - linux64-clang-12 + - linux64-clang-13 - linux64-rust-1.55 - sysroot-x86_64-linux-gnu @@ -38,8 +38,8 @@ macosx64-dump_syms: fetches: toolchain: - linux64-rust-macos-1.55 - - linux64-clang-12 - - linux64-cctools-port-clang-12 + - linux64-clang-13 + - linux64-cctools-port-clang-13 - macosx64-sdk-11.0 macosx64-aarch64-dump_syms: @@ -52,8 +52,8 @@ macosx64-aarch64-dump_syms: fetches: toolchain: - linux64-rust-macos-1.55 - - linux64-clang-12 - - linux64-cctools-port-clang-12 + - linux64-clang-13 + - linux64-cctools-port-clang-13 - macosx64-sdk-11.0 win64-dump_syms: diff --git a/taskcluster/ci/toolchain/fix-stacks.yml b/taskcluster/ci/toolchain/fix-stacks.yml index 788869853971..35732747dd6e 100644 --- a/taskcluster/ci/toolchain/fix-stacks.yml +++ b/taskcluster/ci/toolchain/fix-stacks.yml @@ -26,7 +26,7 @@ linux64-fix-stacks: fetches: toolchain: - linux64-binutils - - linux64-clang-12 + - linux64-clang-13 - linux64-rust-1.47 - sysroot-x86_64-linux-gnu @@ -38,8 +38,8 @@ macosx64-fix-stacks: toolchain-artifact: public/build/fix-stacks.tar.zst fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - linux64-rust-macos-1.47 - macosx64-sdk-11.0 @@ -51,8 +51,8 @@ macosx64-aarch64-fix-stacks: toolchain-artifact: public/build/fix-stacks.tar.zst fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - linux64-rust-macos-1.49 - macosx64-sdk-11.0 @@ -70,6 +70,6 @@ win32-fix-stacks: tooltool-downloads: internal fetches: toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-liblowercase - linux64-rust-windows-1.47 diff --git a/taskcluster/ci/toolchain/gn.yml b/taskcluster/ci/toolchain/gn.yml index ab2df50db8c1..12c79ff51f92 100644 --- a/taskcluster/ci/toolchain/gn.yml +++ b/taskcluster/ci/toolchain/gn.yml @@ -30,8 +30,8 @@ macosx64-gn: script: build-gn-macosx.sh fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - macosx64-sdk-11.0 win32-gn: diff --git a/taskcluster/ci/toolchain/minidump_stackwalk.yml b/taskcluster/ci/toolchain/minidump_stackwalk.yml index 8f0455400845..db3d4cb7394e 100644 --- a/taskcluster/ci/toolchain/minidump_stackwalk.yml +++ b/taskcluster/ci/toolchain/minidump_stackwalk.yml @@ -28,7 +28,7 @@ linux64-minidump-stackwalk: symbol: TL(stackwalk) fetches: toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-binutils - linux64-rust-1.53 - linux64-toolchain-sysroot @@ -40,8 +40,8 @@ macosx64-minidump-stackwalk: arguments: ['macosx64'] fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - linux64-rust-macos-1.53 - macosx64-sdk-11.0 @@ -52,8 +52,8 @@ macosx64-aarch64-minidump-stackwalk: arguments: ['macosx64-aarch64'] fetches: toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12 + - linux64-cctools-port-clang-13 + - linux64-clang-13 - linux64-rust-macos-1.53 - macosx64-sdk-11.0 @@ -76,6 +76,6 @@ linux64-breakpad-injector: symbol: TL(injector) fetches: toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-binutils - linux64-toolchain-sysroot diff --git a/taskcluster/ci/toolchain/misc.yml b/taskcluster/ci/toolchain/misc.yml index a30465d334eb..b0e4b03ab9b1 100644 --- a/taskcluster/ci/toolchain/misc.yml +++ b/taskcluster/ci/toolchain/misc.yml @@ -52,7 +52,7 @@ linux64-hfsplus: fetch: - hfsplus-tools toolchain: - - linux64-clang-12 + - linux64-clang-13 linux64-libdmg: description: "libdmg-hfsplus toolchain build" @@ -65,7 +65,7 @@ linux64-libdmg: fetch: - libdmg-hfsplus toolchain: - - linux64-clang-12 + - linux64-clang-13 - linux64-toolchain-sysroot linux64-mar-tools: @@ -293,5 +293,5 @@ nsis: - nsis-3.07 - nsis-3.07-win toolchain: - - linux64-clang-12 + - linux64-clang-13 - sysroot-x86_64-linux-gnu diff --git a/taskcluster/ci/toolchain/nasm.yml b/taskcluster/ci/toolchain/nasm.yml index e5522fb8751f..50fb9e0890b4 100644 --- a/taskcluster/ci/toolchain/nasm.yml +++ b/taskcluster/ci/toolchain/nasm.yml @@ -38,8 +38,8 @@ macosx64-nasm: fetch: - nasm-2.15.05 toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12-macosx-cross + - linux64-cctools-port-clang-13 + - linux64-clang-13-macosx-cross - macosx64-sdk-11.0 macosx64-aarch64-nasm: @@ -55,8 +55,8 @@ macosx64-aarch64-nasm: fetch: - nasm-2.14.02 toolchain: - - linux64-cctools-port-clang-12 - - linux64-clang-12-macosx-cross + - linux64-cctools-port-clang-13 + - linux64-clang-13-macosx-cross - macosx64-sdk-11.0 linux64-nasm: @@ -72,7 +72,7 @@ linux64-nasm: fetch: - nasm-2.15.05 toolchain: - - linux64-clang-12 + - linux64-clang-13 - sysroot-x86_64-linux-gnu linux64-nasm-2.14.02: @@ -86,5 +86,5 @@ linux64-nasm-2.14.02: fetch: - nasm-2.14.02 toolchain: - - linux64-clang-12 + - linux64-clang-13 - sysroot-x86_64-linux-gnu diff --git a/taskcluster/ci/toolchain/sccache.yml b/taskcluster/ci/toolchain/sccache.yml index 60a07f58d1ae..223e03560b28 100644 --- a/taskcluster/ci/toolchain/sccache.yml +++ b/taskcluster/ci/toolchain/sccache.yml @@ -27,7 +27,7 @@ linux64-sccache: fetches: toolchain: - linux64-rust-1.47 - - linux64-clang-12 + - linux64-clang-13 - linux64-binutils - sysroot-x86_64-linux-gnu @@ -43,8 +43,8 @@ macosx64-sccache: fetches: toolchain: - linux64-rust-macos-1.47 - - linux64-clang-12 - - linux64-cctools-port-clang-12 + - linux64-clang-13 + - linux64-cctools-port-clang-13 - macosx64-sdk-11.0 macosx64-aarch64-sccache: @@ -59,8 +59,8 @@ macosx64-aarch64-sccache: fetches: toolchain: - linux64-rust-macos-1.49 - - linux64-clang-12 - - linux64-cctools-port-clang-12 + - linux64-clang-13 + - linux64-cctools-port-clang-13 - macosx64-sdk-11.0 win64-sccache: diff --git a/taskcluster/ci/toolchain/sysroot.yml b/taskcluster/ci/toolchain/sysroot.yml index 7dea6bb7bc83..7381911a0058 100644 --- a/taskcluster/ci/toolchain/sysroot.yml +++ b/taskcluster/ci/toolchain/sysroot.yml @@ -75,10 +75,10 @@ sysroot-wasm32-wasi: toolchain-artifact: public/build/sysroot-wasm32-wasi.tar.zst fetches: fetch: - - clang-12 + - clang-13 - wasi-sdk toolchain: - - linux64-clang-12 + - linux64-clang-13 sysroot-aarch64-linux-gnu: description: "Sysroot for linux64 aarch64 builds" diff --git a/taskcluster/ci/webrender/kind.yml b/taskcluster/ci/webrender/kind.yml index 41caac1dced6..f3cb46ca6dd6 100644 --- a/taskcluster/ci/webrender/kind.yml +++ b/taskcluster/ci/webrender/kind.yml @@ -107,15 +107,15 @@ jobs: name: public/build/wrench-macos-headless.tar.bz2 path: /builds/worker/artifacts/wrench-macos-headless.tar.bz2 dependencies: - macosx64-clang-12: toolchain-macosx64-clang-12 + macosx64-clang-13: toolchain-macosx64-clang-13 fetches: toolchain: - linux64-rust-macos - linux64-cctools-port - - linux64-clang-12-macosx-cross + - linux64-clang-13-macosx-cross - macosx64-sdk-10.12 - wrench-deps - macosx64-clang-12: + macosx64-clang-13: - artifact: clang.tar.zst dest: clang-mac run: diff --git a/taskcluster/scripts/misc/build-clang-mingw.sh b/taskcluster/scripts/misc/build-clang-mingw.sh index c0be94091f1b..85b1ce64b26d 100755 --- a/taskcluster/scripts/misc/build-clang-mingw.sh +++ b/taskcluster/scripts/misc/build-clang-mingw.sh @@ -149,64 +149,7 @@ build_libcxx() { # other options. DEBUG_FLAGS="-g -gcodeview" - mkdir libunwind - pushd libunwind - cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$CROSS_PREFIX_DIR \ - -DCMAKE_C_COMPILER=$CC \ - -DCMAKE_CXX_COMPILER=$CXX \ - -DCMAKE_CROSSCOMPILING=TRUE \ - -DCMAKE_SYSROOT=$CROSS_PREFIX_DIR \ - -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_C_COMPILER_WORKS=TRUE \ - -DCMAKE_CXX_COMPILER_WORKS=TRUE \ - -DLLVM_COMPILER_CHECKED=TRUE \ - -DCMAKE_AR=$INSTALL_DIR/bin/llvm-ar \ - -DCMAKE_RANLIB=$INSTALL_DIR/bin/llvm-ranlib \ - -DLLVM_NO_OLD_LIBSTDCXX=TRUE \ - -DCXX_SUPPORTS_CXX11=TRUE \ - -DCXX_SUPPORTS_CXX_STD=TRUE \ - -DLIBUNWIND_USE_COMPILER_RT=TRUE \ - -DLIBUNWIND_ENABLE_THREADS=TRUE \ - -DLIBUNWIND_ENABLE_SHARED=FALSE \ - -DLIBUNWIND_ENABLE_CROSS_UNWINDING=FALSE \ - -DCMAKE_CXX_FLAGS="${DEBUG_FLAGS} -Wno-dll-attribute-on-redeclaration -nostdinc++ -I$TOOLCHAIN_DIR/libcxx/include -DPSAPI_VERSION=2" \ - -DCMAKE_C_FLAGS="-Wno-dll-attribute-on-redeclaration" \ - $MOZ_FETCHES_DIR/libunwind - make $make_flags - make $make_flags install - popd - - mkdir libcxxabi - pushd libcxxabi - cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$CROSS_PREFIX_DIR \ - -DCMAKE_C_COMPILER=$CC \ - -DCMAKE_CXX_COMPILER=$CXX \ - -DCMAKE_CROSSCOMPILING=TRUE \ - -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_C_COMPILER_WORKS=TRUE \ - -DCMAKE_CXX_COMPILER_WORKS=TRUE \ - -DCMAKE_SYSROOT=$CROSS_PREFIX_DIR \ - -DLLVM_COMPILER_CHECKED=TRUE \ - -DCMAKE_AR=$INSTALL_DIR/bin/llvm-ar \ - -DCMAKE_RANLIB=$INSTALL_DIR/bin/llvm-ranlib \ - -DLIBCXXABI_USE_COMPILER_RT=ON \ - -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ - -DLIBCXXABI_ENABLE_THREADS=ON \ - -DLIBCXXABI_TARGET_TRIPLE=$machine-w64-mingw32 \ - -DLIBCXXABI_ENABLE_SHARED=OFF \ - -DLIBCXXABI_LIBCXX_INCLUDES=$TOOLCHAIN_DIR/libcxx/include \ - -DLLVM_NO_OLD_LIBSTDCXX=TRUE \ - -DCXX_SUPPORTS_CXX11=TRUE \ - -DCXX_SUPPORTS_CXX_STD=TRUE \ - -DCMAKE_CXX_FLAGS="${DEBUG_FLAGS} -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_HAS_THREAD_API_WIN32" \ - $TOOLCHAIN_DIR/libcxxabi - make $make_flags VERBOSE=1 - popd - + # First configure libcxx mkdir libcxx pushd libcxx cmake \ @@ -238,6 +181,67 @@ build_libcxx() { -DLIBCXX_CXX_ABI_LIBRARY_PATH=../libcxxabi/lib \ -DCMAKE_CXX_FLAGS="${DEBUG_FLAGS} -D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" \ $TOOLCHAIN_DIR/libcxx + popd + + mkdir libunwind + pushd libunwind + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$CROSS_PREFIX_DIR \ + -DCMAKE_C_COMPILER=$CC \ + -DCMAKE_CXX_COMPILER=$CXX \ + -DCMAKE_CROSSCOMPILING=TRUE \ + -DCMAKE_SYSROOT=$CROSS_PREFIX_DIR \ + -DCMAKE_SYSTEM_NAME=Windows \ + -DCMAKE_C_COMPILER_WORKS=TRUE \ + -DCMAKE_CXX_COMPILER_WORKS=TRUE \ + -DLLVM_COMPILER_CHECKED=TRUE \ + -DCMAKE_AR=$INSTALL_DIR/bin/llvm-ar \ + -DCMAKE_RANLIB=$INSTALL_DIR/bin/llvm-ranlib \ + -DLLVM_NO_OLD_LIBSTDCXX=TRUE \ + -DCXX_SUPPORTS_CXX11=TRUE \ + -DCXX_SUPPORTS_CXX_STD=TRUE \ + -DLIBUNWIND_USE_COMPILER_RT=TRUE \ + -DLIBUNWIND_ENABLE_THREADS=TRUE \ + -DLIBUNWIND_ENABLE_SHARED=FALSE \ + -DLIBUNWIND_ENABLE_CROSS_UNWINDING=FALSE \ + -DCMAKE_CXX_FLAGS="${DEBUG_FLAGS} -Wno-dll-attribute-on-redeclaration -nostdinc++ -I$TOOLCHAIN_DIR/build/libcxx/include/c++/v1 -DPSAPI_VERSION=2" \ + -DCMAKE_C_FLAGS="-Wno-dll-attribute-on-redeclaration" \ + $MOZ_FETCHES_DIR/libunwind + make $make_flags + make $make_flags install + popd + + mkdir libcxxabi + pushd libcxxabi + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$CROSS_PREFIX_DIR \ + -DCMAKE_C_COMPILER=$CC \ + -DCMAKE_CXX_COMPILER=$CXX \ + -DCMAKE_CROSSCOMPILING=TRUE \ + -DCMAKE_SYSTEM_NAME=Windows \ + -DCMAKE_C_COMPILER_WORKS=TRUE \ + -DCMAKE_CXX_COMPILER_WORKS=TRUE \ + -DCMAKE_SYSROOT=$CROSS_PREFIX_DIR \ + -DLLVM_COMPILER_CHECKED=TRUE \ + -DCMAKE_AR=$INSTALL_DIR/bin/llvm-ar \ + -DCMAKE_RANLIB=$INSTALL_DIR/bin/llvm-ranlib \ + -DLIBCXXABI_USE_COMPILER_RT=ON \ + -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ + -DLIBCXXABI_ENABLE_THREADS=ON \ + -DLIBCXXABI_TARGET_TRIPLE=$machine-w64-mingw32 \ + -DLIBCXXABI_ENABLE_SHARED=OFF \ + -DLIBCXXABI_LIBCXX_INCLUDES=$TOOLCHAIN_DIR/libcxx/include/ \ + -DLLVM_NO_OLD_LIBSTDCXX=TRUE \ + -DCXX_SUPPORTS_CXX11=TRUE \ + -DCXX_SUPPORTS_CXX_STD=TRUE \ + -DCMAKE_CXX_FLAGS="${DEBUG_FLAGS} -I$TOOLCHAIN_DIR/build/libcxx/include/c++/v1 -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_HAS_THREAD_API_WIN32" \ + $TOOLCHAIN_DIR/libcxxabi + make $make_flags VERBOSE=1 + popd + + pushd libcxx make $make_flags VERBOSE=1 make $make_flags install diff --git a/taskcluster/scripts/misc/build-compiler-rt.sh b/taskcluster/scripts/misc/build-compiler-rt.sh index e1aaf0b8284e..501e34f1eff0 100755 --- a/taskcluster/scripts/misc/build-compiler-rt.sh +++ b/taskcluster/scripts/misc/build-compiler-rt.sh @@ -95,6 +95,7 @@ case "$target" in -DANDROID_NATIVE_API_LEVEL=$api_level -DSANITIZER_ALLOW_CXXABI=OFF -DCOMPILER_RT_BUILD_LIBFUZZER=OFF + -DCOMPILER_RT_BUILD_ORC=OFF " ;; aarch64-unknown-linux-gnu) diff --git a/taskcluster/scripts/misc/repack-clang-linux-win-cross.sh b/taskcluster/scripts/misc/repack-clang-linux-win-cross.sh index d4b3aa4ac20f..07a44d02f150 100755 --- a/taskcluster/scripts/misc/repack-clang-linux-win-cross.sh +++ b/taskcluster/scripts/misc/repack-clang-linux-win-cross.sh @@ -9,7 +9,8 @@ cd $MOZ_FETCHES_DIR # We have a non-extracted clang-cl/clang.tar.zst for Windows clang-cl that we need to extract # files from. -$GECKO_PATH/taskcluster/scripts/misc/zstdpy -d clang-cl/clang.tar.zst | tar -x --wildcards clang/lib/clang/*/lib/windows clang/bin/clang-cl.exe clang/bin/llvm-symbolizer.exe +$GECKO_PATH/taskcluster/scripts/misc/zstdpy -d clang-cl/clang.tar.zst | tar -x --wildcards clang/lib/clang/*/lib/windows clang/bin/clang.exe clang/bin/llvm-symbolizer.exe +mv clang/bin/clang.exe clang/bin/clang-cl.exe chmod +x clang/bin/clang-cl.exe tar caf clang.tar.zst clang From 3a5d8adfe1ea6f22fa5246117d5c37848cdb9dd9 Mon Sep 17 00:00:00 2001 From: Molly Howell Date: Tue, 19 Oct 2021 14:48:30 +0000 Subject: [PATCH 23/66] Bug 1736103 - Fix the download file extension correction test to not depend on the download modal when it is disabled. r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D128648 --- .../mochitest/browser_extension_correction.js | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/uriloader/exthandler/tests/mochitest/browser_extension_correction.js b/uriloader/exthandler/tests/mochitest/browser_extension_correction.js index 4b0a533bf5ce..3532ba3c51bd 100644 --- a/uriloader/exthandler/tests/mochitest/browser_extension_correction.js +++ b/uriloader/exthandler/tests/mochitest/browser_extension_correction.js @@ -44,53 +44,72 @@ async function checkDownloadWithExtensionState( task, { type, shouldHaveExtension, expectedName = null } ) { - let winPromise = BrowserTestUtils.domWindowOpenedAndLoaded(); + const shouldExpectDialog = !SpecialPowers.Services.prefs.getBoolPref( + "browser.download.improvements_to_download_panel", + false + ); + + let winPromise; + if (shouldExpectDialog) { + winPromise = BrowserTestUtils.domWindowOpenedAndLoaded(); + } await task(); - info("Waiting for dialog."); - let win = await winPromise; - - let actualName = win.document.getElementById("location").value; - if (shouldHaveExtension) { - expectedName ??= "somefile." + getMIMEInfoForType(type).primaryExtension; - is(actualName, expectedName, `${type} should get an extension`); - } else { - expectedName ??= "somefile"; - is(actualName, expectedName, `${type} should not get an extension`); + let win; + if (shouldExpectDialog) { + info("Waiting for dialog."); + win = await winPromise; } - let closedPromise = BrowserTestUtils.windowClosed(win); + expectedName ??= shouldHaveExtension + ? "somefile." + getMIMEInfoForType(type).primaryExtension + : "somefile"; + + let closedPromise = true; + if (shouldExpectDialog) { + let actualName = win.document.getElementById("location").value; + closedPromise = BrowserTestUtils.windowClosed(win); + + if (shouldHaveExtension) { + is(actualName, expectedName, `${type} should get an extension`); + } else { + is(actualName, expectedName, `${type} should not get an extension`); + } + } if (shouldHaveExtension) { // Wait for the download. let publicList = await Downloads.getList(Downloads.PUBLIC); let downloadFinishedPromise = promiseDownloadFinished(publicList); - // Then pick "save" in the dialog. - let dialog = win.document.getElementById("unknownContentType"); - win.document.getElementById("save").click(); - let button = dialog.getButton("accept"); - button.disabled = false; - dialog.acceptDialog(); + // Then pick "save" in the dialog, if we have a dialog. + if (shouldExpectDialog) { + let dialog = win.document.getElementById("unknownContentType"); + win.document.getElementById("save").click(); + let button = dialog.getButton("accept"); + button.disabled = false; + dialog.acceptDialog(); + } // Wait for the download to finish and check the extension is correct. let download = await downloadFinishedPromise; is( PathUtils.filename(download.target.path), expectedName, - `Downloaded file should also match ${expectedName}` + `Downloaded file should match ${expectedName}` ); gPathsToRemove.push(download.target.path); let pathToRemove = download.target.path; // Avoid one file interfering with subsequent files. await publicList.removeFinished(); await IOUtils.remove(pathToRemove); - } else { + } else if (win) { // We just cancel out for files that would end up without a path, as we'd // prompt for a filename. win.close(); } + return closedPromise; } From 59f2e6d29ee293c7d5851bf7d6e16f2f40ec02e9 Mon Sep 17 00:00:00 2001 From: Tomislav Jovanovic Date: Tue, 19 Oct 2021 14:50:04 +0000 Subject: [PATCH 24/66] Bug 1734984 - Use WindowGlobalParent.documentURI for sender.url r=robwu Differential Revision: https://phabricator.services.mozilla.com/D128536 --- .../extensions/test/browser/browser.ini | 2 + .../browser_ext_contentscript_sender_url.js | 66 +++++++++++++++++++ .../components/extensions/ConduitsParent.jsm | 2 +- 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js diff --git a/browser/components/extensions/test/browser/browser.ini b/browser/components/extensions/test/browser/browser.ini index 3a23e186684c..76b8be72a620 100644 --- a/browser/components/extensions/test/browser/browser.ini +++ b/browser/components/extensions/test/browser/browser.ini @@ -98,6 +98,8 @@ skip-if = (webrender && debug) # bug 1553577 [browser_ext_contentscript_in_parent.js] [browser_ext_contentscript_incognito.js] [browser_ext_contentscript_nontab_connect.js] +[browser_ext_contentscript_sender_url.js] +skip-if = debug # The nature of the reduced STR test triggers an unrelated debug assertion in DOM IPC code, see bug 1736590. [browser_ext_contextMenus.js] support-files = !/browser/components/places/tests/browser/head.js [browser_ext_contextMenus_checkboxes.js] diff --git a/browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js b/browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js new file mode 100644 index 000000000000..7307b02a2663 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js @@ -0,0 +1,66 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +add_task(async function test_sender_url() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + content_scripts: [ + { + matches: ["http://mochi.test/*"], + run_at: "document_start", + js: ["script.js"], + }, + ], + }, + + background() { + browser.runtime.onMessage.addListener((msg, sender) => { + browser.test.log("Message received."); + browser.test.sendMessage("sender.url", sender.url); + }); + }, + + files: { + "script.js"() { + browser.test.log("Content script loaded."); + browser.runtime.sendMessage(0); + }, + }, + }); + + const image = + "http://mochi.test:8888/browser/browser/components/extensions/test/browser/ctxmenu-image.png"; + + // Bug is only visible and test only works without Fission, + // or with Fission but without BFcache in parent. + await SpecialPowers.pushPrefEnv({ + set: [["fission.bfcacheInParent", false]], + }); + + function awaitNewTab() { + return BrowserTestUtils.waitForLocationChange(gBrowser, "about:newtab"); + } + + await extension.startup(); + + await BrowserTestUtils.withNewTab({ gBrowser }, async browser => { + let newTab = awaitNewTab(); + BrowserTestUtils.loadURI(browser, "about:newtab"); + await newTab; + + BrowserTestUtils.loadURI(browser, image); + + for (let i = 0; i < 2; i++) { + let url = await extension.awaitMessage("sender.url"); + is(url, image, `Correct sender.url: ${url}`); + let wentBack = awaitNewTab(); + await browser.goBack(); + await wentBack; + await browser.goForward(); + } + }); + + await extension.unload(); + await SpecialPowers.popPrefEnv(); +}); diff --git a/toolkit/components/extensions/ConduitsParent.jsm b/toolkit/components/extensions/ConduitsParent.jsm index 74b22d85549a..11b34c9fa014 100644 --- a/toolkit/components/extensions/ConduitsParent.jsm +++ b/toolkit/components/extensions/ConduitsParent.jsm @@ -184,7 +184,7 @@ const Hub = { address.verified = this.verifyEnv(address); if (actor instanceof JSWindowActorParent) { address.frameId = WebNavigationFrames.getFrameId(actor.browsingContext); - address.url = actor.browsingContext.currentURI.spec; + address.url = actor.manager.documentURI?.spec; } else { // Background service worker contexts do not have an associated frame // and there is no browsingContext to retrieve the expected url from. From e9450de0a6a907f0371e9379701d0267ec9a790b Mon Sep 17 00:00:00 2001 From: Neil Deakin Date: Tue, 19 Oct 2021 14:54:45 +0000 Subject: [PATCH 25/66] Bug 1733786, replace uitour implementation of show how button with one that focuses the item on the app menu and submenu instead, r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D128428 --- browser/base/content/browser.css | 9 -- browser/components/BrowserGlue.jsm | 10 +- .../customizableui/PanelMultiView.jsm | 8 +- .../customizableui/content/panelUI.js | 81 ++++++++++++++ browser/components/uitour/UITour.jsm | 101 +----------------- .../test/browser_UITour_availableTargets.js | 2 - 6 files changed, 95 insertions(+), 116 deletions(-) diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css index f2311f2937b3..1d63fa7d7c72 100644 --- a/browser/base/content/browser.css +++ b/browser/base/content/browser.css @@ -1349,15 +1349,6 @@ toolbarpaletteitem:not([place="palette"]) > #stop-reload-button { animation-duration: 2s; } -/* This effectively simulates a focus outline. */ -#UITourHighlight[active="focus-outline"] { - background-color: transparent; - border: 2px solid var(--focus-outline-color); - border-radius: 4px; - - animation-name: none; -} - /* Combined context-menu items */ #context-navigation > .menuitem-iconic > .menu-iconic-text, #context-navigation > .menuitem-iconic > .menu-accel-container { diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index c4dacd2106e8..92cee94b1ca6 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -89,7 +89,6 @@ XPCOMUtils.defineLazyModuleGetters(this, { TelemetryUtils: "resource://gre/modules/TelemetryUtils.jsm", TRRRacer: "resource:///modules/TRRPerformance.jsm", UIState: "resource://services-sync/UIState.jsm", - UITour: "resource:///modules/UITour.jsm", UrlbarQuickSuggest: "resource:///modules/UrlbarQuickSuggest.jsm", UrlbarPrefs: "resource:///modules/UrlbarPrefs.jsm", WebChannel: "resource://gre/modules/WebChannel.jsm", @@ -4071,11 +4070,10 @@ BrowserGlue.prototype = { { "l10n-id": "restore-session-startup-suggestion-button", callback: () => { - UITour.getTarget(win, "history").then(historyMenu => { - UITour.showHighlight(win, historyMenu, "focus-outline", { - autohide: true, - }); - }); + win.PanelUI.selectAndMarkItem([ + "appMenu-history-button", + "appMenu-restoreSession", + ]); }, }, ]; diff --git a/browser/components/customizableui/PanelMultiView.jsm b/browser/components/customizableui/PanelMultiView.jsm index 5eac0c3c467c..4e7a54a12798 100644 --- a/browser/components/customizableui/PanelMultiView.jsm +++ b/browser/components/customizableui/PanelMultiView.jsm @@ -1216,7 +1216,11 @@ var PanelMultiView = class extends AssociatedToNode { currentView.keyNavigation(aEvent); break; case "mousemove": - this.openViews.forEach(panelView => panelView.clearNavigation()); + this.openViews.forEach(panelView => { + if (!panelView.ignoreMouseMove) { + panelView.clearNavigation(); + } + }); break; case "popupshowing": { this._viewContainer.setAttribute("panelopen", "true"); @@ -1807,6 +1811,8 @@ var PanelView = class extends AssociatedToNode { return popup && popup.state == "open"; }; + this.ignoreMouseMove = false; + let keyCode = event.code; switch (keyCode) { case "ArrowDown": diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js index 77eb6eecacd2..feba0e479d8e 100644 --- a/browser/components/customizableui/content/panelUI.js +++ b/browser/components/customizableui/content/panelUI.js @@ -717,6 +717,87 @@ const PanelUI = { } }, + /** + * Selects and marks an item by id from the main view. The ids are an array, + * the first in the main view and the later ids in subsequent subviews that + * become marked when the user opens the subview. The subview marking is + * cancelled if a different subview is opened. + */ + async selectAndMarkItem(itemIds) { + // This shouldn't really occur, but return early just in case. + if (document.documentElement.hasAttribute("customizing")) { + return; + } + + // This function was triggered from a button while the menu was + // already open, so the panel should be in the process of hiding. + // Wait for the panel to hide first, then reopen it. + if (this.panel.state == "hiding") { + await new Promise(resolve => { + this.panel.addEventListener("popuphidden", resolve, { once: true }); + }); + } + + if (this.panel.state != "open") { + await new Promise(resolve => { + this.panel.addEventListener("ViewShown", resolve, { once: true }); + this.show(); + }); + } + + let currentView; + + let viewShownCB = event => { + viewHidingCB(); + + if (itemIds.length) { + let subItem = window.document.getElementById(itemIds[0]); + if (event.target.id == subItem?.closest("panelview")?.id) { + Services.tm.dispatchToMainThread(() => { + markItem(event.target); + }); + } else { + itemIds = []; + } + } + }; + + let viewHidingCB = () => { + if (currentView) { + currentView.ignoreMouseMove = false; + } + currentView = null; + }; + + let popupHiddenCB = () => { + viewHidingCB(); + this.panel.removeEventListener("ViewShown", viewShownCB); + }; + + let markItem = viewNode => { + let id = itemIds.shift(); + let item = window.document.getElementById(id); + item.setAttribute("tabindex", "-1"); + + currentView = PanelView.forNode(viewNode); + currentView.selectedElement = item; + currentView.focusSelectedElement(true); + + // Prevent the mouse from changing the highlight temporarily. + // This flag gets removed when the view is hidden or a key + // is pressed. + currentView.ignoreMouseMove = true; + + if (itemIds.length) { + this.panel.addEventListener("ViewShown", viewShownCB, { once: true }); + } + this.panel.addEventListener("ViewHiding", viewHidingCB, { once: true }); + }; + + this.panel.addEventListener("popuphidden", popupHiddenCB, { once: true }); + markItem(this.mainView); + }, + updateNotifications(notificationsChanged) { let notifications = this._notifications; if (!notifications || !notifications.length) { diff --git a/browser/components/uitour/UITour.jsm b/browser/components/uitour/UITour.jsm index c5768439413e..4a4b7e60cf2f 100644 --- a/browser/components/uitour/UITour.jsm +++ b/browser/components/uitour/UITour.jsm @@ -151,14 +151,6 @@ var UITour = { }, ], ["help", { query: "#appMenu-help-button2" }], - [ - "history", - { - query: "#appMenu-history-button", - subItem: "restorePreviousSession", - level: "top", - }, - ], ["home", { query: "#home-button" }], [ "logins", @@ -186,7 +178,6 @@ var UITour = { }, ], ["readerMode-urlBar", { query: "#reader-mode-button" }], - ["restorePreviousSession", { query: "#appMenu-restoreSession" }], [ "search", { @@ -836,7 +827,7 @@ var UITour = { this.hideHighlight(aWindow); this.hideInfo(aWindow); - await this.removePanelListeners(aWindow, true); + await this.removePanelListeners(aWindow); this.noautohideMenus.clear(); @@ -849,7 +840,7 @@ var UITour = { /** * Remove the listeners to a panel when tearing the tour down. */ - async removePanelListeners(aWindow, aHidePanels = false) { + async removePanelListeners(aWindow) { let panels = [ { name: "appMenu", @@ -858,14 +849,12 @@ var UITour = { ["popuphidden", this.onPanelHidden], ["popuphiding", this.onAppMenuHiding], ["ViewShowing", this.onAppMenuSubviewShowing], - ["ViewShown", this.onAppMenuSubviewShown], - ["ViewHiding", this.onAppMenuSubviewHiding], ], }, ]; for (let panel of panels) { // Ensure the menu panel is hidden and clean up panel listeners after calling hideMenu. - if (aHidePanels && panel.node.state != "closed") { + if (panel.node.state != "closed") { await new Promise(resolve => { panel.node.addEventListener("popuphidden", resolve, { once: true }); this.hideMenu(aWindow, panel.name); @@ -978,8 +967,6 @@ var UITour = { targetName: aTargetName, widgetName: targetObject.widgetName, allowAdd: targetObject.allowAdd, - level: targetObject.level, - subItem: targetObject.subItem, }); }) .catch(log.error); @@ -1137,16 +1124,6 @@ var UITour = { highlighter.parentElement.setAttribute("targetName", aTarget.targetName); highlighter.parentElement.hidden = false; - if (aTarget.subItem) { - // This is a subitem in the app menu, so mark it as one not to hide. - this.noautohideMenus.add("appMenu"); - highlighter.parentElement.setAttribute("subitem", aTarget.subItem); - } - - if (aTarget.level) { - highlighter.parentElement.setAttribute("level", aTarget.level); - } - let highlightAnchor = aAnchorEl; let targetRect = highlightAnchor.getBoundingClientRect(); let highlightHeight = targetRect.height; @@ -1442,8 +1419,6 @@ var UITour = { menu.node = aWindow.PanelUI.panel; menu.onPopupHiding = this.onAppMenuHiding; menu.onViewShowing = this.onAppMenuSubviewShowing; - menu.onViewShown = this.onAppMenuSubviewShown; - menu.onViewHiding = this.onAppMenuSubviewHiding; menu.show = () => aWindow.PanelUI.show(); if (!aOptions.autohide) { @@ -1459,8 +1434,6 @@ var UITour = { menu.node.addEventListener("popuphidden", menu.onPanelHidden); menu.node.addEventListener("popuphiding", menu.onPopupHiding); menu.node.addEventListener("ViewShowing", menu.onViewShowing); - menu.node.addEventListener("ViewShown", menu.onViewShown); - menu.node.addEventListener("ViewHiding", menu.onViewHiding); menu.show(); } else if (aMenuName == "bookmarks") { let menuBtn = aWindow.document.getElementById("bookmarks-menu-button"); @@ -1589,80 +1562,12 @@ var UITour = { UITour._hideAnnotationsForPanel(aEvent, false, UITour.targetIsInAppMenu); }, - onAppMenuSubviewShown(aEvent) { - let win = aEvent.target.ownerGlobal; - let subItemName = UITour.getSubItem(win); - if ( - subItemName && - UITour.isSubItemToHighlight(win, subItemName, aEvent.target.id) - ) { - let highlighter = UITour.getHighlightAndMaybeCreate(win.document); - UITour.recreatePopup(highlighter.parentElement); - - UITour.getTarget(win, subItemName).then(subItem => { - if (!subItem.node.hidden) { - UITour.showHighlight(win, subItem, "focus-outline", { - autohide: true, - }); - } - }); - } else if (subItemName && aEvent.target.id != "appMenu-protonMainView") { - UITour.stopSubViewHandling(win); - } - }, - - onAppMenuSubviewHiding(aEvent) { - let win = aEvent.target.ownerGlobal; - - let subItem = UITour.getSubItem(win); - if (subItem) { - if (UITour.isSubItemToHighlight(win, subItem, aEvent.target.id)) { - UITour.hideHighlight(win); - UITour.stopSubViewHandling(win); - } - } - }, - onPanelHidden(aEvent) { - if (UITour.getSubItem(aEvent.target.ownerGlobal)) { - UITour.stopSubViewHandling(aEvent.target.ownerGlobal); - } - aEvent.target.removeAttribute("noautohide"); UITour.recreatePopup(aEvent.target); UITour.clearAvailableTargetsCache(); }, - getSubItem(aWindow) { - // Get the subitem that should be highlighted in the app menu's subview. - let highlighter = UITour.getHighlightContainerAndMaybeCreate( - aWindow.document - ); - return highlighter.getAttribute("subitem"); - }, - - isSubItemToHighlight(aWindow, aSubItem, aExpectedId) { - let targetObject = UITour.targets.get(aSubItem); - if (targetObject) { - let node = UITour.getNodeFromDocument( - aWindow.document, - targetObject.query - ); - return aExpectedId == node?.closest("panelview")?.id; - } - - return false; - }, - - stopSubViewHandling(aWindow) { - UITour.removePanelListeners(aWindow); - UITour.noautohideMenus.delete("appMenu"); - - let highlighter = UITour.getHighlightAndMaybeCreate(aWindow.document); - highlighter.parentElement.removeAttribute("level"); - highlighter.parentElement.removeAttribute("subitem"); - }, - recreatePopup(aPanel) { // After changing popup attributes that relate to how the native widget is created // (e.g. @noautohide) we need to re-create the frame/widget for it to take effect. diff --git a/browser/components/uitour/test/browser_UITour_availableTargets.js b/browser/components/uitour/test/browser_UITour_availableTargets.js index bd1a16ac477d..0e9ac4551351 100644 --- a/browser/components/uitour/test/browser_UITour_availableTargets.js +++ b/browser/components/uitour/test/browser_UITour_availableTargets.js @@ -15,14 +15,12 @@ function getExpectedTargets() { "appMenu", "backForward", "help", - "history", "logins", "pageAction-bookmark", ...(hasPocket ? ["pocket"] : []), "privateWindow", ...(hasQuit ? ["quit"] : []), "readerMode-urlBar", - "restorePreviousSession", "urlbar", ]; } From 962e3b930f85683c1ff7a2996edd0c4b11dd325b Mon Sep 17 00:00:00 2001 From: Nicolas Silva Date: Tue, 19 Oct 2021 15:04:08 +0000 Subject: [PATCH 26/66] Bug 1723134 - Make SwapInterval configurable via prefs for EGL and GLX. r=gfx-reviewers,jgilbert Differential Revision: https://phabricator.services.mozilla.com/D128476 --- gfx/config/gfxVars.h | 2 ++ gfx/gl/GLContextProviderEGL.cpp | 12 ++++++++---- gfx/gl/GLContextProviderGLX.cpp | 4 +++- gfx/thebes/gfxPlatform.cpp | 10 ++++++++++ gfx/webrender_bindings/RenderCompositorEGL.cpp | 5 +++-- modules/libpref/init/StaticPrefList.yaml | 16 ++++++++++++++++ 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/gfx/config/gfxVars.h b/gfx/config/gfxVars.h index 3e6df8fa5b00..5774baca055f 100644 --- a/gfx/config/gfxVars.h +++ b/gfx/config/gfxVars.h @@ -62,6 +62,8 @@ class gfxVarReceiver; _(GREDirectory, nsString, nsString()) \ _(ProfDirectory, nsString, nsString()) \ _(AllowD3D11KeyedMutex, bool, false) \ + _(SwapIntervalGLX, bool, false) \ + _(SwapIntervalEGL, bool, false) \ _(SystemTextQuality, int32_t, 5 /* CLEARTYPE_QUALITY */) \ _(SystemTextClearTypeLevel, float, 1.0f) \ _(SystemTextEnhancedContrast, float, 1.0f) \ diff --git a/gfx/gl/GLContextProviderEGL.cpp b/gfx/gl/GLContextProviderEGL.cpp index eaad23500bb2..a0720ac348f6 100644 --- a/gfx/gl/GLContextProviderEGL.cpp +++ b/gfx/gl/GLContextProviderEGL.cpp @@ -310,12 +310,14 @@ already_AddRefed GLContextEGLFactory::CreateImpl( #ifdef MOZ_GTK_WAYLAND if (surface && GdkIsWaylandDisplay()) { // Make eglSwapBuffers() non-blocking on wayland - egl->fSwapInterval(0); + const int interval = gfxVars::SwapIntervalEGL() ? 1 : 0; + egl->fSwapInterval(interval); } #endif if (aHardwareWebRender && egl->mLib->IsANGLE()) { MOZ_ASSERT(doubleBuffered); - egl->fSwapInterval(0); + const int interval = gfxVars::SwapIntervalEGL() ? 1 : 0; + egl->fSwapInterval(interval); } return gl.forget(); } @@ -500,8 +502,10 @@ bool GLContextEGL::RenewSurface(CompositorWidget* aWidget) { MOZ_ASSERT(ok); #ifdef MOZ_GTK_WAYLAND if (mSurface && GdkIsWaylandDisplay()) { - // Make eglSwapBuffers() non-blocking on wayland - mEgl->fSwapInterval(0); + // The swap interval pref is false by default so that eglSwapBuffers() + // is non-blocking on wayland. + const int interval = gfxVars::SwapIntervalEGL() ? 1 : 0; + mEgl->fSwapInterval(interval); } #endif return ok; diff --git a/gfx/gl/GLContextProviderGLX.cpp b/gfx/gl/GLContextProviderGLX.cpp index 1640c03edb30..cd4ab13d3142 100644 --- a/gfx/gl/GLContextProviderGLX.cpp +++ b/gfx/gl/GLContextProviderGLX.cpp @@ -482,8 +482,10 @@ bool GLContextGLX::MakeCurrentImpl() const { // Many GLX implementations default to blocking until the next // VBlank when calling glXSwapBuffers. We want to run unthrottled // in ASAP mode. See bug 1280744. + const bool swapInterval = gfxVars::SwapIntervalGLX(); const bool isASAP = (StaticPrefs::layout_frame_rate() == 0); - mGLX->fSwapInterval(*mDisplay, mDrawable, isASAP ? 0 : 1); + const int interval = (swapInterval && !isASAP) ? 1 : 0; + mGLX->fSwapInterval(*mDisplay, mDrawable, interval); } return succeeded; } diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp index 0342774d181c..9a4f403b1e72 100644 --- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -481,6 +481,13 @@ void gfxPlatform::InitChild(const ContentDeviceData& aData) { #define WR_DEBUG_PREF "gfx.webrender.debug" +static void SwapIntervalPrefChangeCallback(const char* aPrefName, void*) { + bool egl = Preferences::GetBool("gfx.swap-interval.egl", false); + bool glx = Preferences::GetBool("gfx.swap-interval.glx", false); + gfxVars::SetSwapIntervalEGL(egl); + gfxVars::SetSwapIntervalGLX(glx); +} + static void WebRendeProfilerUIPrefChangeCallback(const char* aPrefName, void*) { nsCString uiString; if (NS_SUCCEEDED(Preferences::GetCString("gfx.webrender.debug.profiler-ui", @@ -2571,6 +2578,9 @@ void gfxPlatform::InitWebRenderConfig() { gfxVars::SetUseSoftwareWebRender(!hasHardware && hasSoftware); + Preferences::RegisterPrefixCallbackAndCall(SwapIntervalPrefChangeCallback, + "gfx.swap-interval"); + // gfxFeature is not usable in the GPU process, so we use gfxVars to transmit // this feature if (hasWebRender) { diff --git a/gfx/webrender_bindings/RenderCompositorEGL.cpp b/gfx/webrender_bindings/RenderCompositorEGL.cpp index 9149ccce57b6..8600ca948c81 100644 --- a/gfx/webrender_bindings/RenderCompositorEGL.cpp +++ b/gfx/webrender_bindings/RenderCompositorEGL.cpp @@ -191,8 +191,9 @@ bool RenderCompositorEGL::Resume() { const auto& gle = gl::GLContextEGL::Cast(gl()); const auto& egl = gle->mEgl; MakeCurrent(); - // Make eglSwapBuffers() non-blocking on wayland. - egl->fSwapInterval(0); + + const int interval = gfx::gfxVars::SwapIntervalEGL() ? 1 : 0; + egl->fSwapInterval(interval); } else { RenderThread::Get()->HandleWebRenderError(WebRenderError::NEW_SURFACE); return false; diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 2ac597e84a8a..42cfd33f458f 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -5068,6 +5068,22 @@ value: 0 mirror: always +# SwapInterval +- name: gfx.swap-interval.glx + type: RelaxedAtomicBool + value: true + mirror: always + +- name: gfx.swap-interval.egl + type: RelaxedAtomicBool + mirror: always +#ifdef MOZ_WIDGET_ANDROID + value: true +#else + value: false +#endif + + # Log severe performance warnings to the error console and profiles. # This should be use to quickly find which slow paths are used by test cases. - name: gfx.perf-warnings.enabled From 8cb38eecfdb7e47d412e4010e2b749cd7542c50d Mon Sep 17 00:00:00 2001 From: Bryce Seager van Dyk Date: Tue, 19 Oct 2021 15:06:58 +0000 Subject: [PATCH 27/66] Bug 1736453 - Update pysign.py to work under python 3. r=keeler This also fixes the relative path to pykey.py, which appears to have changed since the script was first written. Differential Revision: https://phabricator.services.mozilla.com/D128797 --- .../ssl/tests/unit/test_content_signing/pysign.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/security/manager/ssl/tests/unit/test_content_signing/pysign.py b/security/manager/ssl/tests/unit/test_content_signing/pysign.py index 2d04cc40ff67..23c6128aa26b 100644 --- a/security/manager/ssl/tests/unit/test_content_signing/pysign.py +++ b/security/manager/ssl/tests/unit/test_content_signing/pysign.py @@ -18,18 +18,19 @@ cat test.txt | python pysign.py > test.txt.signature import base64 import binascii import hashlib -import os +import pathlib import six import sys import ecdsa -# For pykey -sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +# For pykey, find the relative file location and add it to path +toolsDir = (pathlib.Path(__file__).parents[4] / "tools").resolve() +sys.path.append(str(toolsDir)) import pykey data = sys.stdin.buffer.read() key = pykey.ECCKey("secp384r1") sig = key.signRaw(b"Content-Signature:\00" + data, pykey.HASH_SHA384) -print base64.b64encode(sig).replace("+", "-").replace("/", "_") +print(str(base64.b64encode(sig)).replace("+", "-").replace("/", "_")) From 23fe7b129bf13b65708149281625b82ea2af4161 Mon Sep 17 00:00:00 2001 From: Lebar Date: Tue, 19 Oct 2021 15:15:26 +0000 Subject: [PATCH 28/66] Bug 1729447 - Changed downloads context menu string for non-Mac from "Open Containing Folder" to "Show in Folder" to align terminology. r=mak,fluent-reviewers,flod Differential Revision: https://phabricator.services.mozilla.com/D128538 --- .../components/downloads/DownloadsViewUI.jsm | 6 ++-- .../content/downloadsContextMenu.inc.xhtml | 7 +---- .../content/downloadsPanel.inc.xhtml | 7 +---- browser/locales/en-US/browser/downloads.ftl | 31 +++++++++---------- .../browser/downloads/downloads.properties | 14 --------- 5 files changed, 19 insertions(+), 46 deletions(-) diff --git a/browser/components/downloads/DownloadsViewUI.jsm b/browser/components/downloads/DownloadsViewUI.jsm index 3d2743c4a313..a3246a055e97 100644 --- a/browser/components/downloads/DownloadsViewUI.jsm +++ b/browser/components/downloads/DownloadsViewUI.jsm @@ -63,9 +63,9 @@ var gDownloadElementButtons = { }, show: { commandName: "downloadsCmd_show", - l10nId: "downloads-cmd-show-button", - descriptionL10nId: "downloads-cmd-show-description", - panelL10nId: "downloads-cmd-show-panel", + l10nId: "downloads-cmd-show-button-2", + descriptionL10nId: "downloads-cmd-show-description-2", + panelL10nId: "downloads-cmd-show-panel-2", iconClass: "downloadIconShow", }, subviewOpenOrRemoveFile: { diff --git a/browser/components/downloads/content/downloadsContextMenu.inc.xhtml b/browser/components/downloads/content/downloadsContextMenu.inc.xhtml index 75d49a9a6a92..5b3c88a3be24 100644 --- a/browser/components/downloads/content/downloadsContextMenu.inc.xhtml +++ b/browser/components/downloads/content/downloadsContextMenu.inc.xhtml @@ -22,12 +22,7 @@ data-l10n-id="downloads-cmd-always-use-system-default"/> + data-l10n-id="downloads-cmd-show-menuitem-2"/> diff --git a/browser/components/downloads/content/downloadsPanel.inc.xhtml b/browser/components/downloads/content/downloadsPanel.inc.xhtml index e20bc0d6dbc0..32eadbd4f2af 100644 --- a/browser/components/downloads/content/downloadsPanel.inc.xhtml +++ b/browser/components/downloads/content/downloadsPanel.inc.xhtml @@ -85,12 +85,7 @@ data-l10n-id="downloads-cmd-always-use-system-default"/> + data-l10n-id="downloads-cmd-show-menuitem-2"/> diff --git a/browser/locales/en-US/browser/downloads.ftl b/browser/locales/en-US/browser/downloads.ftl index efd8e7a45bd3..b2e476fb8aea 100644 --- a/browser/locales/en-US/browser/downloads.ftl +++ b/browser/locales/en-US/browser/downloads.ftl @@ -29,14 +29,11 @@ downloads-cmd-cancel = downloads-cmd-cancel-panel = .aria-label = Cancel -# This message is only displayed on Windows and Linux devices -downloads-cmd-show-menuitem = - .label = Open Containing Folder - .accesskey = F - -# This message is only displayed on macOS devices -downloads-cmd-show-menuitem-mac = - .label = Show In Finder +downloads-cmd-show-menuitem-2 = + .label = { PLATFORM() -> + [macos] Show in Finder + *[other] Show in Folder + } .accesskey = F downloads-cmd-use-system-default = @@ -47,21 +44,21 @@ downloads-cmd-always-use-system-default = .label = Always Open In System Viewer .accesskey = w -downloads-cmd-show-button = +downloads-cmd-show-button-2 = .tooltiptext = { PLATFORM() -> - [macos] Show In Finder - *[other] Open Containing Folder + [macos] Show in Finder + *[other] Show in Folder } -downloads-cmd-show-panel = +downloads-cmd-show-panel-2 = .aria-label = { PLATFORM() -> - [macos] Show In Finder - *[other] Open Containing Folder + [macos] Show in Finder + *[other] Show in Folder } -downloads-cmd-show-description = +downloads-cmd-show-description-2 = .value = { PLATFORM() -> - [macos] Show In Finder - *[other] Open Containing Folder + [macos] Show in Finder + *[other] Show in Folder } downloads-cmd-show-downloads = diff --git a/browser/locales/en-US/chrome/browser/downloads/downloads.properties b/browser/locales/en-US/chrome/browser/downloads/downloads.properties index f5342650bc84..f90672aff7a9 100644 --- a/browser/locales/en-US/chrome/browser/downloads/downloads.properties +++ b/browser/locales/en-US/chrome/browser/downloads/downloads.properties @@ -82,17 +82,3 @@ statusSeparatorBeforeNumber=%1$S \u2014 %2$S # semi-colon list of plural forms. # See: http://developer.mozilla.org/en/Localization_and_Plurals otherDownloads3=%1$S file downloading;%1$S files downloading - -# LOCALIZATION NOTE (showLabel, showMacLabel): -# This is displayed when you hover a download item in the Library widget view. -# showMacLabel is only shown on Mac OSX. -showLabel=Open Containing Folder -showMacLabel=Open In Finder -# LOCALIZATION NOTE (openFileLabel): -# Displayed when hovering a complete download, indicates that it's possible to -# open the file using an app available in the system. -openFileLabel=Open File -# LOCALIZATION NOTE (retryLabel): -# Displayed when hovering a download which is able to be retried by users, -# indicates that it's possible to download this file again. -retryLabel=Retry Download From 3892ce56ebf0bb9d83387721f9055e35022e4c8d Mon Sep 17 00:00:00 2001 From: Andrei Oprea Date: Tue, 19 Oct 2021 15:40:54 +0000 Subject: [PATCH 29/66] Bug 1731796 - Add ability to support extraParams via search Nimbus Feature r=k88hudson,Standard8 Differential Revision: https://phabricator.services.mozilla.com/D127580 --- .../test/xpcshell/data/test/manifest.json | 10 +++ ..._ext_settings_overrides_search_mozParam.js | 84 ++++++++++++++++++- .../browser/browser_search_nimbus_reload.js | 23 ++--- toolkit/components/nimbus/FeatureManifest.js | 5 ++ toolkit/components/search/SearchEngine.jsm | 18 +++- .../xpcshell/searchconfigs/test_google.js | 67 +++++++++++++++ 6 files changed, 195 insertions(+), 12 deletions(-) diff --git a/browser/components/extensions/test/xpcshell/data/test/manifest.json b/browser/components/extensions/test/xpcshell/data/test/manifest.json index 5b75ba271de0..f4545029aa93 100644 --- a/browser/components/extensions/test/xpcshell/data/test/manifest.json +++ b/browser/components/extensions/test/xpcshell/data/test/manifest.json @@ -63,6 +63,16 @@ "name": "prefval", "condition": "pref", "pref": "code" + }, + { + "name": "experimenter-1", + "condition": "pref", + "pref": "nimbus-key-1" + }, + { + "name": "experimenter-2", + "condition": "pref", + "pref": "nimbus-key-2" } ] } diff --git a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js index 94f2742fdc73..81197d002358 100644 --- a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js +++ b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js @@ -6,10 +6,13 @@ const { AddonTestUtils } = ChromeUtils.import( "resource://testing-common/AddonTestUtils.jsm" ); - const { SearchTestUtils } = ChromeUtils.import( "resource://testing-common/SearchTestUtils.jsm" ); +const { NimbusFeatures } = ChromeUtils.import( + "resource://nimbus/ExperimentAPI.jsm" +); +const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm"); AddonTestUtils.init(this); AddonTestUtils.overrideCertDB(); @@ -50,6 +53,8 @@ const params = [ ]; add_task(async function setup() { + let readyStub = sinon.stub(NimbusFeatures.search, "ready").resolves(); + let updateStub = sinon.stub(NimbusFeatures.search, "onUpdate"); await promiseStartupManager(); await SearchTestUtils.useTestEngines("data", null, [ { @@ -67,6 +72,8 @@ add_task(async function setup() { await Services.search.init(); registerCleanupFunction(async () => { await promiseShutdownManager(); + readyStub.restore(); + updateStub.restore(); }); }); @@ -105,6 +112,81 @@ add_task(async function test_extension_setting_moz_params() { "search url is expected" ); } + + defaultBranch.setCharPref("param.code", ""); +}); + +add_task(async function test_nimbus_params() { + let sandbox = sinon.createSandbox(); + let stub = sandbox.stub(NimbusFeatures.search, "getVariable"); + // These values should match the nimbusParams below and the data/test/manifest.json + // search engine configuration + stub.withArgs("extraParams").returns([ + { + key: "nimbus-key-1", + value: "nimbus-value-1", + }, + { + key: "nimbus-key-2", + value: "nimbus-value-2", + }, + ]); + + Assert.ok( + NimbusFeatures.search.onUpdate.called, + "Called to initialize the cache" + ); + + // Populate the cache with the `getVariable` mock values + NimbusFeatures.search.onUpdate.firstCall.args[0](); + + let engine = Services.search.getEngineByName("MozParamsTest"); + + // Note: these lists should be kept in sync with the lists in + // browser/components/extensions/test/xpcshell/data/test/manifest.json + // These params are conditional based on how search is initiated. + const nimbusParams = [ + { name: "experimenter-1", condition: "pref", pref: "nimbus-key-1" }, + { name: "experimenter-2", condition: "pref", pref: "nimbus-key-2" }, + ]; + const experimentCache = { + "nimbus-key-1": "nimbus-value-1", + "nimbus-key-2": "nimbus-value-2", + }; + + let extraParams = []; + for (let p of params) { + if (p.value == "{searchTerms}") { + extraParams.push(`${p.name}=test`); + } else if (p.value == "{language}") { + extraParams.push(`${p.name}=${Services.locale.requestedLocale || "*"}`); + } else if (p.value == "{moz:locale}") { + extraParams.push(`${p.name}=${Services.locale.requestedLocale}`); + } else if (p.condition !== "pref") { + // Ignoring pref parameters + extraParams.push(`${p.name}=${p.value}`); + } + } + for (let p of nimbusParams) { + if (p.condition == "pref") { + extraParams.push(`${p.name}=${experimentCache[p.pref]}`); + } + } + let paramStr = extraParams.join("&"); + for (let p of mozParams) { + let expectedURL = engine.getSubmission( + "test", + null, + p.condition == "purpose" ? p.purpose : null + ).uri.spec; + equal( + expectedURL, + `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`, + "search url is expected" + ); + } + + sandbox.restore(); }); add_task(async function test_extension_setting_moz_params_fail() { diff --git a/browser/components/search/test/browser/browser_search_nimbus_reload.js b/browser/components/search/test/browser/browser_search_nimbus_reload.js index 8ecc9d91d809..1a0bfb1db9b3 100644 --- a/browser/components/search/test/browser/browser_search_nimbus_reload.js +++ b/browser/components/search/test/browser/browser_search_nimbus_reload.js @@ -16,7 +16,7 @@ const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm"); add_task(async function test_engines_reloaded_nimbus() { let reloadSpy = sinon.spy(SearchService.prototype, "_maybeReloadEngines"); - let variableSpy = sinon.spy(NimbusFeatures.search, "getVariable"); + let getVariableSpy = sinon.spy(NimbusFeatures.search, "getVariable"); let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({ featureId: "search", @@ -25,18 +25,21 @@ add_task(async function test_engines_reloaded_nimbus() { Assert.equal(reloadSpy.callCount, 1, "Called by experiment enrollment"); await BrowserTestUtils.waitForCondition( - () => variableSpy.called, + () => getVariableSpy.calledWith("experiment"), "Wait for SearchService update to run" ); Assert.equal( - variableSpy.callCount, - 1, - "Called by update function to fetch engines" + getVariableSpy.callCount, + 2, + "Called by update function to fetch engines and by ParamPreferenceCache" ); - Assert.equal( - variableSpy.firstCall.args[0], - "experiment", - "Got `experiment` variable value" + Assert.ok( + getVariableSpy.calledWith("extraParams"), + "Called by ParamPreferenceCache listener" + ); + Assert.ok( + getVariableSpy.calledWith("experiment"), + "Called by search service observer" ); Assert.equal( NimbusFeatures.search.getVariable("experiment"), @@ -49,5 +52,5 @@ add_task(async function test_engines_reloaded_nimbus() { Assert.equal(reloadSpy.callCount, 2, "Called by experiment unenrollment"); reloadSpy.restore(); - variableSpy.restore(); + getVariableSpy.restore(); }); diff --git a/toolkit/components/nimbus/FeatureManifest.js b/toolkit/components/nimbus/FeatureManifest.js index fc4a519ea764..b38137b572de 100644 --- a/toolkit/components/nimbus/FeatureManifest.js +++ b/toolkit/components/nimbus/FeatureManifest.js @@ -19,6 +19,11 @@ const FeatureManifest = { description: "Used to activate only matching configurations that contain the value in `experiment`", }, + extraParams: { + type: "json", + description: + "Query parameters values for search engine configurations.", + }, }, }, urlbar: { diff --git a/toolkit/components/search/SearchEngine.jsm b/toolkit/components/search/SearchEngine.jsm index fecc275f8f43..0a845dd5f323 100644 --- a/toolkit/components/search/SearchEngine.jsm +++ b/toolkit/components/search/SearchEngine.jsm @@ -14,6 +14,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { Region: "resource://gre/modules/Region.jsm", SearchUtils: "resource://gre/modules/SearchUtils.jsm", Services: "resource://gre/modules/Services.jsm", + NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm", }); const BinaryInputStream = Components.Constructor( @@ -126,21 +127,36 @@ const ParamPreferenceCache = { SearchUtils.BROWSER_SEARCH_PREF + "param." ); this.cache = new Map(); + this.nimbusCache = new Map(); for (let prefName of this.branch.getChildList("")) { this.cache.set(prefName, this.branch.getCharPref(prefName, null)); } this.branch.addObserver("", this, true); + + this.onNimbusUpdate = this.onNimbusUpdate.bind(this); + this.onNimbusUpdate(); + NimbusFeatures.search.onUpdate(this.onNimbusUpdate); + NimbusFeatures.search.ready().then(this.onNimbusUpdate); }, observe(subject, topic, data) { this.cache.set(data, this.branch.getCharPref(data, null)); }, + onNimbusUpdate() { + let extraParams = NimbusFeatures.search.getVariable("extraParams") || []; + for (const { key, value } of extraParams) { + this.nimbusCache.set(key, value); + } + }, + getPref(prefName) { if (!this.cache) { this.initCache(); } - return this.cache.get(prefName); + return this.nimbusCache.has(prefName) + ? this.nimbusCache.get(prefName) + : this.cache.get(prefName); }, }; diff --git a/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js b/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js index 2a7068c29f0f..967461fcf260 100644 --- a/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js +++ b/toolkit/components/search/tests/xpcshell/searchconfigs/test_google.js @@ -3,6 +3,10 @@ "use strict"; +XPCOMUtils.defineLazyModuleGetters(this, { + NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm", +}); + const test = new SearchConfigTest({ identifier: "google", aliases: ["@google"], @@ -64,6 +68,8 @@ const test = new SearchConfigTest({ }); add_task(async function setup() { + sinon.spy(NimbusFeatures.search, "onUpdate"); + sinon.stub(NimbusFeatures.search, "ready").resolves(); await test.setup(); }); @@ -111,4 +117,65 @@ add_task(async function test_searchConfig_google_with_mozparam() { "Should be including the correct MozParam parameter for the engine" ); } + + // Reset the pref values for next tests + for (const testData of TEST_DATA) { + defaultBranch.setCharPref("param." + testData.pref, ""); + } +}); + +add_task(async function test_searchConfig_google_with_nimbus() { + let sandbox = sinon.createSandbox(); + // Test a couple of configurations with a MozParam set up. + const TEST_DATA = [ + { + locale: "en-US", + region: "US", + expected: "nimbus_us_param", + }, + { + locale: "en-US", + region: "GB", + expected: "nimbus_row_param", + }, + ]; + + Assert.ok( + NimbusFeatures.search.onUpdate.called, + "Should register an update listener for Nimbus experiments" + ); + // Stub getVariable to populate the cache with our expected data + sandbox.stub(NimbusFeatures.search, "getVariable").returns([ + { key: "google_channel_us", value: "nimbus_us_param" }, + { key: "google_channel_row", value: "nimbus_row_param" }, + ]); + // Set the pref cache with Nimbus values + NimbusFeatures.search.onUpdate.firstCall.args[0](); + + for (const testData of TEST_DATA) { + info(`Checking region ${testData.region}, locale ${testData.locale}`); + const engines = await test._getEngines(testData.region, testData.locale); + + Assert.ok( + engines[0].identifier.startsWith("google"), + "Should have the correct engine" + ); + console.log(engines[0]); + + const submission = engines[0].getSubmission("test", URLTYPE_SEARCH_HTML); + Assert.ok( + NimbusFeatures.search.ready.called, + "Should wait for Nimbus to get ready" + ); + Assert.ok( + NimbusFeatures.search.getVariable, + "Should call NimbusFeatures.search.getVariable to populate the cache" + ); + Assert.ok( + submission.uri.query.split("&").includes("channel=" + testData.expected), + "Should be including the correct MozParam parameter for the engine" + ); + } + + sandbox.restore(); }); From 609bd44beecb313e9a96079b80738b299374aa34 Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Tue, 19 Oct 2021 15:44:39 +0000 Subject: [PATCH 30/66] Bug 1736476 - Drop aData->mInvalid check. r=mstange This was added in bug 1487903 but doesn't seem to be needed anymore. The test case from that bug still works and we now do invalidation of masks and filters differently. Differential Revision: https://phabricator.services.mozilla.com/D128822 --- gfx/layers/wr/WebRenderCommandBuilder.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gfx/layers/wr/WebRenderCommandBuilder.cpp b/gfx/layers/wr/WebRenderCommandBuilder.cpp index 0df5fc6b1cd0..29b9926526ba 100644 --- a/gfx/layers/wr/WebRenderCommandBuilder.cpp +++ b/gfx/layers/wr/WebRenderCommandBuilder.cpp @@ -404,9 +404,7 @@ struct DIGroup { InvalidateRect(aData->mRect); aData->mInvalid = true; invalidated = true; - } else if (aData->mInvalid || - /* XXX: handle image load invalidation */ ( - aItem->IsInvalid(invalid) && invalid.IsEmpty())) { + } else if (aItem->IsInvalid(invalid) && invalid.IsEmpty()) { UniquePtr geometry( aItem->AllocateGeometry(aBuilder)); nsRect clippedBounds = clip.ApplyNonRoundedIntersection( From aae9a15191bc226aca8f7c6f15e1333b26dcca7b Mon Sep 17 00:00:00 2001 From: Narcis Beleuzu Date: Tue, 19 Oct 2021 19:19:07 +0300 Subject: [PATCH 31/66] Backed out changeset 6961dc913ccb (bug 1734984) for bc failures on browser_ext_contentscript_sender_url.js . CLOSED TREE --- .../extensions/test/browser/browser.ini | 2 - .../browser_ext_contentscript_sender_url.js | 66 ------------------- .../components/extensions/ConduitsParent.jsm | 2 +- 3 files changed, 1 insertion(+), 69 deletions(-) delete mode 100644 browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js diff --git a/browser/components/extensions/test/browser/browser.ini b/browser/components/extensions/test/browser/browser.ini index 76b8be72a620..3a23e186684c 100644 --- a/browser/components/extensions/test/browser/browser.ini +++ b/browser/components/extensions/test/browser/browser.ini @@ -98,8 +98,6 @@ skip-if = (webrender && debug) # bug 1553577 [browser_ext_contentscript_in_parent.js] [browser_ext_contentscript_incognito.js] [browser_ext_contentscript_nontab_connect.js] -[browser_ext_contentscript_sender_url.js] -skip-if = debug # The nature of the reduced STR test triggers an unrelated debug assertion in DOM IPC code, see bug 1736590. [browser_ext_contextMenus.js] support-files = !/browser/components/places/tests/browser/head.js [browser_ext_contextMenus_checkboxes.js] diff --git a/browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js b/browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js deleted file mode 100644 index 7307b02a2663..000000000000 --- a/browser/components/extensions/test/browser/browser_ext_contentscript_sender_url.js +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set sts=2 sw=2 et tw=80: */ -"use strict"; - -add_task(async function test_sender_url() { - let extension = ExtensionTestUtils.loadExtension({ - manifest: { - content_scripts: [ - { - matches: ["http://mochi.test/*"], - run_at: "document_start", - js: ["script.js"], - }, - ], - }, - - background() { - browser.runtime.onMessage.addListener((msg, sender) => { - browser.test.log("Message received."); - browser.test.sendMessage("sender.url", sender.url); - }); - }, - - files: { - "script.js"() { - browser.test.log("Content script loaded."); - browser.runtime.sendMessage(0); - }, - }, - }); - - const image = - "http://mochi.test:8888/browser/browser/components/extensions/test/browser/ctxmenu-image.png"; - - // Bug is only visible and test only works without Fission, - // or with Fission but without BFcache in parent. - await SpecialPowers.pushPrefEnv({ - set: [["fission.bfcacheInParent", false]], - }); - - function awaitNewTab() { - return BrowserTestUtils.waitForLocationChange(gBrowser, "about:newtab"); - } - - await extension.startup(); - - await BrowserTestUtils.withNewTab({ gBrowser }, async browser => { - let newTab = awaitNewTab(); - BrowserTestUtils.loadURI(browser, "about:newtab"); - await newTab; - - BrowserTestUtils.loadURI(browser, image); - - for (let i = 0; i < 2; i++) { - let url = await extension.awaitMessage("sender.url"); - is(url, image, `Correct sender.url: ${url}`); - let wentBack = awaitNewTab(); - await browser.goBack(); - await wentBack; - await browser.goForward(); - } - }); - - await extension.unload(); - await SpecialPowers.popPrefEnv(); -}); diff --git a/toolkit/components/extensions/ConduitsParent.jsm b/toolkit/components/extensions/ConduitsParent.jsm index 11b34c9fa014..74b22d85549a 100644 --- a/toolkit/components/extensions/ConduitsParent.jsm +++ b/toolkit/components/extensions/ConduitsParent.jsm @@ -184,7 +184,7 @@ const Hub = { address.verified = this.verifyEnv(address); if (actor instanceof JSWindowActorParent) { address.frameId = WebNavigationFrames.getFrameId(actor.browsingContext); - address.url = actor.manager.documentURI?.spec; + address.url = actor.browsingContext.currentURI.spec; } else { // Background service worker contexts do not have an associated frame // and there is no browsingContext to retrieve the expected url from. From 4cc21252542efe0ca0d157f61ed2800f95b52ae1 Mon Sep 17 00:00:00 2001 From: Leslie Orellana Date: Tue, 19 Oct 2021 16:07:25 +0000 Subject: [PATCH 32/66] Bug 1434245 - Use defineLazyModuleGetters more often with PlacesUtils. r=mak Differential Revision: https://phabricator.services.mozilla.com/D128581 --- .../components/places/tests/chrome/head.js | 20 +++++-------------- .../places/tests/chrome/test_371798.xhtml | 13 ++++-------- .../chrome/test_favicon_annotations.xhtml | 6 +++--- 3 files changed, 12 insertions(+), 27 deletions(-) diff --git a/toolkit/components/places/tests/chrome/head.js b/toolkit/components/places/tests/chrome/head.js index dff91fb89ccb..655b1bf9087d 100644 --- a/toolkit/components/places/tests/chrome/head.js +++ b/toolkit/components/places/tests/chrome/head.js @@ -2,18 +2,8 @@ var { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); -ChromeUtils.defineModuleGetter( - this, - "PlacesTestUtils", - "resource://testing-common/PlacesTestUtils.jsm" -); -ChromeUtils.defineModuleGetter( - this, - "PlacesUtils", - "resource://gre/modules/PlacesUtils.jsm" -); -ChromeUtils.defineModuleGetter( - this, - "NetUtil", - "resource://gre/modules/NetUtil.jsm" -); +XPCOMUtils.defineLazyModuleGetters(this, { + PlacesTestUtils: "resource://testing-common/PlacesTestUtils.jsm", + PlacesUtils: "resource://gre/modules/PlacesUtils.jsm", + Services: "resource://gre/modules/Services.jsm", +}); diff --git a/toolkit/components/places/tests/chrome/test_371798.xhtml b/toolkit/components/places/tests/chrome/test_371798.xhtml index 56e8c5a9c3a9..3ef006776175 100644 --- a/toolkit/components/places/tests/chrome/test_371798.xhtml +++ b/toolkit/components/places/tests/chrome/test_371798.xhtml @@ -5,22 +5,17 @@ - + + diff --git a/gfx/layers/apz/test/mochitest/helper_overscroll_behavior_bug1425603.html b/gfx/layers/apz/test/mochitest/helper_overscroll_behavior_bug1425603.html index 7be903d5436a..8324530c9551 100644 --- a/gfx/layers/apz/test/mochitest/helper_overscroll_behavior_bug1425603.html +++ b/gfx/layers/apz/test/mochitest/helper_overscroll_behavior_bug1425603.html @@ -55,13 +55,11 @@ async function test() { await promiseAllPaintsDone(); var scrollY = 300; utils.setAsyncScrollOffset(subframe, 0, scrollY); - if (config.isWebRender) { - // Tick the refresh driver once to make sure the compositor has applied the - // async scroll offset (for APZ hit-testing this doesn't matter, but for - // WebRender hit-testing we need to make sure WR has the latest info). - utils.advanceTimeAndRefresh(16); - utils.restoreNormalRefresh(); - } + // Tick the refresh driver once to make sure the compositor has applied the + // async scroll offset (for WebRender hit-testing we need to make sure WR has + // the latest info). + utils.advanceTimeAndRefresh(16); + utils.restoreNormalRefresh(); // Scroll over the subframe, and make sure that the page does not scroll, // i.e. overscroll-behavior is respected. diff --git a/gfx/layers/apz/test/mochitest/helper_scrollframe_activation_on_load.html b/gfx/layers/apz/test/mochitest/helper_scrollframe_activation_on_load.html index 5e754ede4099..eabd7c6c4944 100644 --- a/gfx/layers/apz/test/mochitest/helper_scrollframe_activation_on_load.html +++ b/gfx/layers/apz/test/mochitest/helper_scrollframe_activation_on_load.html @@ -51,12 +51,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1151663 let config = getHitTestConfig(); let heightMultiplier = SpecialPowers.getCharPref("apz.y_stationary_size_multiplier"); - if (config.isWebRender) { - // With WebRender, the effective height multiplier can be reduced - // for alignment reasons. The reduction should be no more than a - // factor of two. - heightMultiplier /= 2; - } + // With WebRender, the effective height multiplier can be reduced + // for alignment reasons. The reduction should be no more than a + // factor of two. + heightMultiplier /= 2; info("effective displayport height multipler is " + heightMultiplier); let rootDisplayPort = getLastContentDisplayportFor('root-element'); diff --git a/gfx/layers/apz/test/mochitest/test_group_hittest-2.html b/gfx/layers/apz/test/mochitest/test_group_hittest-2.html index b7c713c4dc9b..529cc413a001 100644 --- a/gfx/layers/apz/test/mochitest/test_group_hittest-2.html +++ b/gfx/layers/apz/test/mochitest/test_group_hittest-2.html @@ -33,6 +33,7 @@ var overscroll_prefs = [...prefs, ]; var subtests = [ + {"file": "helper_hittest_deep_scene_stack.html", "prefs": prefs}, {"file": "helper_hittest_pointerevents_svg.html", "prefs": prefs}, {"file": "helper_hittest_clippath.html", "prefs": prefs}, {"file": "helper_hittest_hoisted_scrollinfo.html", "prefs": prefs}, @@ -47,26 +48,10 @@ var subtests = [ {"file": "helper_hittest_spam.html", "prefs": prefs}, ]; -function addConditionalTests(tests) { - // Add some more tests only useful with WebRender. Note that we do this in - // function run after loading, because trying to read layerManagerType can - // throw an NS_ERROR_FAILURE if called too early. - var utils = SpecialPowers.getDOMWindowUtils(window); - var isWebRender = utils.layerManagerType.startsWith("WebRender"); - if (isWebRender) { - // Add new tests at the beginning, to ensure the final test remains in - // the final position. - tests = [ - {"file": "helper_hittest_deep_scene_stack.html", "prefs": prefs}, - ].concat(tests); - } - return tests; -} - if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { - runSubtestsSeriallyInFreshWindows(addConditionalTests(subtests)) + runSubtestsSeriallyInFreshWindows(subtests) .then(SimpleTest.finish, SimpleTest.finishWithFailure); }; } diff --git a/gfx/layers/apz/test/mochitest/test_layerization.html b/gfx/layers/apz/test/mochitest/test_layerization.html index 3c8358e0d33e..15d0e74acf5a 100644 --- a/gfx/layers/apz/test/mochitest/test_layerization.html +++ b/gfx/layers/apz/test/mochitest/test_layerization.html @@ -64,12 +64,10 @@ let config = getHitTestConfig(); let activateAllScrollFrames = config.activateAllScrollFrames; let heightMultiplier = SpecialPowers.getCharPref("apz.y_stationary_size_multiplier"); -if (config.isWebRender) { - // With WebRender, the effective height multiplier can be reduced - // for alignment reasons. The reduction should be no more than a - // factor of two. - heightMultiplier /= 2; -} +// With WebRender, the effective height multiplier can be reduced +// for alignment reasons. The reduction should be no more than a +// factor of two. +heightMultiplier /= 2; info("effective displayport height multipler is " + heightMultiplier); function hasNonZeroMarginDisplayPort(elementId, containingDoc = null) { From 25e494cce5e3ac6bca3729223ababdbaa20fbcca Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Tue, 19 Oct 2021 17:16:48 +0000 Subject: [PATCH 39/66] Bug 1735445: Fix some typos in the CSS Gap Decorations draft. rs=mats NPOTB DONTBUILD The html changes were generated by this command: curl https://api.csswg.org/bikeshed/ -F \ file=@layout/docs/css-gap-decorations/Overview.bs -F force=1 > \ layout/docs/css-gap-decorations/Overview.html Differential Revision: https://phabricator.services.mozilla.com/D128915 --- layout/docs/css-gap-decorations/Overview.bs | 14 +-- layout/docs/css-gap-decorations/Overview.html | 96 +++++++++++-------- 2 files changed, 62 insertions(+), 48 deletions(-) diff --git a/layout/docs/css-gap-decorations/Overview.bs b/layout/docs/css-gap-decorations/Overview.bs index 952f68997124..78b4b574d4c1 100644 --- a/layout/docs/css-gap-decorations/Overview.bs +++ b/layout/docs/css-gap-decorations/Overview.bs @@ -82,7 +82,7 @@ The 'column-rule-image-source' and 'row-rule-image-source' Properties {#column-r Animation type: discrete - These properties specifies an <> to use in place of the rendering specified + These properties specify an <> to use in place of the rendering specified by the ''column-rule-style''/''row-rule-style'' properties. As for borders, a rule image is not rendered when the corresponding ''column-rule-style''/''row-rule-style'' is ''column-rule-style/none''. @@ -101,7 +101,7 @@ The 'column-rule-image-slice' and 'row-rule-image-slice' Properties {#column-rul Animation type: discrete - These properties specifies inward offsets from the top and bottom edges of the image, + These properties specify inward offsets from the top and bottom edges of the image, dividing it into three regions: two edge areas and one middle area. When two values are specified, they set the offsets on the top and bottom sides in @@ -141,7 +141,7 @@ The 'column-rule-image-repeat' and 'row-rule-image-repeat' Properties {#column-r Animation type: discrete - These properties specifies how the middle part of a sliced rule image is scaled and tiled. + These properties specify how the middle part of a sliced rule image is scaled and tiled. Values have the following meanings:
@@ -530,14 +530,14 @@ The 'column-rule-align' and 'row-rule-align' Properties {#column-rule-align} These properties specify the start/end attachment point of the [=rule containing rectangle=] in the [=longitudinal axis=]. The start value is specified first, the end value second. If only one value is specified it is used for both start and end. - These properties are only used for interior the edges. The '*-rule-edge-align' properties - described below specifies the alignment on the outer edges. The initial value, ''column-rule-align/gap'', + These properties are only used for interior edges. The '*-rule-edge-align' properties + described below specify the alignment on the outer edges. The initial value, ''column-rule-align/gap'', means that, by default, a rule will stretch its longitudinal size to fill the space from the end of the gap "above" to the start of the gap "below" ("above" meaning the gap in the orthogonal axis on the rule's start side).