Commit d5b46d07 authored by Lei Zhang's avatar Lei Zhang Committed by Commit Bot

Print Preview: Do not show N-up setting when it cannot be honored.

The internal printing code can only handle N-up for content from Blink
or the PDF plugin. For any other plugin, which is effectively just
Flash, the N-up setting does not work. So do not show the setting in the
Print Preview UI in this case.

To do this, take advantage of an earlier CL that exposes whether the
content being printed is PDF or not, and plumb that setting into the
Print Preview UI and show the pages-per-sheet control based on that.

Change-Id: Ic57f50a451aba9ba6918b59be572a371a1b4beca
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1790256
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#696598}
parent 3a0d1535
...@@ -40,6 +40,7 @@ base::Value GetPrintTicket(PrinterType type, bool cloud) { ...@@ -40,6 +40,7 @@ base::Value GetPrintTicket(PrinterType type, bool cloud) {
ticket.SetKey(kSettingShouldPrintBackgrounds, base::Value(false)); ticket.SetKey(kSettingShouldPrintBackgrounds, base::Value(false));
ticket.SetKey(kSettingShouldPrintSelectionOnly, base::Value(false)); ticket.SetKey(kSettingShouldPrintSelectionOnly, base::Value(false));
ticket.SetKey(kSettingPreviewModifiable, base::Value(true)); ticket.SetKey(kSettingPreviewModifiable, base::Value(true));
ticket.SetKey(kSettingPreviewIsPDF, base::Value(false));
ticket.SetKey(kSettingPrintToPDF, base::Value(!cloud && type == kPdfPrinter)); ticket.SetKey(kSettingPrintToPDF, base::Value(!cloud && type == kPdfPrinter));
ticket.SetKey(kSettingCloudPrintDialog, base::Value(cloud)); ticket.SetKey(kSettingCloudPrintDialog, base::Value(cloud));
ticket.SetKey(kSettingPrintWithPrivet, base::Value(is_privet_printer)); ticket.SetKey(kSettingPrintWithPrivet, base::Value(is_privet_printer));
......
...@@ -9,6 +9,7 @@ cr.exportPath('print_preview'); ...@@ -9,6 +9,7 @@ cr.exportPath('print_preview');
* hasCssMediaStyles: boolean, * hasCssMediaStyles: boolean,
* hasSelection: boolean, * hasSelection: boolean,
* isModifiable: boolean, * isModifiable: boolean,
* isPdf: boolean,
* isScalingDisabled: boolean, * isScalingDisabled: boolean,
* fitToPageScaling: number, * fitToPageScaling: number,
* pageCount: number, * pageCount: number,
...@@ -48,6 +49,7 @@ Polymer({ ...@@ -48,6 +49,7 @@ Polymer({
hasCssMediaStyles: false, hasCssMediaStyles: false,
hasSelection: false, hasSelection: false,
isModifiable: true, isModifiable: true,
isPdf: false,
isScalingDisabled: false, isScalingDisabled: false,
fitToPageScaling: 100, fitToPageScaling: 100,
pageCount: 0, pageCount: 0,
...@@ -113,13 +115,16 @@ Polymer({ ...@@ -113,13 +115,16 @@ Polymer({
/** /**
* Initializes the state of the data model. * Initializes the state of the data model.
* @param {boolean} isModifiable Whether the document is modifiable. * @param {boolean} isModifiable Whether the document is modifiable.
* @param {boolean} isPdf Whether the document is PDF.
* @param {string} title Title of the document. * @param {string} title Title of the document.
* @param {boolean} hasSelection Whether the document has user-selected * @param {boolean} hasSelection Whether the document has user-selected
* content. * content.
*/ */
init: function(isModifiable, title, hasSelection) { init: function(isModifiable, isPdf, title, hasSelection) {
this.isInitialized_ = true; this.isInitialized_ = true;
this.set('documentSettings.isModifiable', isModifiable); this.set('documentSettings.isModifiable', isModifiable);
// TODO(crbug.com/702995): Remove once Flash is deprecated.
this.set('documentSettings.isPdf', isPdf);
this.set('documentSettings.title', title); this.set('documentSettings.title', title);
this.set('documentSettings.hasSelection', hasSelection); this.set('documentSettings.hasSelection', hasSelection);
}, },
......
...@@ -484,8 +484,8 @@ Polymer({ ...@@ -484,8 +484,8 @@ Polymer({
observers: [ observers: [
'updateSettingsFromDestination_(destination.capabilities)', 'updateSettingsFromDestination_(destination.capabilities)',
'updateSettingsAvailabilityFromDocumentSettings_(' + 'updateSettingsAvailabilityFromDocumentSettings_(' +
'documentSettings.isModifiable, documentSettings.hasCssMediaStyles,' + 'documentSettings.isModifiable, documentSettings.isPdf,' +
'documentSettings.hasSelection)', 'documentSettings.hasCssMediaStyles, documentSettings.hasSelection)',
'updateHeaderFooterAvailable_(' + 'updateHeaderFooterAvailable_(' +
'margins, settings.margins.value, ' + 'margins, settings.margins.value, ' +
'settings.customMargins.value, settings.mediaSize.value)', 'settings.customMargins.value, settings.mediaSize.value)',
...@@ -726,6 +726,9 @@ Polymer({ ...@@ -726,6 +726,9 @@ Polymer({
return; return;
} }
this.setSettingPath_(
'pagesPerSheet.available',
this.documentSettings.isModifiable || this.documentSettings.isPdf);
this.setSettingPath_( this.setSettingPath_(
'margins.available', this.documentSettings.isModifiable); 'margins.available', this.documentSettings.isModifiable);
this.setSettingPath_( this.setSettingPath_(
......
...@@ -37,6 +37,7 @@ cr.define('print_preview', function() { ...@@ -37,6 +37,7 @@ cr.define('print_preview', function() {
* decimalDelimiter: string, * decimalDelimiter: string,
* unitType: !print_preview.MeasurementSystemUnitType, * unitType: !print_preview.MeasurementSystemUnitType,
* previewModifiable: boolean, * previewModifiable: boolean,
* previewIsPdf: boolean,
* documentTitle: string, * documentTitle: string,
* documentHasSelection: boolean, * documentHasSelection: boolean,
* shouldPrintSelectionOnly: boolean, * shouldPrintSelectionOnly: boolean,
......
...@@ -266,8 +266,8 @@ Polymer({ ...@@ -266,8 +266,8 @@ Polymer({
settings.uiLocale); settings.uiLocale);
} }
this.$.documentInfo.init( this.$.documentInfo.init(
settings.previewModifiable, settings.documentTitle, settings.previewModifiable, settings.previewIsPdf,
settings.documentHasSelection); settings.documentTitle, settings.documentHasSelection);
this.$.model.setStickySettings(settings.serializedAppStateStr); this.$.model.setStickySettings(settings.serializedAppStateStr);
this.$.model.setPolicySettings( this.$.model.setPolicySettings(
settings.headerFooter, settings.isHeaderFooterManaged); settings.headerFooter, settings.isHeaderFooterManaged);
......
...@@ -982,6 +982,8 @@ void PrintPreviewHandler::SendInitialSettings( ...@@ -982,6 +982,8 @@ void PrintPreviewHandler::SendInitialSettings(
print_preview_ui()->initiator_title()); print_preview_ui()->initiator_title());
initial_settings.SetBoolKey(kSettingPreviewModifiable, initial_settings.SetBoolKey(kSettingPreviewModifiable,
print_preview_ui()->source_is_modifiable()); print_preview_ui()->source_is_modifiable());
initial_settings.SetBoolKey(kSettingPreviewIsPDF,
print_preview_ui()->source_is_pdf());
initial_settings.SetStringKey(kSettingPrinterName, default_printer); initial_settings.SetStringKey(kSettingPrinterName, default_printer);
initial_settings.SetBoolKey(kDocumentHasSelection, initial_settings.SetBoolKey(kDocumentHasSelection,
print_preview_ui()->source_has_selection()); print_preview_ui()->source_has_selection());
......
...@@ -98,6 +98,7 @@ base::Value GetPrintPreviewTicket() { ...@@ -98,6 +98,7 @@ base::Value GetPrintPreviewTicket() {
print_ticket.SetKey(kIsFirstRequest, base::Value(true)); print_ticket.SetKey(kIsFirstRequest, base::Value(true));
print_ticket.SetKey(kPreviewRequestID, base::Value(0)); print_ticket.SetKey(kPreviewRequestID, base::Value(0));
print_ticket.SetKey(kSettingPreviewModifiable, base::Value(false)); print_ticket.SetKey(kSettingPreviewModifiable, base::Value(false));
print_ticket.SetKey(kSettingPreviewIsPDF, base::Value(true));
print_ticket.RemoveKey(kSettingPageWidth); print_ticket.RemoveKey(kSettingPageWidth);
print_ticket.RemoveKey(kSettingPageHeight); print_ticket.RemoveKey(kSettingPageHeight);
print_ticket.RemoveKey(kSettingShowSystemDialog); print_ticket.RemoveKey(kSettingShowSystemDialog);
......
...@@ -16,6 +16,7 @@ cr.define('model_settings_availability_test', function() { ...@@ -16,6 +16,7 @@ cr.define('model_settings_availability_test', function() {
hasCssMediaStyles: false, hasCssMediaStyles: false,
hasSelection: false, hasSelection: false,
isModifiable: true, isModifiable: true,
isPdf: false,
isScalingDisabled: false, isScalingDisabled: false,
fitToPageScaling: 100, fitToPageScaling: 100,
pageCount: 3, pageCount: 3,
...@@ -509,6 +510,27 @@ cr.define('model_settings_availability_test', function() { ...@@ -509,6 +510,27 @@ cr.define('model_settings_availability_test', function() {
assertFalse(model.settings.selectionOnly.setFromUi); assertFalse(model.settings.selectionOnly.setFromUi);
}); });
test('pages per sheet', function() {
// Pages per sheet is available everywhere except for Flash content.
// With the default settings for Blink content, it is available.
model.set('documentSettings.isModifiable', true);
model.set('documentSettings.isPdf', false);
assertTrue(model.settings.pagesPerSheet.available);
// This state should never occur, but if it does, |isModifiable| takes
// precedence and this is still interpreted as Blink content.
model.set('documentSettings.isPdf', true);
assertTrue(model.settings.pagesPerSheet.available);
// Still available for PDF content.
model.set('documentSettings.isModifiable', false);
assertTrue(model.settings.pagesPerSheet.available);
// Not available for Flash content.
model.set('documentSettings.isPdf', false);
assertFalse(model.settings.pagesPerSheet.available);
});
if (cr.isChromeOS) { if (cr.isChromeOS) {
test('pin', function() { test('pin', function() {
// Make device unmanaged. // Make device unmanaged.
......
...@@ -127,6 +127,7 @@ void CreatePrintSettingsDictionary(base::DictionaryValue* dict) { ...@@ -127,6 +127,7 @@ void CreatePrintSettingsDictionary(base::DictionaryValue* dict) {
dict->SetBoolean(kIsFirstRequest, true); dict->SetBoolean(kIsFirstRequest, true);
dict->SetInteger(kSettingMarginsType, DEFAULT_MARGINS); dict->SetInteger(kSettingMarginsType, DEFAULT_MARGINS);
dict->SetBoolean(kSettingPreviewModifiable, true); dict->SetBoolean(kSettingPreviewModifiable, true);
dict->SetBoolean(kSettingPreviewIsPDF, false);
dict->SetBoolean(kSettingHeaderFooterEnabled, false); dict->SetBoolean(kSettingHeaderFooterEnabled, false);
dict->SetBoolean(kSettingShouldPrintBackgrounds, false); dict->SetBoolean(kSettingShouldPrintBackgrounds, false);
dict->SetBoolean(kSettingShouldPrintSelectionOnly, false); dict->SetBoolean(kSettingShouldPrintSelectionOnly, false);
......
...@@ -145,6 +145,11 @@ const char kSettingPinValue[] = "pinValue"; ...@@ -145,6 +145,11 @@ const char kSettingPinValue[] = "pinValue";
// Policies affecting printing destination. // Policies affecting printing destination.
const char kSettingPolicies[] = "policies"; const char kSettingPolicies[] = "policies";
// Whether the source page content is PDF or not.
const char kSettingPreviewIsPDF[] = "previewIsPDF";
// Whether the source page content is modifiable. True for web content.
// i.e. Anything from Blink. False for everything else. e.g. PDF/Flash.
const char kSettingPreviewModifiable[] = "previewModifiable"; const char kSettingPreviewModifiable[] = "previewModifiable";
// Keys that specifies the printable area details. // Keys that specifies the printable area details.
......
...@@ -55,6 +55,7 @@ PRINTING_EXPORT extern const char kSettingPageHeight[]; ...@@ -55,6 +55,7 @@ PRINTING_EXPORT extern const char kSettingPageHeight[];
PRINTING_EXPORT extern const char kSettingPagesPerSheet[]; PRINTING_EXPORT extern const char kSettingPagesPerSheet[];
PRINTING_EXPORT extern const char kSettingPinValue[]; PRINTING_EXPORT extern const char kSettingPinValue[];
PRINTING_EXPORT extern const char kSettingPolicies[]; PRINTING_EXPORT extern const char kSettingPolicies[];
PRINTING_EXPORT extern const char kSettingPreviewIsPDF[];
PRINTING_EXPORT extern const char kSettingPreviewModifiable[]; PRINTING_EXPORT extern const char kSettingPreviewModifiable[];
PRINTING_EXPORT extern const char kSettingPrintToGoogleDrive[]; PRINTING_EXPORT extern const char kSettingPrintToGoogleDrive[];
PRINTING_EXPORT extern const char kSettingPrintToPDF[]; PRINTING_EXPORT extern const char kSettingPrintToPDF[];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment