diff --git a/extensions/chromium/feature-detect.js b/extensions/chromium/feature-detect.js
deleted file mode 100644
index 91cfc90b8fd95..0000000000000
--- 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 728a038c3a0e0..a87cec438786f 100644
--- a/extensions/chromium/pdfHandler.html
+++ b/extensions/chromium/pdfHandler.html
@@ -14,7 +14,6 @@
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 5dac71546a6c5..b22c98afe3fd0 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: [
@@ -155,36 +140,12 @@ chrome.webRequest.onHeadersReceived.addListener(
},
['blocking', 'responseHeaders']);
-chrome.webRequest.onBeforeRequest.addListener(
- function onBeforeRequestForFTP(details) {
- if (!Features.extensionSupportsFTP) {
- chrome.webRequest.onBeforeRequest.removeListener(onBeforeRequestForFTP);
- return;
- }
- if (isPdfDownloadable(details)) {
- return;
- }
- var viewerUrl = getViewerURL(details.url);
- return { redirectUrl: viewerUrl, };
- },
- {
- urls: [
- 'ftp://*/*.pdf',
- 'ftp://*/*.PDF'
- ],
- types: ['main_frame', 'sub_frame'],
- },
- ['blocking']);
-
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if (isPdfDownloadable(details)) {
return;
}
- // NOTE: The manifest file has declared an empty content script
- // at file://*/* to make sure that the viewer can load the PDF file
- // through XMLHttpRequest. Necessary to deal with http://crbug.com/302548
var viewerUrl = getViewerURL(details.url);
return { redirectUrl: viewerUrl, };
@@ -192,7 +153,11 @@ chrome.webRequest.onBeforeRequest.addListener(
{
urls: [
'file://*/*.pdf',
- 'file://*/*.PDF'
+ 'file://*/*.PDF',
+ // Note: Chrome 59 has disabled ftp resource loading by default:
+ // https://www.chromestatus.com/feature/5709390967472128
+ 'ftp://*/*.pdf',
+ 'ftp://*/*.PDF',
],
types: ['main_frame', 'sub_frame'],
},
@@ -271,3 +236,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',
+]);
diff --git a/web/chromecom.js b/web/chromecom.js
index 6ec8ed84a077e..9afeab5380469 100644
--- a/web/chromecom.js
+++ b/web/chromecom.js
@@ -18,7 +18,6 @@ import { DefaultExternalServices, PDFViewerApplication } from './app';
import { BasePreferences } from './preferences';
import { DownloadManager } from './download_manager';
import { GenericL10n } from './genericl10n';
-import { PDFJS } from 'pdfjs-lib';
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('CHROME')) {
throw new Error('Module "pdfjs-web/chromecom" shall not be used outside ' +
@@ -65,26 +64,6 @@ let ChromeCom = {
file = file.replace(/^drive:/i,
'filesystem:' + location.origin + '/external/');
- if (/^filesystem:/.test(file) && !PDFJS.disableWorker) {
- // The security origin of filesystem:-URLs are not preserved when the
- // URL is passed to a Web worker, (http://crbug.com/362061), so we have
- // to create an intermediate blob:-URL as a work-around.
- let resolveLocalFileSystemURL = window.resolveLocalFileSystemURL ||
- window.webkitResolveLocalFileSystemURL;
- resolveLocalFileSystemURL(file, function onResolvedFSURL(fileEntry) {
- fileEntry.file(function(fileObject) {
- let blobUrl = URL.createObjectURL(fileObject);
- callback(blobUrl, fileObject.size);
- });
- }, function onFileSystemError(error) {
- // This should not happen. When it happens, just fall back to the
- // usual way of getting the File's data (via the Web worker).
- console.warn('Cannot resolve file ' + file + ', ' + error.name + ' ' +
- error.message);
- callback(file);
- });
- return;
- }
if (/^https?:/.test(file)) {
// Assumption: The file being opened is the file that was requested.
// There is no UI to input a different URL, so this assumption will hold
diff --git a/web/pdf_history.js b/web/pdf_history.js
index 5bdc17b92217f..3ca1df2cdb62d 100644
--- a/web/pdf_history.js
+++ b/web/pdf_history.js
@@ -281,23 +281,10 @@ class PDFHistory {
this._updateInternalState(destination, newState.uid);
if (shouldReplace) {
- if (typeof PDFJSDev !== 'undefined' &&
- PDFJSDev.test('FIREFOX || MOZCENTRAL')) {
- // Providing the third argument causes a SecurityError for file:// URLs.
- window.history.replaceState(newState, '');
- } else {
- window.history.replaceState(newState, '', document.URL);
- }
+ window.history.replaceState(newState, '');
} else {
this._maxUid = this._uid;
-
- if (typeof PDFJSDev !== 'undefined' &&
- PDFJSDev.test('FIREFOX || MOZCENTRAL')) {
- // Providing the third argument causes a SecurityError for file:// URLs.
- window.history.pushState(newState, '');
- } else {
- window.history.pushState(newState, '', document.URL);
- }
+ window.history.pushState(newState, '');
}
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&