diff --git a/bedrock/firefox/templates/firefox/welcome/page17/page17-b.html b/bedrock/firefox/templates/firefox/welcome/page17/page17-b.html
index 365d7474193..f704097af2b 100644
--- a/bedrock/firefox/templates/firefox/welcome/page17/page17-b.html
+++ b/bedrock/firefox/templates/firefox/welcome/page17/page17-b.html
@@ -23,7 +23,7 @@
{% set main_title = 'Neues Jahr, neues Smartphone? Hol dir jetzt einen richtig guten Browser. Firefox!'|safe %}
{% set main_tagline = 'Firefox blockierst du ganz einfach Tracker, verwaltest spielend deine Passwörter und passt deine Datenschutzeinstellungen mit wenigen Klicks an.' %}
{% set qr_caption = 'Um loszulegen, scanne den QR-Code' %}
- {% set qr_alt = 'QR-Code zum Scannen für Firefox' %}
+ {% set qr_campaign = 'firefox-welcome-17-de' %}
{% set android_url = play_store_url('firefox', 'firefox-welcome-17b-de') %}
{% set ios_url = app_store_url('firefox', 'firefox-welcome-17b-de') %}
{% elif LANG == "fr" %}
@@ -31,7 +31,7 @@
{% set main_title = 'Nouvelle année, nouveau téléphone ? Téléchargez l’application Firefox.'|safe %}
{% set main_tagline = 'Bloquez les traqueurs, gérez vos mots de passe et personnalisez simplement vos paramètres de confidentialité avec Firefox, où que vous soyez.' %}
{% set qr_caption = 'Scanner le code QR pour commencer' %}
- {% set qr_alt = 'Code QR à scanner pour Firefox' %}
+ {% set qr_campaign = 'firefox-welcome-17-fr' %}
{% set android_url = play_store_url('firefox', 'firefox-welcome-17b-fr') %}
{% set ios_url = app_store_url('firefox', 'firefox-welcome-17b-fr') %}
{% else %}
@@ -39,7 +39,7 @@
{% set main_title = 'New year, new phone? Get the Firefox app.'|safe %}
{% set main_tagline = 'Block trackers, manage passwords and easily customize your privacy settings with Firefox on-the-go.' %}
{% set qr_caption = 'Scan the QR code to get started' %}
- {% set qr_alt = 'QR code to scan for Firefox' %}
+ {% set qr_campaign = 'firefox-welcome-17-en' %}
{% set android_url = play_store_url('firefox', 'firefox-welcome-17b') %}
{% set ios_url = app_store_url('firefox', 'firefox-welcome-17b') %}
{% endif %}
@@ -80,7 +80,7 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/laptop.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/laptop.svg
deleted file mode 100644
index fc6224154d7..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/laptop.svg
+++ /dev/null
@@ -1,40 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/mobile.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/mobile.svg
deleted file mode 100644
index fdc982bf87f..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/mobile.svg
+++ /dev/null
@@ -1,45 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/vpn-header.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/vpn-header.svg
deleted file mode 100644
index 914df3e2236..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu-vpn/vpn-header.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-de.html b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-de.html
deleted file mode 100644
index 54b10e5cdad..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-de.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{#
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at https://mozilla.org/MPL/2.0/.
-#}
-
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-fr.html b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-fr.html
deleted file mode 100644
index 5e5f05fe3d2..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-fr.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{#
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at https://mozilla.org/MPL/2.0/.
-#}
-
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-uk.html b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-uk.html
deleted file mode 100644
index c0ebe404479..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115-eu/qr-uk.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{#
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at https://mozilla.org/MPL/2.0/.
-#}
-
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115/addons.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx115/addons.svg
deleted file mode 100644
index b5328c2b92f..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx115/addons.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/arrow-blue.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/arrow-blue.svg
deleted file mode 100644
index 528a9d10878..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/arrow-blue.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/arrow-white.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/arrow-white.svg
deleted file mode 100644
index a22c203b531..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/arrow-white.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/translate-icon.svg b/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/translate-icon.svg
deleted file mode 100644
index 9c68aeed583..00000000000
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/fx118/translate-icon.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/index-account.html b/bedrock/firefox/templates/firefox/whatsnew/index-account.html
index 80cecb6b9a0..ecce6da6942 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/index-account.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/index-account.html
@@ -66,7 +66,7 @@
diff --git a/docs/redirects.rst b/docs/redirects.rst
index 1448d582068..442ca395555 100644
--- a/docs/redirects.rst
+++ b/docs/redirects.rst
@@ -195,3 +195,30 @@ against a remote instance of the site (e.g. production) it will run a lot
quicker by running the tests in parallel. To do this, you can add ``-n auto``
to the command line. Replace ``auto`` with an integer if you want to set the
maximum number of concurrent processes.
+
+Mobile app store redirects
+--------------------------
+
+Occasionally we need to create a link that can auto redirect to either the Apple
+App Store or the Google Play Store depending on user agent. A common use case is
+to embed inside a QR Code, which people can then scan on their phone to get a
+shortcut to the app. To make this easier bedrock has a special redirect URL to
+which you can add product and campaign query strings. When someone hits the
+redirect URL, bedrock will attempt to detect their mobile platform and then auto
+redirect to the appropriate app store.
+
+The base redirect URL is ``https://www.mozilla.org/firefox/browsers/mobile/app/``,
+and to it you can add both a ``product`` and ``campaign`` query parameter. For
+example, the following URL would redirect to either Firefox on the Apple App Store
+or on the Google Play Store, with the specified campaign parameter.
+
+.. code_block::
+
+ https://www.mozilla.org/firefox/browsers/mobile/app/?product=firefox&campaign=firefox-whatsnew
+
+.. note::
+
+ The ``product`` and ``campaign`` parameters are limited to a set of strictly
+ trusted values. To add more product and campaign options, you can add those
+ values to the ``mobile_app`` helper function in
+ `firefox/redirects.py `_.
diff --git a/media/img/firefox/browsers/mobile/qr-firefox.png b/media/img/firefox/browsers/mobile/qr-firefox.png
deleted file mode 100644
index 19fa186eb68bf2cd93a037159a6f76847641b8ae..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 392
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