diff --git a/dom/html/test/forms/test_input_file_picker.html b/dom/html/test/forms/test_input_file_picker.html
index f59c9e759c87..296c12bb7e46 100644
--- a/dom/html/test/forms/test_input_file_picker.html
+++ b/dom/html/test/forms/test_input_file_picker.html
@@ -81,7 +81,7 @@ var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(window);
// The following lists are from toolkit/content/filepicker.properties which is used by filePicker
-var imageExtensionList = "*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw; *.webp"
+var imageExtensionList = "*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw; *.webp; *.heic"
var audioExtensionList = "*.aac; *.aif; *.flac; *.iff; *.m4a; *.m4b; *.mid; *.midi; *.mp3; *.mpa; *.mpc; *.oga; *.ogg; *.opus; *.ra; *.ram; *.snd; *.wav; *.wma"
diff --git a/toolkit/components/extensions/parent/ext-downloads.js b/toolkit/components/extensions/parent/ext-downloads.js
index 7a93c834dd9c..9cd96e0d65fa 100644
--- a/toolkit/components/extensions/parent/ext-downloads.js
+++ b/toolkit/components/extensions/parent/ext-downloads.js
@@ -103,6 +103,7 @@ const FILTER_IMAGES_EXTENSIONS = [
"psd",
"raw",
"webp",
+ "heic",
];
const FILTER_XML_EXTENSIONS = ["xml"];
diff --git a/toolkit/components/extensions/test/browser/browser_ext_downloads_filters.js b/toolkit/components/extensions/test/browser/browser_ext_downloads_filters.js
index c273d4bef0ce..48dd6b88eed2 100644
--- a/toolkit/components/extensions/test/browser/browser_ext_downloads_filters.js
+++ b/toolkit/components/extensions/test/browser/browser_ext_downloads_filters.js
@@ -106,6 +106,10 @@ add_task(async function testDownload_webp_Images() {
await testAppliedFilters(".webp", Ci.nsIFilePicker.filterImages, 2);
});
+add_task(async function testDownload_heic_Images() {
+ await testAppliedFilters(".heic", Ci.nsIFilePicker.filterImages, 2);
+});
+
add_task(async function testDownload_xml_XML() {
await testAppliedFilters(".xml", Ci.nsIFilePicker.filterXML, 2);
});
diff --git a/toolkit/content/filepicker.properties b/toolkit/content/filepicker.properties
index 5717dbbed052..03daec114c28 100644
--- a/toolkit/content/filepicker.properties
+++ b/toolkit/content/filepicker.properties
@@ -5,7 +5,7 @@
allFilter=*
htmlFilter=*.html; *.htm; *.shtml; *.xhtml
textFilter=*.txt; *.text
-imageFilter=*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw; *.webp
+imageFilter=*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw; *.webp; *.heic
xmlFilter=*.xml
xulFilter=*.xul
audioFilter=*.aac; *.aif; *.flac; *.iff; *.m4a; *.m4b; *.mid; *.midi; *.mp3; *.mpa; *.mpc; *.oga; *.ogg; *.opus; *.ra; *.ram; *.snd; *.wav; *.wma
diff --git a/widget/nsIFilePicker.idl b/widget/nsIFilePicker.idl
index 4854a6d4a1ad..c64a4de4a043 100644
--- a/widget/nsIFilePicker.idl
+++ b/widget/nsIFilePicker.idl
@@ -37,7 +37,7 @@ interface nsIFilePicker : nsISupports
// *.png; *.bmp; *.ico; *.svg;
// *.svgz; *.tif; *.tiff; *.ai;
// *.drw; *.pct; *.psp; *.xcf;
- // *.psd; *.raw; *.webp
+ // *.psd; *.raw; *.webp; *.heic
const long filterXML = 0x010; // *.xml
const long filterXUL = 0x020; // *.xul
const long filterApps = 0x040; // Applications (per-platform implementation)