Index: chrome/browser/ui/webui/print_preview_handler.cc |
diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc |
index 66e4aa3f243d49b59090e79b268394955acda618..5bf6e85fe9ec693ad899d8a7eed72086a003004d 100644 |
--- a/chrome/browser/ui/webui/print_preview_handler.cc |
+++ b/chrome/browser/ui/webui/print_preview_handler.cc |
@@ -50,6 +50,7 @@ |
#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" |
@@ -96,6 +97,17 @@ 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) { |
@@ -206,6 +218,8 @@ 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)), |
@@ -222,9 +236,6 @@ 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))); |
@@ -264,13 +275,9 @@ void PrintPreviewHandler::RegisterMessages() { |
web_ui_->RegisterMessageCallback("saveLastPrinter", |
base::Bind(&PrintPreviewHandler::HandleSaveLastPrinter, |
base::Unretained(this))); |
- web_ui_->RegisterMessageCallback("getInitiatorTabTitle", |
- base::Bind(&PrintPreviewHandler::HandleGetInitiatorTabTitle, |
+ web_ui_->RegisterMessageCallback("getInitialSettings", |
+ base::Bind(&PrintPreviewHandler::HandleGetInitialSettings, |
base::Unretained(this))); |
- web_ui_->RegisterMessageCallback("getNumberFormatAndMeasurementSystem", |
- base::Bind( |
- &PrintPreviewHandler::HandleGetNumberFormatAndMeasurementSystem, |
- base::Unretained(this))); |
} |
TabContentsWrapper* PrintPreviewHandler::preview_tab_wrapper() const { |
@@ -280,16 +287,6 @@ 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(), |
@@ -397,10 +394,19 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
last_used_color_model_ = static_cast<printing::ColorModels>(color_model); |
// Storing last used margin settings. |
- 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 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_); |
+ } |
+ } |
bool print_to_pdf = false; |
settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); |
@@ -613,32 +619,67 @@ void PrintPreviewHandler::ReportStats() { |
manage_printers_dialog_request_count_); |
} |
-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*/) { |
+void PrintPreviewHandler::GetNumberFormatAndMeasurementSystem( |
+ base::DictionaryValue* settings) { |
// Getting the measurement system based on the locale. |
UErrorCode errorCode = U_ZERO_ERROR; |
const char* locale = g_browser_process->GetApplicationLocale().c_str(); |
- UMeasurementSystem measurement_system = |
- ulocdata_getMeasurementSystem(locale, &errorCode); |
- if (errorCode > U_ZERO_ERROR || measurement_system == UMS_LIMIT) |
- measurement_system = UMS_SI; |
+ UMeasurementSystem system = ulocdata_getMeasurementSystem(locale, &errorCode); |
+ if (errorCode > U_ZERO_ERROR || system == UMS_LIMIT) |
+ 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); |
+} |
+ |
+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); |
+ } |
+} |
- // Getting the number formatting based on the locale. |
- StringValue number_format(base::FormatDouble(123456.78, 2)); |
- base::FundamentalValue system(measurement_system); |
+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_); |
- web_ui_->CallJavascriptFunction( |
- "print_preview.setNumberFormatAndMeasurementSystem", |
- number_format, |
- system); |
+ 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); |
} |
void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() { |
@@ -657,17 +698,6 @@ 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); |