firefox web extension: delaying http request onBeforeSendHeaders js

Viewed 9

I am trying to delay specific HTTP (video type) requests for 1 minute. When I use "setTimeout()", it doesn't work for more than 10 seconds. When I use a "do - while" loop, any subsequent request will be blocked. I tried to use chained promises but the request is returned immediately. below is the code of my event listener, can someone tell me what I am doing wrong?

Thanks

const videoType = "mime=video"; 
const oFilter = {urls: webpattern,types: ["xmlhttprequest"]};
let xinfo = "blocking";

function onBeforeSendHeadersHandler(requestDetails) {
    let lowerCaseUrl = requestDetails.url.toLowerCase();

    if (lowerCaseUrl.includes(videoType)) {
           let delay = 10000;
            function delayIt (val){ 
                return new Promise((resolve, reject) => {
                console.log("step:",Date(Date.now()), val);
                setTimeout(() => {
                  resolve({ cancel: true });//(val);
                }, delay);
              });
              }  
             Promise.resolve(requestDetails).then(delayIt).then(delayIt)
            .then(delayIt).then(function (requestDetails){
                console.log("final:",Date(Date.now()), requestDetails);
              });
        }

        else {
            console.log("Another request!");
            return requestDetails;
        }
 }
 browser.webRequest.onBeforeSendHeaders.addListener(onBeforeSendHeadersHandler, oFilter, [xinfo, "requestHeaders"]);
0 Answers
Related