From d804881151fd980c81f4062c55350ac2cf640fe4 Mon Sep 17 00:00:00 2001 From: Andrew McCreight Date: Thu, 30 Mar 2017 13:37:45 -0700 Subject: [PATCH 1/2] Split bootstrap script. pdfjschildbootstrap.js will always be run, but pdfjschildbootstrap-enabled.js will only be run if PdfJs.enabled is true. This will let us avoid some work in the child process in the next patch. This will need to be landed in the mozilla-central repository at the same time as a change to nsBrowserGlue.js. See bug 1352218. --- .../content/pdfjschildbootstrap-enabled.js | 31 +++++++++++++++++++ .../firefox/content/pdfjschildbootstrap.js | 9 +----- gulpfile.js | 2 ++ 3 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 extensions/firefox/content/pdfjschildbootstrap-enabled.js diff --git a/extensions/firefox/content/pdfjschildbootstrap-enabled.js b/extensions/firefox/content/pdfjschildbootstrap-enabled.js new file mode 100644 index 000000000..c228be082 --- /dev/null +++ b/extensions/firefox/content/pdfjschildbootstrap-enabled.js @@ -0,0 +1,31 @@ +/* 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. +*/ +/* globals Components, PdfJs, Services */ + +"use strict"; + +/* + * pdfjschildbootstrap-enabled.js loads into the content process to + * take care of initializing our built-in version of pdfjs when + * running remote. It will only be run when PdfJs.enable is true. + */ + +Components.utils.import("resource://gre/modules/Services.jsm"); +Components.utils.import("resource://pdf.js/PdfJs.jsm"); + +if (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT) { + // register various pdfjs factories that hook us into content loading. + PdfJs.updateRegistration(); +} diff --git a/extensions/firefox/content/pdfjschildbootstrap.js b/extensions/firefox/content/pdfjschildbootstrap.js index 2a4573ce5..d70c15ed5 100644 --- a/extensions/firefox/content/pdfjschildbootstrap.js +++ b/extensions/firefox/content/pdfjschildbootstrap.js @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals Components, PdfjsContentUtils, PdfJs, Services */ +/* globals Components, PdfjsContentUtils */ "use strict"; @@ -21,14 +21,7 @@ * initializing our built-in version of pdfjs when running remote. */ -Components.utils.import("resource://gre/modules/Services.jsm"); -Components.utils.import("resource://pdf.js/PdfJs.jsm"); Components.utils.import("resource://pdf.js/PdfjsContentUtils.jsm"); // init content utils shim pdfjs will use to access privileged apis. PdfjsContentUtils.init(); - -if (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT) { - // register various pdfjs factories that hook us into content loading. - PdfJs.updateRegistration(); -} diff --git a/gulpfile.js b/gulpfile.js index fe9fdfe49..1b57ae82a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -821,6 +821,8 @@ gulp.task('mozcentral-pre', ['buildnumber', 'locale'], function () { .pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR)), gulp.src(FIREFOX_CONTENT_DIR + 'pdfjschildbootstrap.js') .pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR)), + gulp.src(FIREFOX_CONTENT_DIR + 'pdfjschildbootstrap-enabled.js') + .pipe(gulp.dest(MOZCENTRAL_CONTENT_DIR)), gulp.src(FIREFOX_EXTENSION_DIR + 'chrome-mozcentral.manifest') .pipe(rename('chrome.manifest')) .pipe(gulp.dest(MOZCENTRAL_EXTENSION_DIR)), From 740e1ab450783b15361ac70cda24d2091cb920d7 Mon Sep 17 00:00:00 2001 From: Andrew McCreight Date: Thu, 30 Mar 2017 13:41:11 -0700 Subject: [PATCH 2/2] Skip PdfJs.enabled check in bootstrap-enabled. If we only invoke the bootstrap-enabled script when PdfJs.enabled is true, then we don't need to check it again in the script. This avoids a sync IPC call to the parent process. It also keeps PdfJs.jsm from importing PdfjsContentUtils.jsm in the child process until it is actually needed, which is one steps towards not loading it until it is really needed. --- extensions/firefox/content/PdfJs.jsm | 10 +++++----- .../firefox/content/pdfjschildbootstrap-enabled.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions/firefox/content/PdfJs.jsm b/extensions/firefox/content/PdfJs.jsm index 8cf7233a8..9bc366dd6 100644 --- a/extensions/firefox/content/PdfJs.jsm +++ b/extensions/firefox/content/PdfJs.jsm @@ -173,9 +173,9 @@ var PdfJs = { updateRegistration: function updateRegistration() { if (this.enabled) { - this._ensureRegistered(); + this.ensureRegistered(); } else { - this._ensureUnregistered(); + this.ensureUnregistered(); } }, @@ -188,7 +188,7 @@ var PdfJs = { Services.obs.removeObserver(this, TOPIC_PLUGIN_INFO_UPDATED); this._initialized = false; } - this._ensureUnregistered(); + this.ensureUnregistered(); }, _migrate: function migrate() { @@ -307,7 +307,7 @@ var PdfJs = { return !enabledPluginFound; }, - _ensureRegistered: function _ensureRegistered() { + ensureRegistered: function ensureRegistered() { if (this._registered) { return; } @@ -318,7 +318,7 @@ var PdfJs = { this._registered = true; }, - _ensureUnregistered: function _ensureUnregistered() { + ensureUnregistered: function ensureUnregistered() { if (!this._registered) { return; } diff --git a/extensions/firefox/content/pdfjschildbootstrap-enabled.js b/extensions/firefox/content/pdfjschildbootstrap-enabled.js index c228be082..93a748921 100644 --- a/extensions/firefox/content/pdfjschildbootstrap-enabled.js +++ b/extensions/firefox/content/pdfjschildbootstrap-enabled.js @@ -27,5 +27,5 @@ Components.utils.import("resource://pdf.js/PdfJs.jsm"); if (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT) { // register various pdfjs factories that hook us into content loading. - PdfJs.updateRegistration(); + PdfJs.ensureRegistered(); }