0

Actually, I want to use webRequest to modify cookie before request sending. My own cookie data is stored in extension's storage, but getting data from storage is asynchronous. So how can I modify the request's cookie?

I want to do like this:

var beforeSendHeadersHandler = {
    func: function(details, addCookie){
        addCookie(details)
        return {requestHeaders: details.requestHeaders}
    },
    filter: {
        urls: ["<all_urls>"]
    },
    extra: ["blocking", "requestHeaders"]
};
chrome.webRequest.onBeforeSendHeaders.addListener(beforeSendHeadersHandler.func,
    beforeSendHeadersHandler.filter,
    beforeSendHeadersHandler.extra);

How can I add a callback argument to chrome.webRequest.onBeforeSendHeaders.addListener callback function, or any other solution?

John
  • 1

1 Answers1

0

If you do want to do that, use Promise

var beforeSendHeadersHandler = {
    func: function(details, addCookie){
        var promise = new Promise(function(resolve) {
            chrome.storage.local.get("your key", function(results) {
                resolve(results["your key"]);
            });
        };
        promise.then(function(value) {
           return {requestHeaders: value};
        });
    },
    filter: {
        urls: ["<all_urls>"]
    },
    extra: ["blocking", "requestHeaders"]
};
chrome.webRequest.onBeforeSendHeaders.addListener(beforeSendHeadersHandler.func,
    beforeSendHeadersHandler.filter,
    beforeSendHeadersHandler.extra);

Recommended

See Synchronous call in Google Chrome extension and Asynchronous operation in blocking chrome.webRequest.onBeforeSendHeaders listener, it's recommended that if you could make a copy outside of the listener, or if possible, save the storage using localStorage, it is synchronous.

Community
  • 1
  • 1
Haibara Ai
  • 10,703
  • 2
  • 31
  • 47
  • Yes, the [localStorage](https://developer.mozilla.org/en/docs/Web/API/Window/localStorage) works well, but with some limited. I had fall back on using it. Thank you for your answer. – John Apr 22 '16 at 06:49