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

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

Issue 7038028: Initial support for cloudprint in print preview (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Lint! 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
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/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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698