Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3215)

Unified Diff: chrome/browser/resources/print_preview/print_preview.js

Issue 7544018: Print preview page selection should not require a rerendering of draft pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/print_preview/print_preview.js
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index 35ec000338f2f92da3c38462ea19c040f2c210a9..df0fc1c965e7401d49b21bfd82c80df627937ad5 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -62,6 +62,11 @@ var showingSystemDialog = false;
var firstCloudPrintOptionPos = 0;
var lastCloudPrintOptionPos = firstCloudPrintOptionPos;
+// Store the current previewUid.
+var currentPreviewUid = '';
+
+// True if we need to generate draft preview data.
+var generateDraftData = true;
// TODO(abodenha@chromium.org) A lot of cloud print specific logic has
// made its way into this file. Refactor to create a cleaner boundary
@@ -311,7 +316,8 @@ function getSettings() {
'landscape': layoutSettings.isLandscape(),
'color': colorSettings.isColor(),
'printToPDF': printToPDF,
- 'requestID': 0};
+ 'requestID': 0,
+ 'generateDraftData': generateDraftData};
var printerList = $('printer-list');
var selectedPrinter = printerList.selectedIndex;
@@ -421,15 +427,39 @@ function sendPrintDocumentRequest() {
}
/**
+ * Loads the selected preview pages.
+ */
+function LoadSelectedPages() {
dpapad 2011/08/01 17:51:40 Nit: Function names start with lowercase. Also may
kmadhusu 2011/08/02 22:53:45 Done
+ hasPendingPreviewRequest = false;
+ pageSettings.updatePageSelection();
+ var pageSet = pageSettings.previouslySelectedPages;
+ var pageCount = pageSet.length;
+ if (pageCount == 0 || currentPreviewUid == '')
+ return;
+
+ for (var i =0; i < pageCount; i++)
+ onDidPreviewPage(pageSet[i]-1, currentPreviewUid);
+ addEventListeners();
+}
+
+/**
* Asks the browser to generate a preview PDF based on current print settings.
*/
function requestPrintPreview() {
hasPendingPreviewRequest = true;
removeEventListeners();
printSettings.save();
+ generateDraftData = true;
if (!isTabHidden)
showLoadingAnimation();
+ if (previewModifiable && isOnlyPageSettingsChanged()) {
+ LoadSelectedPages();
+ generateDraftData = false;
+ }
+ if (!previewModifiable && pageSettings.totalPageCount > 0)
+ generateDraftData = false;
+
var settings = getSettings();
settings.requestID = generatePreviewRequestID();
chrome.send('getPreview', [JSON.stringify(settings)]);
@@ -833,8 +863,13 @@ function onDidPreviewPage(pageNumber, previewUid) {
if (checkIfSettingsChangedAndRegeneratePreview())
return;
+
+ if (pageIndex == -1)
dpapad 2011/08/01 17:51:40 Is this possible?
kmadhusu 2011/08/02 22:53:45 Yes it is possible now. When the user changes the
+ return;
+
+ currentPreviewUid = previewUid;
if (pageIndex == 0)
- createPDFPlugin(previewUid);
+ createPDFPlugin(pageNumber);
$('pdf-viewer').loadPreviewPage(
getPageSrcURL(previewUid, pageNumber), pageIndex);
@@ -856,6 +891,8 @@ function updatePrintPreview(jobTitle,
if (!isExpectedPreviewResponse(previewResponseId))
return;
hasPendingPreviewRequest = false;
+ if (!previewModifiable)
+ pageSettings.updatePageSelection();
if (checkIfSettingsChangedAndRegeneratePreview())
return;
@@ -864,7 +901,8 @@ function updatePrintPreview(jobTitle,
if (!previewModifiable) {
// If the preview is not modifiable the plugin has not been created yet.
- createPDFPlugin(previewUid);
+ currentPreviewUid = previewUid;
+ createPDFPlugin(-1);
dpapad 2011/08/01 17:51:40 Create a constant const ALL_PAGES = -1; and use c
kmadhusu 2011/08/02 22:53:45 created const COMPLETE_METAFILE_DATA_INDEX
}
cr.dispatchSimpleEvent(document, 'updateSummary');
@@ -898,28 +936,41 @@ function checkIfSettingsChangedAndRegeneratePreview() {
}
/**
+ * Check if only page selection has been changed and is valid.
dpapad 2011/08/01 17:51:40 Document since when the page selection is being ch
kmadhusu 2011/08/02 22:53:45 Done.
+ * @return {boolean} true if the nwe page selection is valid.
dpapad 2011/08/01 17:51:40 s/nwe/new
kmadhusu 2011/08/02 22:53:45 Done.
+ */
+function isOnlyPageSettingsChanged() {
dpapad 2011/08/01 17:51:40 Nit (optional): Maybe haveOnlyPageSettingsChanged
kmadhusu 2011/08/02 22:53:45 changed to hasOnlyPageSettingsChanged
+ var tempPrintSettings = new PrintSettings();
+ tempPrintSettings.save();
+
+ return !!(printSettings.deviceName == tempPrintSettings.deviceName &&
+ printSettings.isLandscape == tempPrintSettings.isLandscape &&
+ pageSettings.hasPageSelectionChangedAndIsValid());
+}
+
+/**
* Create the PDF plugin or reload the existing one.
- * @param {string} previewUid Preview unique identifier.
+ * @param {number} srcDataIndex Preview data source index.
dpapad 2011/08/01 17:51:40 Document the meaning of -1.
kmadhusu 2011/08/02 22:53:45 I think the const variable defined here is descrip
*/
-function createPDFPlugin(previewUid) {
+function createPDFPlugin(srcDataIndex) {
var pdfViewer = $('pdf-viewer');
+ var srcURL = getPageSrcURL(currentPreviewUid, srcDataIndex);
if (pdfViewer) {
// Need to call this before the reload(), where the plugin resets its
// internal page count.
pdfViewer.goToPage('0');
+ pdfViewer.resetPrintPreviewUrl(srcURL);
pdfViewer.reload();
pdfViewer.grayscale(!colorSettings.isColor());
return;
}
- // Get the complete preview document.
- var dataIndex = previewModifiable ? '0' : '-1';
-
pdfViewer = document.createElement('embed');
pdfViewer.setAttribute('id', 'pdf-viewer');
+
pdfViewer.setAttribute('type',
'application/x-google-chrome-print-preview-pdf');
- pdfViewer.setAttribute('src', getPageSrcURL(previewUid, dataIndex));
+ pdfViewer.setAttribute('src', srcURL);
pdfViewer.setAttribute('aria-live', 'polite');
pdfViewer.setAttribute('aria-atomic', 'true');
$('mainview').appendChild(pdfViewer);

Powered by Google App Engine
This is Rietveld 408576698