mozilla-bmo1822730.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Wed, 25 Oct 2023 11:49:20 +0200
branchfirefox118
changeset 1196 954851a35787
parent 1193 16de98d33e97
child 1200 2a0735b1eb92
permissions -rw-r--r--
118.0.2 latest
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
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
# Parent  677cbf2e64cdcd3a93e644f781be2bdc2529ba1a
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
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
@@ -221,11 +221,13 @@ export class DownloadLastDir {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
   /**
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
    * 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
    16
-   * 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
    17
-   * dirs are recalled in a more consistent way:
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
+   * 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
    19
+   * download dirs are recalled in a more consistent way:
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
    *  - all file:/// URIs share the same folder
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
    *  - 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
    22
    *    specified text/plain is assumed.
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
+   *  - blob: blob URIs are tested for http/https and the blob protocol
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
+   *    is stripped.
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
    * 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
    26
    * will do its usual parsing.
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
    *
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
@@ -234,6 +236,9 @@ export class DownloadLastDir {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
    */
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
   #cpsGroupFromURL(url) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
     if (typeof url == "string") {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
+      if (url.startsWith("blob:http://") || url.startsWith("blob:https://")) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
+        url = url.replace("blob:", "");
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
+      }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
       url = new URL(url);
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
     } else if (url instanceof Ci.nsIURI) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
       url = URL.fromURI(url);
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
@@ -241,6 +246,14 @@ export class DownloadLastDir {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
     if (!URL.isInstance(url)) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
       return url;
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
     }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
+    if (url.protocol == "blob:") {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
+      if (
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
+        url.href.startsWith("blob:http://") ||
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
+        url.href.startsWith("blob:https://")
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
+      ) {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
+        return url.href.replace("blob:", "");
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
+      }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
+    }
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
     if (url.protocol == "data:") {
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
       return url.href.match(/^data:[^;,]*/i)[0].replace(/:$/, ":text/plain");
16de98d33e97 FF 117.0.1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
     }