From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- browser/extensions/webcompat/shims/history.js | 54 +++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 browser/extensions/webcompat/shims/history.js (limited to 'browser/extensions/webcompat/shims/history.js') diff --git a/browser/extensions/webcompat/shims/history.js b/browser/extensions/webcompat/shims/history.js new file mode 100644 index 0000000000..6fbd1fdedb --- /dev/null +++ b/browser/extensions/webcompat/shims/history.js @@ -0,0 +1,54 @@ +/* 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 http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/* + * Bug 1624853 - Shim Storage Access API on history.com + * + * history.com uses Adobe as a necessary third party to authenticating + * with a TV provider. In order to accomodate this, we grant storage access + * to the Adobe domain via the Storage Access API when the login or logout + * buttons are clicked, then forward the click to continue as normal. + */ + +console.warn( + `When using oauth, Firefox calls the Storage Access API on behalf of the site. See https://bugzilla.mozilla.org/show_bug.cgi?id=1624853 for details.` +); + +// Third-party origin we need to request storage access for. +const STORAGE_ACCESS_ORIGIN = "https://sp.auth.adobe.com"; + +document.documentElement.addEventListener( + "click", + e => { + const { target, isTrusted } = e; + if (!isTrusted) { + return; + } + + const button = target.closest("a"); + if (!button) { + return; + } + + const buttonLink = button.href; + if (buttonLink?.startsWith("https://www.history.com/mvpd-auth")) { + button.disabled = true; + button.style.opacity = 0.5; + e.stopPropagation(); + e.preventDefault(); + document + .requestStorageAccessForOrigin(STORAGE_ACCESS_ORIGIN) + .then(() => { + target.click(); + }) + .catch(() => { + button.disabled = false; + button.style.opacity = 1.0; + }); + } + }, + true +); -- cgit v1.2.3