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

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

Issue 8136027: Print Preview: Make print preview tab modal. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rebase, no renderer changes Created 9 years, 1 month 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 <ctype.h> 7 #include <ctype.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/base64.h" 12 #include "base/base64.h"
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.h"
15 #include "base/i18n/file_util_icu.h" 15 #include "base/i18n/file_util_icu.h"
16 #include "base/i18n/number_formatting.h" 16 #include "base/i18n/number_formatting.h"
17 #include "base/json/json_reader.h" 17 #include "base/json/json_reader.h"
18 #include "base/memory/ref_counted.h" 18 #include "base/memory/ref_counted.h"
19 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
20 #include "base/path_service.h" 20 #include "base/path_service.h"
21 #include "base/threading/thread.h" 21 #include "base/threading/thread.h"
22 #include "base/threading/thread_restrictions.h" 22 #include "base/threading/thread_restrictions.h"
23 #include "base/utf_string_conversions.h" 23 #include "base/utf_string_conversions.h"
24 #include "base/values.h" 24 #include "base/values.h"
25 #include "chrome/browser/browser_process.h" 25 #include "chrome/browser/browser_process.h"
26 #include "chrome/browser/platform_util.h" 26 #include "chrome/browser/platform_util.h"
27 #include "chrome/browser/prefs/pref_service.h" 27 #include "chrome/browser/prefs/pref_service.h"
28 #include "chrome/browser/printing/background_printing_manager.h"
29 #include "chrome/browser/printing/cloud_print/cloud_print_url.h" 28 #include "chrome/browser/printing/cloud_print/cloud_print_url.h"
30 #include "chrome/browser/printing/print_dialog_cloud.h" 29 #include "chrome/browser/printing/print_dialog_cloud.h"
31 #include "chrome/browser/printing/print_job_manager.h" 30 #include "chrome/browser/printing/print_job_manager.h"
32 #include "chrome/browser/printing/print_preview_tab_controller.h" 31 #include "chrome/browser/printing/print_preview_tab_controller.h"
33 #include "chrome/browser/printing/print_system_task_proxy.h" 32 #include "chrome/browser/printing/print_system_task_proxy.h"
34 #include "chrome/browser/printing/print_view_manager.h" 33 #include "chrome/browser/printing/print_view_manager.h"
35 #include "chrome/browser/printing/printer_manager_dialog.h" 34 #include "chrome/browser/printing/printer_manager_dialog.h"
36 #include "chrome/browser/profiles/profile.h" 35 #include "chrome/browser/profiles/profile.h"
37 #include "chrome/browser/sessions/restore_tab_helper.h"
38 #include "chrome/browser/tabs/tab_strip_model.h"
39 #include "chrome/browser/ui/browser_list.h" 36 #include "chrome/browser/ui/browser_list.h"
40 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 37 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
41 #include "chrome/browser/ui/webui/cloud_print_signin_dialog.h" 38 #include "chrome/browser/ui/webui/cloud_print_signin_dialog.h"
42 #include "chrome/browser/ui/webui/print_preview_ui.h" 39 #include "chrome/browser/ui/webui/print_preview_ui.h"
43 #include "chrome/common/chrome_paths.h" 40 #include "chrome/common/chrome_paths.h"
44 #include "chrome/common/pref_names.h" 41 #include "chrome/common/pref_names.h"
45 #include "chrome/common/print_messages.h" 42 #include "chrome/common/print_messages.h"
46 #include "content/browser/renderer_host/render_view_host.h" 43 #include "content/browser/renderer_host/render_view_host.h"
47 #include "content/browser/tab_contents/tab_contents.h" 44 #include "content/browser/tab_contents/tab_contents.h"
48 #include "content/public/browser/browser_thread.h" 45 #include "content/public/browser/browser_thread.h"
(...skipping 11 matching lines...) Expand all
60 57
61 namespace { 58 namespace {
62 59
63 enum UserActionBuckets { 60 enum UserActionBuckets {
64 PRINT_TO_PRINTER, 61 PRINT_TO_PRINTER,
65 PRINT_TO_PDF, 62 PRINT_TO_PDF,
66 CANCEL, 63 CANCEL,
67 FALLBACK_TO_ADVANCED_SETTINGS_DIALOG, 64 FALLBACK_TO_ADVANCED_SETTINGS_DIALOG,
68 PREVIEW_FAILED, 65 PREVIEW_FAILED,
69 PREVIEW_STARTED, 66 PREVIEW_STARTED,
70 INITIATOR_TAB_CRASHED, 67 INITIATOR_TAB_CRASHED, // UNUSED
71 INITIATOR_TAB_CLOSED, 68 INITIATOR_TAB_CLOSED,
72 PRINT_WITH_CLOUD_PRINT, 69 PRINT_WITH_CLOUD_PRINT,
73 USERACTION_BUCKET_BOUNDARY 70 USERACTION_BUCKET_BOUNDARY
74 }; 71 };
75 72
76 enum PrintSettingsBuckets { 73 enum PrintSettingsBuckets {
77 LANDSCAPE, 74 LANDSCAPE,
78 PORTRAIT, 75 PORTRAIT,
79 COLOR, 76 COLOR,
80 BLACK_AND_WHITE, 77 BLACK_AND_WHITE,
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 if (settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode)) 152 if (settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode))
156 ReportPrintSettingHistogram(duplex_mode ? DUPLEX : SIMPLEX); 153 ReportPrintSettingHistogram(duplex_mode ? DUPLEX : SIMPLEX);
157 154
158 int color_mode; 155 int color_mode;
159 if (settings.GetInteger(printing::kSettingColor, &color_mode)) { 156 if (settings.GetInteger(printing::kSettingColor, &color_mode)) {
160 ReportPrintSettingHistogram( 157 ReportPrintSettingHistogram(
161 printing::isColorModelSelected(color_mode) ? COLOR : BLACK_AND_WHITE); 158 printing::isColorModelSelected(color_mode) ? COLOR : BLACK_AND_WHITE);
162 } 159 }
163 } 160 }
164 161
165 printing::BackgroundPrintingManager* GetBackgroundPrintingManager() {
166 return g_browser_process->background_printing_manager();
167 }
168
169 } // namespace 162 } // namespace
170 163
171 // A Task implementation that stores a PDF file on disk. 164 // A Task implementation that stores a PDF file on disk.
172 class PrintToPdfTask : public Task { 165 class PrintToPdfTask : public Task {
173 public: 166 public:
174 // Takes ownership of |metafile|. 167 // Takes ownership of |metafile|.
175 PrintToPdfTask(printing::Metafile* metafile, const FilePath& path) 168 PrintToPdfTask(printing::Metafile* metafile, const FilePath& path)
176 : metafile_(metafile), path_(path) { 169 : metafile_(metafile), path_(path) {
177 DCHECK(metafile); 170 DCHECK(metafile);
178 } 171 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 base::Unretained(this))); 231 base::Unretained(this)));
239 web_ui_->RegisterMessageCallback("signIn", 232 web_ui_->RegisterMessageCallback("signIn",
240 base::Bind(&PrintPreviewHandler::HandleSignin, 233 base::Bind(&PrintPreviewHandler::HandleSignin,
241 base::Unretained(this))); 234 base::Unretained(this)));
242 web_ui_->RegisterMessageCallback("manageCloudPrinters", 235 web_ui_->RegisterMessageCallback("manageCloudPrinters",
243 base::Bind(&PrintPreviewHandler::HandleManageCloudPrint, 236 base::Bind(&PrintPreviewHandler::HandleManageCloudPrint,
244 base::Unretained(this))); 237 base::Unretained(this)));
245 web_ui_->RegisterMessageCallback("manageLocalPrinters", 238 web_ui_->RegisterMessageCallback("manageLocalPrinters",
246 base::Bind(&PrintPreviewHandler::HandleManagePrinters, 239 base::Bind(&PrintPreviewHandler::HandleManagePrinters,
247 base::Unretained(this))); 240 base::Unretained(this)));
248 web_ui_->RegisterMessageCallback("reloadCrashedInitiatorTab",
249 base::Bind(&PrintPreviewHandler::HandleReloadCrashedInitiatorTab,
250 base::Unretained(this)));
251 web_ui_->RegisterMessageCallback("closePrintPreviewTab", 241 web_ui_->RegisterMessageCallback("closePrintPreviewTab",
252 base::Bind(&PrintPreviewHandler::HandleClosePreviewTab, 242 base::Bind(&PrintPreviewHandler::HandleClosePreviewTab,
253 base::Unretained(this))); 243 base::Unretained(this)));
254 web_ui_->RegisterMessageCallback("hidePreview", 244 web_ui_->RegisterMessageCallback("hidePreview",
255 base::Bind(&PrintPreviewHandler::HandleHidePreview, 245 base::Bind(&PrintPreviewHandler::HandleHidePreview,
256 base::Unretained(this))); 246 base::Unretained(this)));
257 web_ui_->RegisterMessageCallback("cancelPendingPrintRequest", 247 web_ui_->RegisterMessageCallback("cancelPendingPrintRequest",
258 base::Bind(&PrintPreviewHandler::HandleCancelPendingPrintRequest, 248 base::Bind(&PrintPreviewHandler::HandleCancelPendingPrintRequest,
259 base::Unretained(this))); 249 base::Unretained(this)));
260 web_ui_->RegisterMessageCallback("saveLastPrinter", 250 web_ui_->RegisterMessageCallback("saveLastPrinter",
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 // thread. 304 // thread.
315 settings->SetString(printing::kPreviewUIAddr, 305 settings->SetString(printing::kPreviewUIAddr,
316 print_preview_ui->GetPrintPreviewUIAddress()); 306 print_preview_ui->GetPrintPreviewUIAddress());
317 307
318 // Increment request count. 308 // Increment request count.
319 ++regenerate_preview_request_count_; 309 ++regenerate_preview_request_count_;
320 310
321 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 311 TabContentsWrapper* initiator_tab = GetInitiatorTab();
322 if (!initiator_tab) { 312 if (!initiator_tab) {
323 ReportUserActionHistogram(INITIATOR_TAB_CLOSED); 313 ReportUserActionHistogram(INITIATOR_TAB_CLOSED);
324 print_preview_ui->OnInitiatorTabClosed(); 314 print_preview_ui->OnClosePrintPreviewTab();
325 return; 315 return;
326 } 316 }
327 317
328 // Retrieve the page title and url and send it to the renderer process if 318 // Retrieve the page title and url and send it to the renderer process if
329 // headers and footers are to be displayed. 319 // headers and footers are to be displayed.
330 bool display_header_footer = false; 320 bool display_header_footer = false;
331 if (!settings->GetBoolean(printing::kSettingHeaderFooterEnabled, 321 if (!settings->GetBoolean(printing::kSettingHeaderFooterEnabled,
332 &display_header_footer)) { 322 &display_header_footer)) {
333 NOTREACHED(); 323 NOTREACHED();
334 } 324 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 } else if (is_cloud_dialog) { 399 } else if (is_cloud_dialog) {
410 HandlePrintWithCloudPrint(); 400 HandlePrintWithCloudPrint();
411 } else { 401 } else {
412 ReportPrintSettingsStats(*settings); 402 ReportPrintSettingsStats(*settings);
413 ReportUserActionHistogram(PRINT_TO_PRINTER); 403 ReportUserActionHistogram(PRINT_TO_PRINTER);
414 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", 404 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter",
415 GetPageCountFromSettingsDictionary(*settings)); 405 GetPageCountFromSettingsDictionary(*settings));
416 406
417 // This tries to activate the initiator tab as well, so do not clear the 407 // This tries to activate the initiator tab as well, so do not clear the
418 // association with the initiator tab yet. 408 // association with the initiator tab yet.
419 HidePreviewTab(); 409 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
410 print_preview_ui->OnHidePreviewTab();
420 411
421 // Do this so the initiator tab can open a new print preview tab. 412 // Do this so the initiator tab can open a new print preview tab.
422 ClearInitiatorTabDetails(); 413 ClearInitiatorTabDetails();
423 414
424 // The PDF being printed contains only the pages that the user selected, 415 // The PDF being printed contains only the pages that the user selected,
425 // so ignore the page range and print all pages. 416 // so ignore the page range and print all pages.
426 settings->Remove(printing::kSettingPageRange, NULL); 417 settings->Remove(printing::kSettingPageRange, NULL);
427 RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host(); 418 RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host();
428 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); 419 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings));
429 } 420 }
(...skipping 23 matching lines...) Expand all
453 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); 444 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_');
454 FilePath default_filename(print_job_title); 445 FilePath default_filename(print_job_title);
455 default_filename = 446 default_filename =
456 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); 447 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf"));
457 448
458 SelectFile(default_filename); 449 SelectFile(default_filename);
459 } 450 }
460 } 451 }
461 452
462 void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) { 453 void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) {
463 HidePreviewTab(); 454 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
455 print_preview_ui->OnHidePreviewTab();
464 } 456 }
465 457
466 void PrintPreviewHandler::HandleCancelPendingPrintRequest( 458 void PrintPreviewHandler::HandleCancelPendingPrintRequest(
467 const ListValue* /*args*/) { 459 const ListValue* /*args*/) {
468 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 460 TabContentsWrapper* initiator_tab = GetInitiatorTab();
469 if (initiator_tab) { 461 if (initiator_tab) {
470 ClearInitiatorTabDetails(); 462 ClearInitiatorTabDetails();
471 } else { 463 } else {
472 // Initiator tab does not exists. Get the wrapper contents of current tab. 464 // Initiator tab does not exists. Get the wrapper contents of current tab.
473 Browser* browser = BrowserList::GetLastActive(); 465 Browser* browser = BrowserList::GetLastActive();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 // Cancel the pending preview request if exists. 556 // Cancel the pending preview request if exists.
565 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 557 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
566 print_preview_ui->OnCancelPendingPreviewRequest(); 558 print_preview_ui->OnCancelPendingPreviewRequest();
567 } 559 }
568 560
569 void PrintPreviewHandler::HandleManagePrinters(const ListValue* /*args*/) { 561 void PrintPreviewHandler::HandleManagePrinters(const ListValue* /*args*/) {
570 ++manage_printers_dialog_request_count_; 562 ++manage_printers_dialog_request_count_;
571 printing::PrinterManagerDialog::ShowPrinterManagerDialog(); 563 printing::PrinterManagerDialog::ShowPrinterManagerDialog();
572 } 564 }
573 565
574 void PrintPreviewHandler::HandleReloadCrashedInitiatorTab(
575 const ListValue* /*args*/) {
576 ReportStats();
577 ReportUserActionHistogram(INITIATOR_TAB_CRASHED);
578
579 TabContentsWrapper* initiator_tab = GetInitiatorTab();
580 if (!initiator_tab)
581 return;
582
583 TabContents* contents = initiator_tab->tab_contents();
584 contents->OpenURL(contents->GetURL(), GURL(), CURRENT_TAB,
585 content::PAGE_TRANSITION_RELOAD);
586 ActivateInitiatorTabAndClosePreviewTab();
587 }
588
589 void PrintPreviewHandler::HandleClosePreviewTab(const ListValue* /*args*/) { 566 void PrintPreviewHandler::HandleClosePreviewTab(const ListValue* /*args*/) {
590 ReportStats(); 567 ReportStats();
591 ReportUserActionHistogram(CANCEL); 568 ReportUserActionHistogram(CANCEL);
592 569
593 // Record the number of times the user requests to regenerate preview data 570 // Record the number of times the user requests to regenerate preview data
594 // before cancelling. 571 // before cancelling.
595 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforeCancel", 572 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforeCancel",
596 regenerate_preview_request_count_); 573 regenerate_preview_request_count_);
597
598 ActivateInitiatorTabAndClosePreviewTab();
599 } 574 }
600 575
601 void PrintPreviewHandler::ReportStats() { 576 void PrintPreviewHandler::ReportStats() {
602 UMA_HISTOGRAM_COUNTS("PrintPreview.ManagePrinters", 577 UMA_HISTOGRAM_COUNTS("PrintPreview.ManagePrinters",
603 manage_printers_dialog_request_count_); 578 manage_printers_dialog_request_count_);
604 } 579 }
605 580
606 void PrintPreviewHandler::HandleGetInitiatorTabTitle( 581 void PrintPreviewHandler::HandleGetInitiatorTabTitle(
607 const ListValue* /*args*/) { 582 const ListValue* /*args*/) {
608 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 583 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
(...skipping 21 matching lines...) Expand all
630 number_format, 605 number_format,
631 system); 606 system);
632 } 607 }
633 608
634 void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() { 609 void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() {
635 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 610 TabContentsWrapper* initiator_tab = GetInitiatorTab();
636 if (initiator_tab) { 611 if (initiator_tab) {
637 static_cast<RenderViewHostDelegate*>( 612 static_cast<RenderViewHostDelegate*>(
638 initiator_tab->tab_contents())->Activate(); 613 initiator_tab->tab_contents())->Activate();
639 } 614 }
640 ClosePrintPreviewTab(); 615 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
616 print_preview_ui->OnClosePrintPreviewTab();
641 } 617 }
642 618
643 void PrintPreviewHandler::SendPrinterCapabilities( 619 void PrintPreviewHandler::SendPrinterCapabilities(
644 const DictionaryValue& settings_info) { 620 const DictionaryValue& settings_info) {
645 VLOG(1) << "Get printer capabilities finished"; 621 VLOG(1) << "Get printer capabilities finished";
646 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", 622 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities",
647 settings_info); 623 settings_info);
648 } 624 }
649 625
650 void PrintPreviewHandler::SendDefaultPrinter( 626 void PrintPreviewHandler::SendDefaultPrinter(
(...skipping 26 matching lines...) Expand all
677 print_preview_ui->GetPrintPreviewDataForIndex( 653 print_preview_ui->GetPrintPreviewDataForIndex(
678 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data); 654 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data);
679 CHECK(data.get()); 655 CHECK(data.get());
680 DCHECK_GT(data->size(), 0U); 656 DCHECK_GT(data->size(), 0U);
681 657
682 string16 print_job_title_utf16 = 658 string16 print_job_title_utf16 =
683 preview_tab_wrapper()->print_view_manager()->RenderSourceName(); 659 preview_tab_wrapper()->print_view_manager()->RenderSourceName();
684 std::string print_job_title = UTF16ToUTF8(print_job_title_utf16); 660 std::string print_job_title = UTF16ToUTF8(print_job_title_utf16);
685 std::string printer_id; 661 std::string printer_id;
686 settings.GetString(printing::kSettingCloudPrintId, &printer_id); 662 settings.GetString(printing::kSettingCloudPrintId, &printer_id);
687 // BASE64 encode the job data. 663 // BASE64 encode the job data.
688 std::string raw_data(reinterpret_cast<const char*>(data->front()), 664 std::string raw_data(reinterpret_cast<const char*>(data->front()),
689 data->size()); 665 data->size());
690 std::string base64_data; 666 std::string base64_data;
691 if (!base::Base64Encode(raw_data, &base64_data)) { 667 if (!base::Base64Encode(raw_data, &base64_data)) {
692 NOTREACHED() << "Base64 encoding PDF data."; 668 NOTREACHED() << "Base64 encoding PDF data.";
693 } 669 }
694 670
695 const char boundary[] = "----CloudPrintFormBoundaryjc9wuprokl8i"; 671 const char boundary[] = "----CloudPrintFormBoundaryjc9wuprokl8i";
696 const char prolog[] = "--%s\r\n" 672 const char prolog[] = "--%s\r\n"
697 "Content-Disposition: form-data; name=\"capabilities\"\r\n\r\n%s\r\n" 673 "Content-Disposition: form-data; name=\"capabilities\"\r\n\r\n%s\r\n"
698 "--%s\r\n" 674 "--%s\r\n"
699 "Content-Disposition: form-data; name=\"contentType\"\r\n\r\ndataUrl\r\n" 675 "Content-Disposition: form-data; name=\"contentType\"\r\n\r\ndataUrl\r\n"
700 "--%s\r\n" 676 "--%s\r\n"
701 "Content-Disposition: form-data; name=\"title\"\r\n\r\n%s\r\n" 677 "Content-Disposition: form-data; name=\"title\"\r\n\r\n%s\r\n"
702 "--%s\r\n" 678 "--%s\r\n"
703 "Content-Disposition: form-data; name=\"printerid\"\r\n\r\n%s\r\n" 679 "Content-Disposition: form-data; name=\"printerid\"\r\n\r\n%s\r\n"
704 "--%s\r\n" 680 "--%s\r\n"
705 "Content-Disposition: form-data; name=\"content\"\r\n\r\n" 681 "Content-Disposition: form-data; name=\"content\"\r\n\r\n"
706 "data:application/pdf;base64,%s\r\n" 682 "data:application/pdf;base64,%s\r\n"
707 "--%s\r\n"; 683 "--%s\r\n";
708 684
709 // TODO(abodenha@chromium.org) This implies a large copy operation. 685 // TODO(abodenha@chromium.org) This implies a large copy operation.
710 // Profile this and optimize if necessary. 686 // Profile this and optimize if necessary.
711 std::string final_data; 687 std::string final_data;
712 base::SStringPrintf(&final_data, 688 base::SStringPrintf(&final_data,
713 prolog, 689 prolog,
714 boundary, 690 boundary,
715 print_ticket.c_str(), 691 print_ticket.c_str(),
716 boundary, 692 boundary,
717 boundary, 693 boundary,
718 print_job_title.c_str(), 694 print_job_title.c_str(),
719 boundary, 695 boundary,
720 printer_id.c_str(), 696 printer_id.c_str(),
721 boundary, 697 boundary,
722 base64_data.c_str(), 698 base64_data.c_str(),
723 boundary); 699 boundary);
724 700
725 StringValue data_value(final_data); 701 StringValue data_value(final_data);
726 702
727 web_ui_->CallJavascriptFunction("printToCloud", 703 web_ui_->CallJavascriptFunction("printToCloud",
728 data_value); 704 data_value);
729 } 705 }
730 706
731 TabContentsWrapper* PrintPreviewHandler::GetInitiatorTab() const { 707 TabContentsWrapper* PrintPreviewHandler::GetInitiatorTab() const {
732 printing::PrintPreviewTabController* tab_controller = 708 printing::PrintPreviewTabController* tab_controller =
733 printing::PrintPreviewTabController::GetInstance(); 709 printing::PrintPreviewTabController::GetInstance();
734 if (!tab_controller) 710 if (!tab_controller)
735 return NULL; 711 return NULL;
736 return tab_controller->GetInitiatorTab(preview_tab_wrapper()); 712 return tab_controller->GetInitiatorTab(preview_tab_wrapper());
737 } 713 }
738 714
739 void PrintPreviewHandler::ClosePrintPreviewTab() {
740 TabContentsWrapper* tab =
741 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab());
742 if (!tab)
743 return;
744 Browser* preview_tab_browser = BrowserList::FindBrowserWithID(
745 tab->restore_tab_helper()->window_id().id());
746 if (!preview_tab_browser)
747 return;
748 TabStripModel* tabstrip = preview_tab_browser->tabstrip_model();
749 int index = tabstrip->GetIndexOfTabContents(tab);
750 if (index == TabStripModel::kNoTab)
751 return;
752
753 // Keep print preview tab out of the recently closed tab list, because
754 // re-opening that page will just display a non-functional print preview page.
755 tabstrip->CloseTabContentsAt(index, TabStripModel::CLOSE_NONE);
756 }
757
758 void PrintPreviewHandler::OnPrintDialogShown() { 715 void PrintPreviewHandler::OnPrintDialogShown() {
759 ActivateInitiatorTabAndClosePreviewTab(); 716 ActivateInitiatorTabAndClosePreviewTab();
760 } 717 }
761 718
762 void PrintPreviewHandler::SelectFile(const FilePath& default_filename) { 719 void PrintPreviewHandler::SelectFile(const FilePath& default_filename) {
763 SelectFileDialog::FileTypeInfo file_type_info; 720 SelectFileDialog::FileTypeInfo file_type_info;
764 file_type_info.extensions.resize(1); 721 file_type_info.extensions.resize(1);
765 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pdf")); 722 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pdf"));
766 723
767 // Initializing last_saved_path_ if it is not already initialized. 724 // Initializing last_saved_path_ if it is not already initialized.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); 793 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
837 print_to_pdf_path_.reset(); 794 print_to_pdf_path_.reset();
838 ActivateInitiatorTabAndClosePreviewTab(); 795 ActivateInitiatorTabAndClosePreviewTab();
839 } 796 }
840 797
841 void PrintPreviewHandler::FileSelectionCanceled(void* params) { 798 void PrintPreviewHandler::FileSelectionCanceled(void* params) {
842 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 799 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
843 print_preview_ui->OnFileSelectionCancelled(); 800 print_preview_ui->OnFileSelectionCancelled();
844 } 801 }
845 802
846 void PrintPreviewHandler::HidePreviewTab() {
847 if (GetBackgroundPrintingManager()->HasPrintPreviewTab(preview_tab_wrapper()))
848 return;
849 GetBackgroundPrintingManager()->OwnPrintPreviewTab(preview_tab_wrapper());
850 }
851
852 void PrintPreviewHandler::ClearInitiatorTabDetails() { 803 void PrintPreviewHandler::ClearInitiatorTabDetails() {
853 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 804 TabContentsWrapper* initiator_tab = GetInitiatorTab();
854 if (!initiator_tab) 805 if (!initiator_tab)
855 return; 806 return;
856 807
857 // We no longer require the initiator tab details. Remove those details 808 // We no longer require the initiator tab details. Remove those details
858 // associated with the preview tab to allow the initiator tab to create 809 // associated with the preview tab to allow the initiator tab to create
859 // another preview tab. 810 // another preview tab.
860 printing::PrintPreviewTabController* tab_controller = 811 printing::PrintPreviewTabController* tab_controller =
861 printing::PrintPreviewTabController::GetInstance(); 812 printing::PrintPreviewTabController::GetInstance();
862 if (tab_controller) 813 if (tab_controller)
863 tab_controller->EraseInitiatorTabInfo(preview_tab_wrapper()); 814 tab_controller->EraseInitiatorTabInfo(preview_tab_wrapper());
864 } 815 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698