test_HomePage_ignore.js (3247B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ 3 */ 4 5 "use strict"; 6 7 ChromeUtils.defineESModuleGetters(this, { 8 HomePage: "resource:///modules/HomePage.sys.mjs", 9 RemoteSettings: "resource://services-settings/remote-settings.sys.mjs", 10 TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs", 11 sinon: "resource://testing-common/Sinon.sys.mjs", 12 }); 13 14 const HOMEPAGE_IGNORELIST = "homepage-urls"; 15 16 /** 17 * Provides a basic set of remote settings for use in tests. 18 */ 19 async function setupRemoteSettings() { 20 const settings = await RemoteSettings("hijack-blocklists"); 21 sinon.stub(settings, "get").returns([ 22 { 23 id: HOMEPAGE_IGNORELIST, 24 matches: ["ignore=me", "ignoreCASE=ME"], 25 _status: "synced", 26 }, 27 ]); 28 } 29 30 add_task(async function setup() { 31 await setupRemoteSettings(); 32 }); 33 34 add_task(async function test_initWithIgnoredPageCausesReset() { 35 // Set the preference direct as the set() would block us. 36 Services.prefs.setStringPref( 37 "browser.startup.homepage", 38 "http://bad/?ignore=me" 39 ); 40 Assert.ok(HomePage.overridden, "Should have overriden the homepage"); 41 42 await HomePage.delayedStartup(); 43 44 Assert.ok( 45 !HomePage.overridden, 46 "Should no longer be overriding the homepage." 47 ); 48 Assert.equal( 49 HomePage.get(), 50 HomePage.getDefault(), 51 "Should have reset to the default preference" 52 ); 53 54 TelemetryTestUtils.assertEvents( 55 [{ object: "ignore", value: "saved_reset" }], 56 { 57 category: "homepage", 58 method: "preference", 59 } 60 ); 61 }); 62 63 add_task(async function test_updateIgnoreListCausesReset() { 64 Services.prefs.setStringPref( 65 "browser.startup.homepage", 66 "http://bad/?new=ignore" 67 ); 68 Assert.ok(HomePage.overridden, "Should have overriden the homepage"); 69 70 // Simulate an ignore list update. 71 await RemoteSettings("hijack-blocklists").emit("sync", { 72 data: { 73 current: [ 74 { 75 id: HOMEPAGE_IGNORELIST, 76 schema: 1553857697843, 77 last_modified: 1553859483588, 78 matches: ["ignore=me", "ignoreCASE=ME", "new=ignore"], 79 }, 80 ], 81 }, 82 }); 83 84 Assert.ok( 85 !HomePage.overridden, 86 "Should no longer be overriding the homepage." 87 ); 88 Assert.equal( 89 HomePage.get(), 90 HomePage.getDefault(), 91 "Should have reset to the default preference" 92 ); 93 TelemetryTestUtils.assertEvents( 94 [{ object: "ignore", value: "saved_reset" }], 95 { 96 category: "homepage", 97 method: "preference", 98 } 99 ); 100 }); 101 102 async function testSetIgnoredUrl(url) { 103 Assert.ok(!HomePage.overriden, "Should not be overriding the homepage"); 104 105 await HomePage.set(url); 106 107 Assert.equal( 108 HomePage.get(), 109 HomePage.getDefault(), 110 "Should still have the default homepage." 111 ); 112 Assert.ok(!HomePage.overriden, "Should not be overriding the homepage."); 113 TelemetryTestUtils.assertEvents( 114 [{ object: "ignore", value: "set_blocked" }], 115 { 116 category: "homepage", 117 method: "preference", 118 } 119 ); 120 } 121 122 add_task(async function test_setIgnoredUrl() { 123 await testSetIgnoredUrl("http://bad/?ignore=me"); 124 }); 125 126 add_task(async function test_setIgnoredUrl_case() { 127 await testSetIgnoredUrl("http://bad/?Ignorecase=me"); 128 });