Skip to content

Commit

Permalink
Merge pull request mozilla#17588 from Snuffleupagus/DefaultExternalSe…
Browse files Browse the repository at this point in the history
…rvices-lighten

Re-factor `DefaultExternalServices` into a regular class, without static methods
  • Loading branch information
timvandermeij committed Jan 27, 2024
2 parents d8f77e6 + c6594b7 commit a6e0b02
Show file tree
Hide file tree
Showing 9 changed files with 104 additions and 101 deletions.
12 changes: 12 additions & 0 deletions gulpfile.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ function createWebpackConfig(
"web-alt_text_manager": "web/alt_text_manager.js",
"web-annotation_editor_params": "web/annotation_editor_params.js",
"web-com": "",
"web-download_manager": "",
"web-external_services": "",
"web-l10n_utils": "web/stubs.js",
"web-pdf_attachment_viewer": "web/pdf_attachment_viewer.js",
"web-pdf_cursor_tools": "web/pdf_cursor_tools.js",
Expand All @@ -280,6 +282,7 @@ function createWebpackConfig(
"web-pdf_presentation_mode": "web/pdf_presentation_mode.js",
"web-pdf_sidebar": "web/pdf_sidebar.js",
"web-pdf_thumbnail_viewer": "web/pdf_thumbnail_viewer.js",
"web-preferences": "",
"web-print_service": "",
"web-secondary_toolbar": "web/secondary_toolbar.js",
"web-toolbar": "web/toolbar.js",
Expand All @@ -289,6 +292,9 @@ function createWebpackConfig(
libraryAlias["display-network"] = "src/display/network.js";

viewerAlias["web-com"] = "web/chromecom.js";
viewerAlias["web-download_manager"] = "web/download_manager.js";
viewerAlias["web-external_services"] = "web/chromecom.js";
viewerAlias["web-preferences"] = "web/chromecom.js";
viewerAlias["web-print_service"] = "web/pdf_print_service.js";
} else if (bundleDefines.GENERIC) {
// Aliases defined here must also be replicated in the paths section of
Expand All @@ -300,7 +306,10 @@ function createWebpackConfig(
libraryAlias["display-node_utils"] = "src/display/node_utils.js";

viewerAlias["web-com"] = "web/genericcom.js";
viewerAlias["web-download_manager"] = "web/download_manager.js";
viewerAlias["web-external_services"] = "web/genericcom.js";
viewerAlias["web-l10n_utils"] = "web/l10n_utils.js";
viewerAlias["web-preferences"] = "web/genericcom.js";
viewerAlias["web-print_service"] = "web/pdf_print_service.js";
} else if (bundleDefines.MOZCENTRAL) {
if (bundleDefines.GECKOVIEW) {
Expand All @@ -313,6 +322,9 @@ function createWebpackConfig(
}
}
viewerAlias["web-com"] = "web/firefoxcom.js";
viewerAlias["web-download_manager"] = "web/firefoxcom.js";
viewerAlias["web-external_services"] = "web/firefoxcom.js";
viewerAlias["web-preferences"] = "web/firefoxcom.js";
viewerAlias["web-print_service"] = "web/firefox_print_service.js";
}
const alias = { ...basicAlias, ...libraryAlias, ...viewerAlias };
Expand Down
3 changes: 3 additions & 0 deletions test/unit/unit_test.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
"web-alt_text_manager": "../../web/alt_text_manager.js",
"web-annotation_editor_params": "../../web/annotation_editor_params.js",
"web-com": "../../web/genericcom.js",
"web-download_manager": "../../web/download_manager.js",
"web-external_services": "../../web/genericcom.js",
"web-l10n_utils": "../../web/l10n_utils.js",
"web-pdf_attachment_viewer": "../../web/pdf_attachment_viewer.js",
"web-pdf_cursor_tools": "../../web/pdf_cursor_tools.js",
Expand All @@ -38,6 +40,7 @@
"web-pdf_presentation_mode": "../../web/pdf_presentation_mode.js",
"web-pdf_sidebar": "../../web/pdf_sidebar.js",
"web-pdf_thumbnail_viewer": "../../web/pdf_thumbnail_viewer.js",
"web-preferences": "../../web/genericcom.js",
"web-print_service": "../../web/pdf_print_service.js",
"web-secondary_toolbar": "../../web/secondary_toolbar.js",
"web-toolbar": "../../web/toolbar.js"
Expand Down
54 changes: 7 additions & 47 deletions web/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ import { AutomationEventBus, EventBus } from "./event_utils.js";
import { LinkTarget, PDFLinkService } from "./pdf_link_service.js";
import { AltTextManager } from "web-alt_text_manager";
import { AnnotationEditorParams } from "web-annotation_editor_params";
import { DownloadManager } from "web-download_manager";
import { ExternalServices } from "web-external_services";
import { OverlayManager } from "./overlay_manager.js";
import { PasswordPrompt } from "./password_prompt.js";
import { PDFAttachmentViewer } from "web-pdf_attachment_viewer";
Expand All @@ -72,6 +74,7 @@ import { PDFScriptingManager } from "./pdf_scripting_manager.js";
import { PDFSidebar } from "web-pdf_sidebar";
import { PDFThumbnailViewer } from "web-pdf_thumbnail_viewer";
import { PDFViewer } from "./pdf_viewer.js";
import { Preferences } from "web-preferences";
import { SecondaryToolbar } from "web-secondary_toolbar";
import { Toolbar } from "web-toolbar";
import { ViewHistory } from "./view_history.js";
Expand All @@ -85,44 +88,6 @@ const ViewOnLoad = {
INITIAL: 1,
};

class DefaultExternalServices {
constructor() {
throw new Error("Cannot initialize DefaultExternalServices.");
}

static updateFindControlState(data) {}

static updateFindMatchesCount(data) {}

static initPassiveLoading(callbacks) {}

static reportTelemetry(data) {}

static createDownloadManager() {
throw new Error("Not implemented: createDownloadManager");
}

static createPreferences() {
throw new Error("Not implemented: createPreferences");
}

static async createL10n() {
throw new Error("Not implemented: createL10n");
}

static createScripting() {
throw new Error("Not implemented: createScripting");
}

static updateEditorStates(data) {
throw new Error("Not implemented: updateEditorStates");
}

static getNimbusExperimentData() {
return shadow(this, "getNimbusExperimentData", Promise.resolve(null));
}
}

const PDFViewerApplication = {
initialBookmark: document.location.hash.substring(1),
_initializedCapability: new PromiseCapability(),
Expand Down Expand Up @@ -180,7 +145,7 @@ const PDFViewerApplication = {
url: "",
baseUrl: "",
_downloadUrl: "",
externalServices: DefaultExternalServices,
externalServices: new ExternalServices(),
_boundEvents: Object.create(null),
documentInfo: null,
metadata: null,
Expand Down Expand Up @@ -390,8 +355,7 @@ const PDFViewerApplication = {
});
this.pdfLinkService = pdfLinkService;

const downloadManager = externalServices.createDownloadManager();
this.downloadManager = downloadManager;
const downloadManager = (this.downloadManager = new DownloadManager());

const findController = new PDFFindController({
linkService: pdfLinkService,
Expand Down Expand Up @@ -621,7 +585,7 @@ const PDFViewerApplication = {
},

async run(config) {
this.preferences = this.externalServices.createPreferences();
this.preferences = new Preferences();
await this.initialize(config);

const { appConfig, eventBus } = this;
Expand Down Expand Up @@ -3224,8 +3188,4 @@ const PDFPrintServiceFactory = {
},
};

export {
DefaultExternalServices,
PDFPrintServiceFactory,
PDFViewerApplication,
};
export { PDFPrintServiceFactory, PDFViewerApplication };
25 changes: 8 additions & 17 deletions web/chromecom.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
*/
/* globals chrome */

import { DefaultExternalServices, PDFViewerApplication } from "./app.js";
import { AppOptions } from "./app_options.js";
import { BaseExternalServices } from "./external_services.js";
import { BasePreferences } from "./preferences.js";
import { DownloadManager } from "./download_manager.js";
import { GenericL10n } from "./genericl10n.js";
import { GenericScripting } from "./generic_scripting.js";
import { PDFViewerApplication } from "./app.js";

if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("CHROME")) {
throw new Error(
Expand Down Expand Up @@ -326,7 +326,7 @@ function setReferer(url, callback) {
// chrome.storage.local to chrome.storage.sync when needed.
const storageArea = chrome.storage.sync || chrome.storage.local;

class ChromePreferences extends BasePreferences {
class Preferences extends BasePreferences {
async _writeToStorage(prefObj) {
return new Promise(resolve => {
if (prefObj === this.defaults) {
Expand Down Expand Up @@ -415,8 +415,8 @@ class ChromePreferences extends BasePreferences {
}
}

class ChromeExternalServices extends DefaultExternalServices {
static initPassiveLoading(callbacks) {
class ExternalServices extends BaseExternalServices {
initPassiveLoading(callbacks) {
// defaultUrl is set in viewer.js
ChromeCom.resolvePDFFile(
AppOptions.get("defaultUrl"),
Expand All @@ -427,22 +427,13 @@ class ChromeExternalServices extends DefaultExternalServices {
);
}

static createDownloadManager() {
return new DownloadManager();
}

static createPreferences() {
return new ChromePreferences();
}

static async createL10n() {
async createL10n() {
return new GenericL10n(navigator.language);
}

static createScripting() {
createScripting() {
return new GenericScripting(AppOptions.get("sandboxBundleSrc"));
}
}
PDFViewerApplication.externalServices = ChromeExternalServices;

export { ChromeCom };
export { ChromeCom, ExternalServices, Preferences };
46 changes: 46 additions & 0 deletions web/external_services.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/* Copyright 2024 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.
*/

class BaseExternalServices {
constructor() {
if (this.constructor === BaseExternalServices) {
throw new Error("Cannot initialize BaseExternalServices.");
}
}

updateFindControlState(data) {}

updateFindMatchesCount(data) {}

initPassiveLoading(callbacks) {}

reportTelemetry(data) {}

async createL10n() {
throw new Error("Not implemented: createL10n");
}

createScripting() {
throw new Error("Not implemented: createScripting");
}

updateEditorStates(data) {
throw new Error("Not implemented: updateEditorStates");
}

async getNimbusExperimentData() {}
}

export { BaseExternalServices };
37 changes: 16 additions & 21 deletions web/firefoxcom.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
* limitations under the License.
*/

import { DefaultExternalServices, PDFViewerApplication } from "./app.js";
import { isPdfFile, PDFDataRangeTransport } from "pdfjs-lib";
import { BaseExternalServices } from "./external_services.js";
import { BasePreferences } from "./preferences.js";
import { DEFAULT_SCALE_VALUE } from "./ui_utils.js";
import { L10n } from "./l10n.js";
import { PDFViewerApplication } from "./app.js";

if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) {
throw new Error(
Expand Down Expand Up @@ -147,7 +148,7 @@ class DownloadManager {
}
}

class FirefoxPreferences extends BasePreferences {
class Preferences extends BasePreferences {
async _readFromStorage(prefObj) {
return FirefoxCom.requestAsync("getPreferences", prefObj);
}
Expand Down Expand Up @@ -309,16 +310,16 @@ class FirefoxScripting {
}
}

class FirefoxExternalServices extends DefaultExternalServices {
static updateFindControlState(data) {
class ExternalServices extends BaseExternalServices {
updateFindControlState(data) {
FirefoxCom.request("updateFindControlState", data);
}

static updateFindMatchesCount(data) {
updateFindMatchesCount(data) {
FirefoxCom.request("updateFindMatchesCount", data);
}

static initPassiveLoading(callbacks) {
initPassiveLoading(callbacks) {
let pdfDataRangeTransport;

window.addEventListener("message", function windowMessage(e) {
Expand Down Expand Up @@ -378,42 +379,36 @@ class FirefoxExternalServices extends DefaultExternalServices {
FirefoxCom.request("initPassiveLoading", null);
}

static reportTelemetry(data) {
reportTelemetry(data) {
FirefoxCom.request("reportTelemetry", JSON.stringify(data));
}

static createDownloadManager() {
return new DownloadManager();
}

static createPreferences() {
return new FirefoxPreferences();
}

static updateEditorStates(data) {
updateEditorStates(data) {
FirefoxCom.request("updateEditorStates", data);
}

static async createL10n() {
async createL10n() {
const [localeProperties] = await Promise.all([
FirefoxCom.requestAsync("getLocaleProperties", null),
document.l10n.ready,
]);
return new L10n(localeProperties, document.l10n);
}

static createScripting() {
createScripting() {
return FirefoxScripting;
}

static async getNimbusExperimentData() {
async getNimbusExperimentData() {
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("GECKOVIEW")) {
return null;
}
const nimbusData = await FirefoxCom.requestAsync(
"getNimbusExperimentData",
null
);
return nimbusData && JSON.parse(nimbusData);
}
}
PDFViewerApplication.externalServices = FirefoxExternalServices;

export { DownloadManager, FirefoxCom };
export { DownloadManager, ExternalServices, FirefoxCom, Preferences };
Loading

0 comments on commit a6e0b02

Please sign in to comment.