mozilla-bmo1822730.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Sun, 21 Apr 2024 06:46:25 +0200
branchfirefox124
changeset 1202 28ebbea625bd
parent 1200 2a0735b1eb92
permissions -rw-r--r--
124.0.2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1193
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
# User Rob Krum <biggestsonicfan@gmail.com>
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
# Date 1695432215 25200
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
#      Fri Sep 22 18:23:35 2023 -0700
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
# Node ID e6a8a9f0956d124e8de34eb4bcf09d8e17077d9d
1200
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
     6
# Parent  5dbbabbfaca21d2c5994f95ed095313284611c44
1193
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
Bug 1822730 - Add basic blob protocol handling for blob URIs that contain parsable http/s protocols
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
diff --git a/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs b/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
--- a/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
+++ b/toolkit/mozapps/downloads/DownloadLastDir.sys.mjs
1200
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    12
@@ -216,38 +216,49 @@ export class DownloadLastDir {
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    13
       Services.prefs.setComplexValue(LAST_DIR_PREF, nsIFile, aFile);
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    14
     } else if (Services.prefs.prefHasUserValue(LAST_DIR_PREF)) {
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    15
       Services.prefs.clearUserPref(LAST_DIR_PREF);
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    16
     }
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    17
   }
1193
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
 
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
   /**
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
    * Pre-processor to extract a domain name to be used with the content-prefs
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
-   * service. This specially handles data and file URIs so that the download
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
-   * dirs are recalled in a more consistent way:
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
+   * service. This specially handles data, file and blob URIs so that the
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
+   * download dirs are recalled in a more consistent way:
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
    *  - all file:/// URIs share the same folder
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
    *  - data: URIs share a folder per mime-type. If a mime-type is not
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
    *    specified text/plain is assumed.
1200
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    28
    *  - blob: URIs share the same folder as their origin. This is done by
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    29
    *    ContentPrefs already, so we just let the url fall-through.
1193
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
    * In any other case the original URL is returned as a string and ContentPrefs
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
    * will do its usual parsing.
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
    *
1200
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    33
    * @param {string|nsIURI|URL} url The URL to parse
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    34
    * @returns {string} the domain name to use, or the original url.
1193
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
    */
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
   #cpsGroupFromURL(url) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
     if (typeof url == "string") {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
+      if (url.startsWith("blob:http://") || url.startsWith("blob:https://")) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
+        url = url.replace("blob:", "");
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
+      }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
       url = new URL(url);
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
     } else if (url instanceof Ci.nsIURI) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
       url = URL.fromURI(url);
1200
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    44
     }
1193
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
     if (!URL.isInstance(url)) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
       return url;
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
     }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
+    if (url.protocol == "blob:") {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
+      if (
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
+        url.href.startsWith("blob:http://") ||
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
+        url.href.startsWith("blob:https://")
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
+      ) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
+        return url.href.replace("blob:", "");
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
+      }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
+    }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
     if (url.protocol == "data:") {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
       return url.href.match(/^data:[^;,]*/i)[0].replace(/:$/, ":text/plain");
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
     }
1200
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    59
     if (url.protocol == "file:") {
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    60
       return "file:///";
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    61
     }
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    62
     return url.href;
2a0735b1eb92 122.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1193
diff changeset
    63
   }