tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 730809f3983bb5d9ecaed7c305fea480f3f1e575
parent 1aeb89553ad9edbe5e46d809a1a8817d205e2995
Author: Nathan Barrett <nbarrett@mozilla.com>
Date:   Thu,  8 Jan 2026 21:56:22 +0000

Bug 2008733 - Retrieve random frecency boosted tile r=ini,home-newtab-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D278154

Diffstat:
Mbrowser/extensions/newtab/lib/FrecencyBoostProvider/FrecencyBoostProvider.mjs | 44++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+), 0 deletions(-)

diff --git a/browser/extensions/newtab/lib/FrecencyBoostProvider/FrecencyBoostProvider.mjs b/browser/extensions/newtab/lib/FrecencyBoostProvider/FrecencyBoostProvider.mjs @@ -237,4 +237,48 @@ export class FrecencyBoostProvider { link => !lazy.NewTabUtils.blockedLinks.isBlocked({ url: link.url }) ); } + + async retrieveRandomFrecencyTile() { + if (!this._frecencyBoostedSponsors.size) { + await this._importFrecencyBoostedSponsors(); + } + + const storedTile = await this.cache.get("randomFrecencyTile"); + if (storedTile) { + const tile = JSON.parse(storedTile); + if ( + this._frecencyBoostedSponsors.has(tile.hostname) && + !lazy.NewTabUtils.blockedLinks.isBlocked({ url: tile.url }) + ) { + return tile; + } + await this.cache.set("randomFrecencyTile", null); + } + + const candidates = Array.from( + this._frecencyBoostedSponsors.values() + ).filter(s => !lazy.NewTabUtils.blockedLinks.isBlocked({ url: s.domain })); + + if (!candidates.length) { + return null; + } + + const selected = candidates[Math.floor(Math.random() * candidates.length)]; + const tile = { + hostname: selected.hostname, + url: selected.redirectURL, + label: selected.title, + partner: SPONSORED_TILE_PARTNER_FREC_BOOST, + type: "frecency-boost-random", + show_sponsored_label: true, + favicon: selected.faviconDataURI, + faviconSize: 96, + }; + await this.cache.set("randomFrecencyTile", JSON.stringify(tile)); + return tile; + } + + async clearRandomFrecencyTile() { + await this.cache.set("randomFrecencyTile", null); + } }