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:
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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() {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
});
|
||||
|
||||
|
||||
@@ -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",
|
||||
});
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 = {};
|
||||
|
||||
@@ -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",
|
||||
|
||||
119
browser/modules/test/unit/test_FilterAdult.js
Normal file
119
browser/modules/test/unit/test_FilterAdult.js
Normal 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);
|
||||
});
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user