Source code

Revision control

Copy as Markdown

Other Tools

/* 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();