0

Revert 110035 - Print Preview: Making margin selection sticky (part 2/2)

This CL makes "Custom" margins sticky across different preview sessions but also within the same preview session.

Here is a summary of all changes.
- Within same preview session: So far selecting "Custom" was
  picking up from whatever the previous selected option was.
  Now, "Custom" remembers the specified margins. To test this
  select "Custom", do some dragging, then change to another
  option and back to "Custom".
- Across preview sessions: Select "Custom", do some dragging,
  then print. Open print preview again, the last used custom
  margins are remembered.
- There was a bunch of messages sent from JS to get various
  info/settings (initiator tab title, measurement system and
  number format, last used margin settings, default printer).
  I created a single message "getInitialSettings" to get all
  at once (they are needed before the 1st preview is is
  requested).

BUG=102446
TEST=See bug description.


Review URL: http://codereview.chromium.org/8351048

TBR=dpapad@chromium.org
Review URL: http://codereview.chromium.org/8564040

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110040 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
dpapad@chromium.org
2011-11-15 04:07:30 +00:00
parent 35a62d7067
commit 8b7d034cb3
19 changed files with 169 additions and 581 deletions

@ -99,16 +99,8 @@ PrintPreviewUI* PrintPreviewMessageHandler::OnFailure(int document_cookie) {
return static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
}
void PrintPreviewMessageHandler::OnRequestPrintPreview(
bool source_is_modifiable) {
void PrintPreviewMessageHandler::OnRequestPrintPreview() {
PrintPreviewTabController::PrintPreview(tab_contents_wrapper());
TabContentsWrapper* print_preview_tab = GetPrintPreviewTab();
if (!print_preview_tab || !print_preview_tab->web_ui())
return;
PrintPreviewUI* print_preview_ui =
static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
print_preview_ui->SetSourceIsModifiable(source_is_modifiable);
}
void PrintPreviewMessageHandler::OnDidGetPreviewPageCount(

@ -43,7 +43,7 @@ class PrintPreviewMessageHandler : public TabContentsObserver {
PrintPreviewUI* OnFailure(int document_cookie);
// Message handlers.
void OnRequestPrintPreview(bool source_is_modifiable);
void OnRequestPrintPreview();
void OnDidGetDefaultPageLayout(
const printing::PageSizeMargins& page_layout_in_points);
void OnDidGetPreviewPageCount(

@ -316,22 +316,25 @@ PrintSystemTaskProxy::~PrintSystemTaskProxy() {
void PrintSystemTaskProxy::GetDefaultPrinter() {
VLOG(1) << "Get default printer start";
std::string* default_printer = NULL;
StringValue* default_printer = NULL;
if (PrintPreviewHandler::last_used_printer_name_ == NULL) {
default_printer = new std::string(print_backend_->GetDefaultPrinterName());
default_printer = new StringValue(
print_backend_->GetDefaultPrinterName());
} else {
default_printer = new std::string(
default_printer = new StringValue(
*PrintPreviewHandler::last_used_printer_name_);
}
std::string default_printer_string;
default_printer->GetAsString(&default_printer_string);
VLOG(1) << "Get default printer finished, found: "
<< default_printer;
<< default_printer_string;
std::string* cloud_print_data = NULL;
StringValue* cloud_print_data = NULL;
if (PrintPreviewHandler::last_used_printer_cloud_print_data_ != NULL) {
cloud_print_data = new std::string(
cloud_print_data = new StringValue(
*PrintPreviewHandler::last_used_printer_cloud_print_data_);
} else {
cloud_print_data = new std::string;
cloud_print_data = new StringValue("");
}
BrowserThread::PostTask(
@ -341,9 +344,9 @@ void PrintSystemTaskProxy::GetDefaultPrinter() {
}
void PrintSystemTaskProxy::SendDefaultPrinter(
const std::string* default_printer, const std::string* cloud_print_data) {
const StringValue* default_printer, const StringValue* cloud_print_data) {
if (handler_)
handler_->SendInitialSettings(*default_printer, *cloud_print_data);
handler_->SendDefaultPrinter(*default_printer, *cloud_print_data);
delete default_printer;
}

@ -55,8 +55,8 @@ class PrintSystemTaskProxy
content::BrowserThread::UI>;
friend class DeleteTask<PrintSystemTaskProxy>;
void SendDefaultPrinter(const std::string* default_printer,
const std::string* cloud_print_data);
void SendDefaultPrinter(const base::StringValue* default_printer,
const base::StringValue* cloud_print_data);
void SetupPrinterList(base::ListValue* printers);
void SendPrinterCapabilities(base::DictionaryValue* settings_info);

@ -40,8 +40,6 @@ cr.define('print_preview', function() {
* @return {boolean} true if they are equal.
*/
isEqual: function(rhs) {
if (!rhs)
return false;
return this[MarginSettings.TOP_GROUP] === rhs[MarginSettings.TOP_GROUP] &&
this[MarginSettings.LEFT_GROUP] === rhs[MarginSettings.LEFT_GROUP] &&
this[MarginSettings.RIGHT_GROUP] ===
@ -50,11 +48,15 @@ cr.define('print_preview', function() {
rhs[MarginSettings.BOTTOM_GROUP];
},
clone: function() {
return new Margins(this[MarginSettings.TOP_GROUP],
this[MarginSettings.LEFT_GROUP],
this[MarginSettings.RIGHT_GROUP],
this[MarginSettings.BOTTOM_GROUP]);
/**
* Copies the four margin values from |rhs|.
* @param {Margins} rhs The Margins object values to be used.
*/
copy: function(rhs) {
this[MarginSettings.TOP_GROUP] = rhs[MarginSettings.TOP_GROUP];
this[MarginSettings.LEFT_GROUP] = rhs[MarginSettings.LEFT_GROUP];
this[MarginSettings.RIGHT_GROUP] = rhs[MarginSettings.RIGHT_GROUP];
this[MarginSettings.BOTTOM_GROUP] = rhs[MarginSettings.BOTTOM_GROUP];
},
/**
@ -91,7 +93,6 @@ cr.define('print_preview', function() {
this.contentWidth_ = width;
this.contentHeight_ = height;
this.margins_ = new Margins(left, top, right, bottom);
this.margins_.roundToLocaleUnits();
}
PageLayout.prototype = {
@ -121,18 +122,21 @@ cr.define('print_preview', function() {
this.marginsUI_ = null;
// Holds the custom margin values in points (if set).
this.customMargins_ = null;
this.customMargins_ = new Margins(-1, -1, -1, -1);
// Holds the previous custom margin values in points.
this.previousCustomMargins_ = null;
this.previousCustomMargins_ = new Margins(-1, -1, -1, -1);
// Holds the width of the page in points.
this.pageWidth_ = -1;
// Holds the height of the page in points.
this.pageHeight_ = -1;
// @type {boolean} True if the margins UI should be diplayed when the next
// |customEvents.PDF_LOADED| event occurs.
this.forceMarginsUIOnPDFLoad_ = false;
// The last selected margin option.
this.lastSelectedOption_ = MarginSettings.MARGINS_VALUE_DEFAULT;
// Holds the currently updated default page layout values.
this.currentDefaultPageLayout = null;
// Holds the default page layout values when the custom margins was last
// selected.
this.previousDefaultPageLayout_ = null;
// True if the margins UI should be shown regardless of mouse position.
this.forceDisplayingMarginLines_ = true;
@ -198,19 +202,6 @@ cr.define('print_preview', function() {
return margins;
},
/**
* Sets |this.customMargins_| according to |margins|.
* @param {{marginLeft: number, marginTop: number, marginRight: number,
* marginBottom: number}} margins An object holding the four margin
* values.
*/
set customMargins(margins) {
this.customMargins_.left = margins.marginLeft;
this.customMargins_.top = margins.marginTop;
this.customMargins_.right = margins.marginRight;
this.customMargins_.bottom = margins.marginBottom;
},
/**
* @return {number} The value of the selected margin option.
*/
@ -220,26 +211,13 @@ cr.define('print_preview', function() {
},
/**
* Sets the current margin selection to |lastUsedMarginType|.
* @param {number} lastUsedMarginType An integer value identifying a margin
* Sets the current margin selection to |lastUsedMarginsType|.
* @param {number} lastUsedMarginsType An integer value identifying a margin
* type according to MarginType enum in printing/print_job_constants.h.
* @param {Object} lastUsedCustomMargins The last used custom margins. If
* custom margins have not been used before
* |margin{Top|Bottom|Left|Right}| attributes are missing.
*/
setLastUsedMargins: function(lastUsedMarginsSettings) {
var lastUsedMarginsType = lastUsedMarginsSettings['marginsType']
this.forceMarginsUIOnPDFLoad_ =
lastUsedMarginsType == MarginSettings.MARGINS_VALUE_CUSTOM;
setLastUsedMarginsType: function(lastUsedMarginsType) {
this.marginList_.selectedIndex =
this.getMarginOptionIndexByValue_(lastUsedMarginsType);
if (lastUsedMarginsSettings.hasOwnProperty('marginTop') &&
lastUsedMarginsSettings.hasOwnProperty('marginBottom') &&
lastUsedMarginsSettings.hasOwnProperty('marginRight') &&
lastUsedMarginsSettings.hasOwnProperty('marginLeft')) {
this.customMargins_ = new Margins(-1, -1, -1 , -1);
this.customMargins = lastUsedMarginsSettings;
}
},
/**
@ -312,11 +290,9 @@ cr.define('print_preview', function() {
requestPreviewIfNeeded_: function() {
if (!this.areMarginSettingsValid())
return;
if (this.customMargins_.isEqual(this.previousCustomMargins_))
return;
this.previousCustomMargins_ = this.customMargins_.clone();
this.previousCustomMargins_.copy(this.customMargins_);
setDefaultValuesAndRegeneratePreview(false);
},
@ -326,8 +302,6 @@ cr.define('print_preview', function() {
* @private
*/
onSidebarMouseOver_: function(e) {
$('mainview').onmouseover = this.onMainviewMouseOver_.bind(this);
$('navbar-container').onmouseover = null;
if (!this.forceDisplayingMarginLines_)
this.marginsUI.hide(false);
},
@ -338,8 +312,6 @@ cr.define('print_preview', function() {
* @private
*/
onMainviewMouseOver_: function() {
$('mainview').onmouseover = null;
$('navbar-container').onmouseover = this.onSidebarMouseOver_.bind(this);
this.forceDisplayingMarginLines_ = false;
this.marginsUI.show();
},
@ -396,7 +368,7 @@ cr.define('print_preview', function() {
* @return {boolean} True if the margin settings are valid.
*/
areMarginSettingsValid: function() {
if (!this.isCustomMarginsSelected() || !this.marginsUI_)
if (this.marginsUI_ == null)
return true;
var pairs = this.marginsUI.pairsAsList;
@ -502,8 +474,6 @@ cr.define('print_preview', function() {
* @private
*/
removeCustomMarginEventListeners_: function() {
if (!this.marginsUI_)
return;
$('mainview').onmouseover = null;
$('navbar-container').onmouseover = null;
this.eventTracker_.remove(this.marginsUI, customEvents.MARGIN_LINE_DRAG);
@ -562,6 +532,8 @@ cr.define('print_preview', function() {
this.onDefaultMinimumNoMarginsSelected_();
else if (this.isCustomMarginsSelected())
this.onCustomMarginsSelected_();
this.lastSelectedOption_ = this.selectedMarginsValue;
},
/**
@ -571,7 +543,6 @@ cr.define('print_preview', function() {
onDefaultMinimumNoMarginsSelected_: function() {
this.removeCustomMarginEventListeners_();
this.forceDisplayingMarginLines_ = true;
this.previousCustomMargins_ = null;
setDefaultValuesAndRegeneratePreview(false);
},
@ -580,18 +551,20 @@ cr.define('print_preview', function() {
* @private
*/
onCustomMarginsSelected_: function() {
var customMarginsNotSpecified = !this.customMargins_;
this.updatePageData_();
this.addCustomMarginEventListeners_();
if (customMarginsNotSpecified) {
this.previousCustomMargins_ = this.customMargins_.clone();
this.drawCustomMarginsUI_();
this.addCustomMarginEventListeners_();
this.marginsUI.show();
} else {
this.forceMarginsUIOnPDFLoad_ = true;
this.requestPreviewIfNeeded_();
this.customMargins_ = this.currentDefaultPageLayout.margins_;
this.customMargins_.roundToLocaleUnits();
this.previousCustomMargins_.copy(this.customMargins_);
if (this.previousDefaultPageLayout_ != this.currentDefaultPageLayout) {
this.pageWidth_ = this.currentDefaultPageLayout.pageWidth;
this.pageHeight_ = this.currentDefaultPageLayout.pageHeight;
}
this.previousDefaultPageLayout_ = this.currentDefaultPageLayout;
this.drawCustomMarginsUI_();
this.marginsUI.show();
},
/**
@ -654,8 +627,7 @@ cr.define('print_preview', function() {
MarginSettings.OPTION_INDEX_DEFAULT].selected = true;
this.removeCustomMarginEventListeners_();
this.forceDisplayingMarginLines_ = true;
this.customMargins_ = null;
this.previousCustomMargins_ = null;
this.lastSelectedOption_ = MarginSettings.MARGINS_VALUE_DEFAULT;
}
},
@ -664,35 +636,15 @@ cr.define('print_preview', function() {
* @private
*/
onPDFLoaded_: function() {
if (!previewModifiable) {
if (!previewModifiable)
fadeOutOption(this.marginsOption_);
return;
}
if (this.forceMarginsUIOnPDFLoad_) {
this.updatePageData_();
this.drawCustomMarginsUI_();
this.addCustomMarginEventListeners_();
this.marginsUI.show();
this.forceMarginsUIOnPDFLoad_ = false;
}
},
/**
* Updates |this.customMargins_|, |this.pageWidth_|, |this.pageHeight_|.
* @private
*/
updatePageData_: function() {
if (!this.customMargins_)
this.customMargins_ = this.currentDefaultPageLayout.margins_.clone();
this.pageWidth_ = this.currentDefaultPageLayout.pageWidth;
this.pageHeight_ = this.currentDefaultPageLayout.pageHeight;
}
};
return {
MarginSettings: MarginSettings,
PageLayout: PageLayout,
setNumberFormatAndMeasurementSystem:
MarginSettings.setNumberFormatAndMeasurementSystem,
};
});

@ -164,25 +164,9 @@ function onLoad() {
$('printer-list').onchange = updateControlsWithSelectedPrinterCapabilities;
previewArea.showLoadingAnimation();
chrome.send('getInitialSettings');
}
/**
* @param {string} initiatorTabTitle The title of the initiator tab.
* @param {object} initialSettings An object containing all the initial
* settings.
*/
function setInitialSettings(initialSettings) {
setInitiatorTabTitle(initialSettings['initiatorTabTitle']);
previewModifiable = initialSettings['previewModifiable'];
if (previewModifiable) {
print_preview.MarginSettings.setNumberFormatAndMeasurementSystem(
initialSettings['numberFormat'],
initialSettings['measurementSystem']);
marginSettings.setLastUsedMargins(initialSettings);
}
setDefaultPrinter(initialSettings['printerName'],
initialSettings['cloudPrintData']);
chrome.send('getInitiatorTabTitle');
chrome.send('getDefaultPrinter');
chrome.send('getNumberFormatAndMeasurementSystem');
}
/**
@ -300,9 +284,7 @@ function updateControlsWithSelectedPrinterCapabilities() {
lastSelectedPrinterIndex = selectedIndex;
// Regenerate the preview data based on selected printer settings.
// Do not reset the margins if no preview request has been made.
var resetMargins = lastPreviewRequestID != initialPreviewRequestID;
setDefaultValuesAndRegeneratePreview(resetMargins);
setDefaultValuesAndRegeneratePreview(true);
}
}
@ -322,9 +304,7 @@ function doUpdateCloudPrinterCapabilities(printer) {
lastSelectedPrinterIndex = selectedIndex;
// Regenerate the preview data based on selected printer settings.
// Do not reset the margins if no preview request has been made.
var resetMargins = lastPreviewRequestID != initialPreviewRequestID;
setDefaultValuesAndRegeneratePreview(resetMargins);
setDefaultValuesAndRegeneratePreview(true);
}
/**
@ -598,14 +578,18 @@ function fileSelectionCompleted() {
* @param {string} printer Name of the default printer. Empty if none.
* @param {string} cloudPrintData Cloud print related data to restore if
* the default printer is a cloud printer.
* @param {number} lastUsedMarginsType Indicates the last used margins type
* (matches enum MarginType in printing/print_job_constants.h.
*/
function setDefaultPrinter(printerName, cloudPrintData) {
function setDefaultPrinter(printer_name, cloudPrintData, lastUsedMarginsType) {
// Setting the margin selection to the last used one.
marginSettings.setLastUsedMarginsType(lastUsedMarginsType);
// Add a placeholder value so the printer list looks valid.
addDestinationListOption('', '', true, true, true);
if (printerName) {
defaultOrLastUsedPrinterName = printerName;
if (printer_name) {
defaultOrLastUsedPrinterName = printer_name;
if (cloudPrintData) {
cloudprint.setDefaultPrinter(printerName,
cloudprint.setDefaultPrinter(printer_name,
cloudPrintData,
addDestinationListOptionAtPosition,
doUpdateCloudPrinterCapabilities);
@ -795,13 +779,16 @@ function setPluginPreviewPageCount() {
* Update the page count and check the page range.
* Called from PrintPreviewUI::OnDidGetPreviewPageCount().
* @param {number} pageCount The number of pages.
* @param {boolean} isModifiable Indicates whether the previewed document can be
* modified.
* @param {number} previewResponseId The preview request id that resulted in
* this response.
*/
function onDidGetPreviewPageCount(pageCount, previewResponseId) {
function onDidGetPreviewPageCount(pageCount, isModifiable, previewResponseId) {
if (!isExpectedPreviewResponse(previewResponseId))
return;
pageSettings.updateState(pageCount);
previewModifiable = isModifiable;
if (!previewModifiable && pageSettings.requestPrintPreviewIfNeeded())
return;
@ -1071,6 +1058,8 @@ PrintSettings.prototype.save = function() {
/**
* Updates the title of the print preview tab according to |initiatorTabTitle|.
* Called from PrintPreviewUI::OnGetInitiatorTabTitle as a result of sending a
* 'getInitiatorTabTitle' message.
* @param {string} initiatorTabTitle The title of the initiator tab.
*/
function setInitiatorTabTitle(initiatorTabTitle) {

@ -50,7 +50,6 @@
#include "printing/metafile.h"
#include "printing/metafile_impl.h"
#include "printing/page_range.h"
#include "printing/page_size_margins.h"
#include "printing/print_settings.h"
#include "unicode/ulocdata.h"
@ -97,17 +96,6 @@ void ReportPrintSettingHistogram(enum PrintSettingsBuckets setting) {
PRINT_SETTINGS_BUCKET_BOUNDARY);
}
// Name of a dictionary fielad holdong cloud print related data;
const char kCloudPrintData[] = "cloudPrintData";
// Name of a dictionary field holding the initiator tab title.
const char kInitiatorTabTitle[] = "initiatorTabTitle";
// Name of a dictionary field holding the measurement system according to the
// locale.
const char kMeasurementSystem[] = "measurementSystem";
// Name of a dictionary field holding the number format according to the locale.
const char kNumberFormat[] = "numberFormat";
// Get the print job settings dictionary from |args|. The caller takes
// ownership of the returned DictionaryValue. Returns NULL on failure.
DictionaryValue* GetSettingsDictionary(const ListValue* args) {
@ -218,8 +206,6 @@ printing::ColorModels PrintPreviewHandler::last_used_color_model_ =
printing::UNKNOWN_COLOR_MODEL;
printing::MarginType PrintPreviewHandler::last_used_margins_type_ =
printing::DEFAULT_MARGINS;
printing::PageSizeMargins*
PrintPreviewHandler::last_used_page_size_margins_ = NULL;
PrintPreviewHandler::PrintPreviewHandler()
: print_backend_(printing::PrintBackend::CreateInstance(NULL)),
@ -236,6 +222,9 @@ PrintPreviewHandler::~PrintPreviewHandler() {
}
void PrintPreviewHandler::RegisterMessages() {
web_ui_->RegisterMessageCallback("getDefaultPrinter",
base::Bind(&PrintPreviewHandler::HandleGetDefaultPrinter,
base::Unretained(this)));
web_ui_->RegisterMessageCallback("getPrinters",
base::Bind(&PrintPreviewHandler::HandleGetPrinters,
base::Unretained(this)));
@ -275,9 +264,13 @@ void PrintPreviewHandler::RegisterMessages() {
web_ui_->RegisterMessageCallback("saveLastPrinter",
base::Bind(&PrintPreviewHandler::HandleSaveLastPrinter,
base::Unretained(this)));
web_ui_->RegisterMessageCallback("getInitialSettings",
base::Bind(&PrintPreviewHandler::HandleGetInitialSettings,
web_ui_->RegisterMessageCallback("getInitiatorTabTitle",
base::Bind(&PrintPreviewHandler::HandleGetInitiatorTabTitle,
base::Unretained(this)));
web_ui_->RegisterMessageCallback("getNumberFormatAndMeasurementSystem",
base::Bind(
&PrintPreviewHandler::HandleGetNumberFormatAndMeasurementSystem,
base::Unretained(this)));
}
TabContentsWrapper* PrintPreviewHandler::preview_tab_wrapper() const {
@ -287,6 +280,16 @@ TabContents* PrintPreviewHandler::preview_tab() const {
return web_ui_->tab_contents();
}
void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue* /*args*/) {
scoped_refptr<PrintSystemTaskProxy> task =
new PrintSystemTaskProxy(AsWeakPtr(),
print_backend_.get(),
has_logged_printers_count_);
BrowserThread::PostTask(
BrowserThread::FILE, FROM_HERE,
base::Bind(&PrintSystemTaskProxy::GetDefaultPrinter, task.get()));
}
void PrintPreviewHandler::HandleGetPrinters(const ListValue* /*args*/) {
scoped_refptr<PrintSystemTaskProxy> task =
new PrintSystemTaskProxy(AsWeakPtr(),
@ -394,19 +397,10 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) {
last_used_color_model_ = static_cast<printing::ColorModels>(color_model);
// Storing last used margin settings.
bool is_modifiable;
settings->GetBoolean(printing::kSettingPreviewModifiable, &is_modifiable);
if (is_modifiable) {
int margin_type;
if (!settings->GetInteger(printing::kSettingMarginsType, &margin_type))
margin_type = printing::DEFAULT_MARGINS;
last_used_margins_type_ = static_cast<printing::MarginType>(margin_type);
if (last_used_margins_type_ == printing::CUSTOM_MARGINS) {
if (!last_used_page_size_margins_)
last_used_page_size_margins_ = new printing::PageSizeMargins();
getCustomMarginsFromJobSettings(*settings, last_used_page_size_margins_);
}
}
int margin_type;
if (!settings->GetInteger(printing::kSettingMarginsType, &margin_type))
margin_type = printing::DEFAULT_MARGINS;
last_used_margins_type_ = static_cast<printing::MarginType>(margin_type);
bool print_to_pdf = false;
settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf);
@ -619,67 +613,32 @@ void PrintPreviewHandler::ReportStats() {
manage_printers_dialog_request_count_);
}
void PrintPreviewHandler::GetNumberFormatAndMeasurementSystem(
base::DictionaryValue* settings) {
void PrintPreviewHandler::HandleGetInitiatorTabTitle(
const ListValue* /*args*/) {
PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
base::StringValue tab_title(print_preview_ui->initiator_tab_title());
web_ui_->CallJavascriptFunction("setInitiatorTabTitle", tab_title);
}
void PrintPreviewHandler::HandleGetNumberFormatAndMeasurementSystem(
const ListValue* /*args*/) {
// Getting the measurement system based on the locale.
UErrorCode errorCode = U_ZERO_ERROR;
const char* locale = g_browser_process->GetApplicationLocale().c_str();
UMeasurementSystem system = ulocdata_getMeasurementSystem(locale, &errorCode);
if (errorCode > U_ZERO_ERROR || system == UMS_LIMIT)
system = UMS_SI;
UMeasurementSystem measurement_system =
ulocdata_getMeasurementSystem(locale, &errorCode);
if (errorCode > U_ZERO_ERROR || measurement_system == UMS_LIMIT)
measurement_system = UMS_SI;
// Getting the number formatting based on the locale and writing to
// dictionary.
settings->SetString(kNumberFormat, base::FormatDouble(123456.78, 2));
settings->SetInteger(kMeasurementSystem, system);
}
// Getting the number formatting based on the locale.
StringValue number_format(base::FormatDouble(123456.78, 2));
base::FundamentalValue system(measurement_system);
void PrintPreviewHandler::GetLastUsedMarginSettings(
base::DictionaryValue* custom_margins) {
custom_margins->SetInteger(printing::kSettingMarginsType,
PrintPreviewHandler::last_used_margins_type_);
if (last_used_page_size_margins_) {
custom_margins->SetDouble(printing::kSettingMarginTop,
last_used_page_size_margins_->margin_top);
custom_margins->SetDouble(printing::kSettingMarginBottom,
last_used_page_size_margins_->margin_bottom);
custom_margins->SetDouble(printing::kSettingMarginLeft,
last_used_page_size_margins_->margin_left);
custom_margins->SetDouble(printing::kSettingMarginRight,
last_used_page_size_margins_->margin_right);
}
}
void PrintPreviewHandler::HandleGetInitialSettings(const ListValue* /*args*/) {
scoped_refptr<PrintSystemTaskProxy> task =
new PrintSystemTaskProxy(AsWeakPtr(),
print_backend_.get(),
has_logged_printers_count_);
BrowserThread::PostTask(
BrowserThread::FILE, FROM_HERE,
base::Bind(&PrintSystemTaskProxy::GetDefaultPrinter, task.get()));
}
void PrintPreviewHandler::SendInitialSettings(
const std::string& default_printer,
const std::string& cloud_print_data) {
PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
base::DictionaryValue initial_settings;
initial_settings.SetString(kInitiatorTabTitle,
print_preview_ui->initiator_tab_title());
initial_settings.SetBoolean(printing::kSettingPreviewModifiable,
print_preview_ui->source_is_modifiable());
initial_settings.SetString(printing::kSettingPrinterName,
default_printer);
initial_settings.SetString(kCloudPrintData, cloud_print_data);
if (print_preview_ui->source_is_modifiable()) {
GetLastUsedMarginSettings(&initial_settings);
GetNumberFormatAndMeasurementSystem(&initial_settings);
}
web_ui_->CallJavascriptFunction("setInitialSettings", initial_settings);
web_ui_->CallJavascriptFunction(
"print_preview.setNumberFormatAndMeasurementSystem",
number_format,
system);
}
void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() {
@ -698,6 +657,17 @@ void PrintPreviewHandler::SendPrinterCapabilities(
settings_info);
}
void PrintPreviewHandler::SendDefaultPrinter(
const StringValue& default_printer,
const StringValue& cloud_print_data) {
base::FundamentalValue margins_type(
PrintPreviewHandler::last_used_margins_type_);
web_ui_->CallJavascriptFunction("setDefaultPrinter",
default_printer,
cloud_print_data,
margins_type);
}
void PrintPreviewHandler::SetupPrinterList(const ListValue& printers) {
SendCloudPrintEnabled();
web_ui_->CallJavascriptFunction("setPrinters", printers);

@ -27,7 +27,6 @@ class StringValue;
}
namespace printing {
struct PageSizeMargins;
class PrintBackend;
}
@ -68,20 +67,14 @@ class PrintPreviewHandler : public WebUIMessageHandler,
void ShowSystemDialog();
private:
friend class PrintPreviewHandlerTest;
friend class PrintSystemTaskProxy;
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsCustom);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsDefault);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest,
StickyMarginsCustomThenDefault);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest,
GetLastUsedMarginSettingsCustom);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest,
GetLastUsedMarginSettingsDefault);
TabContentsWrapper* preview_tab_wrapper() const;
TabContents* preview_tab() const;
// Gets the default printer. |args| is unused.
void HandleGetDefaultPrinter(const base::ListValue* args);
// Gets the list of printers. |args| is unused.
void HandleGetPrinters(const base::ListValue* args);
@ -138,18 +131,22 @@ class PrintPreviewHandler : public WebUIMessageHandler,
// Asks the browser to close the preview tab. |args| is unused.
void HandleClosePreviewTab(const base::ListValue* args);
// Asks the browser for several settings that are needed before the first
// preview is displayed.
void HandleGetInitialSettings(const base::ListValue* args);
// Asks the browser for the title of the initiator tab.
// |args| is unused.
void HandleGetInitiatorTabTitle(const base::ListValue* args);
void SendInitialSettings(
const std::string& default_printer,
const std::string& cloud_print_data);
// Asks the browser for the number formatting and measurement system according
// to the current locale.
void HandleGetNumberFormatAndMeasurementSystem(const base::ListValue* args);
// Sends the printer capabilities to the Web UI. |settings_info| contains
// printer capabilities information.
void SendPrinterCapabilities(const base::DictionaryValue& settings_info);
// Sends the default printer to the Web UI.
void SendDefaultPrinter(const base::StringValue& default_printer,
const base::StringValue& cloud_print_data);
// Send the list of printers to the Web UI.
void SetupPrinterList(const base::ListValue& printers);
@ -181,14 +178,6 @@ class PrintPreviewHandler : public WebUIMessageHandler,
// Posts a task to save to pdf at |print_to_pdf_path_|.
void PostPrintToPdfTask();
// Populates |settings| according to the current locale.
void GetNumberFormatAndMeasurementSystem(base::DictionaryValue* settings);
// Populates |last_used_custom_margins| according to the last used margin
// settings.
void GetLastUsedMarginSettings(
base::DictionaryValue* last_used_custom_margins);
// Pointer to current print system.
scoped_refptr<printing::PrintBackend> print_backend_;
@ -200,7 +189,6 @@ class PrintPreviewHandler : public WebUIMessageHandler,
static std::string* last_used_printer_name_;
static printing::ColorModels last_used_color_model_;
static printing::MarginType last_used_margins_type_;
static printing::PageSizeMargins* last_used_page_size_margins_;
// A count of how many requests received to regenerate preview data.
// Initialized to 0 then incremented and emitted to a histogram.

@ -1,261 +0,0 @@
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/command_line.h"
#include "base/json/json_writer.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/printing/background_printing_manager.h"
#include "chrome/browser/printing/print_preview_tab_controller.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/browser/ui/webui/print_preview_handler.h"
#include "chrome/browser/ui/webui/print_preview_ui.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/browser_with_test_window_test.h"
#include "printing/page_size_margins.h"
#include "printing/print_job_constants.h"
namespace {
DictionaryValue* GetCustomMarginsDictionary(
const double margin_top, const double margin_right,
const double margin_bottom,const double margin_left) {
base::DictionaryValue* custom_settings = new base::DictionaryValue();
custom_settings->SetDouble(printing::kSettingMarginTop, margin_top);
custom_settings->SetDouble(printing::kSettingMarginRight, margin_right);
custom_settings->SetDouble(printing::kSettingMarginBottom, margin_bottom);
custom_settings->SetDouble(printing::kSettingMarginLeft, margin_left);
return custom_settings;
}
}
class PrintPreviewHandlerTest : public BrowserWithTestWindowTest {
protected:
void SetUp() {
BrowserWithTestWindowTest::SetUp();
#if !defined(GOOGLE_CHROME_BUILD) || defined(OS_CHROMEOS)
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnablePrintPreview);
#endif
ASSERT_TRUE(browser());
BrowserList::SetLastActive(browser());
ASSERT_TRUE(BrowserList::GetLastActive());
browser()->NewTab();
EXPECT_EQ(1, browser()->tab_count());
OpenPrintPreviewTab();
}
virtual void TearDown() {
DeletePrintPreviewTab();
ClearStickySettings();
}
void OpenPrintPreviewTab() {
TabContentsWrapper* initiator_tab =
browser()->GetSelectedTabContentsWrapper();
ASSERT_TRUE(initiator_tab);
scoped_refptr<printing::PrintPreviewTabController>
controller(new printing::PrintPreviewTabController());
ASSERT_TRUE(controller.get());
preview_tab_ = controller->GetOrCreatePreviewTab(initiator_tab);
ASSERT_TRUE(preview_tab_);
EXPECT_EQ(2, browser()->tab_count());
preview_ui_ = static_cast<PrintPreviewUI*>(preview_tab_->web_ui());
ASSERT_TRUE(preview_ui_);
}
void DeletePrintPreviewTab() {
printing::BackgroundPrintingManager* bg_printing_manager =
g_browser_process->background_printing_manager();
ASSERT_TRUE(bg_printing_manager->HasPrintPreviewTab(preview_tab_));
// Deleting TabContentsWrapper* to avoid warings from pref_notifier_impl.cc
// after the test ends.
delete preview_tab_;
}
void CheckCustomMargins(const double margin_top,
const double margin_right,
const double margin_bottom,
const double margin_left) {
EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_top,
margin_top);
EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_right,
margin_right);
EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_bottom,
margin_bottom);
EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_left,
margin_left);
}
void RequestPrintWithDefaultMargins() {
// Set the minimal dummy settings to make the HandlePrint() code happy.
DictionaryValue settings;
settings.SetBoolean(printing::kSettingPreviewModifiable, true);
settings.SetInteger(printing::kSettingColor, printing::COLOR);
settings.SetBoolean(printing::kSettingPrintToPDF, false);
settings.SetInteger(printing::kSettingMarginsType,
printing::DEFAULT_MARGINS);
// Put |settings| in to |args| as a JSON string.
std::string json_string;
base::JSONWriter::Write(&settings, false, &json_string);
ListValue args;
args.Append(new base::StringValue(json_string)); // |args| takes ownership.
preview_ui_->handler_->HandlePrint(&args);
}
void RequestPrintWithCustomMargins(
const double margin_top, const double margin_right,
const double margin_bottom,const double margin_left) {
// Set the minimal dummy settings to make the HandlePrint() code happy.
DictionaryValue settings;
settings.SetBoolean(printing::kSettingPreviewModifiable, true);
settings.SetInteger(printing::kSettingColor, printing::COLOR);
settings.SetBoolean(printing::kSettingPrintToPDF, false);
settings.SetInteger(printing::kSettingMarginsType,
printing::CUSTOM_MARGINS);
// Creating custom margins dictionary and nesting it in |settings|.
DictionaryValue* custom_settings = GetCustomMarginsDictionary(
margin_top, margin_right, margin_bottom, margin_left);
// |settings| takes ownership.
settings.Set(printing::kSettingMarginsCustom, custom_settings);
// Put |settings| in to |args| as a JSON string.
std::string json_string;
base::JSONWriter::Write(&settings, false, &json_string);
ListValue args;
args.Append(new base::StringValue(json_string)); // |args| takes ownership.
preview_ui_->handler_->HandlePrint(&args);
}
TabContentsWrapper* preview_tab_;
PrintPreviewUI* preview_ui_;
private:
void ClearStickySettings() {
PrintPreviewHandler::last_used_margins_type_ = printing::DEFAULT_MARGINS;
delete PrintPreviewHandler::last_used_page_size_margins_;
PrintPreviewHandler::last_used_page_size_margins_ = NULL;
}
};
// Tests that margin settings are saved correctly when printing with custom
// margins selected.
TEST_F(PrintPreviewHandlerTest, StickyMarginsCustom) {
const double kMarginTop = 25.5;
const double kMarginRight = 26.5;
const double kMarginBottom = 27.5;
const double kMarginLeft = 28.5;
RequestPrintWithCustomMargins(
kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
EXPECT_EQ(1, browser()->tab_count());
// Checking that sticky settings were saved correctly.
EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR);
EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
printing::CUSTOM_MARGINS);
ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_);
CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
}
// Tests that margin settings are saved correctly when printing with default
// margins selected.
TEST_F(PrintPreviewHandlerTest, StickyMarginsDefault) {
RequestPrintWithDefaultMargins();
EXPECT_EQ(1, browser()->tab_count());
// Checking that sticky settings were saved correctly.
EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR);
EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
printing::DEFAULT_MARGINS);
ASSERT_FALSE(PrintPreviewHandler::last_used_page_size_margins_);
}
// Tests that margin settings are saved correctly when printing with custom
// margins selected and then again with default margins selected.
TEST_F(PrintPreviewHandlerTest, StickyMarginsCustomThenDefault) {
const double kMarginTop = 125.5;
const double kMarginRight = 126.5;
const double kMarginBottom = 127.5;
const double kMarginLeft = 128.5;
RequestPrintWithCustomMargins(
kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
EXPECT_EQ(1, browser()->tab_count());
DeletePrintPreviewTab();
EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
printing::CUSTOM_MARGINS);
ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_);
CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
OpenPrintPreviewTab();
EXPECT_EQ(2, browser()->tab_count());
RequestPrintWithDefaultMargins();
// Checking that sticky settings were saved correctly.
EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR);
EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
printing::DEFAULT_MARGINS);
ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_);
CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
}
// Tests that margin settings are retrieved correctly after printing with custom
// margins.
TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsCustom) {
const double kMarginTop = 125.5;
const double kMarginRight = 126.5;
const double kMarginBottom = 127.5;
const double kMarginLeft = 128.5;
RequestPrintWithCustomMargins(
kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
base::DictionaryValue initial_settings;
preview_ui_->handler_->GetLastUsedMarginSettings(&initial_settings);
int margins_type;
EXPECT_TRUE(initial_settings.GetInteger(printing::kSettingMarginsType,
&margins_type));
EXPECT_EQ(margins_type, printing::CUSTOM_MARGINS);
double margin_value;
EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginTop,
&margin_value));
EXPECT_EQ(kMarginTop, margin_value);
EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginRight,
&margin_value));
EXPECT_EQ(kMarginRight, margin_value);
EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginBottom,
&margin_value));
EXPECT_EQ(kMarginBottom, margin_value);
EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginLeft,
&margin_value));
EXPECT_EQ(kMarginLeft, margin_value);
}
// Tests that margin settings are retrieved correctly after printing with
// default margins.
TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsDefault) {
RequestPrintWithDefaultMargins();
base::DictionaryValue initial_settings;
preview_ui_->handler_->GetLastUsedMarginSettings(&initial_settings);
int margins_type;
EXPECT_TRUE(initial_settings.GetInteger(printing::kSettingMarginsType,
&margins_type));
EXPECT_EQ(margins_type, printing::DEFAULT_MARGINS);
double margin_value;
EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginTop,
&margin_value));
EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginRight,
&margin_value));
EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginBottom,
&margin_value));
EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginLeft,
&margin_value));
}

@ -116,10 +116,6 @@ void PrintPreviewUI::SetInitiatorTabURLAndTitle(
initiator_tab_title_ = job_title;
}
void PrintPreviewUI::SetSourceIsModifiable(bool source_is_modifiable) {
source_is_modifiable_ = source_is_modifiable;
}
// static
void PrintPreviewUI::GetCurrentPrintPreviewStatus(
const std::string& preview_ui_addr,
@ -163,8 +159,10 @@ void PrintPreviewUI::OnDidGetPreviewPageCount(
const PrintHostMsg_DidGetPreviewPageCount_Params& params) {
DCHECK_GT(params.page_count, 0);
base::FundamentalValue count(params.page_count);
base::FundamentalValue modifiable(params.is_modifiable);
base::FundamentalValue request_id(params.preview_request_id);
CallJavascriptFunction("onDidGetPreviewPageCount", count,request_id);
CallJavascriptFunction("onDidGetPreviewPageCount", count, modifiable,
request_id);
}
void PrintPreviewUI::OnDidGetDefaultPageLayout(

@ -50,10 +50,6 @@ class PrintPreviewUI : public ChromeWebUI {
string16 initiator_tab_title() { return initiator_tab_title_; }
bool source_is_modifiable() { return source_is_modifiable_; }
void SetSourceIsModifiable(bool source_is_modifiable);
// Determines whether to cancel a print preview request based on
// |preview_ui_addr| and |request_id|.
// Can be called from any thread.
@ -118,15 +114,6 @@ class PrintPreviewUI : public ChromeWebUI {
void OnCancelPendingPreviewRequest();
private:
friend class PrintPreviewHandlerTest;
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsCustom);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsDefault);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest,
StickyMarginsCustomThenDefault);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest,
GetLastUsedMarginSettingsCustom);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest,
GetLastUsedMarginSettingsDefault);
FRIEND_TEST_ALL_PREFIXES(PrintPreviewTabControllerUnitTest,
TitleAfterReload);
@ -145,9 +132,6 @@ class PrintPreviewUI : public ChromeWebUI {
// when the initiator tab is closed/crashed.
std::string initiator_url_;
// Indicates whether the source document can be modified.
bool source_is_modifiable_;
// Store the initiator tab title, used for populating the print preview tab
// title.
string16 initiator_tab_title_;

@ -1864,7 +1864,6 @@
'browser/ui/webui/html_dialog_tab_contents_delegate_unittest.cc',
'browser/ui/webui/options/chromeos/virtual_keyboard_manager_handler_unittest.cc',
'browser/ui/webui/options/language_options_handler_unittest.cc',
'browser/ui/webui/print_preview_handler_unittest.cc',
'browser/ui/webui/print_preview_ui_unittest.cc',
'browser/ui/webui/sync_internals_ui_unittest.cc',
'browser/ui/webui/theme_source_unittest.cc',

@ -343,7 +343,7 @@ IPC_MESSAGE_CONTROL1(PrintHostMsg_TempFileForPrintingWritten,
#endif
// Asks the browser to do print preview.
IPC_MESSAGE_ROUTED1(PrintHostMsg_RequestPrintPreview, bool /* is_modifiable */)
IPC_MESSAGE_ROUTED0(PrintHostMsg_RequestPrintPreview)
// Notify the browser the number of pages in the print preview document.
IPC_MESSAGE_ROUTED1(PrintHostMsg_DidGetPreviewPageCount,

@ -1282,8 +1282,7 @@ void PrintWebViewHelper::DisplayPrintJobError() {
void PrintWebViewHelper::RequestPrintPreview() {
old_print_pages_params_.reset();
Send(new PrintHostMsg_RequestPrintPreview(
routing_id(), print_preview_context_.IsModifiable()));
Send(new PrintHostMsg_RequestPrintPreview(routing_id()));
}
bool PrintWebViewHelper::CheckForCancel() {

@ -26,7 +26,7 @@ PrintPreviewWebUITest.prototype = {
* @override
*/
preLoad: function() {
this.makeAndRegisterMockHandler(['getInitialSettings',
this.makeAndRegisterMockHandler(['getDefaultPrinter',
'getPrinters',
'getPreview',
'print',
@ -45,7 +45,7 @@ PrintPreviewWebUITest.prototype = {
// Register stubs for methods expected to be called before tests
// run. Specific expectations can be made in the tests themselves.
this.mockHandler.stubs().getInitialSettings().
this.mockHandler.stubs().getDefaultPrinter().
will(callFunction(function() {
setDefaultPrinter('FooDevice');
}));

@ -1,29 +0,0 @@
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "printing/page_size_margins.h"
#include "base/logging.h"
#include "base/values.h"
#include "printing/print_job_constants.h"
namespace printing {
void getCustomMarginsFromJobSettings(const base::DictionaryValue& settings,
PageSizeMargins* page_size_margins) {
DictionaryValue* custom_margins;
if (!settings.GetDictionary(kSettingMarginsCustom, &custom_margins) ||
!custom_margins->GetDouble(kSettingMarginTop,
&page_size_margins->margin_top) ||
!custom_margins->GetDouble(kSettingMarginBottom,
&page_size_margins->margin_bottom) ||
!custom_margins->GetDouble(kSettingMarginLeft,
&page_size_margins->margin_left) ||
!custom_margins->GetDouble(kSettingMarginRight,
&page_size_margins->margin_right)) {
NOTREACHED();
}
}
} // namespace printing

@ -5,10 +5,6 @@
#ifndef PRINTING_PAGE_SIZE_MARGINS_H_
#define PRINTING_PAGE_SIZE_MARGINS_H_
namespace base {
class DictionaryValue;
}
namespace printing {
// Struct that holds margin and content area sizes of a page. Units are
@ -22,9 +18,7 @@ struct PageSizeMargins {
double margin_left;
};
void getCustomMarginsFromJobSettings(const base::DictionaryValue& settings,
PageSizeMargins* page_size_margins);
} // namespace printing
#endif // PRINTING_PAGE_SIZE_MARGINS_H_

@ -50,7 +50,6 @@
'page_range.h',
'page_setup.cc',
'page_setup.h',
'page_size_margins.cc',
'page_size_margins.h',
'pdf_metafile_cg_mac.cc',
'pdf_metafile_cg_mac.h',

@ -7,7 +7,6 @@
#include "base/logging.h"
#include "base/values.h"
#include "printing/page_setup.h"
#include "printing/page_size_margins.h"
#include "printing/print_settings_initializer.h"
namespace printing {
@ -63,15 +62,27 @@ PrintingContext::Result PrintingContext::UpdatePrintSettings(
settings_.margin_type = static_cast<MarginType>(margin_type);
if (margin_type == CUSTOM_MARGINS) {
printing::PageSizeMargins page_size_margins;
getCustomMarginsFromJobSettings(job_settings, &page_size_margins);
double top_margin_in_points = 0;
double bottom_margin_in_points = 0;
double left_margin_in_points = 0;
double right_margin_in_points = 0;
DictionaryValue* custom_margins;
if (!job_settings.GetDictionary(kSettingMarginsCustom, &custom_margins) ||
!custom_margins->GetDouble(kSettingMarginTop, &top_margin_in_points) ||
!custom_margins->GetDouble(kSettingMarginBottom,
&bottom_margin_in_points) ||
!custom_margins->GetDouble(kSettingMarginLeft,
&left_margin_in_points) ||
!custom_margins->GetDouble(kSettingMarginRight,
&right_margin_in_points)) {
NOTREACHED();
}
PageMargins margins_in_points;
margins_in_points.Clear();
margins_in_points.top = page_size_margins.margin_top;
margins_in_points.bottom = page_size_margins.margin_bottom;
margins_in_points.left = page_size_margins.margin_left;
margins_in_points.right = page_size_margins.margin_right;
margins_in_points.top = top_margin_in_points;
margins_in_points.bottom = bottom_margin_in_points;
margins_in_points.left = left_margin_in_points;
margins_in_points.right = right_margin_in_points;
settings_.SetCustomMargins(margins_in_points);
}