"use strict"; // This is an xpcshell test and gets a browser test env applied, so we // need to still manually import NetUtil. // eslint-disable-next-line mozilla/no-redeclare-with-import-autofix const { NetUtil } = ChromeUtils.importESModule( "resource://gre/modules/NetUtil.sys.mjs" ); // need profile so that PageThumbsStorageService can resolve the path to the underlying file do_get_profile(); function run_test() { // check the protocol handler implements the correct interface let handler = Services.io.getProtocolHandler("moz-page-thumb"); ok( handler instanceof Ci.nsIProtocolHandler, "moz-page-thumb handler provides a protocol handler interface" ); // create a dummy loadinfo which we can hand to newChannel. let dummyURI = Services.io.newURI("https://www.example.com/1"); let dummyChannel = NetUtil.newChannel({ uri: dummyURI, loadUsingSystemPrincipal: true, }); let dummyLoadInfo = dummyChannel.loadInfo; // and check that the error cases work as specified let badhost = Services.io.newURI( "moz-page-thumb://wronghost/?url=http%3A%2F%2Fwww.mozilla.org%2F" ); Assert.throws( () => handler.newChannel(badhost, dummyLoadInfo), /NS_ERROR_NOT_AVAILABLE/i, "moz-page-thumb object with wrong host must not resolve to a file path" ); let badQuery = Services.io.newURI( "moz-page-thumb://thumbnail/http%3A%2F%2Fwww.mozilla.org%2F" ); Assert.throws( () => handler.newChannel(badQuery, dummyLoadInfo), /NS_ERROR_NOT_AVAILABLE/i, "moz-page-thumb object with malformed query parameters must not resolve to a file path" ); let noURL = Services.io.newURI("moz-page-thumb://thumbnail/?badStuff"); Assert.throws( () => handler.newChannel(noURL, dummyLoadInfo), /NS_ERROR_NOT_AVAILABLE/i, "moz-page-thumb object without a URL parameter must not resolve to a file path" ); }