summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-28 22:56:27 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-28 22:56:27 +0000
commitcb3e0b9be4d1b0406041de8b2cd1d34f0ba03559 (patch)
treef33e1f5052a30ae68e62e08cadb38a2b448a141b /chrome
parentffcb1ca31ec8deda19bb02475a1084be549e15b7 (diff)
downloadchromium_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.js33
-rw-r--r--chrome/browser/ui/webui/print_preview_handler.cc37
-rw-r--r--chrome/browser/ui/webui/print_preview_handler.h9
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);