mozilla-bmo1822730.patch
branchfirefox117
changeset 1193 16de98d33e97
child 1200 2a0735b1eb92
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-bmo1822730.patch	Sat Sep 23 09:32:28 2023 +0200
@@ -0,0 +1,52 @@
+# HG changeset patch
+# User Rob Krum <biggestsonicfan@gmail.com>
+# Date 1695432215 25200
+#      Fri Sep 22 18:23:35 2023 -0700
+# Node ID e6a8a9f0956d124e8de34eb4bcf09d8e17077d9d
+# Parent  677cbf2e64cdcd3a93e644f781be2bdc2529ba1a
+Bug 1822730 - Add basic blob protocol handling for blob URIs that contain parsable http/s protocols
+
+diff --git a/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs b/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs
+--- a/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs
++++ b/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs
+@@ -221,11 +221,13 @@ export class DownloadLastDir {
+ 
+   /**
+    * Pre-processor to extract a domain name to be used with the content-prefs
+-   * service. This specially handles data and file URIs so that the download
+-   * dirs are recalled in a more consistent way:
++   * service. This specially handles data, file and blob URIs so that the
++   * download dirs are recalled in a more consistent way:
+    *  - all file:/// URIs share the same folder
+    *  - data: URIs share a folder per mime-type. If a mime-type is not
+    *    specified text/plain is assumed.
++   *  - blob: blob URIs are tested for http/https and the blob protocol
++   *    is stripped.
+    * In any other case the original URL is returned as a string and ContentPrefs
+    * will do its usual parsing.
+    *
+@@ -234,6 +236,9 @@ export class DownloadLastDir {
+    */
+   #cpsGroupFromURL(url) {
+     if (typeof url == "string") {
++      if (url.startsWith("blob:http://") || url.startsWith("blob:https://")) {
++        url = url.replace("blob:", "");
++      }
+       url = new URL(url);
+     } else if (url instanceof Ci.nsIURI) {
+       url = URL.fromURI(url);
+@@ -241,6 +246,14 @@ export class DownloadLastDir {
+     if (!URL.isInstance(url)) {
+       return url;
+     }
++    if (url.protocol == "blob:") {
++      if (
++        url.href.startsWith("blob:http://") ||
++        url.href.startsWith("blob:https://")
++      ) {
++        return url.href.replace("blob:", "");
++      }
++    }
+     if (url.protocol == "data:") {
+       return url.href.match(/^data:[^;,]*/i)[0].replace(/:$/, ":text/plain");
+     }