Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: chrome/browser/ui/webui/print_preview_handler.cc

Issue 7042034: Print Preview: Remembering last used printer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.h ('k') | printing/backend/print_backend_cups.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/print_preview_handler.h" 5 #include "chrome/browser/ui/webui/print_preview_handler.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/i18n/file_util_icu.h" 9 #include "base/i18n/file_util_icu.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 PrintSystemTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, 161 PrintSystemTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler,
162 printing::PrintBackend* print_backend, 162 printing::PrintBackend* print_backend,
163 bool has_logged_printers_count) 163 bool has_logged_printers_count)
164 : handler_(handler), 164 : handler_(handler),
165 print_backend_(print_backend), 165 print_backend_(print_backend),
166 has_logged_printers_count_(has_logged_printers_count) { 166 has_logged_printers_count_(has_logged_printers_count) {
167 } 167 }
168 168
169 void GetDefaultPrinter() { 169 void GetDefaultPrinter() {
170 VLOG(1) << "Get default printer start"; 170 VLOG(1) << "Get default printer start";
171 StringValue* default_printer = 171 StringValue* default_printer = NULL;
172 new StringValue(print_backend_->GetDefaultPrinterName()); 172 if (PrintPreviewHandler::last_used_printer_ == NULL) {
173 VLOG(1) << "Get default printer finished, found: " << default_printer; 173 default_printer = new StringValue(
174 print_backend_->GetDefaultPrinterName());
175 } else {
176 default_printer = new StringValue(
177 *PrintPreviewHandler::last_used_printer_);
178 }
179 std::string default_printer_string;
180 default_printer->GetAsString(&default_printer_string);
181 VLOG(1) << "Get default printer finished, found: "
182 << default_printer_string;
174 183
175 BrowserThread::PostTask( 184 BrowserThread::PostTask(
176 BrowserThread::UI, FROM_HERE, 185 BrowserThread::UI, FROM_HERE,
177 NewRunnableMethod(this, 186 NewRunnableMethod(this,
178 &PrintSystemTaskProxy::SendDefaultPrinter, 187 &PrintSystemTaskProxy::SendDefaultPrinter,
179 default_printer)); 188 default_printer));
180 } 189 }
181 190
182 void SendDefaultPrinter(StringValue* default_printer) { 191 void SendDefaultPrinter(StringValue* default_printer) {
183 if (handler_) 192 if (handler_)
184 handler_->SendDefaultPrinter(*default_printer); 193 handler_->SendDefaultPrinter(*default_printer);
185 delete default_printer; 194 delete default_printer;
186 } 195 }
187 196
188 void EnumeratePrinters() { 197 void EnumeratePrinters() {
189 VLOG(1) << "Enumerate printers start"; 198 VLOG(1) << "Enumerate printers start";
190 ListValue* printers = new ListValue; 199 ListValue* printers = new ListValue;
191 int default_printer_index = -1;
192 200
193 printing::PrinterList printer_list; 201 printing::PrinterList printer_list;
194 print_backend_->EnumeratePrinters(&printer_list); 202 print_backend_->EnumeratePrinters(&printer_list);
195 203
196 if (!has_logged_printers_count_) { 204 if (!has_logged_printers_count_) {
197 // Record the total number of printers. 205 // Record the total number of printers.
198 UMA_HISTOGRAM_COUNTS("PrintPreview.NumberOfPrinters", 206 UMA_HISTOGRAM_COUNTS("PrintPreview.NumberOfPrinters",
199 printer_list.size()); 207 printer_list.size());
200 } 208 }
201 209
202 int i = 0; 210 int i = 0;
203 for (printing::PrinterList::iterator iter = printer_list.begin(); 211 for (printing::PrinterList::iterator iter = printer_list.begin();
204 iter != printer_list.end(); ++iter, ++i) { 212 iter != printer_list.end(); ++iter, ++i) {
205 DictionaryValue* printer_info = new DictionaryValue; 213 DictionaryValue* printer_info = new DictionaryValue;
206 std::string printerName; 214 std::string printerName;
207 #if defined(OS_MACOSX) 215 #if defined(OS_MACOSX)
208 // On Mac, |iter->printer_description| specifies the printer name and 216 // On Mac, |iter->printer_description| specifies the printer name and
209 // |iter->printer_name| specifies the device name / printer queue name. 217 // |iter->printer_name| specifies the device name / printer queue name.
210 printerName = iter->printer_description; 218 printerName = iter->printer_description;
211 #else 219 #else
212 printerName = iter->printer_name; 220 printerName = iter->printer_name;
213 #endif 221 #endif
214 printer_info->SetString(printing::kSettingPrinterName, printerName); 222 printer_info->SetString(printing::kSettingPrinterName, printerName);
215 printer_info->SetString(printing::kSettingDeviceName, iter->printer_name); 223 printer_info->SetString(printing::kSettingDeviceName, iter->printer_name);
216 printers->Append(printer_info); 224 printers->Append(printer_info);
217 if (iter->is_default)
218 default_printer_index = i;
219 } 225 }
220 VLOG(1) << "Enumerate printers finished, found " << i << " printers"; 226 VLOG(1) << "Enumerate printers finished, found " << i << " printers";
221 227
222 BrowserThread::PostTask( 228 BrowserThread::PostTask(
223 BrowserThread::UI, FROM_HERE, 229 BrowserThread::UI, FROM_HERE,
224 NewRunnableMethod(this, 230 NewRunnableMethod(this,
225 &PrintSystemTaskProxy::SendPrinterList, 231 &PrintSystemTaskProxy::SendPrinterList,
226 printers, 232 printers));
227 new FundamentalValue(default_printer_index)));
228 } 233 }
229 234
230 void SendPrinterList(ListValue* printers, 235 void SendPrinterList(ListValue* printers) {
231 FundamentalValue* default_printer_index) {
232 if (handler_) 236 if (handler_)
233 handler_->SendPrinterList(*printers, *default_printer_index); 237 handler_->SendPrinterList(*printers);
234 delete printers; 238 delete printers;
235 delete default_printer_index;
236 } 239 }
237 240
238 void GetPrinterCapabilities(const std::string& printer_name) { 241 void GetPrinterCapabilities(const std::string& printer_name) {
239 VLOG(1) << "Get printer capabilities start for " << printer_name; 242 VLOG(1) << "Get printer capabilities start for " << printer_name;
240 printing::PrinterCapsAndDefaults printer_info; 243 printing::PrinterCapsAndDefaults printer_info;
241 bool supports_color = true; 244 bool supports_color = true;
242 if (!print_backend_->GetPrinterCapsAndDefaults(printer_name, 245 if (!print_backend_->GetPrinterCapsAndDefaults(printer_name,
243 &printer_info)) { 246 &printer_info)) {
244 return; 247 return;
245 } 248 }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 private: 334 private:
332 // The metafile holding the PDF data. 335 // The metafile holding the PDF data.
333 scoped_ptr<printing::Metafile> metafile_; 336 scoped_ptr<printing::Metafile> metafile_;
334 337
335 // The absolute path where the file will be saved. 338 // The absolute path where the file will be saved.
336 FilePath path_; 339 FilePath path_;
337 }; 340 };
338 341
339 // static 342 // static
340 FilePath* PrintPreviewHandler::last_saved_path_ = NULL; 343 FilePath* PrintPreviewHandler::last_saved_path_ = NULL;
344 std::string* PrintPreviewHandler::last_used_printer_ = NULL;
341 345
342 PrintPreviewHandler::PrintPreviewHandler() 346 PrintPreviewHandler::PrintPreviewHandler()
343 : print_backend_(printing::PrintBackend::CreateInstance(NULL)), 347 : print_backend_(printing::PrintBackend::CreateInstance(NULL)),
344 regenerate_preview_request_count_(0), 348 regenerate_preview_request_count_(0),
345 manage_printers_dialog_request_count_(0), 349 manage_printers_dialog_request_count_(0),
346 reported_failed_preview_(false), 350 reported_failed_preview_(false),
347 has_logged_printers_count_(false) { 351 has_logged_printers_count_(false) {
348 ReportUserActionHistogram(PREVIEW_STARTED); 352 ReportUserActionHistogram(PREVIEW_STARTED);
349 } 353 }
350 354
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 TabContents* initiator_tab = GetInitiatorTab(); 437 TabContents* initiator_tab = GetInitiatorTab();
434 if (initiator_tab) { 438 if (initiator_tab) {
435 RenderViewHost* rvh = initiator_tab->render_view_host(); 439 RenderViewHost* rvh = initiator_tab->render_view_host();
436 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); 440 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id()));
437 } 441 }
438 442
439 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); 443 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args));
440 if (!settings.get()) 444 if (!settings.get())
441 return; 445 return;
442 446
447 // Initializing last_used_printer_ if it is not already initialized.
448 if (!last_used_printer_)
449 last_used_printer_ = new std::string();
450 // Storing last used printer.
451 settings->GetString("deviceName", last_used_printer_);
452
443 bool print_to_pdf = false; 453 bool print_to_pdf = false;
444 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); 454 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf);
445 455
446 TabContentsWrapper* preview_tab_wrapper = 456 TabContentsWrapper* preview_tab_wrapper =
447 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); 457 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab());
448 458
449 if (print_to_pdf) { 459 if (print_to_pdf) {
450 ReportUserActionHistogram(PRINT_TO_PDF); 460 ReportUserActionHistogram(PRINT_TO_PDF);
451 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", 461 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF",
452 GetPageCountFromSettingsDictionary(*settings)); 462 GetPageCountFromSettingsDictionary(*settings));
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 VLOG(1) << "Get printer capabilities finished"; 562 VLOG(1) << "Get printer capabilities finished";
553 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", 563 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities",
554 settings_info); 564 settings_info);
555 } 565 }
556 566
557 void PrintPreviewHandler::SendDefaultPrinter( 567 void PrintPreviewHandler::SendDefaultPrinter(
558 const StringValue& default_printer) { 568 const StringValue& default_printer) {
559 web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer); 569 web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer);
560 } 570 }
561 571
562 void PrintPreviewHandler::SendPrinterList( 572 void PrintPreviewHandler::SendPrinterList(const ListValue& printers) {
563 const ListValue& printers, 573 web_ui_->CallJavascriptFunction("setPrinters", printers);
564 const FundamentalValue& default_printer_index) {
565 web_ui_->CallJavascriptFunction("setPrinters", printers,
566 default_printer_index);
567 } 574 }
568 575
569 TabContents* PrintPreviewHandler::GetInitiatorTab() { 576 TabContents* PrintPreviewHandler::GetInitiatorTab() {
570 printing::PrintPreviewTabController* tab_controller = 577 printing::PrintPreviewTabController* tab_controller =
571 printing::PrintPreviewTabController::GetInstance(); 578 printing::PrintPreviewTabController::GetInstance();
572 if (!tab_controller) 579 if (!tab_controller)
573 return NULL; 580 return NULL;
574 return tab_controller->GetInitiatorTab(preview_tab()); 581 return tab_controller->GetInitiatorTab(preview_tab());
575 } 582 }
576 583
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); 638 metafile->InitFromData(static_cast<const void*>(data->front()), data->size());
632 639
633 // Updating last_saved_path_ to the newly selected folder. 640 // Updating last_saved_path_ to the newly selected folder.
634 *last_saved_path_ = path.DirName(); 641 *last_saved_path_ = path.DirName();
635 642
636 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); 643 PrintToPdfTask* task = new PrintToPdfTask(metafile, path);
637 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); 644 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
638 645
639 ActivateInitiatorTabAndClosePreviewTab(); 646 ActivateInitiatorTabAndClosePreviewTab();
640 } 647 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.h ('k') | printing/backend/print_backend_cups.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698