diff --git a/extensions/firefox/content/streams_polyfill.js b/extensions/firefox/content/streams_polyfill.js
new file mode 100644
index 000000000..73ef7c75d
--- /dev/null
+++ b/extensions/firefox/content/streams_polyfill.js
@@ -0,0 +1,19 @@
+/* Copyright 2018 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.
+ */
+
+if (typeof ReadableStream === "undefined") {
+ require("../../../src/shared/global_scope").ReadableStream =
+ require("../../../external/streams/streams-lib").ReadableStream;
+}
diff --git a/gulpfile.js b/gulpfile.js
index 685a4d575..6604ef23b 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -766,6 +766,16 @@ function preprocessDefaultPreferences(content) {
content + '\n');
}
+function createMozcentralStreamsPolyfillBundle(defines) {
+ var streamsPolyfillOutputName = 'streams_polyfill.js';
+
+ var streamsPolyfillFileConfig = createWebpackConfig(defines, {
+ filename: streamsPolyfillOutputName,
+ });
+ return gulp.src('./extensions/firefox/content/streams_polyfill.js')
+ .pipe(webpack2Stream(streamsPolyfillFileConfig));
+}
+
gulp.task('mozcentral-pre', gulp.series('buildnumber', 'locale', function () {
console.log();
console.log('### Building mozilla-central extension');
@@ -787,6 +797,8 @@ gulp.task('mozcentral-pre', gulp.series('buildnumber', 'locale', function () {
return merge([
createBundle(defines).pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR + 'build')),
createWebBundle(defines).pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR + 'web')),
+ createMozcentralStreamsPolyfillBundle(defines)
+ .pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR + 'build')),
gulp.src(COMMON_WEB_FILES, { base: 'web/', })
.pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR + 'web')),
gulp.src(['external/bcmaps/*.bcmap', 'external/bcmaps/LICENSE'],
diff --git a/src/pdf.worker.js b/src/pdf.worker.js
index 7306f17d2..afce1daeb 100644
--- a/src/pdf.worker.js
+++ b/src/pdf.worker.js
@@ -12,13 +12,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/* eslint-disable no-unused-vars */
+/* eslint-disable no-restricted-globals, no-unused-vars */
'use strict';
-var pdfjsVersion = PDFJSDev.eval('BUNDLE_VERSION');
-var pdfjsBuild = PDFJSDev.eval('BUNDLE_BUILD');
+if (PDFJSDev.test('MOZCENTRAL') && typeof ReadableStream === 'undefined') {
+ importScripts('./streams_polyfill.js');
+}
-var pdfjsCoreWorker = require('./core/worker.js');
+const pdfjsVersion = PDFJSDev.eval('BUNDLE_VERSION');
+const pdfjsBuild = PDFJSDev.eval('BUNDLE_BUILD');
+
+const pdfjsCoreWorker = require('./core/worker.js');
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
diff --git a/src/shared/streams_polyfill.js b/src/shared/streams_polyfill.js
index 9dbaaf5c8..fbe70c092 100644
--- a/src/shared/streams_polyfill.js
+++ b/src/shared/streams_polyfill.js
@@ -14,25 +14,32 @@
*/
/* eslint-disable no-restricted-globals */
-let isReadableStreamSupported = false;
-if (typeof ReadableStream !== 'undefined') {
- // MS Edge may say it has ReadableStream but they are not up to spec yet.
- try {
- // eslint-disable-next-line no-new
- new ReadableStream({
- start(controller) {
- controller.close();
- },
- });
- isReadableStreamSupported = true;
- } catch (e) {
- // The ReadableStream constructor cannot be used.
- }
-}
-if (isReadableStreamSupported) {
+if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('MOZCENTRAL')) {
+ // On the main-thread the `streams_polyfill.js` file is loaded using a
+ //