From 85378fc98283c08617d30f763141d395c46d9e89 Mon Sep 17 00:00:00 2001 From: Rob Wu Date: Fri, 26 Jan 2018 13:09:12 +0100 Subject: [PATCH] [CRX] Remove feature-detect.js All detected features were introduced in Chrome 35. We don't support Chrome 34 and earlier, so drop the legacy code. --- extensions/chromium/feature-detect.js | 125 -------------------------- extensions/chromium/pdfHandler.html | 1 - extensions/chromium/pdfHandler.js | 28 ++---- 3 files changed, 8 insertions(+), 146 deletions(-) delete mode 100644 extensions/chromium/feature-detect.js diff --git a/extensions/chromium/feature-detect.js b/extensions/chromium/feature-detect.js deleted file mode 100644 index 91cfc90b8..000000000 --- a/extensions/chromium/feature-detect.js +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2014 Mozilla Foundation - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -'use strict'; - -var Features = { - featureDetectLastUA: '', - // Whether ftp: in XMLHttpRequest is allowed - extensionSupportsFTP: false, - // Whether redirectUrl at onHeadersReceived is supported. - webRequestRedirectUrl: false, -}; - -chrome.storage.local.get(Features, function(features) { - Features = features; - if (features.featureDetectLastUA === navigator.userAgent) { - // Browser not upgraded, so the features did probably not change. - return; - } - - // In case of a downgrade, the features must be tested again. - var lastVersion = /Chrome\/\d+\.0\.(\d+)/.exec(features.featureDetectLastUA); - lastVersion = lastVersion ? parseInt(lastVersion[1], 10) : 0; - var newVersion = /Chrome\/\d+\.0\.(\d+)/.exec(navigator.userAgent); - var isDowngrade = newVersion && parseInt(newVersion[1], 10) < lastVersion; - - var inconclusiveTestCount = 0; - - if (isDowngrade || !features.extensionSupportsFTP) { - features.extensionSupportsFTP = featureTestFTP(); - } - - if (isDowngrade || !features.webRequestRedirectUrl) { - ++inconclusiveTestCount; - // Relatively expensive (and asynchronous) test: - featureTestRedirectOnHeadersReceived(function(result) { - // result = 'yes', 'no' or 'maybe'. - if (result !== 'maybe') { - --inconclusiveTestCount; - } - features.webRequestRedirectUrl = result === 'yes'; - checkTestCompletion(); - }); - } - - checkTestCompletion(); - - function checkTestCompletion() { - // Only stamp the feature detection results when all tests have finished. - if (inconclusiveTestCount === 0) { - Features.featureDetectLastUA = navigator.userAgent; - } - chrome.storage.local.set(Features); - } -}); - -// Tests whether the extension can perform a FTP request. -// Feature is supported since Chromium 35.0.1888.0 (r256810). -function featureTestFTP() { - var x = new XMLHttpRequest(); - // The URL does not need to exist, as long as the scheme is ftp:. - x.open('GET', 'ftp://ftp.mozilla.org/'); - try { - x.send(); - // Previous call did not throw error, so the feature is supported! - // Immediately abort the request so that the network is not hit at all. - x.abort(); - return true; - } catch (e) { - return false; - } -} - -// Tests whether redirectUrl at the onHeadersReceived stage is functional. -// Feature is supported since Chromium 35.0.1911.0 (r259546). -function featureTestRedirectOnHeadersReceived(callback) { - // The following URL is really going to be accessed via the network. - // It is the only way to feature-detect this feature, because the - // onHeadersReceived event is only triggered for http(s) requests. - var url = 'http://example.com/?feature-detect-' + chrome.runtime.id; - function onHeadersReceived(details) { - // If supported, the request is redirected. - // If not supported, the return value is ignored. - return { - redirectUrl: chrome.runtime.getURL('/manifest.json'), - }; - } - chrome.webRequest.onHeadersReceived.addListener(onHeadersReceived, { - types: ['xmlhttprequest'], - urls: [url], - }, ['blocking']); - - var x = new XMLHttpRequest(); - x.open('get', url); - x.onloadend = function() { - chrome.webRequest.onHeadersReceived.removeListener(onHeadersReceived); - if (!x.responseText) { - // Network error? Anyway, can't tell with certainty whether the feature - // is supported. - callback('maybe'); - } else if (/^\s*\{/.test(x.responseText)) { - // If the response starts with "{", assume that the redirection to the - // manifest file succeeded, so the feature is supported. - callback('yes'); - } else { - // Did not get the content of manifest.json, so the redirect seems not to - // be followed. The feature is not supported. - callback('no'); - } - }; - x.send(); -} diff --git a/extensions/chromium/pdfHandler.html b/extensions/chromium/pdfHandler.html index 728a038c3..a87cec438 100644 --- a/extensions/chromium/pdfHandler.html +++ b/extensions/chromium/pdfHandler.html @@ -14,7 +14,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - diff --git a/extensions/chromium/pdfHandler.js b/extensions/chromium/pdfHandler.js index 5dac71546..1a6c3be5c 100644 --- a/extensions/chromium/pdfHandler.js +++ b/extensions/chromium/pdfHandler.js @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -/* import-globals-from feature-detect.js */ /* import-globals-from preserve-referer.js */ 'use strict'; @@ -131,21 +130,7 @@ chrome.webRequest.onHeadersReceived.addListener( // Implemented in preserve-referer.js saveReferer(details); - // Replace frame with viewer - if (Features.webRequestRedirectUrl) { - return { redirectUrl: viewerUrl, }; - } - // Aww.. redirectUrl is not yet supported, so we have to use a different - // method as fallback (Chromium <35). - - if (details.frameId === 0) { - // Main frame. Just replace the tab and be done! - chrome.tabs.update(details.tabId, { - url: viewerUrl, - }); - return { cancel: true, }; - } - console.warn('Child frames are not supported in ancient Chrome builds!'); + return { redirectUrl: viewerUrl, }; }, { urls: [ @@ -157,10 +142,6 @@ chrome.webRequest.onHeadersReceived.addListener( chrome.webRequest.onBeforeRequest.addListener( function onBeforeRequestForFTP(details) { - if (!Features.extensionSupportsFTP) { - chrome.webRequest.onBeforeRequest.removeListener(onBeforeRequestForFTP); - return; - } if (isPdfDownloadable(details)) { return; } @@ -271,3 +252,10 @@ chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { } } }); + +// Remove keys from storage that were once part of the deleted feature-detect.js +chrome.storage.local.remove([ + 'featureDetectLastUA', + 'webRequestRedirectUrl', + 'extensionSupportsFTP', +]);