Skip to content

Commit

Permalink
Print Preview: Change available settings for ARC
Browse files Browse the repository at this point in the history
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/+/1865476
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Rebekah Potter <rbpotter@chromium.org>
Commit-Queue: Jesse Schettler <jschettler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713060}
  • Loading branch information
Jesse Schettler authored and Commit Bot committed Nov 6, 2019
1 parent 3b92150 commit a818e77
Show file tree
Hide file tree
Showing 15 changed files with 125 additions and 20 deletions.
6 changes: 5 additions & 1 deletion chrome/browser/resources/print_preview/data/document_info.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ cr.exportPath('print_preview');
* hasCssMediaStyles: boolean,
* hasSelection: boolean,
* isModifiable: boolean,
* isFromArc: boolean,
* isPdf: boolean,
* isScalingDisabled: boolean,
* fitToPageScaling: number,
Expand Down Expand Up @@ -49,6 +50,7 @@ Polymer({
hasCssMediaStyles: false,
hasSelection: false,
isModifiable: true,
isFromArc: false,
isPdf: false,
isScalingDisabled: false,
fitToPageScaling: 100,
Expand Down Expand Up @@ -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);
Expand Down
40 changes: 25 additions & 15 deletions chrome/browser/resources/print_preview/data/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)',
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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_(
Expand All @@ -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));
},

Expand All @@ -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 ||
Expand Down Expand Up @@ -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;
}
Expand Down
1 change: 1 addition & 0 deletions chrome/browser/resources/print_preview/native_layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
5 changes: 3 additions & 2 deletions chrome/browser/resources/print_preview/ui/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions chrome/browser/ui/webui/print_preview/print_preview_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions chrome/browser/ui/webui/print_preview/print_preview_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_; }
Expand Down Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand All @@ -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() {
Expand Down Expand Up @@ -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() {
Expand All @@ -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() {
Expand All @@ -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) {
Expand Down
3 changes: 2 additions & 1 deletion components/printing/common/print_messages.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
2 changes: 2 additions & 0 deletions components/printing/common/print_messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions components/printing/renderer/print_render_frame_helper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading

0 comments on commit a818e77

Please sign in to comment.