69 lines
1.7 KiB
JavaScript
69 lines
1.7 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/. */
|
|
|
|
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
|
import { FilterAdultComponent } from "moz-src:///toolkit/components/uniffi-bindgen-gecko-js/components/generated/RustFilterAdult.sys.mjs";
|
|
|
|
const lazy = {};
|
|
|
|
XPCOMUtils.defineLazyPreferenceGetter(
|
|
lazy,
|
|
"gFilterAdultEnabled",
|
|
"browser.newtabpage.activity-stream.filterAdult",
|
|
true
|
|
);
|
|
|
|
export class _FilterAdult {
|
|
#comp = null;
|
|
|
|
constructor() {
|
|
this.#comp = FilterAdultComponent.init();
|
|
}
|
|
|
|
/**
|
|
* Filter out any link objects that have a url with an adult base domain.
|
|
*
|
|
* @param {string[]} links
|
|
* An array of links to test.
|
|
* @returns {string[]}
|
|
* A filtered array without adult links.
|
|
*/
|
|
filter(links) {
|
|
if (!lazy.gFilterAdultEnabled) {
|
|
return links;
|
|
}
|
|
|
|
return links.filter(({ url }) => {
|
|
try {
|
|
const uri = Services.io.newURI(url);
|
|
return !this.#comp.contains(Services.eTLD.getBaseDomain(uri));
|
|
} catch (ex) {
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Determine if the supplied url is an adult url or not.
|
|
*
|
|
* @param {string} url
|
|
* The url to test.
|
|
* @returns {boolean}
|
|
* True if it is an adult url.
|
|
*/
|
|
isAdultUrl(url) {
|
|
if (!lazy.gFilterAdultEnabled) {
|
|
return false;
|
|
}
|
|
try {
|
|
const uri = Services.io.newURI(url);
|
|
return this.#comp.contains(Services.eTLD.getBaseDomain(uri));
|
|
} catch (ex) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
export const FilterAdult = new _FilterAdult();
|