Skip to content

Commit

Permalink
[GeckoView] Bundle the Firefox printing code in the viewer (bug 1810111)
Browse files Browse the repository at this point in the history
This may not be enough, on its own, to completely fix [bug 1810111](https://bugzilla.mozilla.org/show_bug.cgi?id=1810111) however it's impossible for printing to work in GeckoView without this patch.
  • Loading branch information
Snuffleupagus committed Jul 28, 2023
1 parent 0ad5a55 commit e77c7f3
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 3 deletions.
3 changes: 1 addition & 2 deletions gulpfile.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -286,10 +286,9 @@ function createWebpackConfig(
for (const key in viewerAlias) {
viewerAlias[key] = gvAlias[key] || "web/stubs-geckoview.js";
}
} else {
viewerAlias["web-print_service"] = "web/firefox_print_service.js";
}
viewerAlias["web-com"] = "web/firefoxcom.js";
viewerAlias["web-print_service"] = "web/firefox_print_service.js";
}
const alias = { ...basicAlias, ...libraryAlias, ...viewerAlias };
for (const key in alias) {
Expand Down
8 changes: 8 additions & 0 deletions web/pdf_print_service.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,9 @@ function abort() {
}

function renderProgress(index, total, l10n) {
if (typeof PDFJSDev === "undefined" && window.isGECKOVIEW) {
return;
}
dialog ||= document.getElementById("printServiceDialog");
const progress = Math.round((100 * index) / total);
const progressBar = dialog.querySelector("progress");
Expand Down Expand Up @@ -333,6 +336,11 @@ if ("onbeforeprint" in window) {

let overlayPromise;
function ensureOverlay() {
if (typeof PDFJSDev === "undefined" && window.isGECKOVIEW) {
return Promise.reject(
new Error("ensureOverlay not implemented in GECKOVIEW development mode.")
);
}
if (!overlayPromise) {
overlayManager = PDFViewerApplication.overlayManager;
if (!overlayManager) {
Expand Down
54 changes: 54 additions & 0 deletions web/viewer-geckoview.css
Original file line number Diff line number Diff line change
Expand Up @@ -292,3 +292,57 @@ dialog :link {
@page {
margin: 0;
}

#printContainer {
display: none;
}

@media print {
body {
background: rgba(0, 0, 0, 0) none;
}
body[data-pdfjsprinting] #outerContainer {
display: none;
}
body[data-pdfjsprinting] #printContainer {
display: block;
}
#printContainer {
height: 100%;
}
/* wrapper around (scaled) print canvas elements */
#printContainer > .printedPage {
page-break-after: always;
page-break-inside: avoid;

/* The wrapper always cover the whole page. */
height: 100%;
width: 100%;

display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

#printContainer > .xfaPrintedPage .xfaPage {
position: absolute;
}

#printContainer > .xfaPrintedPage {
page-break-after: always;
page-break-inside: avoid;
width: 100%;
height: 100%;
position: relative;
}

#printContainer > .printedPage :is(canvas, img) {
/* The intrinsic canvas / image size will make sure that we fit the page. */
max-width: 100%;
max-height: 100%;

direction: ltr;
display: block;
}
}
3 changes: 2 additions & 1 deletion web/viewer-geckoview.html
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"web-pdf_presentation_mode": "./stubs-geckoview.js",
"web-pdf_sidebar": "./stubs-geckoview.js",
"web-pdf_thumbnail_viewer": "./stubs-geckoview.js",
"web-print_service": "./stubs-geckoview.js",
"web-print_service": "./pdf_print_service.js",
"web-secondary_toolbar": "./stubs-geckoview.js",
"web-toolbar": "./toolbar-geckoview.js"
}
Expand Down Expand Up @@ -116,6 +116,7 @@
</div> <!-- dialogContainer -->

</div> <!-- outerContainer -->
<div id="printContainer"></div>

<!--#if !MOZCENTRAL-->
<input type="file" id="fileInput" class="hidden">
Expand Down
2 changes: 2 additions & 0 deletions web/viewer-geckoview.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
*/

import "web-com";
import "web-print_service";
import { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js";
import { AppOptions } from "./app_options.js";
import { LinkTarget } from "./pdf_link_service.js";
Expand Down Expand Up @@ -55,6 +56,7 @@ function getViewerConfiguration() {
submitButton: document.getElementById("passwordSubmit"),
cancelButton: document.getElementById("passwordCancel"),
},
printContainer: document.getElementById("printContainer"),
openFileInput:
typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")
? document.getElementById("fileInput")
Expand Down

0 comments on commit e77c7f3

Please sign in to comment.