I'm writing an extension that eliminates the content of the request header "Referer" The problem is that even though the HTTP requests are sent with the "Referer" value empty, once the new page is loaded, the document.referrer value is correct. Is document.referrer obtained internally regardless of the "Referer" value ofHTTP requests and responses?
Code of the extension and content scripts follows...
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details){
if(details.frameId == 0){
var referrer = '';
// traverse the headervalues and delete 'Referer'
for (var i = details.requestHeaders.length - 1; i >= 0; i--) {
if (details.requestHeaders[i].name == 'Referer'){
// save the value in order to compare it in the content script
referrer = details.requestHeaders[i].value;
details.requestHeaders[i].value = '';
};
}
chrome.tabs.sendMessage(details.tabId, { event : "onBeforeSendHeaders", referrer : referrer });
return({ requestHeaders : details.requestHeaders});
}
},
{urls: ["<all_urls>"]},
["blocking", "requestHeaders"]
);
chrome.webNavigation.onDOMContentLoaded.addListener(
function onDOMContentLoaded(details){
if(details.frameId == 0){
chrome.tabs.sendMessage(details.tabId, { event : "onDOMContentLoaded" });
}
}
);
and the content script
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
switch(request.event){
case "onBeforeSendHeaders" :
console.log("onBeforeSendHeaders:" + request.referrer);
break;
case "onDOMContentLoaded" :
// this should be blank but instead, it has the same value
// of the request.referrer, which holds the value before being deleted
console.log("onDOMContentLoaded:" + document.referrer);
break;
default :
console.log("default");
}
}
);
Any suggestions about what I'm doing wrong?