diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-28 22:56:27 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-28 22:56:27 +0000 |
commit | cb3e0b9be4d1b0406041de8b2cd1d34f0ba03559 (patch) | |
tree | f33e1f5052a30ae68e62e08cadb38a2b448a141b /chrome | |
parent | ffcb1ca31ec8deda19bb02475a1084be549e15b7 (diff) | |
download | chromium_src-cb3e0b9be4d1b0406041de8b2cd1d34f0ba03559.zip chromium_src-cb3e0b9be4d1b0406041de8b2cd1d34f0ba03559.tar.gz chromium_src-cb3e0b9be4d1b0406041de8b2cd1d34f0ba03559.tar.bz2 |
Print Preview: Get the default printer and send a preview request, so print preview generation and printer enumeration can happen in parallel.
BUG=84126
TEST=none
Review URL: http://codereview.chromium.org/7084015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87189 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/resources/print_preview.js | 33 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler.cc | 37 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler.h | 9 |
3 files changed, 76 insertions, 3 deletions
diff --git a/chrome/browser/resources/print_preview.js b/chrome/browser/resources/print_preview.js index 29297d1..c37fc14b 100644 --- a/chrome/browser/resources/print_preview.js +++ b/chrome/browser/resources/print_preview.js @@ -49,7 +49,7 @@ function onLoad() { $('print-button').disabled = true; $('controls').onsubmit = function() { return false; }; $('dancing-dots').classList.remove('invisible'); - chrome.send('getPrinters'); + chrome.send('getDefaultPrinter'); } /** @@ -362,6 +362,20 @@ function requestPrintPreview() { } /** + * Set the default printer. If there is one, generate a print preview. + * @param {string} Name of the default printer. Empty if none. + */ +function setDefaultPrinter(printer) { + // Add a placeholder value so the printer list looks valid. + addDestinationListOption('', '', true, true); + if (printer) { + $('printer-list')[0].value = printer; + updateControlsWithSelectedPrinterCapabilities(); + } + chrome.send('getPrinters'); +} + +/** * Fill the printer list drop down. * Called from PrintPreviewHandler::SendPrinterList(). * @param {Array} printers Array of printer info objects. @@ -369,11 +383,24 @@ function requestPrintPreview() { */ function setPrinters(printers, defaultPrinterIndex) { var printerList = $('printer-list'); + // If there exists a dummy printer value, then setDefaultPrinter() already + // requested a preview, so no need to do it again. + var needPreview = (printerList[0].value == ''); for (var i = 0; i < printers.length; ++i) { + // Check if we are looking at the default printer. + if (i == defaultPrinterIndex) { + // If the default printer from setDefaultPrinter() does not match the + // enumerated value, (re)generate the print preview. + if (printers[i].deviceName != printerList[0].value) + needPreview = true; + } addDestinationListOption(printers[i].printerName, printers[i].deviceName, i == defaultPrinterIndex, false); } + // Remove the dummy printer added in setDefaultPrinter(). + printerList.remove(0); + if (printers.length != 0) addDestinationListOption('', '', false, true); @@ -387,7 +414,9 @@ function setPrinters(printers, defaultPrinterIndex) { MANAGE_PRINTERS, false, false); printerList.disabled = false; - updateControlsWithSelectedPrinterCapabilities(); + + if (needPreview) + updateControlsWithSelectedPrinterCapabilities(); } /** diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc index 284c05a..9587234 100644 --- a/chrome/browser/ui/webui/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview_handler.cc @@ -162,6 +162,25 @@ class PrintSystemTaskProxy has_logged_printers_count_(has_logged_printers_count) { } + void GetDefaultPrinter() { + VLOG(1) << "Get default printer start"; + StringValue* default_printer = + new StringValue(print_backend_->GetDefaultPrinterName()); + VLOG(1) << "Get default printer finished, found: " << default_printer; + + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + NewRunnableMethod(this, + &PrintSystemTaskProxy::SendDefaultPrinter, + default_printer)); + } + + void SendDefaultPrinter(StringValue* default_printer) { + if (handler_) + handler_->SendDefaultPrinter(*default_printer); + delete default_printer; + } + void EnumeratePrinters() { VLOG(1) << "Enumerate printers start"; ListValue* printers = new ListValue; @@ -329,6 +348,8 @@ PrintPreviewHandler::~PrintPreviewHandler() { } void PrintPreviewHandler::RegisterMessages() { + web_ui_->RegisterMessageCallback("getDefaultPrinter", + NewCallback(this, &PrintPreviewHandler::HandleGetDefaultPrinter)); web_ui_->RegisterMessageCallback("getPrinters", NewCallback(this, &PrintPreviewHandler::HandleGetPrinters)); web_ui_->RegisterMessageCallback("getPreview", @@ -349,6 +370,17 @@ TabContents* PrintPreviewHandler::preview_tab() { return web_ui_->tab_contents(); } +void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { + scoped_refptr<PrintSystemTaskProxy> task = + new PrintSystemTaskProxy(AsWeakPtr(), + print_backend_.get(), + has_logged_printers_count_); + BrowserThread::PostTask( + BrowserThread::FILE, FROM_HERE, + NewRunnableMethod(task.get(), + &PrintSystemTaskProxy::GetDefaultPrinter)); +} + void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { scoped_refptr<PrintSystemTaskProxy> task = new PrintSystemTaskProxy(AsWeakPtr(), @@ -522,6 +554,11 @@ void PrintPreviewHandler::SendPrinterCapabilities( settings_info); } +void PrintPreviewHandler::SendDefaultPrinter( + const StringValue& default_printer) { + web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer); +} + void PrintPreviewHandler::SendPrinterList( const ListValue& printers, const FundamentalValue& default_printer_index) { diff --git a/chrome/browser/ui/webui/print_preview_handler.h b/chrome/browser/ui/webui/print_preview_handler.h index f5f2a6a..72fdfbd 100644 --- a/chrome/browser/ui/webui/print_preview_handler.h +++ b/chrome/browser/ui/webui/print_preview_handler.h @@ -12,8 +12,9 @@ #include "content/browser/webui/web_ui.h" class FilePath; -class PrintSystemTaskProxy; class FundamentalValue; +class PrintSystemTaskProxy; +class StringValue; namespace printing { class PrintBackend; @@ -41,6 +42,9 @@ class PrintPreviewHandler : public WebUIMessageHandler, TabContents* preview_tab(); + // Get the default printer. |args| is unused. + void HandleGetDefaultPrinter(const ListValue* args); + // Get the list of printers. |args| is unused. void HandleGetPrinters(const ListValue* args); @@ -72,6 +76,9 @@ class PrintPreviewHandler : public WebUIMessageHandler, // |settings_info| contains printer capabilities information. void SendPrinterCapabilities(const DictionaryValue& settings_info); + // Send the default printer to the Web UI. + void SendDefaultPrinter(const StringValue& default_printer); + // Send the list of printers to the Web UI. void SendPrinterList(const ListValue& printers, const FundamentalValue& default_printer_index); |