diff --git a/platform/chromium/vapi-background-ext.js b/platform/chromium/vapi-background-ext.js index 1369714a744aa..9b29ceea07759 100644 --- a/platform/chromium/vapi-background-ext.js +++ b/platform/chromium/vapi-background-ext.js @@ -183,7 +183,9 @@ vAPI.Tabs = class extends vAPI.Tabs { suspendOneRequest(details) { this.suspendedTabIds.add(details.tabId); - return { cancel: true }; + return { + redirectUrl: vAPI.getURL(`web_accessible_resources/empty?secret=${vAPI.warSecret()}`) + }; } unsuspendAllRequests(discard = false) { diff --git a/platform/common/vapi-background.js b/platform/common/vapi-background.js index 6cafb805c9adf..0c4b0b46d9461 100644 --- a/platform/common/vapi-background.js +++ b/platform/common/vapi-background.js @@ -1249,7 +1249,7 @@ vAPI.Net = class { if ( this.suspendDepth !== 0 ) { return; } this.unsuspendAllRequests(discard); } - canSuspend() { + static canSuspend() { return false; } }; diff --git a/platform/firefox/vapi-background-ext.js b/platform/firefox/vapi-background-ext.js index fc04d32dcc572..723daf7b6ad2c 100644 --- a/platform/firefox/vapi-background-ext.js +++ b/platform/firefox/vapi-background-ext.js @@ -303,7 +303,7 @@ import { ); } } - canSuspend() { + static canSuspend() { return true; } }; diff --git a/src/js/background.js b/src/js/background.js index a5d06f5575e93..b2251559907ed 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -110,7 +110,7 @@ const userSettingsDefault = { prefetchingDisabled: true, requestLogMaxEntries: 1000, showIconBadge: true, - suspendUntilListsAreLoaded: true, + suspendUntilListsAreLoaded: vAPI.Net.canSuspend(), tooltipsDisabled: false, webrtcIPAddressHidden: false, }; diff --git a/src/js/start.js b/src/js/start.js index b695833a3c9ba..70b5383658523 100644 --- a/src/js/start.js +++ b/src/js/start.js @@ -201,10 +201,20 @@ const onNetWhitelistReady = function(netWhitelistRaw, adminExtra) { const onUserSettingsReady = function(fetched) { // Terminate suspended state? - if ( fetched.suspendUntilListsAreLoaded === false ) { + const tnow = Date.now() - vAPI.T0; + if ( + vAPI.Net.canSuspend() && + fetched.suspendUntilListsAreLoaded === false + ) { vAPI.net.unsuspend({ all: true, discard: true }); - ubolog(`Unsuspend network activity listener`); - µb.supportStats.unsuspendAfter = `${Date.now() - vAPI.T0} ms`; + ubolog(`Unsuspend network activity listener at ${tnow} ms`); + µb.supportStats.unsuspendAfter = `${tnow} ms`; + } else if ( + vAPI.Net.canSuspend() === false && + fetched.suspendUntilListsAreLoaded + ) { + vAPI.net.suspend(); + ubolog(`Suspend network activity listener at ${tnow} ms`); } // `externalLists` will be deprecated in some future, it is kept around diff --git a/src/js/storage.js b/src/js/storage.js index d557ac7d670e0..a43af608e62e1 100644 --- a/src/js/storage.js +++ b/src/js/storage.js @@ -805,7 +805,7 @@ self.addEventListener('hiddenSettingsChanged', ( ) => { const onFilterListsReady = function(lists) { this.availableFilterLists = lists; - if ( vAPI.net.canSuspend() ) { + if ( vAPI.Net.canSuspend() ) { vAPI.net.suspend(); } redirectEngine.reset(); diff --git a/src/js/traffic.js b/src/js/traffic.js index e44ca913958e6..b8b1c7781eec2 100644 --- a/src/js/traffic.js +++ b/src/js/traffic.js @@ -1136,7 +1136,9 @@ const webRequest = { start: (( ) => { vAPI.net = new vAPI.Net(); - vAPI.net.suspend(); + if ( vAPI.Net.canSuspend() ) { + vAPI.net.suspend(); + } return async ( ) => { vAPI.net.setSuspendableListener(onBeforeRequest);