diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/printing/print_preview_message_handler.cc | 10 | ||||
-rw-r--r-- | chrome/browser/printing/print_preview_message_handler.h | 2 | ||||
-rw-r--r-- | chrome/browser/printing/print_system_task_proxy.cc | 21 | ||||
-rw-r--r-- | chrome/browser/printing/print_system_task_proxy.h | 4 | ||||
-rw-r--r-- | chrome/browser/resources/print_preview/margin_settings.js | 130 | ||||
-rw-r--r-- | chrome/browser/resources/print_preview/print_preview.js | 49 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler.cc | 138 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler.h | 38 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler_unittest.cc | 261 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_ui.cc | 8 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_ui.h | 16 |
11 files changed, 146 insertions, 531 deletions
diff --git a/chrome/browser/printing/print_preview_message_handler.cc b/chrome/browser/printing/print_preview_message_handler.cc index b4037fc..802db6a 100644 --- a/chrome/browser/printing/print_preview_message_handler.cc +++ b/chrome/browser/printing/print_preview_message_handler.cc @@ -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( diff --git a/chrome/browser/printing/print_preview_message_handler.h b/chrome/browser/printing/print_preview_message_handler.h index 0f3d405..d65d3d6 100644 --- a/chrome/browser/printing/print_preview_message_handler.h +++ b/chrome/browser/printing/print_preview_message_handler.h @@ -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( diff --git a/chrome/browser/printing/print_system_task_proxy.cc b/chrome/browser/printing/print_system_task_proxy.cc index 289f993..c7787ce 100644 --- a/chrome/browser/printing/print_system_task_proxy.cc +++ b/chrome/browser/printing/print_system_task_proxy.cc @@ -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; } diff --git a/chrome/browser/printing/print_system_task_proxy.h b/chrome/browser/printing/print_system_task_proxy.h index efcaa26..512a7bb 100644 --- a/chrome/browser/printing/print_system_task_proxy.h +++ b/chrome/browser/printing/print_system_task_proxy.h @@ -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); diff --git a/chrome/browser/resources/print_preview/margin_settings.js b/chrome/browser/resources/print_preview/margin_settings.js index 8d8e67c..28092a3 100644 --- a/chrome/browser/resources/print_preview/margin_settings.js +++ b/chrome/browser/resources/print_preview/margin_settings.js @@ -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; @@ -199,19 +203,6 @@ cr.define('print_preview', function() { }, /** - * 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. */ get selectedMarginsValue() { @@ -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, }; }); diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js index 036f549..2491944 100644 --- a/chrome/browser/resources/print_preview/print_preview.js +++ b/chrome/browser/resources/print_preview/print_preview.js @@ -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) { diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc index ba09a0b..66e4aa3 100644 --- a/chrome/browser/ui/webui/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview_handler.cc @@ -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; - - // 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); - } -} + UMeasurementSystem measurement_system = + ulocdata_getMeasurementSystem(locale, &errorCode); + if (errorCode > U_ZERO_ERROR || measurement_system == UMS_LIMIT) + measurement_system = UMS_SI; -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_); + // Getting the number formatting based on the locale. + StringValue number_format(base::FormatDouble(123456.78, 2)); + base::FundamentalValue system(measurement_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); + 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); diff --git a/chrome/browser/ui/webui/print_preview_handler.h b/chrome/browser/ui/webui/print_preview_handler.h index 20ea1c7..cda79c8 100644 --- a/chrome/browser/ui/webui/print_preview_handler.h +++ b/chrome/browser/ui/webui/print_preview_handler.h @@ -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. diff --git a/chrome/browser/ui/webui/print_preview_handler_unittest.cc b/chrome/browser/ui/webui/print_preview_handler_unittest.cc deleted file mode 100644 index d44ce53..0000000 --- a/chrome/browser/ui/webui/print_preview_handler_unittest.cc +++ /dev/null @@ -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)); -} diff --git a/chrome/browser/ui/webui/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview_ui.cc index fc7684e4..0891cf9 100644 --- a/chrome/browser/ui/webui/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview_ui.cc @@ -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( diff --git a/chrome/browser/ui/webui/print_preview_ui.h b/chrome/browser/ui/webui/print_preview_ui.h index 0625ef0..f4521c7 100644 --- a/chrome/browser/ui/webui/print_preview_ui.h +++ b/chrome/browser/ui/webui/print_preview_ui.h @@ -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_; |