From 32c1a1d3299064c9fcdab63f5d5bb2c1a6d974c6 Mon Sep 17 00:00:00 2001 From: Rob Wu Date: Wed, 29 May 2019 11:28:38 +0200 Subject: [PATCH] [CRX] Preserve referrer in Chrome 72+ Fixes #10645 --- extensions/chromium/preserve-referer.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/extensions/chromium/preserve-referer.js b/extensions/chromium/preserve-referer.js index 4548fbe03..ad0b93418 100644 --- a/extensions/chromium/preserve-referer.js +++ b/extensions/chromium/preserve-referer.js @@ -41,14 +41,26 @@ var g_requestHeaders = {}; // g_referrers[tabId][frameId] = referrer of PDF frame. var g_referrers = {}; +var extraInfoSpecWithHeaders; // = ['requestHeaders', 'extraHeaders'] + (function() { var requestFilter = { urls: ['*://*/*'], types: ['main_frame', 'sub_frame'], }; - chrome.webRequest.onSendHeaders.addListener(function(details) { - g_requestHeaders[details.requestId] = details.requestHeaders; - }, requestFilter, ['requestHeaders']); + function registerListener(extraInfoSpec) { + extraInfoSpecWithHeaders = extraInfoSpec; + // May throw if the given extraInfoSpec is unsupported. + chrome.webRequest.onSendHeaders.addListener(function(details) { + g_requestHeaders[details.requestId] = details.requestHeaders; + }, requestFilter, extraInfoSpec); + } + try { + registerListener(['requestHeaders', 'extraHeaders']); + } catch (e) { + // "extraHeaders" is not supported in Chrome 71 and earlier. + registerListener(['requestHeaders']); + } chrome.webRequest.onBeforeRedirect.addListener(forgetHeaders, requestFilter); chrome.webRequest.onCompleted.addListener(forgetHeaders, requestFilter); chrome.webRequest.onErrorOccurred.addListener(forgetHeaders, requestFilter); @@ -105,7 +117,7 @@ chrome.runtime.onConnect.addListener(function onReceivePort(port) { urls: [data.requestUrl], types: ['xmlhttprequest'], tabId: tabId, - }, ['blocking', 'requestHeaders']); + }, ['blocking', ...extraInfoSpecWithHeaders]); } // Acknowledge the message, and include the latest referer for this frame. port.postMessage(referer);