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";
const lazy = {};
const LOG_PREF = "browser.ipProtection.log";
ChromeUtils.defineLazyGetter(lazy, "logConsole", function () {
return console.createInstance({
prefix: "IPPNetworkUtils",
maxLogLevel: Services.prefs.getBoolPref(LOG_PREF, false) ? "Debug" : "Warn",
});
});
XPCOMUtils.defineLazyServiceGetter(
lazy,
"CaptivePortalService",
"@mozilla.org/network/captive-portal-service;1",
Ci.nsICaptivePortalService
);
XPCOMUtils.defineLazyServiceGetter(
lazy,
"gNetworkLinkService",
"@mozilla.org/network/network-link-service;1",
Ci.nsINetworkLinkService
);
/**
* Provides network connectivity detection utilities for IP Protection.
*
* This class implements a comprehensive offline check using:
* - Services.io.offline (user-set offline mode)
* - CaptivePortalService (connected but captive portal blocking internet)
* - NetworkLinkService (physical network link status)
*/
export const IPPNetworkUtils = {
/**
* Checks if the browser is currently offline or unable to access the internet.
*
* @returns {boolean}
* True if offline status, false otherwise.
*/
get isOffline() {
try {
return (
Services.io.offline ||
lazy.CaptivePortalService.state ==
lazy.CaptivePortalService.LOCKED_PORTAL ||
!lazy.gNetworkLinkService.isLinkUp
);
} catch (e) {
lazy.logConsole.warn("Could not determine network status.", e);
}
return false;
},
};