64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
/* 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 1847971 - ebay.com listings page
|
|
*
|
|
* eBay does not show the barcode scanner option on Firefox on Android,
|
|
* though it seems to work. It uses a server-side check to tell itself
|
|
* to not enable the scanner feature, so rather than pretend to be Chrome
|
|
* entirely, we carefully change `barcodeEnabled` from `false` to `true`.
|
|
*/
|
|
|
|
/* globals exportFunction */
|
|
|
|
const ENABLED_MESSAGE =
|
|
"The barcode scanner feature has been force-enabled. See https://bugzilla.mozilla.org/show_bug.cgi?id=1847971 for details.";
|
|
|
|
let value = undefined;
|
|
|
|
function check(obj) {
|
|
if (obj === null) {
|
|
return false;
|
|
}
|
|
if (Array.isArray(obj)) {
|
|
for (const v of obj) {
|
|
if (check(v)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
if (typeof obj === "object") {
|
|
if ("barcodeEnabled" in obj) {
|
|
obj.barcodeEnabled = true;
|
|
return true;
|
|
}
|
|
for (const v of Object.values(obj)) {
|
|
if (check(v)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
Object.defineProperty(window.wrappedJSObject, "$feprelist_C", {
|
|
configurable: true,
|
|
|
|
get: exportFunction(function () {
|
|
return value;
|
|
}, window),
|
|
|
|
set: exportFunction(function (v) {
|
|
try {
|
|
if (check(v)) {
|
|
console.info(ENABLED_MESSAGE);
|
|
}
|
|
} catch (_) {}
|
|
value = v;
|
|
}, window),
|
|
});
|