Commit a818e77a authored by Jesse Schettler's avatar Jesse Schettler Committed by Commit Bot

Print Preview: Change available settings for ARC

When printing for ARC, make the settings that ARC can handle available
unless the selected destination does not support them.

Available when supported: collate, color, copies, duplex,
duplexShortEdge, layout, mediaSize, pin, pinValue, and vendorItems.

Unavailable: cssBackground, customMargins, dpi, headerFooter, margins,
pagesPerSheet, scaling, scalingType, scalingTypePdf, and selectionOnly.

Bug: b:140576300
Test: Print from ARC and verify the correct settings are available
Change-Id: I4bb5d53c8c64acf9bf189476d54d25ff5162f75b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865476Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Commit-Queue: Jesse Schettler <jschettler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713060}
parent 3b921508
......@@ -9,6 +9,7 @@ cr.exportPath('print_preview');
* hasCssMediaStyles: boolean,
* hasSelection: boolean,
* isModifiable: boolean,
* isFromArc: boolean,
* isPdf: boolean,
* isScalingDisabled: boolean,
* fitToPageScaling: number,
......@@ -49,6 +50,7 @@ Polymer({
hasCssMediaStyles: false,
hasSelection: false,
isModifiable: true,
isFromArc: false,
isPdf: false,
isScalingDisabled: false,
fitToPageScaling: 100,
......@@ -115,14 +117,16 @@ Polymer({
/**
* Initializes the state of the data model.
* @param {boolean} isModifiable Whether the document is modifiable.
* @param {boolean} isFromArc Whether the document is from ARC.
* @param {boolean} isPdf Whether the document is PDF.
* @param {string} title Title of the document.
* @param {boolean} hasSelection Whether the document has user-selected
* content.
*/
init: function(isModifiable, isPdf, title, hasSelection) {
init: function(isModifiable, isFromArc, isPdf, title, hasSelection) {
this.isInitialized_ = true;
this.set('documentSettings.isModifiable', isModifiable);
this.set('documentSettings.isFromArc', isFromArc);
// TODO(crbug.com/702995): Remove once Flash is deprecated.
this.set('documentSettings.isPdf', isPdf);
this.set('documentSettings.title', title);
......
......@@ -484,8 +484,9 @@ Polymer({
observers: [
'updateSettingsFromDestination_(destination.capabilities)',
'updateSettingsAvailabilityFromDocumentSettings_(' +
'documentSettings.isModifiable, documentSettings.isPdf,' +
'documentSettings.hasCssMediaStyles, documentSettings.hasSelection)',
'documentSettings.isModifiable, documentSettings.isFromArc,' +
'documentSettings.isPdf, documentSettings.hasCssMediaStyles, ' +
'documentSettings.hasSelection)',
'updateHeaderFooterAvailable_(' +
'margins, settings.margins.value, ' +
'settings.customMargins.value, settings.mediaSize.value)',
......@@ -664,11 +665,6 @@ Polymer({
this.setSettingPath_(
'color.available', this.destination.hasColorCapability);
this.setSettingPath_(
'dpi.available',
!!caps && !!caps.dpi && !!caps.dpi.option &&
caps.dpi.option.length > 1);
const capsHasDuplex = !!caps && !!caps.duplex && !!caps.duplex.option;
const capsHasLongEdge = capsHasDuplex &&
caps.duplex.option.some(
......@@ -707,6 +703,7 @@ Polymer({
(!this.documentSettings.isModifiable ||
this.documentSettings.hasCssMediaStyles);
const scalingAvailable = !knownSizeToSaveAsPdf &&
!this.documentSettings.isFromArc &&
(this.documentSettings.isModifiable || this.documentSettings.isPdf);
this.setSettingPath_('scaling.available', scalingAvailable);
this.setSettingPath_(
......@@ -721,6 +718,10 @@ Polymer({
this.setSettingPath_(
'mediaSize.available',
!!caps && !!caps.media_size && !knownSizeToSaveAsPdf);
this.setSettingPath_(
'dpi.available',
!this.documentSettings.isFromArc && !!caps && !!caps.dpi &&
!!caps.dpi.option && caps.dpi.option.length > 1);
this.setSettingPath_('layout.available', this.isLayoutAvailable_(caps));
},
......@@ -732,22 +733,30 @@ Polymer({
this.setSettingPath_(
'pagesPerSheet.available',
this.documentSettings.isModifiable || this.documentSettings.isPdf);
!this.documentSettings.isFromArc &&
(this.documentSettings.isModifiable ||
this.documentSettings.isPdf));
this.setSettingPath_(
'margins.available', this.documentSettings.isModifiable);
'margins.available',
!this.documentSettings.isFromArc && this.documentSettings.isModifiable);
this.setSettingPath_(
'customMargins.available', this.documentSettings.isModifiable);
'customMargins.available',
!this.documentSettings.isFromArc && this.documentSettings.isModifiable);
this.setSettingPath_(
'cssBackground.available', this.documentSettings.isModifiable);
'cssBackground.available',
!this.documentSettings.isFromArc && this.documentSettings.isModifiable);
this.setSettingPath_(
'selectionOnly.available',
this.documentSettings.isModifiable &&
!this.documentSettings.isFromArc &&
this.documentSettings.isModifiable &&
this.documentSettings.hasSelection);
this.setSettingPath_(
'headerFooter.available', this.isHeaderFooterAvailable_());
'headerFooter.available',
!this.documentSettings.isFromArc && this.isHeaderFooterAvailable_());
this.setSettingPath_(
'rasterize.available',
!this.documentSettings.isModifiable && !cr.isWindows && !cr.isMac);
!this.documentSettings.isFromArc &&
!this.documentSettings.isModifiable && !cr.isWindows && !cr.isMac);
this.setSettingPath_(
'otherOptions.available',
this.settings.cssBackground.available ||
......@@ -820,7 +829,8 @@ Polymer({
*/
isLayoutAvailable_: function(caps) {
if (!caps || !caps.page_orientation || !caps.page_orientation.option ||
!this.documentSettings.isModifiable ||
(!this.documentSettings.isModifiable &&
!this.documentSettings.isFromArc) ||
this.documentSettings.hasCssMediaStyles) {
return false;
}
......
......@@ -37,6 +37,7 @@ cr.define('print_preview', function() {
* decimalDelimiter: string,
* unitType: !print_preview.MeasurementSystemUnitType,
* previewModifiable: boolean,
* previewIsFromArc: boolean,
* previewIsPdf: boolean,
* documentTitle: string,
* documentHasSelection: boolean,
......
......@@ -257,8 +257,9 @@ Polymer({
settings.uiLocale);
}
this.$.documentInfo.init(
settings.previewModifiable, settings.previewIsPdf,
settings.documentTitle, settings.documentHasSelection);
settings.previewModifiable, settings.previewIsFromArc,
settings.previewIsPdf, settings.documentTitle,
settings.documentHasSelection);
this.$.model.setStickySettings(settings.serializedAppStateStr);
this.$.model.setPolicySettings(
settings.headerFooter, settings.isHeaderFooterManaged);
......
......@@ -1042,6 +1042,8 @@ void PrintPreviewHandler::SendInitialSettings(
print_preview_ui()->initiator_title());
initial_settings.SetBoolKey(kSettingPreviewModifiable,
print_preview_ui()->source_is_modifiable());
initial_settings.SetBoolKey(kSettingPreviewIsFromArc,
print_preview_ui()->source_is_arc());
initial_settings.SetBoolKey(kSettingPreviewIsPdf,
print_preview_ui()->source_is_pdf());
initial_settings.SetStringKey(kSettingPrinterName, default_printer);
......
......@@ -538,6 +538,7 @@ void PrintPreviewUI::SetInitialParams(
return;
PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(
print_preview_dialog->GetWebUI()->GetController());
print_preview_ui->source_is_arc_ = params.is_from_arc;
print_preview_ui->source_is_modifiable_ = params.is_modifiable;
print_preview_ui->source_is_pdf_ = params.is_pdf;
print_preview_ui->source_has_selection_ = params.has_selection;
......
......@@ -59,6 +59,8 @@ class PrintPreviewUI : public ConstrainedWebDialogUI {
const base::string16& initiator_title() const { return initiator_title_; }
bool source_is_arc() const { return source_is_arc_; }
bool source_is_modifiable() const { return source_is_modifiable_; }
bool source_is_pdf() const { return source_is_pdf_; }
......@@ -256,6 +258,9 @@ class PrintPreviewUI : public ConstrainedWebDialogUI {
// Weak pointer to the WebUI handler.
PrintPreviewHandler* const handler_;
// Indicates whether the source document is from ARC.
bool source_is_arc_ = false;
// Indicates whether the source document can be modified.
bool source_is_modifiable_ = true;
......
......@@ -76,7 +76,7 @@ cr.define('invalid_settings_browsertest', function() {
page = document.createElement('print-preview-app');
document.body.appendChild(page);
page.$.documentInfo.init(true, false, 'title', false);
page.$.documentInfo.init(true, false, false, 'title', false);
const previewArea = page.$.previewArea;
}
......
......@@ -15,6 +15,7 @@ cr.define('model_settings_availability_test', function() {
model.documentSettings = {
hasCssMediaStyles: false,
hasSelection: false,
isFromArc: false,
isModifiable: true,
isPdf: false,
isScalingDisabled: false,
......@@ -114,7 +115,12 @@ cr.define('model_settings_availability_test', function() {
model.set('documentSettings.isModifiable', false);
assertFalse(model.settings.layout.available);
// Test with ARC - should be available.
model.set('documentSettings.isFromArc', true);
assertTrue(model.settings.layout.available);
model.set('documentSettings.isModifiable', true);
model.set('documentSettings.isFromArc', false);
assertTrue(model.settings.layout.available);
// Unavailable if document has CSS media styles.
......@@ -276,7 +282,15 @@ cr.define('model_settings_availability_test', function() {
assertTrue(model.settings.margins.available);
assertTrue(model.settings.customMargins.available);
// No margins settings for ARC.
model.set('documentSettings.isFromArc', true);
assertFalse(model.settings.margins.available);
assertFalse(model.settings.customMargins.available);
assertFalse(model.settings.margins.setFromUi);
assertFalse(model.settings.customMargins.setFromUi);
// No margins settings for PDFs.
model.set('documentSettings.isFromArc', false);
model.set('documentSettings.isModifiable', false);
assertFalse(model.settings.margins.available);
assertFalse(model.settings.customMargins.available);
......@@ -288,6 +302,13 @@ cr.define('model_settings_availability_test', function() {
// The settings are available since the printer has multiple DPI options.
assertTrue(model.settings.dpi.available);
// No resolution settings for ARC.
model.set('documentSettings.isFromArc', true);
assertFalse(model.settings.dpi.available);
model.set('documentSettings.isFromArc', false);
assertTrue(model.settings.dpi.available);
// Remove capability.
let capabilities =
print_preview_test_utils.getCddTemplate(model.destination.id)
......@@ -339,6 +360,14 @@ cr.define('model_settings_availability_test', function() {
model.set('destination', defaultDestination);
assertFalse(model.settings.scaling.available);
// ARC -> printer
model.set('documentSettings.isFromArc', true);
model.set('documentSettings.isPdf', true);
assertFalse(model.settings.scaling.available);
// ARC -> Save as PDF
setSaveAsPdfDestination();
assertFalse(model.settings.scaling.available);
});
test('scalingType', function() {
......@@ -367,6 +396,15 @@ cr.define('model_settings_availability_test', function() {
// Non-PDF Plugin -> printer
model.set('destination', defaultDestination);
assertFalse(model.settings.scalingType.available);
// ARC -> printer
model.set('documentSettings.isFromArc', true);
model.set('documentSettings.isPdf', true);
assertFalse(model.settings.scalingType.available);
// ARC -> Save as PDF
setSaveAsPdfDestination();
assertFalse(model.settings.scalingType.available);
});
test('scalingTypePdf', function() {
......@@ -395,6 +433,15 @@ cr.define('model_settings_availability_test', function() {
// Non-PDF Plugin -> printer
model.set('destination', defaultDestination);
assertFalse(model.settings.scalingTypePdf.available);
// ARC -> printer
model.set('documentSettings.isFromArc', true);
model.set('documentSettings.isPdf', true);
assertFalse(model.settings.scalingTypePdf.available);
// ARC -> Save as PDF
setSaveAsPdfDestination();
assertFalse(model.settings.scalingTypePdf.available);
});
test('header footer', function() {
......@@ -474,6 +521,11 @@ cr.define('model_settings_availability_test', function() {
model.set('documentSettings.isModifiable', false);
assertFalse(model.settings.headerFooter.available);
assertFalse(model.settings.headerFooter.setFromUi);
// Header/footer is never available for ARC.
model.set('documentSettings.isFromArc', true);
assertFalse(model.settings.headerFooter.available);
assertFalse(model.settings.headerFooter.setFromUi);
});
test('css background', function() {
......@@ -484,6 +536,11 @@ cr.define('model_settings_availability_test', function() {
model.set('documentSettings.isModifiable', false);
assertFalse(model.settings.cssBackground.available);
assertFalse(model.settings.cssBackground.setFromUi);
// No CSS background setting for ARC.
model.set('documentSettings.isFromArc', true);
assertFalse(model.settings.cssBackground.available);
assertFalse(model.settings.cssBackground.setFromUi);
});
test('duplex', function() {
......@@ -537,6 +594,10 @@ cr.define('model_settings_availability_test', function() {
assertEquals(
!cr.isWindows && !cr.isMac, model.settings.rasterize.available);
assertFalse(model.settings.rasterize.setFromUi);
// Unavailable for ARC.
model.set('documentSettings.isFromArc', true);
assertFalse(model.settings.rasterize.available);
});
test('selection only', function() {
......@@ -550,6 +611,11 @@ cr.define('model_settings_availability_test', function() {
model.set('documentSettings.isModifiable', false);
assertFalse(model.settings.selectionOnly.available);
assertFalse(model.settings.selectionOnly.setFromUi);
// Not available for ARC.
model.set('documentSettings.isFromArc', true);
assertFalse(model.settings.selectionOnly.available);
assertFalse(model.settings.selectionOnly.setFromUi);
});
test('pages per sheet', function() {
......@@ -571,6 +637,11 @@ cr.define('model_settings_availability_test', function() {
// Not available for Flash content.
model.set('documentSettings.isPdf', false);
assertFalse(model.settings.pagesPerSheet.available);
// Not available for ARC.
model.set('documentSettings.isFromArc', true);
model.set('documentSettings.isPdf', true);
assertFalse(model.settings.pagesPerSheet.available);
});
if (cr.isChromeOS) {
......
......@@ -134,7 +134,8 @@ PrintMsg_PrintFrame_Params::~PrintMsg_PrintFrame_Params() {}
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
PrintHostMsg_RequestPrintPreview_Params::
PrintHostMsg_RequestPrintPreview_Params()
: is_modifiable(false),
: is_from_arc(false),
is_modifiable(false),
is_pdf(false),
webnode_only(false),
has_selection(false),
......
......@@ -89,6 +89,7 @@ struct PrintMsg_PrintFrame_Params {
struct PrintHostMsg_RequestPrintPreview_Params {
PrintHostMsg_RequestPrintPreview_Params();
~PrintHostMsg_RequestPrintPreview_Params();
bool is_from_arc;
bool is_modifiable;
bool is_pdf;
bool webnode_only;
......@@ -214,6 +215,7 @@ IPC_STRUCT_TRAITS_END()
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
IPC_STRUCT_TRAITS_BEGIN(PrintHostMsg_RequestPrintPreview_Params)
IPC_STRUCT_TRAITS_MEMBER(is_from_arc)
IPC_STRUCT_TRAITS_MEMBER(is_modifiable)
IPC_STRUCT_TRAITS_MEMBER(is_pdf)
IPC_STRUCT_TRAITS_MEMBER(webnode_only)
......
......@@ -2266,10 +2266,12 @@ void PrintRenderFrameHelper::RequestPrintPreview(PrintPreviewRequestType type) {
print_preview_context_.source_frame()->DispatchBeforePrintEvent();
if (!weak_this)
return;
const bool is_from_arc = print_preview_context_.IsForArc();
const bool is_modifiable = print_preview_context_.IsModifiable();
const bool is_pdf = print_preview_context_.IsPdf();
const bool has_selection = print_preview_context_.HasSelection();
PrintHostMsg_RequestPrintPreview_Params params;
params.is_from_arc = is_from_arc;
params.is_modifiable = is_modifiable;
params.is_pdf = is_pdf;
params.has_selection = has_selection;
......
......@@ -127,6 +127,7 @@ void CreatePrintSettingsDictionary(base::DictionaryValue* dict) {
dict->SetBoolean(kIsFirstRequest, true);
dict->SetInteger(kSettingMarginsType, DEFAULT_MARGINS);
dict->SetBoolean(kSettingPreviewModifiable, true);
dict->SetBoolean(kSettingPreviewIsFromArc, false);
dict->SetBoolean(kSettingPreviewIsPdf, false);
dict->SetBoolean(kSettingHeaderFooterEnabled, false);
dict->SetBoolean(kSettingShouldPrintBackgrounds, false);
......
......@@ -138,6 +138,9 @@ const char kSettingPinValue[] = "pinValue";
// Policies affecting printing destination.
const char kSettingPolicies[] = "policies";
// Whether the source page content is from ARC or not.
const char kSettingPreviewIsFromArc[] = "previewIsFromArc";
// Whether the source page content is PDF or not.
const char kSettingPreviewIsPdf[] = "previewIsPdf";
......
......@@ -53,6 +53,7 @@ PRINTING_EXPORT extern const char kSettingPageHeight[];
PRINTING_EXPORT extern const char kSettingPagesPerSheet[];
PRINTING_EXPORT extern const char kSettingPinValue[];
PRINTING_EXPORT extern const char kSettingPolicies[];
PRINTING_EXPORT extern const char kSettingPreviewIsFromArc[];
PRINTING_EXPORT extern const char kSettingPreviewIsPdf[];
PRINTING_EXPORT extern const char kSettingPreviewModifiable[];
PRINTING_EXPORT extern const char kSettingPrintToGoogleDrive[];
......
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