@@ -34,7 +34,8 @@ var incognito = require("incognito");
3434var utils = require ( "utils" ) ;
3535
3636/************ Local Variables *****************/
37- var temporaryWidgetUnblock = { } ;
37+ let temporaryWidgetUnblock = { } ;
38+ let pendingTabs = new Set ( ) ;
3839
3940/***************** Blocking Listener Functions **************/
4041
@@ -1059,17 +1060,57 @@ function dispatcher(request, sender, sendResponse) {
10591060 }
10601061}
10611062
1063+
1064+ /**
1065+ * Cancels all requests, populates list of pending tabs to be reloaded later,
1066+ * when Privacy Badger is ready.
1067+ *
1068+ * @param {Object } details chrome.webRequest request details
1069+ * @returns {Object }
1070+ */
1071+ function onBeforeReady ( details ) {
1072+ if ( ! pendingTabs || details . tabId < 0 ) {
1073+ return ;
1074+ }
1075+
1076+ pendingTabs . add ( details . tabId ) ;
1077+
1078+ return {
1079+ cancel : true
1080+ } ;
1081+ }
1082+
1083+ /**
1084+ * Reloads all tabs that loaded before Privacy Badger was ready.
1085+ */
1086+ function reloadPendingTabs ( ) {
1087+ for ( let tab_id of pendingTabs ) {
1088+ chrome . tabs . reload ( tab_id ) ;
1089+ }
1090+ pendingTabs = null ;
1091+ }
1092+
1093+
10621094/*************** Event Listeners *********************/
1095+ function startBeforeReadyListener ( ) {
1096+ chrome . webRequest . onBeforeRequest . addListener ( onBeforeReady , { urls : [ "<all_urls>" ] } , [ "blocking" ] ) ;
1097+ }
1098+
1099+ function stopBeforeReadyListener ( ) {
1100+ chrome . webRequest . onBeforeRequest . removeListener ( onBeforeReady ) ;
1101+ reloadPendingTabs ( ) ;
1102+ }
1103+
10631104function startListeners ( ) {
10641105 chrome . webNavigation . onBeforeNavigate . addListener ( onNavigate ) ;
10651106
1066- chrome . webRequest . onBeforeRequest . addListener ( onBeforeRequest , { urls : [ "http://*/*" , "https://*/* "] } , [ "blocking" ] ) ;
1107+ chrome . webRequest . onBeforeRequest . addListener ( onBeforeRequest , { urls : [ "<all_urls> " ] } , [ "blocking" ] ) ;
10671108
10681109 let extraInfoSpec = [ 'requestHeaders' , 'blocking' ] ;
10691110 if ( chrome . webRequest . OnBeforeSendHeadersOptions . hasOwnProperty ( 'EXTRA_HEADERS' ) ) {
10701111 extraInfoSpec . push ( 'extraHeaders' ) ;
10711112 }
1072- chrome . webRequest . onBeforeSendHeaders . addListener ( onBeforeSendHeaders , { urls : [ "http://*/*" , "https://*/* "] } , extraInfoSpec ) ;
1113+ chrome . webRequest . onBeforeSendHeaders . addListener ( onBeforeSendHeaders , { urls : [ "<all_urls> " ] } , extraInfoSpec ) ;
10731114
10741115 extraInfoSpec = [ 'responseHeaders' , 'blocking' ] ;
10751116 if ( chrome . webRequest . OnHeadersReceivedOptions . hasOwnProperty ( 'EXTRA_HEADERS' ) ) {
@@ -1083,8 +1124,11 @@ function startListeners() {
10831124}
10841125
10851126/************************************** exports */
1086- var exports = { } ;
1087- exports . startListeners = startListeners ;
1127+ let exports = {
1128+ startBeforeReadyListener,
1129+ startListeners,
1130+ stopBeforeReadyListener,
1131+ } ;
10881132return exports ;
10891133/************************************** exports */
10901134} ) ( ) ;
0 commit comments