Bug 1942895 - Move FilterAdult into shared browser/modules folder r=home-newtab-reviewers,mconley

Differential Revision: https://phabricator.services.mozilla.com/D235259
This commit is contained in:
Punam Dahiya
2025-01-23 23:07:57 +00:00
parent 8719f47313
commit a7b627a8a4
16 changed files with 131 additions and 163 deletions

View File

@@ -208,17 +208,6 @@ const TEST_GLOBAL = {
return {};
},
},
"@mozilla.org/security/hash;1": {
createInstance() {
return {
init() {},
updateFromStream() {},
finish() {
return "0";
},
};
},
},
"@mozilla.org/updates/update-checker;1": { createInstance() {} },
"@mozilla.org/widget/useridleservice;1": {
getService() {

View File

@@ -219,17 +219,6 @@ const TEST_GLOBAL = {
return {};
},
},
"@mozilla.org/security/hash;1": {
createInstance() {
return {
init() {},
updateFromStream() {},
finish() {
return "0";
},
};
},
},
"@mozilla.org/updates/update-checker;1": { createInstance() {} },
"@mozilla.org/widget/useridleservice;1": {
getService() {

View File

@@ -15,7 +15,7 @@ const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
DownloadsManager: "resource://activity-stream/lib/DownloadsManager.sys.mjs",
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
LinksCache: "resource://activity-stream/lib/LinksCache.sys.mjs",
NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
PageThumbs: "resource://gre/modules/PageThumbs.sys.mjs",

View File

@@ -29,7 +29,7 @@ import {
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
LinksCache: "resource://activity-stream/lib/LinksCache.sys.mjs",
NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",

View File

@@ -1,112 +0,0 @@
import { FilterAdult } from "lib/FilterAdult.sys.mjs";
import { GlobalOverrider } from "test/unit/utils";
describe("FilterAdult", () => {
let hashStub;
let hashValue;
let globals;
beforeEach(() => {
globals = new GlobalOverrider();
hashStub = {
finish: sinon.stub().callsFake(() => hashValue),
init: sinon.stub(),
update: sinon.stub(),
};
globals.set("Cc", {
"@mozilla.org/security/hash;1": {
createInstance() {
return hashStub;
},
},
});
globals.set("gFilterAdultEnabled", true);
});
afterEach(() => {
hashValue = "";
globals.restore();
});
describe("filter", () => {
it("should default to include on unexpected urls", () => {
const empty = {};
const result = FilterAdult.filter([empty]);
assert.equal(result.length, 1);
assert.equal(result[0], empty);
});
it("should not filter out non-adult urls", () => {
const link = { url: "https://mozilla.org/" };
const result = FilterAdult.filter([link]);
assert.equal(result.length, 1);
assert.equal(result[0], link);
});
it("should filter out adult urls", () => {
// Use a hash value that is in the adult set
hashValue = "+/UCpAhZhz368iGioEO8aQ==";
const link = { url: "https://some-adult-site/" };
const result = FilterAdult.filter([link]);
assert.equal(result.length, 0);
});
it("should not filter out adult urls if the preference is turned off", () => {
// Use a hash value that is in the adult set
hashValue = "+/UCpAhZhz368iGioEO8aQ==";
globals.set("gFilterAdultEnabled", false);
const link = { url: "https://some-adult-site/" };
const result = FilterAdult.filter([link]);
assert.equal(result.length, 1);
assert.equal(result[0], link);
});
});
describe("isAdultUrl", () => {
it("should default to false on unexpected urls", () => {
const result = FilterAdult.isAdultUrl("");
assert.equal(result, false);
});
it("should return false for non-adult urls", () => {
const result = FilterAdult.isAdultUrl("https://mozilla.org/");
assert.equal(result, false);
});
it("should return true for adult urls", () => {
// Use a hash value that is in the adult set
hashValue = "+/UCpAhZhz368iGioEO8aQ==";
const result = FilterAdult.isAdultUrl("https://some-adult-site/");
assert.equal(result, true);
});
it("should return false for adult urls when the preference is turned off", () => {
// Use a hash value that is in the adult set
hashValue = "+/UCpAhZhz368iGioEO8aQ==";
globals.set("gFilterAdultEnabled", false);
const result = FilterAdult.isAdultUrl("https://some-adult-site/");
assert.equal(result, false);
});
describe("test functions", () => {
it("should add and remove a filter in the adult list", () => {
// Use a hash value that is in the adult set
FilterAdult.addDomainToList("https://some-adult-site/");
let result = FilterAdult.isAdultUrl("https://some-adult-site/");
assert.equal(result, true);
FilterAdult.removeDomainFromList("https://some-adult-site/");
result = FilterAdult.isAdultUrl("https://some-adult-site/");
assert.equal(result, false);
});
});
});
});

View File

@@ -197,17 +197,6 @@ const TEST_GLOBAL = {
return {};
},
},
"@mozilla.org/security/hash;1": {
createInstance() {
return {
init() {},
updateFromStream() {},
finish() {
return "0";
},
};
},
},
"@mozilla.org/updates/update-checker;1": { createInstance() {} },
"@mozilla.org/widget/useridleservice;1": {
getService() {

View File

@@ -8,7 +8,7 @@ const { actionTypes: at } = ChromeUtils.importESModule(
);
ChromeUtils.defineESModuleGetters(this, {
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
PageThumbs: "resource://gre/modules/PageThumbs.sys.mjs",
Screenshots: "resource://activity-stream/lib/Screenshots.sys.mjs",

View File

@@ -13,7 +13,7 @@ const { actionCreators: ac, actionTypes: at } = ChromeUtils.importESModule(
);
ChromeUtils.defineESModuleGetters(this, {
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
PageThumbs: "resource://gre/modules/PageThumbs.sys.mjs",

View File

@@ -5,7 +5,7 @@
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
UrlbarUtils: "resource:///modules/UrlbarUtils.sys.mjs",
});

View File

@@ -9,7 +9,7 @@ const ALLOWED_TEST_URL = "http://mochi.test:8888/";
const BLOCKED_TEST_URL = "https://example.com/browser";
ChromeUtils.defineESModuleGetters(this, {
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
InteractionsBlocklist: "resource:///modules/InteractionsBlocklist.sys.mjs",
});

View File

@@ -23,7 +23,7 @@ const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
FaviconFeed: "resource://activity-stream/lib/FaviconFeed.sys.mjs",
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
LinksCache: "resource://activity-stream/lib/LinksCache.sys.mjs",
NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",

View File

@@ -12,7 +12,7 @@ const { actionTypes: at } = ChromeUtils.importESModule(
);
ChromeUtils.defineESModuleGetters(this, {
FilterAdult: "resource://activity-stream/lib/FilterAdult.sys.mjs",
FilterAdult: "resource:///modules/FilterAdult.sys.mjs",
NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
shortURL: "resource://activity-stream/lib/ShortURL.sys.mjs",

View File

@@ -2,16 +2,7 @@
* 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/. */
// We use importESModule here instead of static import so that
// the Karma test environment won't choke on this module. This
// is because the Karma test environment already stubs out
// XPCOMUtils, and overrides importESModule to be a no-op (which
// can't be done for a static import statement).
// eslint-disable-next-line mozilla/use-static-import
const { XPCOMUtils } = ChromeUtils.importESModule(
"resource://gre/modules/XPCOMUtils.sys.mjs"
);
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
const lazy = {};

View File

@@ -123,6 +123,7 @@ EXTRA_JS_MODULES += [
"EveryWindow.sys.mjs",
"ExtensionsUI.sys.mjs",
"FaviconLoader.sys.mjs",
"FilterAdult.sys.mjs",
"FirefoxBridgeExtensionUtils.sys.mjs",
"HomePage.sys.mjs",
"LaterRun.sys.mjs",

View File

@@ -0,0 +1,119 @@
/* Any copyright is dedicated to the Public Domain.
* https://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
const { FilterAdult } = ChromeUtils.importESModule(
"resource:///modules/FilterAdult.sys.mjs"
);
let originalPrefValue;
const FILTER_ADULT_ENABLED_PREF =
"browser.newtabpage.activity-stream.filterAdult";
const TEST_ADULT_SITE_URL = "https://some-adult-site.com/";
add_setup(async function setup() {
// Save the original preference value to restore later
originalPrefValue = Services.prefs.getBoolPref(
FILTER_ADULT_ENABLED_PREF,
true
);
// Enable the filter preference for testing
Services.prefs.setBoolPref(FILTER_ADULT_ENABLED_PREF, true);
registerCleanupFunction(() => {
// Restore the original preference value after all tests
Services.prefs.setBoolPref(FILTER_ADULT_ENABLED_PREF, originalPrefValue);
});
});
add_task(async function test_defaults_to_include_unexpected_urls() {
const empty = {};
const result = FilterAdult.filter([empty]);
Assert.equal(result.length, 1);
Assert.equal(result[0], empty);
});
add_task(async function test_does_not_filter_non_adult_urls() {
const link = { url: "https://mozilla.org/" };
const result = FilterAdult.filter([link]);
Assert.equal(result.length, 1);
Assert.equal(result[0], link);
});
add_task(async function test_filters_out_adult_urls() {
// Add a domain to the adult list
FilterAdult.addDomainToList(TEST_ADULT_SITE_URL);
const link = { url: TEST_ADULT_SITE_URL };
const result = FilterAdult.filter([link]);
Assert.equal(result.length, 0);
// Clean up
FilterAdult.removeDomainFromList(TEST_ADULT_SITE_URL);
});
add_task(async function test_does_not_filter_adult_urls_when_pref_off() {
// Disable the filter preference
Services.prefs.setBoolPref(FILTER_ADULT_ENABLED_PREF, false);
// Add a domain to the adult list
FilterAdult.addDomainToList(TEST_ADULT_SITE_URL);
const link = { url: TEST_ADULT_SITE_URL };
const result = FilterAdult.filter([link]);
Assert.equal(result.length, 1);
Assert.equal(result[0], link);
// Re-enable the preference
Services.prefs.setBoolPref(FILTER_ADULT_ENABLED_PREF, true);
// Clean up
FilterAdult.removeDomainFromList(TEST_ADULT_SITE_URL);
});
add_task(async function test_isAdultUrl_returns_false_for_unexpected_urls() {
const result = FilterAdult.isAdultUrl("");
Assert.equal(result, false);
});
add_task(async function test_isAdultUrl_returns_false_for_non_adult_urls() {
const result = FilterAdult.isAdultUrl("https://mozilla.org/");
Assert.equal(result, false);
});
add_task(async function test_isAdultUrl_returns_true_for_adult_urls() {
// Add a domain to the adult list
FilterAdult.addDomainToList(TEST_ADULT_SITE_URL);
const result = FilterAdult.isAdultUrl(TEST_ADULT_SITE_URL);
Assert.equal(result, true);
// Clean up
FilterAdult.removeDomainFromList(TEST_ADULT_SITE_URL);
});
add_task(async function test_isAdultUrl_returns_false_when_pref_off() {
// Disable the filter preference
Services.prefs.setBoolPref(FILTER_ADULT_ENABLED_PREF, false);
// Add a domain to the adult list
FilterAdult.addDomainToList(TEST_ADULT_SITE_URL);
const result = FilterAdult.isAdultUrl(TEST_ADULT_SITE_URL);
Assert.equal(result, false);
// Re-enable the preference
Services.prefs.setBoolPref(FILTER_ADULT_ENABLED_PREF, true);
// Clean up
FilterAdult.removeDomainFromList(TEST_ADULT_SITE_URL);
});
add_task(async function test_add_and_remove_from_adult_list() {
// Add a domain to the adult list
FilterAdult.addDomainToList(TEST_ADULT_SITE_URL);
let result = FilterAdult.isAdultUrl(TEST_ADULT_SITE_URL);
Assert.equal(result, true);
// Remove the domain from the list
FilterAdult.removeDomainFromList(TEST_ADULT_SITE_URL);
result = FilterAdult.isAdultUrl(TEST_ADULT_SITE_URL);
Assert.equal(result, false);
});

View File

@@ -6,6 +6,8 @@ tags = "os_integration"
["test_E10SUtils_nested_URIs.js"]
["test_FilterAdult.js"]
["test_FirefoxBridgeExtensionUtils.js"]
run-if = ["os == 'win'"] # Test of a Windows-specific feature