OLD | NEW |
---|---|
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 Loading... | |
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_.length() == 0) { |
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; | |
dpapad
2011/06/07 01:07:45
This is only for debugging purposes.
| |
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 Loading... | |
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_; | |
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 Loading... | |
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 LOG(INFO) << "before " << last_used_printer_; | |
448 settings->GetString("deviceName", &last_used_printer_); | |
449 LOG(INFO) << "after " << last_used_printer_; | |
450 | |
443 bool print_to_pdf = false; | 451 bool print_to_pdf = false; |
444 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); | 452 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); |
445 | 453 |
446 TabContentsWrapper* preview_tab_wrapper = | 454 TabContentsWrapper* preview_tab_wrapper = |
447 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); | 455 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
448 | 456 |
449 if (print_to_pdf) { | 457 if (print_to_pdf) { |
450 ReportUserActionHistogram(PRINT_TO_PDF); | 458 ReportUserActionHistogram(PRINT_TO_PDF); |
451 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", | 459 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", |
452 GetPageCountFromSettingsDictionary(*settings)); | 460 GetPageCountFromSettingsDictionary(*settings)); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
552 VLOG(1) << "Get printer capabilities finished"; | 560 VLOG(1) << "Get printer capabilities finished"; |
553 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", | 561 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", |
554 settings_info); | 562 settings_info); |
555 } | 563 } |
556 | 564 |
557 void PrintPreviewHandler::SendDefaultPrinter( | 565 void PrintPreviewHandler::SendDefaultPrinter( |
558 const StringValue& default_printer) { | 566 const StringValue& default_printer) { |
559 web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer); | 567 web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer); |
560 } | 568 } |
561 | 569 |
562 void PrintPreviewHandler::SendPrinterList( | 570 void PrintPreviewHandler::SendPrinterList(const ListValue& printers) { |
563 const ListValue& printers, | 571 web_ui_->CallJavascriptFunction("setPrinters", printers); |
564 const FundamentalValue& default_printer_index) { | |
565 web_ui_->CallJavascriptFunction("setPrinters", printers, | |
566 default_printer_index); | |
567 } | 572 } |
568 | 573 |
569 TabContents* PrintPreviewHandler::GetInitiatorTab() { | 574 TabContents* PrintPreviewHandler::GetInitiatorTab() { |
570 printing::PrintPreviewTabController* tab_controller = | 575 printing::PrintPreviewTabController* tab_controller = |
571 printing::PrintPreviewTabController::GetInstance(); | 576 printing::PrintPreviewTabController::GetInstance(); |
572 if (!tab_controller) | 577 if (!tab_controller) |
573 return NULL; | 578 return NULL; |
574 return tab_controller->GetInitiatorTab(preview_tab()); | 579 return tab_controller->GetInitiatorTab(preview_tab()); |
575 } | 580 } |
576 | 581 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
631 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); | 636 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); |
632 | 637 |
633 // Updating last_saved_path_ to the newly selected folder. | 638 // Updating last_saved_path_ to the newly selected folder. |
634 *last_saved_path_ = path.DirName(); | 639 *last_saved_path_ = path.DirName(); |
635 | 640 |
636 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); | 641 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); |
637 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); | 642 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); |
638 | 643 |
639 ActivateInitiatorTabAndClosePreviewTab(); | 644 ActivateInitiatorTabAndClosePreviewTab(); |
640 } | 645 } |
OLD | NEW |