1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | "use strict";
|
23 |
|
24 | Object.defineProperty(exports, "__esModule", {
|
25 | value: true
|
26 | });
|
27 | exports.FirefoxCom = exports.DownloadManager = void 0;
|
28 |
|
29 | require("../extensions/firefox/tools/l10n.js");
|
30 |
|
31 | var _pdf = require("../pdf");
|
32 |
|
33 | var _app = require("./app.js");
|
34 |
|
35 | var _preferences = require("./preferences.js");
|
36 |
|
37 | var _ui_utils = require("./ui_utils.js");
|
38 |
|
39 | {
|
40 | throw new Error('Module "./firefoxcom.js" shall not be used outside MOZCENTRAL builds.');
|
41 | }
|
42 |
|
43 | const FirefoxCom = function FirefoxComClosure() {
|
44 | return {
|
45 | requestSync(action, data) {
|
46 | const request = document.createTextNode("");
|
47 | document.documentElement.appendChild(request);
|
48 | const sender = document.createEvent("CustomEvent");
|
49 | sender.initCustomEvent("pdf.js.message", true, false, {
|
50 | action,
|
51 | data,
|
52 | sync: true
|
53 | });
|
54 | request.dispatchEvent(sender);
|
55 | const response = sender.detail.response;
|
56 | document.documentElement.removeChild(request);
|
57 | return response;
|
58 | },
|
59 |
|
60 | request(action, data, callback) {
|
61 | const request = document.createTextNode("");
|
62 |
|
63 | if (callback) {
|
64 | document.addEventListener("pdf.js.response", function listener(event) {
|
65 | const node = event.target;
|
66 | const response = event.detail.response;
|
67 | document.documentElement.removeChild(node);
|
68 | document.removeEventListener("pdf.js.response", listener);
|
69 | return callback(response);
|
70 | });
|
71 | }
|
72 |
|
73 | document.documentElement.appendChild(request);
|
74 | const sender = document.createEvent("CustomEvent");
|
75 | sender.initCustomEvent("pdf.js.message", true, false, {
|
76 | action,
|
77 | data,
|
78 | sync: false,
|
79 | responseExpected: !!callback
|
80 | });
|
81 | return request.dispatchEvent(sender);
|
82 | }
|
83 |
|
84 | };
|
85 | }();
|
86 |
|
87 | exports.FirefoxCom = FirefoxCom;
|
88 |
|
89 | class DownloadManager {
|
90 | constructor(options) {
|
91 | this.disableCreateObjectURL = false;
|
92 | }
|
93 |
|
94 | downloadUrl(url, filename) {
|
95 | FirefoxCom.request("download", {
|
96 | originalUrl: url,
|
97 | filename
|
98 | });
|
99 | }
|
100 |
|
101 | downloadData(data, filename, contentType) {
|
102 | const blobUrl = (0, _pdf.createObjectURL)(data, contentType);
|
103 | FirefoxCom.request("download", {
|
104 | blobUrl,
|
105 | originalUrl: blobUrl,
|
106 | filename,
|
107 | isAttachment: true
|
108 | });
|
109 | }
|
110 |
|
111 | download(blob, url, filename) {
|
112 | const blobUrl = URL.createObjectURL(blob);
|
113 |
|
114 | const onResponse = err => {
|
115 | if (err && this.onerror) {
|
116 | this.onerror(err);
|
117 | }
|
118 |
|
119 | URL.revokeObjectURL(blobUrl);
|
120 | };
|
121 |
|
122 | FirefoxCom.request("download", {
|
123 | blobUrl,
|
124 | originalUrl: url,
|
125 | filename
|
126 | }, onResponse);
|
127 | }
|
128 |
|
129 | }
|
130 |
|
131 | exports.DownloadManager = DownloadManager;
|
132 |
|
133 | class FirefoxPreferences extends _preferences.BasePreferences {
|
134 | async _writeToStorage(prefObj) {
|
135 | return new Promise(function (resolve) {
|
136 | FirefoxCom.request("setPreferences", prefObj, resolve);
|
137 | });
|
138 | }
|
139 |
|
140 | async _readFromStorage(prefObj) {
|
141 | return new Promise(function (resolve) {
|
142 | FirefoxCom.request("getPreferences", prefObj, function (prefStr) {
|
143 | const readPrefs = JSON.parse(prefStr);
|
144 | resolve(readPrefs);
|
145 | });
|
146 | });
|
147 | }
|
148 |
|
149 | }
|
150 |
|
151 | class MozL10n {
|
152 | constructor(mozL10n) {
|
153 | this.mozL10n = mozL10n;
|
154 | }
|
155 |
|
156 | async getLanguage() {
|
157 | return this.mozL10n.getLanguage();
|
158 | }
|
159 |
|
160 | async getDirection() {
|
161 | return this.mozL10n.getDirection();
|
162 | }
|
163 |
|
164 | async get(property, args, fallback) {
|
165 | return this.mozL10n.get(property, args, fallback);
|
166 | }
|
167 |
|
168 | async translate(element) {
|
169 | this.mozL10n.translate(element);
|
170 | }
|
171 |
|
172 | }
|
173 |
|
174 | (function listenFindEvents() {
|
175 | const events = ["find", "findagain", "findhighlightallchange", "findcasesensitivitychange", "findentirewordchange", "findbarclose"];
|
176 |
|
177 | const handleEvent = function ({
|
178 | type,
|
179 | detail
|
180 | }) {
|
181 | if (!_app.PDFViewerApplication.initialized) {
|
182 | return;
|
183 | }
|
184 |
|
185 | if (type === "findbarclose") {
|
186 | _app.PDFViewerApplication.eventBus.dispatch(type, {
|
187 | source: window
|
188 | });
|
189 |
|
190 | return;
|
191 | }
|
192 |
|
193 | _app.PDFViewerApplication.eventBus.dispatch("find", {
|
194 | source: window,
|
195 | type: type.substring("find".length),
|
196 | query: detail.query,
|
197 | phraseSearch: true,
|
198 | caseSensitive: !!detail.caseSensitive,
|
199 | entireWord: !!detail.entireWord,
|
200 | highlightAll: !!detail.highlightAll,
|
201 | findPrevious: !!detail.findPrevious
|
202 | });
|
203 | };
|
204 |
|
205 | for (const event of events) {
|
206 | window.addEventListener(event, handleEvent);
|
207 | }
|
208 | })();
|
209 |
|
210 | (function listenZoomEvents() {
|
211 | const events = ["zoomin", "zoomout", "zoomreset"];
|
212 |
|
213 | const handleEvent = function ({
|
214 | type,
|
215 | detail
|
216 | }) {
|
217 | if (!_app.PDFViewerApplication.initialized) {
|
218 | return;
|
219 | }
|
220 |
|
221 | if (type === "zoomreset" && _app.PDFViewerApplication.pdfViewer.currentScaleValue === _ui_utils.DEFAULT_SCALE_VALUE) {
|
222 | return;
|
223 | }
|
224 |
|
225 | _app.PDFViewerApplication.eventBus.dispatch(type, {
|
226 | source: window
|
227 | });
|
228 | };
|
229 |
|
230 | for (const event of events) {
|
231 | window.addEventListener(event, handleEvent);
|
232 | }
|
233 | })();
|
234 |
|
235 | class FirefoxComDataRangeTransport extends _pdf.PDFDataRangeTransport {
|
236 | requestDataRange(begin, end) {
|
237 | FirefoxCom.request("requestDataRange", {
|
238 | begin,
|
239 | end
|
240 | });
|
241 | }
|
242 |
|
243 | abort() {
|
244 | FirefoxCom.requestSync("abortLoading", null);
|
245 | }
|
246 |
|
247 | }
|
248 |
|
249 | class FirefoxExternalServices extends _app.DefaultExternalServices {
|
250 | static updateFindControlState(data) {
|
251 | FirefoxCom.request("updateFindControlState", data);
|
252 | }
|
253 |
|
254 | static updateFindMatchesCount(data) {
|
255 | FirefoxCom.request("updateFindMatchesCount", data);
|
256 | }
|
257 |
|
258 | static initPassiveLoading(callbacks) {
|
259 | let pdfDataRangeTransport;
|
260 | window.addEventListener("message", function windowMessage(e) {
|
261 | if (e.source !== null) {
|
262 | console.warn("Rejected untrusted message from " + e.origin);
|
263 | return;
|
264 | }
|
265 |
|
266 | const args = e.data;
|
267 |
|
268 | if (typeof args !== "object" || !("pdfjsLoadAction" in args)) {
|
269 | return;
|
270 | }
|
271 |
|
272 | switch (args.pdfjsLoadAction) {
|
273 | case "supportsRangedLoading":
|
274 | pdfDataRangeTransport = new FirefoxComDataRangeTransport(args.length, args.data, args.done);
|
275 | callbacks.onOpenWithTransport(args.pdfUrl, args.length, pdfDataRangeTransport);
|
276 | break;
|
277 |
|
278 | case "range":
|
279 | pdfDataRangeTransport.onDataRange(args.begin, args.chunk);
|
280 | break;
|
281 |
|
282 | case "rangeProgress":
|
283 | pdfDataRangeTransport.onDataProgress(args.loaded);
|
284 | break;
|
285 |
|
286 | case "progressiveRead":
|
287 | pdfDataRangeTransport.onDataProgressiveRead(args.chunk);
|
288 | pdfDataRangeTransport.onDataProgress(args.loaded, args.total);
|
289 | break;
|
290 |
|
291 | case "progressiveDone":
|
292 | if (pdfDataRangeTransport) {
|
293 | pdfDataRangeTransport.onDataProgressiveDone();
|
294 | }
|
295 |
|
296 | break;
|
297 |
|
298 | case "progress":
|
299 | callbacks.onProgress(args.loaded, args.total);
|
300 | break;
|
301 |
|
302 | case "complete":
|
303 | if (!args.data) {
|
304 | callbacks.onError(args.errorCode);
|
305 | break;
|
306 | }
|
307 |
|
308 | callbacks.onOpenWithData(args.data);
|
309 | break;
|
310 | }
|
311 | });
|
312 | FirefoxCom.requestSync("initPassiveLoading", null);
|
313 | }
|
314 |
|
315 | static fallback(data, callback) {
|
316 | FirefoxCom.request("fallback", data, callback);
|
317 | }
|
318 |
|
319 | static reportTelemetry(data) {
|
320 | FirefoxCom.request("reportTelemetry", JSON.stringify(data));
|
321 | }
|
322 |
|
323 | static createDownloadManager(options) {
|
324 | return new DownloadManager(options);
|
325 | }
|
326 |
|
327 | static createPreferences() {
|
328 | return new FirefoxPreferences();
|
329 | }
|
330 |
|
331 | static createL10n(options) {
|
332 | const mozL10n = document.mozL10n;
|
333 | return new MozL10n(mozL10n);
|
334 | }
|
335 |
|
336 | static get supportsIntegratedFind() {
|
337 | const support = FirefoxCom.requestSync("supportsIntegratedFind");
|
338 | return (0, _pdf.shadow)(this, "supportsIntegratedFind", support);
|
339 | }
|
340 |
|
341 | static get supportsDocumentFonts() {
|
342 | const support = FirefoxCom.requestSync("supportsDocumentFonts");
|
343 | return (0, _pdf.shadow)(this, "supportsDocumentFonts", support);
|
344 | }
|
345 |
|
346 | static get supportedMouseWheelZoomModifierKeys() {
|
347 | const support = FirefoxCom.requestSync("supportedMouseWheelZoomModifierKeys");
|
348 | return (0, _pdf.shadow)(this, "supportedMouseWheelZoomModifierKeys", support);
|
349 | }
|
350 |
|
351 | }
|
352 |
|
353 | _app.PDFViewerApplication.externalServices = FirefoxExternalServices;
|
354 | document.mozL10n.setExternalLocalizerServices({
|
355 | getLocale() {
|
356 | return FirefoxCom.requestSync("getLocale", null);
|
357 | },
|
358 |
|
359 | getStrings(key) {
|
360 | return FirefoxCom.requestSync("getStrings", key);
|
361 | }
|
362 |
|
363 | }); |
\ | No newline at end of file |