<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: mozilla</title>
    <description>The latest articles tagged 'mozilla' on DEV Community.</description>
    <link>https://dev.to/t/mozilla</link>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tag/mozilla"/>
    <language>en</language>
    <item>
      <title>Most big Firefox add-ons still don't say what they collect</title>
      <dc:creator>Iain</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:52:54 +0000</pubDate>
      <link>https://dev.to/notaflightrisk/most-big-firefox-add-ons-still-dont-say-what-they-collect-2a3a</link>
      <guid>https://dev.to/notaflightrisk/most-big-firefox-add-ons-still-dont-say-what-they-collect-2a3a</guid>
      <description>&lt;p&gt;Here's what Firefox showed me this morning when I went to install two password managers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxr1bs4h90zkzuq0q5s3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxr1bs4h90zkzuq0q5s3.png" alt="Firefox's prompt to add Bitwarden Password Manager. It lists six required permissions, like accessing your data for all websites and the clipboard, then an optional setting for private windows. There's no data collection section." width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bitwarden 2026.10.0, out on 15 October&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1umm1w0m04b3r8uz2mvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1umm1w0m04b3r8uz2mvw.png" alt="Firefox's prompt to add LastPass. It lists five required permissions, then a Required data collection section saying the developer says it collects browsing activity, website activity, authentication information and location, then a pre-ticked box to share technical and interaction data." width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;LastPass 4.154.2&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Which one's telling you more? LastPass, obviously. It's got a whole "Required data collection" section, and a pre-ticked box for sending the developer technical data. Bitwarden's just stops after the permissions, and it'd be easy to read that as "collects nothing".&lt;/p&gt;

&lt;p&gt;But, that's not what this actually means.. An add-on that really collects nothing will say so in the prompt - Proton Pass's says "The developer says this extension doesn't require data collection." Bitwarden's has no data section at all, since nobody's made Bitwarden fill it in.&lt;/p&gt;

&lt;p&gt;Since &lt;a href="https://blog.mozilla.org/addons/2025/10/23/data-collection-consent-changes-for-new-firefox-extensions/" rel="noopener noreferrer"&gt;3 November 2025&lt;/a&gt;, every new add-on on addons.mozilla.org (AMO) has had to put a &lt;code&gt;data_collection_permissions&lt;/code&gt; key in its manifest, even if it's only to say "none", and Firefox 140+ shows it in that prompt. Add-ons that already existed were let off, but Mozilla said that wouldn't last:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the first half of 2026, Mozilla will require all extensions to adopt this framework. But don't worry, we'll give plenty of notice via the add-ons blog.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first half of 2026 ended in June. The add-ons blog hasn't mentioned it since, and nothing's changed. AMO's API reports the key for every add-on, so I went through the top 1,000 by users to see how far the labels have actually got.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updated since July, and still nothing
&lt;/h2&gt;

&lt;p&gt;Of the top 1,000, 776 show nothing. Most of those haven't shipped a new version since November, so they never had a reason to add the key. The 21 made since November are fine, 20 of them declare something, which is what happens when it's actually enforced. So I split the other 979 by when their current version was uploaded:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Current version uploaded&lt;/th&gt;
&lt;th&gt;Says something&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Before 3 Nov 2025&lt;/td&gt;
&lt;td&gt;2 of 475 (0.4%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 Nov 2025 to 30 Jun 2026&lt;/td&gt;
&lt;td&gt;57 of 161 (35%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Since 1 Jul 2026&lt;/td&gt;
&lt;td&gt;145 of 343 (42%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Adblock Plus, AdGuard, Dark Reader, DuckDuckGo, Ghostery, NoScript, 1Password, MetaMask and Bitwarden have all shipped since July, and none of them say anything. I downloaded each one to check the API wasn't lying, and the key just isn't in their manifests. They're 9 of the 198 in that last row that left it out, and those 198 have about a third of the top 1,000's daily users between them.&lt;/p&gt;

&lt;p&gt;That's Mozilla's deadline, not theirs. Nobody told them to add it (more on that next), and silent doesn't mean they're collecting anything. uBlock Origin and Privacy Badger both bothered to say "none". It just means the prompt can't tell you either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nothing makes them
&lt;/h2&gt;

&lt;p&gt;Why haven't they? Mostly beacuse they don't have to. AMO's upload check &lt;a href="https://github.com/mozilla/addons-server/blob/2571f276a22ea251e34e71c82ba3f5ae3f40449d/src/olympia/devhub/tasks.py#L402-L429" rel="noopener noreferrer"&gt;upload check&lt;/a&gt; only turns a missing key into an error when it's a brand new add-on uploaded through the developer hub. An update gets a warning, and that &lt;a href="https://github.com/mozilla/addons-linter/blob/1850fb845eccd80df0e16c6bc068c347d13f3c66/src/messages/manifestjson.js#L902-L913" rel="noopener noreferrer"&gt;warning&lt;/a&gt; still says the key "will be required for new versions of existing extensions in the future". Mozilla's &lt;a href="https://extensionworkshop.com/documentation/develop/firefox-builtin-data-consent/" rel="noopener noreferrer"&gt;docs&lt;/a&gt; say older add-ons "will have to at a later date", with no date.&lt;/p&gt;

&lt;p&gt;The nearest thing to news is &lt;a href="https://discourse.mozilla.org/t/the-new-data-transmission-permissions-seem-to-be-misleading-to-users/149410/6" rel="noopener noreferrer"&gt;a reply&lt;/a&gt; from Mozilla's add-ons team on thier forum, on 10 September:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Even though we haven't retroactively asked all the published Add-ons to comply with this policy, we do it every time they submit a new version/update.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From the code, I think "asking" there is that warning. The same reply says "I can't promise anything specific right now".&lt;/p&gt;

&lt;h2&gt;
  
  
  Being honest costs you
&lt;/h2&gt;

&lt;p&gt;When an older add-on adds the key for the first time and says it collects something, every existing user gets asked to agree, and if they say no the update doesn't install. Saying "none" doesn't do that. Firefox has a way round it: a &lt;code&gt;has_previous_consent&lt;/code&gt; flag that says users already agreed to whatever the add-on did before, so the update &lt;a href="https://github.com/mozilla-firefox/firefox/blob/6210f73af7ef7df6878d8f2d78599bf73e39c5ca/toolkit/mozapps/extensions/AddonManager.sys.mjs#L1311-L1326" rel="noopener noreferrer"&gt;goes through without a prompt&lt;/a&gt;. But AMO's linter has rejected that flag since October 2025, in a change titled &lt;a href="https://github.com/mozilla/addons-linter/pull/5807" rel="noopener noreferrer"&gt;"Prevent the use of has_previous_consent for now"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Return YouTube Dislike found out what that means. It's got about 900,000 daily users, and on 7 September it shipped its first update in nearly two years, declaring personally identifying information, browsing activity, website content and website activity. Its developer says all it gets is a random user ID and the IDs of the videos, which is how it counts dislikes in the first place. That sounds like a lot for a dislike button, but Mozilla's &lt;a href="https://extensionworkshop.com/documentation/develop/firefox-builtin-data-consent/" rel="noopener noreferrer"&gt;examples&lt;/a&gt; for personally identifying information include "ID numbers", and browsing activity covers even "domains", so I can see how it got there. Here's what happened on &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/reviews/" rel="noopener noreferrer"&gt;its reviews page&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6f907ujq7omjg4eaw32g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6f907ujq7omjg4eaw32g.png" alt="One-star reviews of Return YouTube Dislike on AMO" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-star reviews of Return YouTube Dislike on AMO&lt;/strong&gt; (&lt;a href="https://raw.githubusercontent.com/NotAFlightRisk/blog/main/posts/firefox-add-ons-data-labels/one-star-weeks.json" rel="noopener noreferrer"&gt;the data&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A week at a time, from Mondays, up to 11 October. Version 4.0.6 came out on 7 September&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It went from about one a week to 101 in a week. "Spyware", "data mining scam", "At what point does a youtube dislike add-on need my personal data?". One reviewer was sure the developer's account had been hacked. My favourite was this one, which sort of gets it and still gives one star:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The fact that the data processing method hasn't changed means it was being collected all along.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To be fair to the reviewers, the same update added premium statistics (likes over time, maps by country), and some of the reviews are about that. But about half of the 224 one-star reviews since 7 September mention the data or the permissions, some quoting Firefox's prompt word for word. The developer &lt;a href="https://discourse.mozilla.org/t/the-new-data-transmission-permissions-seem-to-be-misleading-to-users/149410/2" rel="noopener noreferrer"&gt;put it&lt;/a&gt; on Mozilla's forum as "calling my reviews section a shitstorm is an understatement".&lt;/p&gt;

&lt;p&gt;The first post in that same thread is from SponsorBlock's developer. It's a similar sort of add-on, talking to its own server about YouTube videos, and they were working out which boxes they'd have to tick. Probably browsing activity, they thought, maybe website content. SponsorBlock's current version came out in July and doesn't declare anything, so its 820,000 daily users get a nice clean prompt.&lt;/p&gt;

&lt;p&gt;So nothing makes the quiet add-ons say anything, and the flag that would let the honest ones say it without a fight has been blocked by AMO "for now" for a year. Untill one of those changes, the add-ons that tell you the most look the worst, and the ones that tell you nothing look fine.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>firefox</category>
      <category>browserextensions</category>
      <category>mozilla</category>
    </item>
    <item>
      <title>Firefox: New security update protects against fake websites</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Wed, 21 Oct 2026 02:51:38 +0000</pubDate>
      <link>https://dev.to/hacksgr/firefox-new-security-update-protects-against-fake-websites-4p9c</link>
      <guid>https://dev.to/hacksgr/firefox-new-security-update-protects-against-fake-websites-4p9c</guid>
      <description>&lt;p&gt;Mozilla has released Firefox 158.0.1, addressing the compromise of eight eMudhra digital certificates.&lt;/p&gt;

&lt;p&gt;This update ensures that the certificate revocations, previously managed via OneCRL, are fully enforced, protecting users who have disabled automatic updates.&lt;/p&gt;

&lt;p&gt;Beyond security, the release includes fixes for VPN activation, JPEG XL transparency, and display issues on Linux.&lt;/p&gt;




&lt;h2&gt;
  
  
  Protection against counterfeit certificates
&lt;/h2&gt;

&lt;p&gt;The most serious issue addressed by the new version concerns the revocation of eight digital certificates from the eMudhra authority. Digital certificates act as identities that confirm that a website is indeed who it claims to be.&lt;/p&gt;

&lt;p&gt;Because the digital keys for these certificates were exposed, third parties could potentially use them to spoof websites. Mozilla had already revoked these certificates on October 17th through a mechanism that automatically updates in the background. With the new version, the revocation is built directly into the browser, offering additional protection even for users who have disabled automatic security updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional improvements
&lt;/h3&gt;

&lt;p&gt;The update also resolves several issues that some users may have noticed:&lt;/p&gt;

&lt;p&gt;READ ALSO&lt;/p&gt;

&lt;p&gt;Eight eMudhra digital certificates found compromised&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed a bug where the page would automatically scroll to the top when selecting text.&lt;/li&gt;
&lt;li&gt;Resolved an issue that prevented the built-in VPN service from being enabled.&lt;/li&gt;
&lt;li&gt;Fixed an issue with the display of windows on Linux computers using multiple monitors.&lt;/li&gt;
&lt;li&gt;Fixed brightness and transparency issues when viewing images in JPEG XL format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most users will receive the update automatically. Specifically, users in a Linux Snap environment receive the upgrade automatically in the background.&lt;/p&gt;

&lt;p&gt;G&lt;/p&gt;

&lt;p&gt;Hacks.gr on Google&lt;/p&gt;

&lt;p&gt;Set it as your preferred source for cybersecurity updates.&lt;/p&gt;

&lt;p&gt;Preferred source&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/firefox-nea-enimerosi-asfaleias-prostateyei-apo-plastes-istoselides/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firefox</category>
      <category>mozilla</category>
      <category>browsersecurity</category>
      <category>emudhra</category>
    </item>
    <item>
      <title>Mozilla accuses Microsoft of pressuring users to install Edge</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Sat, 17 Oct 2026 14:30:30 +0000</pubDate>
      <link>https://dev.to/hacksgr/mozilla-accuses-microsoft-of-pressuring-users-to-install-edge-ddm</link>
      <guid>https://dev.to/hacksgr/mozilla-accuses-microsoft-of-pressuring-users-to-install-edge-ddm</guid>
      <description>&lt;p&gt;Mozilla's 87-page report details how Microsoft uses dark patterns and system prompts to prioritize the Edge browser on Windows 11, highlighting the impact of regional regulations on platform defaults.&lt;/p&gt;




&lt;p&gt;According to a Mozilla executive, the company is doing everything it can to comply with laws surrounding user choice. The organization published a massive 87-page report documenting how Windows aggressively promotes Edge. For example, after a system update, a window often appears prompting users to complete their computer setup. There is a default setting there that, if not checked, automatically makes Edge the default browser for browsing the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  The situation in Europe and Mozilla's demands
&lt;/h2&gt;

&lt;p&gt;These practices are not seen in Europe, as European laws force Microsoft to be more respectful of citizens' choices. In European countries, the Start menu opens links in the user's designated program rather than Edge. Mozilla is asking Microsoft to bring this European version of Windows to the rest of the world, although it believes that doing so will require government intervention.&lt;/p&gt;

&lt;p&gt;The organization also says it frequently receives complaints from Firefox users who are confused because their bookmarks have disappeared after Windows changed their default browser to Edge.&lt;/p&gt;

&lt;p&gt;READ ALSO&lt;/p&gt;

&lt;p&gt;This season brings new video game releases from independent creators&lt;/p&gt;

&lt;h3&gt;
  
  
  The bigger picture in technology
&lt;/h3&gt;

&lt;p&gt;Mozilla points out that Microsoft is not alone, as Apple and Google are equally aggressively promoting their own programs and services on their own operating systems.&lt;/p&gt;

&lt;p&gt;Finally, he reminded that Mozilla's revenue comes primarily from its agreement with Google, which pays to be the default search engine in Firefox.&lt;/p&gt;

&lt;p&gt;G&lt;/p&gt;

&lt;p&gt;Hacks.gr on Google&lt;/p&gt;

&lt;p&gt;Set it as a preferred source for cybersecurity updates.&lt;/p&gt;

&lt;p&gt;Preferred source&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/i-mozilla-katigorei-ti-microsoft-oti-piezei-toys-christes-na-valoyn-ton-edge/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>mozilla</category>
      <category>windows11</category>
      <category>browser</category>
    </item>
    <item>
      <title>How to stop worrying about protecting your data</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Sat, 17 Oct 2026 12:22:26 +0000</pubDate>
      <link>https://dev.to/hacksgr/how-to-stop-worrying-about-protecting-your-data-25m9</link>
      <guid>https://dev.to/hacksgr/how-to-stop-worrying-about-protecting-your-data-25m9</guid>
      <description>&lt;p&gt;Explore six practical strategies to combat privacy fatigue, featuring expert insights from industry leaders on tracker blocking, permission audits, browser choices, and reducing digital footprints.&lt;/p&gt;




&lt;h2&gt;
  
  
  The fatigue of constant decisions
&lt;/h2&gt;

&lt;p&gt;Constantly being asked questions every time someone visits a new website, downloads a file, or creates an account creates a lot of mental fatigue. Jason Ng from the OpenVPN team notes that fatigue comes from constantly having to make choices and suggests saving our attention for the few important things, like which apps are sharing our data. Chris Wallis, founder of Intruder, emphasizes that when notifications inundate users, the most serious risks risk getting lost in the noise. For this reason, using automated tools helps significantly.&lt;/p&gt;

&lt;p&gt;For her part, Cylab professor Lorrie Cranor says that a level of fatigue may be inevitable, but she relies on out-of-the-box tools like browser extensions and search engines that protect privacy. She also suggests a simple rule: when presented with a data option, always choose the setting that protects the most privacy, unless you find that a necessary feature is not working. Mozilla’s Neha Kochar points out that choosing companies that collect less data from the start drastically reduces the number of everyday decisions. Kochar herself almost fell victim to a scam message pretending to be a hotel and asking for confirmation of a booking, after data was leaked to a third-party company.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six simple ways to reduce fatigue
&lt;/h2&gt;

&lt;p&gt;Maintaining privacy doesn't require disappearing from the internet. Automating choices reduces digital workload through six practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Setting up a tracking blocker:&lt;/strong&gt; Adding a tool, such as Ghostery, DuckDuckGo, Brave, Privacy Badger, or DuckDuckGo Privacy Essentials, instantly stops advertisers from tracking your browsing history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change browser:&lt;/strong&gt; Using a program that protects privacy up front fills significant gaps in daily monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check app permissions:&lt;/strong&gt; Most apps don't need to know your location or access your contacts. Restricting permissions keeps your device safe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reject cookies:&lt;/strong&gt; As a general rule, disabling unnecessary logs on websites usually does not affect their functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleaning up social media accounts:&lt;/strong&gt; Removing personal information from profiles, deleting inactive accounts, and limiting access to friends only limit exposure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block unwanted calls:&lt;/strong&gt; Most mobile phone providers have settings to filter calls from strangers, preventing the inadvertent sharing of voice and personal information with scammers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;G&lt;/p&gt;

&lt;p&gt;Hacks.gr on Google&lt;/p&gt;

&lt;p&gt;Set it as a preferred source for cybersecurity updates.&lt;/p&gt;

&lt;p&gt;Preferred source&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/pos-na-stamatisete-na-koyrazeste-me-tin-prostasia-ton-dedomenon-sas/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>mozilla</category>
      <category>openvpn</category>
      <category>security</category>
    </item>
    <item>
      <title>Thunderbird 158 released with major fixes and faster search</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Wed, 14 Oct 2026 00:11:37 +0000</pubDate>
      <link>https://dev.to/hacksgr/thunderbird-158-released-with-major-fixes-and-faster-search-50fk</link>
      <guid>https://dev.to/hacksgr/thunderbird-158-released-with-major-fixes-and-faster-search-50fk</guid>
      <description>&lt;p&gt;Mozilla released Thunderbird version 158 for Linux, Windows, and macOS, bringing key stability and synchronization improvements.&lt;/p&gt;

&lt;p&gt;The update addresses a message body search crash, improves Quick Filter responsiveness, and ensures unaccented name searches match accented equivalents.&lt;/p&gt;

&lt;p&gt;It also includes OpenPGP fixes for key unlocking and resource leaks, alongside a Linux-specific fix for SMTP Kerberos authentication failures when STARTTLS is enabled.&lt;/p&gt;




&lt;h2&gt;
  
  
  What changes in daily use
&lt;/h2&gt;

&lt;p&gt;The new version improves the speed and responsiveness of the built-in quick message filtering tool. In addition, it fixes an issue when searching for names, so that they are correctly detected even if they do not contain accents or other special characters.&lt;/p&gt;

&lt;p&gt;Several fixes address everyday issues that users have encountered. For example, long-pressing the keys to send a message no longer causes an unintentional double send. We also fixed a bug that caused the app to crash when searching within message text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fixes for encryption and synchronization
&lt;/h3&gt;

&lt;p&gt;Users who use encryption tools will see fixes to issues with unlocking keys, resource management, and key protection. A bug that prevented copying backup passwords has also been fixed, as well as an issue that caused options menus to appear transparent.&lt;/p&gt;

&lt;p&gt;In the area of ​​contact and calendar synchronization, the update resolves issues where saved passwords were lost after restarting the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Specific improvements for Linux and other services
&lt;/h3&gt;

&lt;p&gt;Linux users get a fix for a login authentication issue when this security precaution is enabled. In addition, the update fixes several other issues, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accounts no longer constantly display login errors when the app starts in an offline state.&lt;/li&gt;
&lt;li&gt;Issues filtering updates that were losing their labels and raw data.&lt;/li&gt;
&lt;li&gt;Service connection crashes when saving login credentials was disabled.&lt;/li&gt;
&lt;li&gt;System administrators using certain settings can now install add-ons using an update address, if no other installation address is specified.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How will you receive the update?
&lt;/h3&gt;

&lt;p&gt;Thunderbird version 158 is available for Linux, Windows, and macOS.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/kykloforise-to-thunderbird-158-me-simantikes-diorthoseis-kai-tachyteri-anazitisi/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mozilla</category>
      <category>thunderbird</category>
      <category>linux</category>
      <category>openpgp</category>
    </item>
    <item>
      <title>Mozilla introduces Firefox Enterprise for centralized management in businesses</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:33:32 +0000</pubDate>
      <link>https://dev.to/hacksgr/mozilla-introduces-firefox-enterprise-for-centralized-management-in-businesses-3neb</link>
      <guid>https://dev.to/hacksgr/mozilla-introduces-firefox-enterprise-for-centralized-management-in-businesses-3neb</guid>
      <description>&lt;p&gt;Mozilla has announced Firefox Enterprise, combining the browser with a self-hosted management console for organizations.&lt;/p&gt;

&lt;p&gt;IT departments can locally manage browser policies, security controls, extension permissions, and AI governance without external providers.&lt;/p&gt;




&lt;h2&gt;
  
  
  How management works
&lt;/h2&gt;

&lt;p&gt;Unlike other services that rely on external providers, the new offering combines the familiar browser with a management console that organizations can host on their own computers and servers. This allows IT departments to configure rules, access rights, and security settings without relying on third parties.&lt;/p&gt;

&lt;p&gt;According to Mozilla, this decision comes at a time of increasing European interest in reducing reliance on a few large technology providers. Although there were already capabilities for corporate use, the new service offers a complete commercial platform and additional security tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and control capabilities
&lt;/h3&gt;

&lt;p&gt;Administrators can centrally control policies on devices, manage usage data, and leverage built-in protection to prevent sensitive information from leaking. Specifically, the platform allows administrators to warn users or block data sending actions based on the destination website.&lt;/p&gt;

&lt;p&gt;Features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Artificial intelligence control:&lt;/strong&gt; Organizations can allow, restrict, or disable the use of artificial intelligence tools according to their internal rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection to security systems:&lt;/strong&gt; Security teams can export browser events to the company's central logging systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased protection mode:&lt;/strong&gt; A special environment for high-risk situations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add-on management:&lt;/strong&gt; Control which additional programs employees are allowed to install and use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The service works alongside existing infrastructure, identity recognition systems and device management programs that companies already use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Support and next steps
&lt;/h3&gt;

&lt;p&gt;The offer includes professional support directly from Mozilla, which features private issue management and defined response times. This support can also be purchased separately for businesses using the classic version of the program.&lt;/p&gt;

&lt;p&gt;The service is initially available in Europe, specifically in France, Germany, Austria and Switzerland, and is expected to expand to other markets in the future. Mozilla is also working on a similar service for its email application, which will allow for centralized management of messages, calendars and contacts, but no release date has been announced yet.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/i-mozilla-paroysiazei-to-firefox-enterprise-gia-kentriki-diacheirisi-se-epicheiriseis/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mozilla</category>
      <category>firefox</category>
      <category>enterprise</category>
      <category>software</category>
    </item>
    <item>
      <title>Firefox 158 released with native support for JPEG XL images</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Mon, 12 Oct 2026 15:49:29 +0000</pubDate>
      <link>https://dev.to/hacksgr/firefox-158-released-with-native-support-for-jpeg-xl-images-b8</link>
      <guid>https://dev.to/hacksgr/firefox-158-released-with-native-support-for-jpeg-xl-images-b8</guid>
      <description>&lt;p&gt;Mozilla released Firefox 158 with native JPEG XL image support, sub-pixel scrolling accuracy, and SkPDF integration for PDF generation on Linux and macOS.&lt;/p&gt;

&lt;p&gt;The release also includes Android tab bar customization and a fix for WebSocket message tracking in the Network Monitor.&lt;/p&gt;




&lt;p&gt;The most significant change is the built-in support for JPEG XL images. The new image format offers better compression, supports transparency, animation, and high dynamic range, and also allows conversion of older JPEG files. Users can now view such images directly in the browser, without the need for additional settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better PDF management and smoother scrolling
&lt;/h2&gt;

&lt;p&gt;The new version changes the way PDF files are created on Linux and macOS computers, making documents more accessible and improving their appearance.&lt;/p&gt;

&lt;p&gt;At the same time, scrolling on web pages is now more precise, as the limitation that limited movements to whole pixels has been removed. This is especially helpful on high-resolution screens and when the user is zooming.&lt;/p&gt;

&lt;h3&gt;
  
  
  New personalization options and conveniences
&lt;/h3&gt;

&lt;p&gt;On the new tab page, the browser now stores a collection of previous wallpapers in the “Your images” section so they are easily accessible.&lt;/p&gt;

&lt;p&gt;When it comes to filling out forms, the browser can suggest relevant information from open tabs and saved data. Mozilla clarifies, however, that this feature is being gradually rolled out to users.&lt;/p&gt;

&lt;p&gt;On Android, users can now choose whether the tab bar is at the top or bottom of the screen through the personalization settings. On Windows, menus work better with high-contrast themes, allowing control over background and text colors. Finally, an issue in developer tools where network monitoring was missing messages that arrived immediately after a connection was established has been fixed.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/kykloforise-o-firefox-158-me-apeytheias-ypostirixi-gia-eikones-jpeg-xl/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firefox</category>
      <category>mozilla</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Firefox 158 now available with built-in support for JPEG XL images</title>
      <dc:creator>Hacks.gr</dc:creator>
      <pubDate>Mon, 12 Oct 2026 15:41:33 +0000</pubDate>
      <link>https://dev.to/hacksgr/firefox-158-now-available-with-built-in-support-for-jpeg-xl-images-1ob6</link>
      <guid>https://dev.to/hacksgr/firefox-158-now-available-with-built-in-support-for-jpeg-xl-images-1ob6</guid>
      <description>&lt;p&gt;Firefox 158 is out with native JPEG XL image support, CSS typed arithmetic in calc, WebAuthn conditional UI updates, and navigation options for notifications.&lt;/p&gt;




&lt;p&gt;This image format supports wider color gamut, high dynamic range, video and animation, as well as options for high-quality lossless images and progressive loading. Mozilla has been testing this feature for several months, initially allowing users to enable it in a trial version through a special settings page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New features and improvements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The program's artificial intelligence feature for navigation can now automatically fill in fields in forms by drawing information from other open tabs or from saved fill-in data.&lt;/p&gt;

&lt;p&gt;In the area of ​​privacy-friendly local translations, support for three new languages ​​has been added: Albanian, Belarusian, and Filipino. A display issue with small icons on web pages when using the Ubuntu operating system has also been fixed.&lt;/p&gt;

&lt;p&gt;Creating PDFs within the program now produces more accessible documents, and display issues that caused mathematical symbols to disappear have been resolved. Scrolling through web pages is smoother and more accurate, as the program no longer rounds scroll positions to the exact pixels of the screen.&lt;/p&gt;

&lt;p&gt;On the new tab page, custom wallpapers that users have been using are now grouped into a separate images folder. The new version also includes changes for web developers, as well as a number of security fixes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Availability and update&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Installers are available from Monday, October 12th via Mozilla's archive service. Automatic updates for existing Windows, macOS, and Linux users began rolling out on Tuesday, October 13th, with Linux distribution repositories and app stores expected to roll out gradually thereafter.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://en.hacks.gr/diathesimos-o-firefox-158-me-ensomatomeni-ypostirixi-gia-eikones-jpeg-xl/" rel="noopener noreferrer"&gt;Read the original English article on Hacks.gr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firefox</category>
      <category>mozilla</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>Mozilla Measured the Open-Weight Gap: 5 Points, 8 of 10, 4% of Revenue</title>
      <dc:creator>Khasky</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:09:11 +0000</pubDate>
      <link>https://dev.to/khasky/mozilla-measured-the-open-weight-gap-5-points-8-of-10-4-of-revenue-49lc</link>
      <guid>https://dev.to/khasky/mozilla-measured-the-open-weight-gap-5-points-8-of-10-4-of-revenue-49lc</guid>
      <description>&lt;p&gt;Four datasets went into Mozilla's State of Open Source AI report. A developer survey fielded with SlashData, OpenRouter's traffic panels, Epoch's Capabilities Index, and METR's time-horizon data. Read separately they support the usual arguments. Read together they describe open-weight models that are close on capability, ahead on routed traffic, and nearly absent from the revenue.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measurements
&lt;/h2&gt;

&lt;p&gt;The three measurements the report rests on, with the window each one was taken in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Epoch Capabilities Index, September 1 data
Claude Fable 5, Claude Opus 5 (closed)     162
Kimi K3 (open)                             157
gap                                        5 points
Epoch's average gap since January          8 points (90% CI 7-11)
in calendar time                           about 4 months (Epoch), about 4.4 months (Mozilla, from METR data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenRouter, August 1-31, token volume
open weights in the top 10                 8 of 10
Chinese-built among those 8                7
first open model to lead weekly requests   DeepSeek, from August 3, after Google's 51 weeks at #1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenRouter, May-September 2025, model layer
usage      open ~20%    closed ~80%
revenue    open ~4%     closed ~96%
price      closed about 6x per call, at about 90% capability parity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The traffic figures count routed OpenRouter requests only, first-party use inside ChatGPT, Gemini and Doubao sits outside them, and the revenue split is the last one published, from a window the report says usage has since moved past.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a 5-point gap and a 4-month gap are the same fact
&lt;/h2&gt;

&lt;p&gt;The 5 points on the September chart run under Epoch's own average of 8 since January, and that average is what Epoch converts into roughly four months of calendar lead.&lt;/p&gt;

&lt;p&gt;Mozilla ran the conversion a second way, fitting METR's raw time-horizon data, and got about 4.4 months, with open capability doubling every 3.9 months against 5.5 for closed. The report labels its own fit a simplified reproduction rather than a result. 📐&lt;/p&gt;

&lt;p&gt;Release timing keeps the number stable. Every model on the chart shipped between June and August, so the margin is redrawn each cycle instead of compounding across them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage on OpenRouter
&lt;/h2&gt;

&lt;p&gt;DeepSeek's V4 Flash 0731 led the August token table at 45.1 trillion tokens, DeepSeek held three of the top ten places, and only three US entries made the list at all. On requests rather than tokens, August 3 was the first day an open model took the top spot, and DeepSeek covered the distance from third to first in eight weeks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the numbers do not cover
&lt;/h2&gt;

&lt;p&gt;Taking the limits before the economics is deliberate, because the revenue figure below is the one most likely to be quoted without them.&lt;/p&gt;

&lt;p&gt;Routed traffic is not all traffic. Anything served first-party inside ChatGPT, Gemini or Doubao never appears in OpenRouter's panels, which leaves a large share of real usage outside every figure here.&lt;/p&gt;

&lt;p&gt;The revenue split is older still. It covers May to September 2025 and has not been re-measured, and the report states that directly: usage has moved since that window, and the 4% is simply the last figure published.&lt;/p&gt;

&lt;p&gt;The measured gap is a floor. Epoch gives two reasons it may be understated: open models optimize on benchmarks more aggressively, and unpublished closed models are absent from the baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The economics
&lt;/h2&gt;

&lt;p&gt;The report's own reading of the revenue table is one clause long: capability is near parity, and price drives the split. Among developers who choose open models, 30% name lower cost as a top reason and 28% name privacy, and the Linux Foundation's estimate of unrealized annual savings from that asymmetry is $24.8B.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where open stalls
&lt;/h2&gt;

&lt;p&gt;79% of surveyed developers use open models, yet 51% of open deployments reach production against 63% for closed, a gap the survey traces to tooling and trust rather than capability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;firms using open components            89%
developers using open models           79%
open models reaching production        51%
closed models reaching production      63%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One figure underneath it carries the section. Vendor-partnered deployments reach production 67% of the time and internal builds 33%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capability without pretraining
&lt;/h2&gt;

&lt;p&gt;DeepSeek's July 31 post-training pass lifted V4-Flash 10 points on the Artificial Analysis index on an unchanged architecture, and the August 13 pass added 8 to V4-Pro, with no new pretraining run behind either.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;V4-Flash-0731   Jul 31   AA index ~40 -&amp;gt; ~50   +10   post-training pass, same architecture
V4-Pro-0813     Aug 13   AA index 45 -&amp;gt; 53     +8    post-training pass, two weeks later
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The V4-Flash pass moved Terminal-Bench 2.1 from 61.8 to 82.7 and cut eval-suite output tokens from 234M to 206M, so the score did not come from longer answers. Post-training costs a fraction of pretraining, which puts this kind of gain inside reach of anyone with an open base and a budget. 🔁&lt;/p&gt;

&lt;p&gt;Any targeted use of another model's outputs would also happen in post-training, so the report treats the cheap-gains question and the provenance question as one.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Report page: &lt;a href="https://stateofopensource.ai" rel="noopener noreferrer"&gt;https://stateofopensource.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Full PDF, v1.1: &lt;a href="https://stateofopensource.ai/state-of-open-source-ai-v1-1.pdf" rel="noopener noreferrer"&gt;https://stateofopensource.ai/state-of-open-source-ai-v1-1.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow me for more on AI and Software Development:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;khasky&lt;/strong&gt; — &lt;a href="https://www.linkedin.com/in/khasky/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; / &lt;a href="https://github.com/khasky" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; / &lt;a href="https://www.patreon.com/khasky" rel="noopener noreferrer"&gt;Patreon&lt;/a&gt; / &lt;a href="https://bsky.app/profile/khasky.bsky.social" rel="noopener noreferrer"&gt;Bluesky&lt;/a&gt; / &lt;a href="https://mastodon.social/@khasky" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt; / &lt;a href="https://medium.com/@khasky" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; / &lt;a href="https://dev.to/khasky"&gt;Devto&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;khaskydev&lt;/strong&gt; — &lt;a href="https://x.com/khaskydev" rel="noopener noreferrer"&gt;X&lt;/a&gt; / &lt;a href="https://www.threads.com/@khaskydev" rel="noopener noreferrer"&gt;Threads&lt;/a&gt; / &lt;a href="https://www.instagram.com/khaskydev/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; / &lt;a href="https://www.pinterest.com/khaskydev/" rel="noopener noreferrer"&gt;Pinterest&lt;/a&gt; / &lt;a href="https://www.tumblr.com/khaskydev" rel="noopener noreferrer"&gt;Tumblr&lt;/a&gt; / &lt;a href="https://www.facebook.com/khaskydev/" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt; / &lt;a href="https://vk.ru/khaskydev" rel="noopener noreferrer"&gt;VK&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensourceai</category>
      <category>openweights</category>
      <category>deepseek</category>
      <category>mozilla</category>
    </item>
    <item>
      <title>Firefox Smart Window’s Mistral option is hosted AI, not local inference</title>
      <dc:creator>Breach Protocol</dc:creator>
      <pubDate>Thu, 17 Sep 2026 06:12:29 +0000</pubDate>
      <link>https://dev.to/breachprotocol/firefox-smart-windows-mistral-option-is-hosted-ai-not-local-inference-1jbj</link>
      <guid>https://dev.to/breachprotocol/firefox-smart-windows-mistral-option-is-hosted-ai-not-local-inference-1jbj</guid>
      <description>&lt;p&gt;Firefox Smart Window is an opt-in browser mode that sends context-aware assistant prompts through Mozilla to hosted providers, including Mistral Small 4 hosted by Mistral AI. It matters because the product's privacy claim is about proxying, controls and retention practices—not the stronger claim that the named Mistral model runs locally in Firefox. Mozilla's own documentation makes that distinction clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key facts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Smart Window is a distinct, optional Firefox window type.&lt;/li&gt;
&lt;li&gt;Firefox's model page lists Mistral Small 4 as hosted by Mistral AI.&lt;/li&gt;
&lt;li&gt;A local classifier routes a request as chat or search, while the substantive prompt goes to Mozilla and then a provider.&lt;/li&gt;
&lt;li&gt;The primary source is &lt;a href="https://support.mozilla.org/en-US/kb/smart-window" rel="noopener noreferrer"&gt;Mozilla's Smart Window guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smart Window can summarize pages, compare tabs, help plan work, retrieve history a user asks it to consider, group tabs and use Exa for current web results with sources. It cannot click arbitrary site controls, complete forms, make purchases, change browser settings, sign in with stored credentials or act on its own. The division is closer to a research assistant with access to a folder of pages than to a web-operating agent.&lt;/p&gt;

&lt;p&gt;Mozilla's &lt;a href="https://www.mozilla.org/en-US/privacy/smart-window/" rel="noopener noreferrer"&gt;privacy notice&lt;/a&gt; explains the route. The browser first uses an on-device intent model to decide whether the Smart Bar entry is a chat or search request. For a chat, relevant page titles, URLs, explicitly selected pages and optional Memories may be sent to Mozilla; Mozilla forwards the request to the chosen third-party model. The provider sees Mozilla's request rather than the user's IP. Mozilla says it does not train models on Smart Window interactions, and it says chats and Memories are stored in Firefox's interface or locally on device, subject to the stated controls.&lt;/p&gt;

&lt;p&gt;The nuance is that local storage does not equal local inference. &lt;a href="https://support.mozilla.org/en-US/kb/smart-window-models" rel="noopener noreferrer"&gt;Mozilla's model-choice page&lt;/a&gt; labels Mistral Small 4 “Personalized” and identifies its maker and host. Mistral describes Small 4 as an open-weight 119B-total-parameter mixture-of-experts model with a 256k context window, but Firefox does not download it by default. Do not infer a local disk download or a run-time VRAM requirement from its parameter count; Mozilla's default route is hosted. Users who want local inference can configure an OpenAI-compatible endpoint such as Ollama or Lemonade via &lt;a href="https://support.mozilla.org/en-US/kb/smart-window-byom" rel="noopener noreferrer"&gt;Mozilla's bring-your-own-model documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mozilla calls Smart Window “optional and opt-in.” The rollout started in English in the United States and Canada and has a French beta in France; the companies say the United Kingdom and Germany are expected later in 2026. Memories are optional, stored locally after generation, and can draw from up to 60 days or 3,000 history items initially. Private-window activity is excluded.&lt;/p&gt;

&lt;p&gt;The strongest criticism, prominent in &lt;a href="https://news.ycombinator.com/item?id=49723408" rel="noopener noreferrer"&gt;the Hacker News discussion&lt;/a&gt;, is that calling the product private can mislead users who reasonably hear “private” as “my browsing context never leaves the device.” The strongest defense is equally concrete: a capable hosted model is practical for far more computers, and Mozilla offers model choice, proxying, local Memories and a self-hosted escape hatch.&lt;/p&gt;

&lt;p&gt;The honest conclusion is neither that Smart Window is secretly local nor that privacy controls are meaningless. It is a browser-mediated cloud AI product with a local router, explicit consent surfaces and bounded browser actions. The user-facing test is simple: decide whether the convenience of contextual hosted assistance is worth transmitting the selected context under Mozilla's stated terms.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://groundtruth.day/news/firefox-smart-window-mistral-is-hosted-not-local.html" rel="noopener noreferrer"&gt;Ground Truth&lt;/a&gt;, where every claim is checked against the primary source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mozilla</category>
      <category>firefox</category>
      <category>mistral</category>
      <category>browser</category>
    </item>
    <item>
      <title>In-Depth Analysis: Mozilla's Built-In Ad Blocker f…</title>
      <dc:creator>Norvik Tech</dc:creator>
      <pubDate>Fri, 04 Sep 2026 01:05:55 +0000</pubDate>
      <link>https://dev.to/norviktech/in-depth-analysis-mozillas-built-in-ad-blocker-f-mn7</link>
      <guid>https://dev.to/norviktech/in-depth-analysis-mozillas-built-in-ad-blocker-f-mn7</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://norvik.tech/en/news/analisis-ad-blocker-firefox-ios" rel="noopener noreferrer"&gt;norvik.tech&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Explore the technical details and implications of Mozilla's new ad blocker in Firefox for iOS, leveraging Apple's WebKit API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Mozilla's Built-In Ad Blocker
&lt;/h2&gt;

&lt;p&gt;Mozilla has integrated a &lt;strong&gt;built-in ad blocker&lt;/strong&gt; into Firefox for iOS, utilizing Apple’s &lt;strong&gt;WebKit API&lt;/strong&gt;. This marks a significant step in browser functionality, particularly given that no competing engines have successfully implemented similar features since the Digital Markets Act (DMA) introduced it two and a half years ago. The primary function of this ad blocker is to enhance user experience by preventing unwanted ads from loading, thereby improving page speed and overall performance.&lt;/p&gt;

&lt;p&gt;In the first third of our analysis, it's essential to note that Mozilla's decision to leverage WebKit API not only adheres to Apple's ecosystem but also ensures compatibility with existing iOS applications. &lt;strong&gt;WebKit&lt;/strong&gt;, being the underlying engine for Safari, provides a robust framework that allows developers to implement content blockers efficiently. This integration supports a smoother user experience across various web applications, resulting in reduced load times and better overall performance.&lt;/p&gt;

&lt;p&gt;[INTERNAL:web-development|Understanding browser engines]&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Mechanisms of the Ad Blocker
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Utilizes WebKit's content blocking capabilities&lt;/li&gt;
&lt;li&gt;Filters requests based on user-defined preferences&lt;/li&gt;
&lt;li&gt;Supports multiple ad types including banners, pop-ups, and tracking scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Architecture Behind the Ad Blocking Feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;The architecture of Mozilla's ad blocker consists of several key components that work in concert to enhance browsing efficiency:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Request Filtering&lt;/strong&gt;: The ad blocker intercepts network requests before they reach the page renderer. By applying predefined rules based on user settings or Mozilla's criteria, it determines whether to block or allow each request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Preferences&lt;/strong&gt;: Users can customize their blocking preferences, allowing them to select which types of ads or trackers they wish to block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Metrics&lt;/strong&gt;: Mozilla likely integrates metrics to measure the impact of the ad blocker on page load times and overall user satisfaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Comparison with Other Technologies
&lt;/h4&gt;

&lt;p&gt;While other browsers have implemented ad blocking features, Mozilla's approach stands out due to its integration with WebKit. For instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chrome&lt;/strong&gt; uses its own set of rules for ad blocking, which are less flexible than Mozilla’s user-driven model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brave&lt;/strong&gt; focuses heavily on privacy but may not integrate as seamlessly within the iOS ecosystem as Firefox does with WebKit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters: The Impact on Web Development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Importance of Ad Blocking in Modern Browsing
&lt;/h3&gt;

&lt;p&gt;The introduction of an integrated ad blocker in Firefox for iOS has significant implications for web development. Firstly, it sets a precedent for user experience expectations across platforms. Developers are now tasked with creating websites that not only deliver content effectively but also respect user choices regarding ads.&lt;/p&gt;

&lt;h4&gt;
  
  
  Real-World Implications
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Websites may need to adopt more sophisticated performance optimization techniques to ensure they load efficiently even when ads are blocked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ad Revenue Models&lt;/strong&gt;: Companies relying on ad revenue must rethink their strategies. With more users opting for ad blockers, alternative monetization methods such as subscriptions or premium content may become necessary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industry Standards&lt;/strong&gt;: As more browsers adopt similar features, we may see a shift towards more ethical advertising practices that prioritize user engagement over intrusive ads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When and Where to Implement Ad Blocking Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Cases for Businesses
&lt;/h3&gt;

&lt;p&gt;Integrating an ad blocker like Mozilla’s can be beneficial in several contexts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;E-commerce Platforms&lt;/strong&gt;: Ensuring that product pages load quickly and are free from distractions can improve conversion rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;News Outlets&lt;/strong&gt;: Readers often prefer fewer ads when consuming content; implementing an ad blocker can enhance their experience and encourage subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile Apps&lt;/strong&gt;: For mobile app developers, understanding how ad blockers function can lead to more thoughtful integration of ads that respect user preferences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Industry Applications
&lt;/h3&gt;

&lt;p&gt;This technology can be applied across various industries including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retail&lt;/strong&gt;: Enhancing user experience on e-commerce sites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media&lt;/strong&gt;: Providing an uninterrupted reading experience on news websites.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Does This Mean for Your Business?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Business Implications in Colombia and Spain
&lt;/h3&gt;

&lt;p&gt;For businesses operating in Colombia and Spain, the deployment of integrated ad blockers like Mozilla's represents a shift in how digital marketing strategies are approached. In these markets, where data privacy concerns are rising, having a built-in solution aligns with consumer expectations for transparency and control over their browsing experience.&lt;/p&gt;

&lt;h4&gt;
  
  
  Local Market Considerations
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adoption Rates&lt;/strong&gt;: As mobile usage continues to grow in Latin America, businesses must adapt their strategies to accommodate users who prefer ad-free experiences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Implications&lt;/strong&gt;: Implementing solutions that respect user privacy may initially seem costly but can lead to higher retention rates and customer loyalty in the long run.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps for Your Team
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Conclusion and Actionable Insights
&lt;/h3&gt;

&lt;p&gt;As your team evaluates the implications of Mozilla’s built-in ad blocker, consider conducting a pilot study to measure its impact on your web applications. Start by identifying key performance metrics such as load times and user engagement rates without ads. Norvik Tech specializes in supporting teams through this transition by offering tailored development solutions that align with your strategic goals.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recommended Steps
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Identify specific metrics you want to track (e.g., load time improvements).&lt;/li&gt;
&lt;li&gt;Conduct A/B testing with and without ads to understand user behavior.&lt;/li&gt;
&lt;li&gt;Analyze results and adjust your digital strategy accordingly.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Preguntas frecuentes
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ¿Cómo afecta el bloqueador de anuncios a la experiencia del usuario?
&lt;/h4&gt;

&lt;p&gt;El bloqueador de anuncios integrado en Firefox mejora significativamente la experiencia del usuario al reducir los tiempos de carga y eliminar contenido intrusivo que puede distraer de la navegación efectiva.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Qué industrias pueden beneficiarse más de esta tecnología?
&lt;/h4&gt;

&lt;p&gt;Las industrias de comercio electrónico y medios son las que más se beneficiarán al implementar bloqueadores de anuncios, ya que mejoran la retención de usuarios y optimizan las tasas de conversión.&lt;/p&gt;




&lt;h2&gt;
  
  
  Need Custom Software Solutions?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Norvik Tech&lt;/strong&gt; builds high-impact software for businesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;development&lt;/li&gt;
&lt;li&gt;consulting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://norvik.tech" rel="noopener noreferrer"&gt;Visit norvik.tech&lt;/a&gt; to schedule a free consultation.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>mozilla</category>
      <category>firefox</category>
      <category>ios</category>
    </item>
    <item>
      <title>I solved a 5 year old bug</title>
      <dc:creator>Ifeanyi Chima</dc:creator>
      <pubDate>Thu, 30 Jul 2026 22:48:44 +0000</pubDate>
      <link>https://dev.to/ifeanyichima/i-solved-a-5-year-old-bug-356h</link>
      <guid>https://dev.to/ifeanyichima/i-solved-a-5-year-old-bug-356h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Let me start by saying I am an Open-source contributor at Mozilla, I am trying to get better as a software engineer. I will be using the words &lt;strong&gt;Site&lt;/strong&gt; or &lt;strong&gt;Tile&lt;/strong&gt; interchangeably, they mean the same thing. &lt;/p&gt;

&lt;h2&gt;
  
  
  Bug Report
&lt;/h2&gt;

&lt;p&gt;The title of the &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1628669" rel="noopener noreferrer"&gt;bug&lt;/a&gt; report was "&lt;strong&gt;Cannot remove amazon.com from top sites list&lt;/strong&gt;" on Bugzilla and I believe it really captures the pain-point that users experienced because of the bug.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmt25jbxqyaolmqn8lg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmt25jbxqyaolmqn8lg7.png" alt="Bug report" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this bug report the user is complaining that he cannot remove &lt;u&gt;amazon.com&lt;/u&gt; from &lt;code&gt;Top Sites&lt;/code&gt; in the &lt;strong&gt;New tab page&lt;/strong&gt; of his Mozilla Firefox browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;A little back-story of what &lt;code&gt;Top Sites&lt;/code&gt;, &lt;code&gt;New tab page&lt;/code&gt; and &lt;code&gt;Places&lt;/code&gt; is: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Top Sites&lt;/strong&gt; is that grid of website shortcuts you see on Firefox's New Tab Page. It shows the sites you visit most often, plus some sponsored tiles (called "spocs," short for sponsored content) that Mozilla partners provide. The image below shows a row of Top Sites on the New Tab page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2e764iiwkxsp94k97rr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2e764iiwkxsp94k97rr.png" alt="Top Sites in Firefox" width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New tab page&lt;/strong&gt; is the page that opens when you open a new tab or click the home button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Places&lt;/strong&gt; is a SQLite database that Firefox uses to store browsing history.  &lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Imagine you open a new tab in Firefox and see a grid of your most-visited websites (called "Top Sites"). &lt;u&gt;amazon.com&lt;/u&gt; keeps showing up there, even though you never visit it and you keep trying to delete it.&lt;/p&gt;

&lt;p&gt;You right-click on the Amazon icon, click "Delete from History," but... nothing happens. It just sits there, refusing to leave. You try again. Still there. You try "Dismiss." Still there. It's like a stubborn guest who won't leave your house.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;Firefox's Top Sites can come from three places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your actual browsing history (sites you really visited)&lt;/li&gt;
&lt;li&gt;Pinned sites (sites you manually pinned to stay there)&lt;/li&gt;
&lt;li&gt;Default/curated sites (sites Firefox puts there automatically, like Amazon, because they think you might want them)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay with me and we would find out which one of these is the culprit. &lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Bug (Part A)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Investigation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By reading through the thread on the bug report, I discovered a trick other users on the thread had tried&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one user on the thread had the idea of changing the URL and then the problem went away, but after a new firefox release Firefox 82.0 (64-bit) the trick could no longer work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reproducing:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To reproduce the bug locally, I had to visit &lt;code&gt;https://amazon.com&lt;/code&gt; multiple times (up to 20 times) on my local PC so that I can get &lt;code&gt;amazon.com&lt;/code&gt; to show up as a &lt;strong&gt;Top Site&lt;/strong&gt; on my New Tab page. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reviewer Feedback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My first attempt was to block the &lt;code&gt;url&lt;/code&gt; whenever a user clicked "Delete History" so that it will never show up again in &lt;strong&gt;Top Sites&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mak&lt;/strong&gt; (a mozilla engineer) pushed back on this, pointing out that if a user just wants to delete history, silently also blocking the site (removing it entirely from Top Sites without saying so) gives them unexpected behavior.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem with the fix is that the dialog asks to the user if they want to remove from history, but then the code proceed also blocking the site, that is not told to the user and may be unexpected.&lt;br&gt;
If the user wanted to effectively just remove history, not block the site, they will get the wrong behavior.&lt;/p&gt;

&lt;p&gt;I'm not expert of this code, but it looks like the proposed solution is broad and may cause unexpected behavior, actually removing control from the user rather than increasing it.&lt;/p&gt;

&lt;p&gt;It's touching the right problem though, someone should eval a UX solution.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I got a second feedback from another reviewer &lt;strong&gt;thecount&lt;/strong&gt; (a mozilla engineer) and he was the one who led me to the right fix for the bug.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you log &lt;code&gt;link.url&lt;/code&gt; and &lt;code&gt;searchProvider.url&lt;/code&gt;, like this &lt;code&gt;console.log(link.url, searchProvider.url);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Right before this line: &lt;a href="https://searchfox.org/firefox-main/source/toolkit/modules/NewTabUtils.sys.mjs#1093" rel="noopener noreferrer"&gt;https://searchfox.org/firefox-main/source/toolkit/modules/NewTabUtils.sys.mjs#1093&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then on startup, I see this in the logs: "&lt;a href="https://www.amazon.com/" rel="noopener noreferrer"&gt;https://www.amazon.com/&lt;/a&gt; &lt;a href="https://amazon.com" rel="noopener noreferrer"&gt;https://amazon.com&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;So this is the line that causes the url to be changed, and now the &lt;code&gt;url&lt;/code&gt; is no longer removable because it no longer matches the original places &lt;code&gt;url&lt;/code&gt;.&lt;br&gt;
one solution might be to store "originalUrl" &lt;code&gt;link.originalUrl = link.url&lt;/code&gt; in the block I linked above, and then when we delete the url, check if we have "originalUrl" and use that instead"? So something like &lt;code&gt;link.originalUrl || link.url&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;With this feedback, I was able to finally understand the bug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// toolkit/modules/NewTabUtils.sys.mjs&lt;/span&gt;

&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;searchProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSearchProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;NewTabUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shortURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchProvider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;searchProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;= swap is done here&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The issue was from here: you see Firefox does a check to see if &lt;u&gt;amazon.com&lt;/u&gt; is already stored as a search-shortcut provider and then it quietly drops the &lt;code&gt;url&lt;/code&gt; and replaces it with the internal &lt;code&gt;searchProvider.url&lt;/code&gt;. This is why when we click "Delete History" nothing happens because we have lost the &lt;code&gt;url&lt;/code&gt; that was supposed to match what we have in &lt;code&gt;Places&lt;/code&gt; (a database in Firefox).&lt;/p&gt;

&lt;p&gt;What is a search-shortcut provider, It means "a site Firefox knows how to search directly", and Amazon qualifies because Amazon has its own product search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before a tile ever reaches the New Tab page, Firefox checks each link against its built-in list of search-shortcut sites (Google, Amazon, Bing, DuckDuckGo, eBay, Twitter, Wikipedia). If the link matches one of these, Firefox swaps that tile's url to a version meant to trigger a search on that site, not to visit the homepage you actually browsed to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Bug (Part B)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mental model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The mental model to have in Firefox is&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; the New Tab Page (React), shows the tiles, builds the request&lt;br&gt;
&lt;strong&gt;The request itself:&lt;/strong&gt; the payload sent from frontend to backend&lt;br&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; &lt;code&gt;PlacesFeed.sys.mjs&lt;/code&gt;, receives the request, touches the actual database (your browsing history)&lt;/p&gt;

&lt;p&gt;Like when building a To-do App, when you click on an item to delete from the database, you send the &lt;code&gt;id&lt;/code&gt; of the item as a payload to the backend (either in the URL or Request Body). But here, the real &lt;code&gt;id&lt;/code&gt; (&lt;code&gt;original_url&lt;/code&gt;) was quietly being generated and never forwarded, the frontend only ever knew about &lt;code&gt;url&lt;/code&gt;, which by that point pointed to the wrong thing. &lt;/p&gt;

&lt;p&gt;So, for the fix we are going to be borrowing heavily from the full-stack MVC architecture &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breaking down the fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We make sure that we do not lose reference to the &lt;code&gt;url&lt;/code&gt; before it gets silently swapped out by Firefox, so we do something like this &lt;code&gt;link.original_url = link.url;&lt;/code&gt; here, we are storing away the &lt;code&gt;url&lt;/code&gt; in a variable called &lt;code&gt;original_url&lt;/code&gt; and it will be referenced later when we want to delete a &lt;strong&gt;site&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Allow me to break down the fix using REST API from Nodejs.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt; This is like a backend endpoint that serves your frontend a list which we use to create the &lt;strong&gt;Tiles&lt;/strong&gt;. Here is where we create the &lt;strong&gt;Top Sites&lt;/strong&gt; and send to the frontend, but we quietly rename a field along the way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/topsites&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLinksFromDatabase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSearchProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchProvider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// &amp;lt;=backup the real id/url&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;searchProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;// &amp;lt;=overwrite what the frontend will see&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;B&lt;/strong&gt; A user clicks a button which fires off a delete request and then we send both the &lt;code&gt;url&lt;/code&gt; and &lt;code&gt;original_url&lt;/code&gt; to the backend server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/delete-history&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DELETE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C&lt;/strong&gt; The backend receives the request and decides what to actually delete&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/delete-history&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;original_url&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deleteEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It checks: "do I have an original_url? If yes, use that to delete. If not, fall back to url." &lt;/p&gt;

&lt;p&gt;This is important, because if it only used url, it would try to delete the search provider's link instead of the real saved site, and the deletion would silently fail or delete the wrong thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;Finally !!!!, now that we have a solid understanding of the issue and the fix, let us go ahead and implement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; Equivalent to Step 1 from the Rest API&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// toolkit/modules/NewTabUtils.sys.mjs&lt;/span&gt;
&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;searchProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSearchProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;NewTabUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shortURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchProvider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;searchProvider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;B.&lt;/strong&gt; Equivalent to Step 2 from the Rest API&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// browser/extensions/newtab/content-src/lib/link-menu-options.mjs&lt;/span&gt;
&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;onConfirm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nx"&gt;ac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AlsoToMain&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DELETE_HISTORY_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;pocket_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pocket_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;forceBlock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bookmarkGuid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C.&lt;/strong&gt; Equivalent to Step 3 from the Rest API&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// browser/extensions/newtab/lib/PlacesFeed.sys.mjs&lt;/span&gt;
&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DELETE_HISTORY_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;forceBlock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pocket_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;original_url&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NewTabUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activityStreamLinks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deleteHistoryEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;original_url&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I waited for my patch to be approved and landed. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2p2jja42oync33gyao3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2p2jja42oync33gyao3.gif" alt="Bug Fix" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The issue was that Amazon was in the user's actual history, but the displayed &lt;code&gt;url&lt;/code&gt; got silently swapped to the &lt;code&gt;search-shortcut&lt;/code&gt; version, so the delete call looked for a &lt;code&gt;url&lt;/code&gt; that no longer existed in &lt;code&gt;Places&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🕷️ BUG: &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1628669" rel="noopener noreferrer"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=1628669&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💗 PATCH: &lt;a href="https://phabricator.services.mozilla.com/D292910" rel="noopener noreferrer"&gt;https://phabricator.services.mozilla.com/D292910&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👤 MY PROFILE ON BUGZILLA: &lt;a href="https://bugzilla.mozilla.org/user_profile?user_id=786766" rel="noopener noreferrer"&gt;https://bugzilla.mozilla.org/user_profile?user_id=786766&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you, please follow me
&lt;/h2&gt;

</description>
      <category>mozilla</category>
      <category>browser</category>
      <category>devchallenge</category>
      <category>bugsmash</category>
    </item>
  </channel>
</rss>
