Chromium Code Reviews| 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/base64.h" | |
| 10 #include "base/command_line.h" | |
|
Lei Zhang
2011/06/09 21:23:30
move to inside a #if !defined(OS_CHROMEOS) block.
Albert Bodenhamer
2011/06/10 01:29:36
Done.
| |
| 9 #include "base/i18n/file_util_icu.h" | 11 #include "base/i18n/file_util_icu.h" |
| 10 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 11 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 12 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
| 13 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 14 #include "base/threading/thread.h" | 16 #include "base/threading/thread.h" |
| 15 #include "base/threading/thread_restrictions.h" | 17 #include "base/threading/thread_restrictions.h" |
| 16 #include "base/utf_string_conversions.h" | 18 #include "base/utf_string_conversions.h" |
| 17 #include "base/values.h" | 19 #include "base/values.h" |
| 18 #include "chrome/browser/browser_process.h" | 20 #include "chrome/browser/browser_process.h" |
| 19 #include "chrome/browser/platform_util.h" | 21 #include "chrome/browser/platform_util.h" |
| 20 #include "chrome/browser/printing/background_printing_manager.h" | 22 #include "chrome/browser/printing/background_printing_manager.h" |
| 23 #include "chrome/browser/printing/cloud_print/cloud_print_url.h" | |
| 21 #include "chrome/browser/printing/printer_manager_dialog.h" | 24 #include "chrome/browser/printing/printer_manager_dialog.h" |
| 22 #include "chrome/browser/printing/print_preview_tab_controller.h" | 25 #include "chrome/browser/printing/print_preview_tab_controller.h" |
| 23 #include "chrome/browser/tabs/tab_strip_model.h" | 26 #include "chrome/browser/tabs/tab_strip_model.h" |
| 24 #include "chrome/browser/ui/browser_list.h" | 27 #include "chrome/browser/ui/browser_list.h" |
| 25 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 28 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 26 #include "chrome/browser/ui/webui/print_preview_ui.h" | 29 #include "chrome/browser/ui/webui/print_preview_ui.h" |
| 27 #include "chrome/common/chrome_paths.h" | 30 #include "chrome/common/chrome_paths.h" |
| 31 #include "chrome/common/chrome_switches.h" | |
| 28 #include "chrome/common/print_messages.h" | 32 #include "chrome/common/print_messages.h" |
| 29 #include "content/browser/browser_thread.h" | 33 #include "content/browser/browser_thread.h" |
| 30 #include "content/browser/renderer_host/render_view_host.h" | 34 #include "content/browser/renderer_host/render_view_host.h" |
| 31 #include "content/browser/tab_contents/tab_contents.h" | 35 #include "content/browser/tab_contents/tab_contents.h" |
| 36 #include "net/base/escape.h" | |
| 32 #include "printing/backend/print_backend.h" | 37 #include "printing/backend/print_backend.h" |
| 33 #include "printing/metafile.h" | 38 #include "printing/metafile.h" |
| 34 #include "printing/metafile_impl.h" | 39 #include "printing/metafile_impl.h" |
| 35 #include "printing/page_range.h" | 40 #include "printing/page_range.h" |
| 36 #include "printing/print_job_constants.h" | 41 #include "printing/print_job_constants.h" |
| 42 #include "webkit/glue/webpreferences.h" | |
|
Lei Zhang
2011/06/09 21:23:30
not used, ditto for escape.h above.
Albert Bodenhamer
2011/06/10 01:29:36
Done.
| |
| 37 | 43 |
| 38 #if defined(USE_CUPS) | 44 #if defined(USE_CUPS) |
| 39 #include <cups/cups.h> | 45 #include <cups/cups.h> |
| 40 | 46 |
| 41 #include "base/file_util.h" | 47 #include "base/file_util.h" |
| 42 #endif | 48 #endif |
| 43 | 49 |
| 44 namespace { | 50 namespace { |
| 45 | 51 |
| 46 const bool kColorDefaultValue = false; | 52 const bool kColorDefaultValue = false; |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 215 printer_info->SetString(printing::kSettingDeviceName, iter->printer_name); | 221 printer_info->SetString(printing::kSettingDeviceName, iter->printer_name); |
| 216 printers->Append(printer_info); | 222 printers->Append(printer_info); |
| 217 if (iter->is_default) | 223 if (iter->is_default) |
| 218 default_printer_index = i; | 224 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::SetupPrinterList, |
| 226 printers, | 232 printers, |
| 227 new FundamentalValue(default_printer_index))); | 233 new FundamentalValue(default_printer_index))); |
| 228 } | 234 } |
| 229 | 235 |
| 230 void SendPrinterList(ListValue* printers, | 236 void SetupPrinterList(ListValue* printers, |
| 231 FundamentalValue* default_printer_index) { | 237 FundamentalValue* default_printer_index) { |
| 232 if (handler_) | 238 if (handler_) { |
| 233 handler_->SendPrinterList(*printers, *default_printer_index); | 239 handler_->SetupPrinterList(*printers, *default_printer_index); |
| 240 } | |
| 234 delete printers; | 241 delete printers; |
| 235 delete default_printer_index; | 242 delete default_printer_index; |
| 236 } | 243 } |
| 237 | 244 |
| 238 void GetPrinterCapabilities(const std::string& printer_name) { | 245 void GetPrinterCapabilities(const std::string& printer_name) { |
| 239 VLOG(1) << "Get printer capabilities start for " << printer_name; | 246 VLOG(1) << "Get printer capabilities start for " << printer_name; |
| 240 printing::PrinterCapsAndDefaults printer_info; | 247 printing::PrinterCapsAndDefaults printer_info; |
| 241 bool supports_color = true; | 248 bool supports_color = true; |
| 242 if (!print_backend_->GetPrinterCapsAndDefaults(printer_name, | 249 if (!print_backend_->GetPrinterCapsAndDefaults(printer_name, |
| 243 &printer_info)) { | 250 &printer_info)) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 359 web_ui_->RegisterMessageCallback("getPrinters", | 366 web_ui_->RegisterMessageCallback("getPrinters", |
| 360 NewCallback(this, &PrintPreviewHandler::HandleGetPrinters)); | 367 NewCallback(this, &PrintPreviewHandler::HandleGetPrinters)); |
| 361 web_ui_->RegisterMessageCallback("getPreview", | 368 web_ui_->RegisterMessageCallback("getPreview", |
| 362 NewCallback(this, &PrintPreviewHandler::HandleGetPreview)); | 369 NewCallback(this, &PrintPreviewHandler::HandleGetPreview)); |
| 363 web_ui_->RegisterMessageCallback("print", | 370 web_ui_->RegisterMessageCallback("print", |
| 364 NewCallback(this, &PrintPreviewHandler::HandlePrint)); | 371 NewCallback(this, &PrintPreviewHandler::HandlePrint)); |
| 365 web_ui_->RegisterMessageCallback("getPrinterCapabilities", | 372 web_ui_->RegisterMessageCallback("getPrinterCapabilities", |
| 366 NewCallback(this, &PrintPreviewHandler::HandleGetPrinterCapabilities)); | 373 NewCallback(this, &PrintPreviewHandler::HandleGetPrinterCapabilities)); |
| 367 web_ui_->RegisterMessageCallback("showSystemDialog", | 374 web_ui_->RegisterMessageCallback("showSystemDialog", |
| 368 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); | 375 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); |
| 369 web_ui_->RegisterMessageCallback("managePrinters", | 376 web_ui_->RegisterMessageCallback("morePrinters", |
| 377 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); | |
| 378 web_ui_->RegisterMessageCallback("signIn", | |
| 379 NewCallback(this, &PrintPreviewHandler::HandleManageCloudPrint)); | |
| 380 web_ui_->RegisterMessageCallback("addPrinter", | |
| 381 NewCallback(this, &PrintPreviewHandler::HandleManageCloudPrint)); | |
| 382 web_ui_->RegisterMessageCallback("manageCloudPrinters", | |
| 383 NewCallback(this, &PrintPreviewHandler::HandleManageCloudPrint)); | |
| 384 web_ui_->RegisterMessageCallback("manageLocalPrinters", | |
| 370 NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); | 385 NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); |
| 371 web_ui_->RegisterMessageCallback("closePrintPreviewTab", | 386 web_ui_->RegisterMessageCallback("closePrintPreviewTab", |
| 372 NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); | 387 NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); |
| 373 } | 388 } |
| 374 | 389 |
| 375 TabContents* PrintPreviewHandler::preview_tab() { | 390 TabContents* PrintPreviewHandler::preview_tab() { |
| 376 return web_ui_->tab_contents(); | 391 return web_ui_->tab_contents(); |
| 377 } | 392 } |
| 378 | 393 |
| 379 void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { | 394 void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 417 if (!settings.get()) | 432 if (!settings.get()) |
| 418 return; | 433 return; |
| 419 | 434 |
| 420 VLOG(1) << "Print preview request start"; | 435 VLOG(1) << "Print preview request start"; |
| 421 RenderViewHost* rvh = initiator_tab->render_view_host(); | 436 RenderViewHost* rvh = initiator_tab->render_view_host(); |
| 422 rvh->Send(new PrintMsg_PrintPreview(rvh->routing_id(), *settings)); | 437 rvh->Send(new PrintMsg_PrintPreview(rvh->routing_id(), *settings)); |
| 423 } | 438 } |
| 424 | 439 |
| 425 void PrintPreviewHandler::HandlePrint(const ListValue* args) { | 440 void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
| 426 ReportStats(); | 441 ReportStats(); |
| 427 | |
| 428 // Record the number of times the user requests to regenerate preview data | 442 // Record the number of times the user requests to regenerate preview data |
| 429 // before printing. | 443 // before printing. |
| 430 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint", | 444 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint", |
| 431 regenerate_preview_request_count_); | 445 regenerate_preview_request_count_); |
| 432 | 446 |
| 433 TabContents* initiator_tab = GetInitiatorTab(); | 447 TabContents* initiator_tab = GetInitiatorTab(); |
| 434 if (initiator_tab) { | 448 if (initiator_tab) { |
| 435 RenderViewHost* rvh = initiator_tab->render_view_host(); | 449 RenderViewHost* rvh = initiator_tab->render_view_host(); |
| 436 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); | 450 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); |
| 437 } | 451 } |
| 438 | 452 |
| 439 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); | 453 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); |
| 440 if (!settings.get()) | 454 if (!settings.get()) |
| 441 return; | 455 return; |
| 442 | 456 |
| 443 bool print_to_pdf = false; | 457 bool print_to_pdf = false; |
| 444 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); | 458 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); |
| 445 | 459 |
| 446 TabContentsWrapper* preview_tab_wrapper = | 460 TabContentsWrapper* preview_tab_wrapper = |
| 447 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); | 461 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
| 448 | 462 |
| 449 if (print_to_pdf) { | 463 bool print_to_cloud = settings->HasKey(printing::kSettingCloudPrintId); |
| 464 if (print_to_cloud) { | |
| 465 std::string print_ticket; | |
| 466 args->GetString(1, &print_ticket); | |
| 467 SendCloudPrintJob(*settings, print_ticket); | |
| 468 } else if (print_to_pdf) { | |
| 450 ReportUserActionHistogram(PRINT_TO_PDF); | 469 ReportUserActionHistogram(PRINT_TO_PDF); |
| 451 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", | 470 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", |
| 452 GetPageCountFromSettingsDictionary(*settings)); | 471 GetPageCountFromSettingsDictionary(*settings)); |
| 453 | 472 |
| 454 // Pre-populating select file dialog with print job title. | 473 // Pre-populating select file dialog with print job title. |
| 455 string16 print_job_title_utf16 = | 474 string16 print_job_title_utf16 = |
| 456 preview_tab_wrapper->print_view_manager()->RenderSourceName(); | 475 preview_tab_wrapper->print_view_manager()->RenderSourceName(); |
| 457 | 476 |
| 458 #if defined(OS_WIN) | 477 #if defined(OS_WIN) |
| 459 FilePath::StringType print_job_title(print_job_title_utf16); | 478 FilePath::StringType print_job_title(print_job_title_utf16); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 472 ReportUserActionHistogram(PRINT_TO_PRINTER); | 491 ReportUserActionHistogram(PRINT_TO_PRINTER); |
| 473 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", | 492 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", |
| 474 GetPageCountFromSettingsDictionary(*settings)); | 493 GetPageCountFromSettingsDictionary(*settings)); |
| 475 g_browser_process->background_printing_manager()->OwnTabContents( | 494 g_browser_process->background_printing_manager()->OwnTabContents( |
| 476 preview_tab_wrapper); | 495 preview_tab_wrapper); |
| 477 | 496 |
| 478 // The PDF being printed contains only the pages that the user selected, | 497 // The PDF being printed contains only the pages that the user selected, |
| 479 // so ignore the page range and print all pages. | 498 // so ignore the page range and print all pages. |
| 480 settings->Remove(printing::kSettingPageRange, NULL); | 499 settings->Remove(printing::kSettingPageRange, NULL); |
| 481 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); | 500 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); |
| 482 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); | 501 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), |
|
Lei Zhang
2011/06/09 21:23:30
nit: this is an unnecessary change.
Albert Bodenhamer
2011/06/10 01:29:36
Done.
| |
| 502 *settings)); | |
| 483 } | 503 } |
| 484 } | 504 } |
| 485 | 505 |
| 486 void PrintPreviewHandler::HandleGetPrinterCapabilities( | 506 void PrintPreviewHandler::HandleGetPrinterCapabilities( |
| 487 const ListValue* args) { | 507 const ListValue* args) { |
| 488 std::string printer_name; | 508 std::string printer_name; |
| 489 bool ret = args->GetString(0, &printer_name); | 509 bool ret = args->GetString(0, &printer_name); |
| 490 if (!ret || printer_name.empty()) | 510 if (!ret || printer_name.empty()) |
| 491 return; | 511 return; |
| 492 | 512 |
| 493 scoped_refptr<PrintSystemTaskProxy> task = | 513 scoped_refptr<PrintSystemTaskProxy> task = |
| 494 new PrintSystemTaskProxy(AsWeakPtr(), | 514 new PrintSystemTaskProxy(AsWeakPtr(), |
| 495 print_backend_.get(), | 515 print_backend_.get(), |
| 496 has_logged_printers_count_); | 516 has_logged_printers_count_); |
| 497 | 517 |
| 498 BrowserThread::PostTask( | 518 BrowserThread::PostTask( |
| 499 BrowserThread::FILE, FROM_HERE, | 519 BrowserThread::FILE, FROM_HERE, |
| 500 NewRunnableMethod(task.get(), | 520 NewRunnableMethod(task.get(), |
| 501 &PrintSystemTaskProxy::GetPrinterCapabilities, | 521 &PrintSystemTaskProxy::GetPrinterCapabilities, |
| 502 printer_name)); | 522 printer_name)); |
| 503 } | 523 } |
| 504 | 524 |
| 525 void PrintPreviewHandler::HandleManageCloudPrint(const ListValue* args) { | |
| 526 Browser* browser = BrowserList::GetLastActive(); | |
| 527 browser->OpenURL(CloudPrintURL(browser->profile()). | |
| 528 GetCloudPrintServiceManageURL(), | |
| 529 GURL(), | |
| 530 NEW_FOREGROUND_TAB, | |
| 531 PageTransition::LINK); | |
| 532 } | |
| 533 | |
| 505 void PrintPreviewHandler::HandleShowSystemDialog(const ListValue* args) { | 534 void PrintPreviewHandler::HandleShowSystemDialog(const ListValue* args) { |
| 506 ReportStats(); | 535 ReportStats(); |
| 507 ReportUserActionHistogram(FALLBACK_TO_ADVANCED_SETTINGS_DIALOG); | 536 ReportUserActionHistogram(FALLBACK_TO_ADVANCED_SETTINGS_DIALOG); |
| 508 | 537 |
| 509 TabContents* initiator_tab = GetInitiatorTab(); | 538 TabContents* initiator_tab = GetInitiatorTab(); |
| 510 if (!initiator_tab) | 539 if (!initiator_tab) |
| 511 return; | 540 return; |
| 512 initiator_tab->Activate(); | 541 initiator_tab->Activate(); |
| 513 | 542 |
| 514 TabContentsWrapper* wrapper = | 543 TabContentsWrapper* wrapper = |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 552 VLOG(1) << "Get printer capabilities finished"; | 581 VLOG(1) << "Get printer capabilities finished"; |
| 553 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", | 582 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", |
| 554 settings_info); | 583 settings_info); |
| 555 } | 584 } |
| 556 | 585 |
| 557 void PrintPreviewHandler::SendDefaultPrinter( | 586 void PrintPreviewHandler::SendDefaultPrinter( |
| 558 const StringValue& default_printer) { | 587 const StringValue& default_printer) { |
| 559 web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer); | 588 web_ui_->CallJavascriptFunction("setDefaultPrinter", default_printer); |
| 560 } | 589 } |
| 561 | 590 |
| 562 void PrintPreviewHandler::SendPrinterList( | 591 void PrintPreviewHandler::SetupPrinterList( |
| 563 const ListValue& printers, | 592 const ListValue& printers, |
| 564 const FundamentalValue& default_printer_index) { | 593 const FundamentalValue& default_printer_index) { |
| 594 SendCloudPrintEnabled(); | |
| 565 web_ui_->CallJavascriptFunction("setPrinters", printers, | 595 web_ui_->CallJavascriptFunction("setPrinters", printers, |
| 566 default_printer_index); | 596 default_printer_index, |
| 597 *(Value::CreateBooleanValue(true))); | |
| 598 } | |
| 599 | |
| 600 void PrintPreviewHandler::SendCloudPrintEnabled() { | |
| 601 #if defined(OS_CHROMEOS) | |
| 602 bool enable_cloud_print_integration = true; | |
| 603 #else | |
| 604 bool enable_cloud_print_integration = | |
| 605 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableCloudPrint); | |
| 606 #endif | |
| 607 GURL gcp_url(CloudPrintURL(BrowserList::GetLastActive()->profile()). | |
| 608 GetCloudPrintServiceURL()); | |
| 609 if (enable_cloud_print_integration) { | |
| 610 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); | |
| 611 rvh->Send(new PrintMsg_PrintSetupWhitelist(rvh->routing_id(), | |
| 612 gcp_url.host())); | |
| 613 } | |
| 614 FundamentalValue enable(enable_cloud_print_integration); | |
| 615 StringValue gcp_url_value(gcp_url.spec()); | |
| 616 web_ui_->CallJavascriptFunction("setUseCloudPrint", enable, gcp_url_value); | |
| 617 } | |
| 618 | |
| 619 void PrintPreviewHandler::SendCloudPrintJob(const DictionaryValue& settings, | |
| 620 std::string print_ticket) { | |
| 621 scoped_refptr<RefCountedBytes> data; | |
| 622 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); | |
| 623 print_preview_ui->GetPrintPreviewData(&data); | |
| 624 CHECK(data->front()); | |
| 625 DCHECK_GT(data->size(), 0U); | |
| 626 | |
| 627 // BASE64 encode the job data. | |
| 628 std::string raw_data(reinterpret_cast<const char*>(data->front()), | |
| 629 data->size()); | |
| 630 std::string base64_data; | |
| 631 if (!base::Base64Encode(raw_data, &base64_data)) { | |
| 632 NOTREACHED() << "Base64 encoding PDF data."; | |
| 633 } | |
| 634 | |
| 635 TabContentsWrapper* wrapper = | |
| 636 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); | |
| 637 string16 print_job_title_utf16 = | |
| 638 wrapper->print_view_manager()->RenderSourceName(); | |
| 639 std::string print_job_title = UTF16ToUTF8(print_job_title_utf16); | |
| 640 std::string printer_id; | |
| 641 settings.GetString("cloudPrintID", &printer_id); | |
| 642 | |
| 643 const char prolog[] = "------CloudPrintFormBoundaryjc9wuprokl8i\r\n" | |
| 644 "Content-Disposition: form-data; name=\"capabilities\"\r\n\r\n%s\r\n" | |
| 645 "------CloudPrintFormBoundaryjc9wuprokl8i\r\n" | |
| 646 "Content-Disposition: form-data; name=\"contentType\"\r\n\r\ndataUrl\r\n" | |
| 647 "------CloudPrintFormBoundaryjc9wuprokl8i\r\n" | |
| 648 "Content-Disposition: form-data; name=\"title\"\r\n\r\n%s\r\n" | |
| 649 "------CloudPrintFormBoundaryjc9wuprokl8i\r\n" | |
| 650 "Content-Disposition: form-data; name=\"printerid\"\r\n\r\n%s\r\n" | |
| 651 "------CloudPrintFormBoundaryjc9wuprokl8i\r\n" | |
| 652 "Content-Disposition: form-data; name=\"content\"\r\n\r\n" | |
| 653 "data:application/pdf;base64,%s\r\n" | |
| 654 "------CloudPrintFormBoundaryjc9wuprokl8i\r\n"; | |
| 655 | |
| 656 std::string final_data; | |
| 657 base::SStringPrintf(&final_data, | |
| 658 prolog, | |
| 659 print_ticket.c_str(), | |
| 660 print_job_title.c_str(), | |
| 661 printer_id.c_str(), | |
| 662 base64_data.c_str()); | |
| 663 | |
| 664 StringValue data_value(final_data); | |
| 665 | |
| 666 web_ui_->CallJavascriptFunction("printToCloud", | |
| 667 data_value); | |
| 567 } | 668 } |
| 568 | 669 |
| 569 TabContents* PrintPreviewHandler::GetInitiatorTab() { | 670 TabContents* PrintPreviewHandler::GetInitiatorTab() { |
| 570 printing::PrintPreviewTabController* tab_controller = | 671 printing::PrintPreviewTabController* tab_controller = |
| 571 printing::PrintPreviewTabController::GetInstance(); | 672 printing::PrintPreviewTabController::GetInstance(); |
| 572 if (!tab_controller) | 673 if (!tab_controller) |
| 573 return NULL; | 674 return NULL; |
| 574 return tab_controller->GetInitiatorTab(preview_tab()); | 675 return tab_controller->GetInitiatorTab(preview_tab()); |
| 575 } | 676 } |
| 576 | 677 |
| 577 void PrintPreviewHandler::ClosePrintPreviewTab() { | 678 void PrintPreviewHandler::ClosePrintPreviewTab() { |
| 679 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); | |
| 680 GURL gcp_url(CloudPrintURL(BrowserList::GetLastActive()->profile()). | |
| 681 GetCloudPrintServiceURL()); | |
| 682 rvh->Send(new PrintMsg_PrintTeardownWhitelist(rvh->routing_id(), | |
| 683 gcp_url.host())); | |
| 578 Browser* preview_tab_browser = BrowserList::FindBrowserWithID( | 684 Browser* preview_tab_browser = BrowserList::FindBrowserWithID( |
| 579 preview_tab()->controller().window_id().id()); | 685 preview_tab()->controller().window_id().id()); |
| 580 if (!preview_tab_browser) | 686 if (!preview_tab_browser) |
| 581 return; | 687 return; |
| 582 TabStripModel* tabstrip = preview_tab_browser->tabstrip_model(); | 688 TabStripModel* tabstrip = preview_tab_browser->tabstrip_model(); |
| 583 | 689 |
| 584 // Keep print preview tab out of the recently closed tab list, because | 690 // Keep print preview tab out of the recently closed tab list, because |
| 585 // re-opening that page will just display a non-functional print preview page. | 691 // re-opening that page will just display a non-functional print preview page. |
| 586 tabstrip->CloseTabContentsAt(tabstrip->GetIndexOfController( | 692 tabstrip->CloseTabContentsAt(tabstrip->GetIndexOfController( |
| 587 &preview_tab()->controller()), TabStripModel::CLOSE_NONE); | 693 &preview_tab()->controller()), TabStripModel::CLOSE_NONE); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 631 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); | 737 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); |
| 632 | 738 |
| 633 // Updating last_saved_path_ to the newly selected folder. | 739 // Updating last_saved_path_ to the newly selected folder. |
| 634 *last_saved_path_ = path.DirName(); | 740 *last_saved_path_ = path.DirName(); |
| 635 | 741 |
| 636 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); | 742 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); |
| 637 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); | 743 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); |
| 638 | 744 |
| 639 ActivateInitiatorTabAndClosePreviewTab(); | 745 ActivateInitiatorTabAndClosePreviewTab(); |
| 640 } | 746 } |
| OLD | NEW |