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

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: do not listen for F1 key in JS Created 9 years, 2 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 <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/json/json_reader.h" 16 #include "base/json/json_reader.h"
17 #include "base/memory/ref_counted.h" 17 #include "base/memory/ref_counted.h"
18 #include "base/metrics/histogram.h" 18 #include "base/metrics/histogram.h"
19 #include "base/path_service.h" 19 #include "base/path_service.h"
20 #include "base/threading/thread.h" 20 #include "base/threading/thread.h"
21 #include "base/threading/thread_restrictions.h" 21 #include "base/threading/thread_restrictions.h"
22 #include "base/utf_string_conversions.h" 22 #include "base/utf_string_conversions.h"
23 #include "base/values.h" 23 #include "base/values.h"
24 #include "chrome/browser/browser_process.h"
25 #include "chrome/browser/platform_util.h" 24 #include "chrome/browser/platform_util.h"
26 #include "chrome/browser/printing/background_printing_manager.h"
27 #include "chrome/browser/printing/cloud_print/cloud_print_url.h" 25 #include "chrome/browser/printing/cloud_print/cloud_print_url.h"
28 #include "chrome/browser/printing/print_dialog_cloud.h" 26 #include "chrome/browser/printing/print_dialog_cloud.h"
29 #include "chrome/browser/printing/print_job_manager.h" 27 #include "chrome/browser/printing/print_job_manager.h"
30 #include "chrome/browser/printing/print_preview_tab_controller.h" 28 #include "chrome/browser/printing/print_preview_tab_controller.h"
31 #include "chrome/browser/printing/print_system_task_proxy.h" 29 #include "chrome/browser/printing/print_system_task_proxy.h"
32 #include "chrome/browser/printing/print_view_manager.h" 30 #include "chrome/browser/printing/print_view_manager.h"
33 #include "chrome/browser/printing/printer_manager_dialog.h" 31 #include "chrome/browser/printing/printer_manager_dialog.h"
34 #include "chrome/browser/sessions/restore_tab_helper.h"
35 #include "chrome/browser/tabs/tab_strip_model.h"
36 #include "chrome/browser/ui/browser_list.h" 32 #include "chrome/browser/ui/browser_list.h"
37 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 33 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
38 #include "chrome/browser/ui/webui/cloud_print_signin_dialog.h" 34 #include "chrome/browser/ui/webui/cloud_print_signin_dialog.h"
39 #include "chrome/browser/ui/webui/print_preview_ui.h" 35 #include "chrome/browser/ui/webui/print_preview_ui.h"
40 #include "chrome/common/chrome_paths.h" 36 #include "chrome/common/chrome_paths.h"
41 #include "chrome/common/print_messages.h" 37 #include "chrome/common/print_messages.h"
42 #include "content/browser/browser_thread.h" 38 #include "content/browser/browser_thread.h"
43 #include "content/browser/renderer_host/render_view_host.h" 39 #include "content/browser/renderer_host/render_view_host.h"
44 #include "content/browser/tab_contents/tab_contents.h" 40 #include "content/browser/tab_contents/tab_contents.h"
45 #include "printing/backend/print_backend.h" 41 #include "printing/backend/print_backend.h"
46 #include "printing/metafile.h" 42 #include "printing/metafile.h"
47 #include "printing/metafile_impl.h" 43 #include "printing/metafile_impl.h"
48 #include "printing/page_range.h" 44 #include "printing/page_range.h"
49 #include "printing/print_settings.h" 45 #include "printing/print_settings.h"
50 46
51 #if !defined(OS_CHROMEOS) 47 #if !defined(OS_CHROMEOS)
52 #include "base/command_line.h" 48 #include "base/command_line.h"
53 #include "chrome/common/chrome_switches.h" 49 #include "chrome/common/chrome_switches.h"
54 #endif 50 #endif
55 51
56 namespace { 52 namespace {
57 53
58 enum UserActionBuckets { 54 enum UserActionBuckets {
59 PRINT_TO_PRINTER, 55 PRINT_TO_PRINTER,
60 PRINT_TO_PDF, 56 PRINT_TO_PDF,
61 CANCEL, 57 CANCEL, // UNUSED
vandebo (ex-Chrome) 2011/10/14 07:14:05 The cancel bucket should still be used - if they h
Lei Zhang 2011/10/14 20:31:27 Sure, undeleted some code.
62 FALLBACK_TO_ADVANCED_SETTINGS_DIALOG, 58 FALLBACK_TO_ADVANCED_SETTINGS_DIALOG,
63 PREVIEW_FAILED, 59 PREVIEW_FAILED,
64 PREVIEW_STARTED, 60 PREVIEW_STARTED,
65 INITIATOR_TAB_CRASHED, 61 INITIATOR_TAB_CRASHED, // UNUSED
66 INITIATOR_TAB_CLOSED, 62 INITIATOR_TAB_CLOSED,
vandebo (ex-Chrome) 2011/10/14 07:14:05 INITIATOR_TAB_CLOSED may be unsed now...
Lei Zhang 2011/10/14 20:31:27 Still used at line 300.
67 PRINT_WITH_CLOUD_PRINT, 63 PRINT_WITH_CLOUD_PRINT,
68 USERACTION_BUCKET_BOUNDARY 64 USERACTION_BUCKET_BOUNDARY
69 }; 65 };
70 66
71 enum PrintSettingsBuckets { 67 enum PrintSettingsBuckets {
72 LANDSCAPE, 68 LANDSCAPE,
73 PORTRAIT, 69 PORTRAIT,
74 COLOR, 70 COLOR,
75 BLACK_AND_WHITE, 71 BLACK_AND_WHITE,
76 COLLATE, 72 COLLATE,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 if (settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode)) 146 if (settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode))
151 ReportPrintSettingHistogram(duplex_mode ? DUPLEX : SIMPLEX); 147 ReportPrintSettingHistogram(duplex_mode ? DUPLEX : SIMPLEX);
152 148
153 int color_mode; 149 int color_mode;
154 if (settings.GetInteger(printing::kSettingColor, &color_mode)) { 150 if (settings.GetInteger(printing::kSettingColor, &color_mode)) {
155 ReportPrintSettingHistogram( 151 ReportPrintSettingHistogram(
156 printing::isColorModelSelected(color_mode) ? COLOR : BLACK_AND_WHITE); 152 printing::isColorModelSelected(color_mode) ? COLOR : BLACK_AND_WHITE);
157 } 153 }
158 } 154 }
159 155
160 printing::BackgroundPrintingManager* GetBackgroundPrintingManager() {
161 return g_browser_process->background_printing_manager();
162 }
163
164 } // namespace 156 } // namespace
165 157
166 // A Task implementation that stores a PDF file on disk. 158 // A Task implementation that stores a PDF file on disk.
167 class PrintToPdfTask : public Task { 159 class PrintToPdfTask : public Task {
168 public: 160 public:
169 // Takes ownership of |metafile|. 161 // Takes ownership of |metafile|.
170 PrintToPdfTask(printing::Metafile* metafile, const FilePath& path) 162 PrintToPdfTask(printing::Metafile* metafile, const FilePath& path)
171 : metafile_(metafile), path_(path) { 163 : metafile_(metafile), path_(path) {
172 DCHECK(metafile); 164 DCHECK(metafile);
173 } 165 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 base::Unretained(this))); 225 base::Unretained(this)));
234 web_ui_->RegisterMessageCallback("signIn", 226 web_ui_->RegisterMessageCallback("signIn",
235 base::Bind(&PrintPreviewHandler::HandleSignin, 227 base::Bind(&PrintPreviewHandler::HandleSignin,
236 base::Unretained(this))); 228 base::Unretained(this)));
237 web_ui_->RegisterMessageCallback("manageCloudPrinters", 229 web_ui_->RegisterMessageCallback("manageCloudPrinters",
238 base::Bind(&PrintPreviewHandler::HandleManageCloudPrint, 230 base::Bind(&PrintPreviewHandler::HandleManageCloudPrint,
239 base::Unretained(this))); 231 base::Unretained(this)));
240 web_ui_->RegisterMessageCallback("manageLocalPrinters", 232 web_ui_->RegisterMessageCallback("manageLocalPrinters",
241 base::Bind(&PrintPreviewHandler::HandleManagePrinters, 233 base::Bind(&PrintPreviewHandler::HandleManagePrinters,
242 base::Unretained(this))); 234 base::Unretained(this)));
243 web_ui_->RegisterMessageCallback("reloadCrashedInitiatorTab",
244 base::Bind(&PrintPreviewHandler::HandleReloadCrashedInitiatorTab,
245 base::Unretained(this)));
246 web_ui_->RegisterMessageCallback("closePrintPreviewTab",
247 base::Bind(&PrintPreviewHandler::HandleClosePreviewTab,
248 base::Unretained(this)));
249 web_ui_->RegisterMessageCallback("hidePreview", 235 web_ui_->RegisterMessageCallback("hidePreview",
250 base::Bind(&PrintPreviewHandler::HandleHidePreview, 236 base::Bind(&PrintPreviewHandler::HandleHidePreview,
251 base::Unretained(this))); 237 base::Unretained(this)));
252 web_ui_->RegisterMessageCallback("cancelPendingPrintRequest", 238 web_ui_->RegisterMessageCallback("cancelPendingPrintRequest",
253 base::Bind(&PrintPreviewHandler::HandleCancelPendingPrintRequest, 239 base::Bind(&PrintPreviewHandler::HandleCancelPendingPrintRequest,
254 base::Unretained(this))); 240 base::Unretained(this)));
255 web_ui_->RegisterMessageCallback("saveLastPrinter", 241 web_ui_->RegisterMessageCallback("saveLastPrinter",
256 base::Bind(&PrintPreviewHandler::HandleSaveLastPrinter, 242 base::Bind(&PrintPreviewHandler::HandleSaveLastPrinter,
257 base::Unretained(this))); 243 base::Unretained(this)));
258 web_ui_->RegisterMessageCallback("getInitiatorTabTitle", 244 web_ui_->RegisterMessageCallback("getInitiatorTabTitle",
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 // thread. 291 // thread.
306 settings->SetString(printing::kPreviewUIAddr, 292 settings->SetString(printing::kPreviewUIAddr,
307 print_preview_ui->GetPrintPreviewUIAddress()); 293 print_preview_ui->GetPrintPreviewUIAddress());
308 294
309 // Increment request count. 295 // Increment request count.
310 ++regenerate_preview_request_count_; 296 ++regenerate_preview_request_count_;
311 297
312 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 298 TabContentsWrapper* initiator_tab = GetInitiatorTab();
313 if (!initiator_tab) { 299 if (!initiator_tab) {
314 ReportUserActionHistogram(INITIATOR_TAB_CLOSED); 300 ReportUserActionHistogram(INITIATOR_TAB_CLOSED);
315 print_preview_ui->OnInitiatorTabClosed(); 301 print_preview_ui->ClosePrintPreviewTab();
316 return; 302 return;
317 } 303 }
318 304
319 // Retrieve the page title and url and send it to the renderer process if 305 // Retrieve the page title and url and send it to the renderer process if
320 // headers and footers are to be displayed. 306 // headers and footers are to be displayed.
321 bool display_header_footer = false; 307 bool display_header_footer = false;
322 if (!settings->GetBoolean(printing::kSettingHeaderFooterEnabled, 308 if (!settings->GetBoolean(printing::kSettingHeaderFooterEnabled,
323 &display_header_footer)) { 309 &display_header_footer)) {
324 NOTREACHED(); 310 NOTREACHED();
325 } 311 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } else if (is_cloud_dialog) { 386 } else if (is_cloud_dialog) {
401 HandlePrintWithCloudPrint(); 387 HandlePrintWithCloudPrint();
402 } else { 388 } else {
403 ReportPrintSettingsStats(*settings); 389 ReportPrintSettingsStats(*settings);
404 ReportUserActionHistogram(PRINT_TO_PRINTER); 390 ReportUserActionHistogram(PRINT_TO_PRINTER);
405 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", 391 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter",
406 GetPageCountFromSettingsDictionary(*settings)); 392 GetPageCountFromSettingsDictionary(*settings));
407 393
408 // This tries to activate the initiator tab as well, so do not clear the 394 // This tries to activate the initiator tab as well, so do not clear the
409 // association with the initiator tab yet. 395 // association with the initiator tab yet.
410 HidePreviewTab(); 396 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
397 print_preview_ui->HidePreviewTab();
411 398
412 // Do this so the initiator tab can open a new print preview tab. 399 // Do this so the initiator tab can open a new print preview tab.
413 ClearInitiatorTabDetails(); 400 ClearInitiatorTabDetails();
414 401
415 // The PDF being printed contains only the pages that the user selected, 402 // The PDF being printed contains only the pages that the user selected,
416 // so ignore the page range and print all pages. 403 // so ignore the page range and print all pages.
417 settings->Remove(printing::kSettingPageRange, NULL); 404 settings->Remove(printing::kSettingPageRange, NULL);
418 RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host(); 405 RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host();
419 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); 406 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings));
420 } 407 }
408 if (initiator_tab)
409 initiator_tab->print_view_manager()->PrintPreviewDone();
421 } 410 }
422 411
423 void PrintPreviewHandler::HandlePrintToPdf( 412 void PrintPreviewHandler::HandlePrintToPdf(
424 const base::DictionaryValue& settings) { 413 const base::DictionaryValue& settings) {
425 if (print_to_pdf_path_.get()) { 414 if (print_to_pdf_path_.get()) {
426 // User has already selected a path, no need to show the dialog again. 415 // User has already selected a path, no need to show the dialog again.
427 PostPrintToPdfTask(); 416 PostPrintToPdfTask();
428 } else if (!select_file_dialog_.get() || !select_file_dialog_->IsRunning( 417 } else if (!select_file_dialog_.get() || !select_file_dialog_->IsRunning(
429 platform_util::GetTopLevel(preview_tab()->GetNativeView()))) { 418 platform_util::GetTopLevel(preview_tab()->GetNativeView()))) {
430 ReportUserActionHistogram(PRINT_TO_PDF); 419 ReportUserActionHistogram(PRINT_TO_PDF);
(...skipping 13 matching lines...) Expand all
444 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); 433 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_');
445 FilePath default_filename(print_job_title); 434 FilePath default_filename(print_job_title);
446 default_filename = 435 default_filename =
447 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); 436 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf"));
448 437
449 SelectFile(default_filename); 438 SelectFile(default_filename);
450 } 439 }
451 } 440 }
452 441
453 void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) { 442 void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) {
454 HidePreviewTab(); 443 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
444 print_preview_ui->HidePreviewTab();
455 } 445 }
456 446
457 void PrintPreviewHandler::HandleCancelPendingPrintRequest( 447 void PrintPreviewHandler::HandleCancelPendingPrintRequest(
458 const ListValue* /*args*/) { 448 const ListValue* /*args*/) {
459 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 449 TabContentsWrapper* initiator_tab = GetInitiatorTab();
460 if (initiator_tab) { 450 if (initiator_tab) {
461 ClearInitiatorTabDetails(); 451 ClearInitiatorTabDetails();
462 } else { 452 } else {
463 // Initiator tab does not exists. Get the wrapper contents of current tab. 453 // Initiator tab does not exists. Get the wrapper contents of current tab.
464 Browser* browser = BrowserList::GetLastActive(); 454 Browser* browser = BrowserList::GetLastActive();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 // Cancel the pending preview request if exists. 545 // Cancel the pending preview request if exists.
556 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 546 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
557 print_preview_ui->OnCancelPendingPreviewRequest(); 547 print_preview_ui->OnCancelPendingPreviewRequest();
558 } 548 }
559 549
560 void PrintPreviewHandler::HandleManagePrinters(const ListValue* /*args*/) { 550 void PrintPreviewHandler::HandleManagePrinters(const ListValue* /*args*/) {
561 ++manage_printers_dialog_request_count_; 551 ++manage_printers_dialog_request_count_;
562 printing::PrinterManagerDialog::ShowPrinterManagerDialog(); 552 printing::PrinterManagerDialog::ShowPrinterManagerDialog();
563 } 553 }
564 554
565 void PrintPreviewHandler::HandleReloadCrashedInitiatorTab(
566 const ListValue* /*args*/) {
567 ReportStats();
568 ReportUserActionHistogram(INITIATOR_TAB_CRASHED);
569
570 TabContentsWrapper* initiator_tab = GetInitiatorTab();
571 if (!initiator_tab)
572 return;
573
574 TabContents* contents = initiator_tab->tab_contents();
575 contents->OpenURL(contents->GetURL(), GURL(), CURRENT_TAB,
576 content::PAGE_TRANSITION_RELOAD);
577 ActivateInitiatorTabAndClosePreviewTab();
578 }
579
580 void PrintPreviewHandler::HandleClosePreviewTab(const ListValue* /*args*/) {
581 ReportStats();
582 ReportUserActionHistogram(CANCEL);
583
584 // Record the number of times the user requests to regenerate preview data
585 // before cancelling.
586 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforeCancel",
587 regenerate_preview_request_count_);
588
589 ActivateInitiatorTabAndClosePreviewTab();
590 }
591
592 void PrintPreviewHandler::ReportStats() { 555 void PrintPreviewHandler::ReportStats() {
593 UMA_HISTOGRAM_COUNTS("PrintPreview.ManagePrinters", 556 UMA_HISTOGRAM_COUNTS("PrintPreview.ManagePrinters",
594 manage_printers_dialog_request_count_); 557 manage_printers_dialog_request_count_);
595 } 558 }
596 559
597 void PrintPreviewHandler::HandleGetInitiatorTabTitle( 560 void PrintPreviewHandler::HandleGetInitiatorTabTitle(
598 const ListValue* /*args*/) { 561 const ListValue* /*args*/) {
599 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 562 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
600 base::StringValue tab_title(print_preview_ui->initiator_tab_title()); 563 base::StringValue tab_title(print_preview_ui->initiator_tab_title());
601 web_ui_->CallJavascriptFunction("setInitiatorTabTitle", tab_title); 564 web_ui_->CallJavascriptFunction("setInitiatorTabTitle", tab_title);
602 } 565 }
603 566
604 void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() { 567 void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() {
605 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 568 TabContentsWrapper* initiator_tab = GetInitiatorTab();
606 if (initiator_tab) { 569 if (initiator_tab) {
607 static_cast<RenderViewHostDelegate*>( 570 static_cast<RenderViewHostDelegate*>(
608 initiator_tab->tab_contents())->Activate(); 571 initiator_tab->tab_contents())->Activate();
609 } 572 }
610 ClosePrintPreviewTab(); 573 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
574 print_preview_ui->ClosePrintPreviewTab();
611 } 575 }
612 576
613 void PrintPreviewHandler::SendPrinterCapabilities( 577 void PrintPreviewHandler::SendPrinterCapabilities(
614 const DictionaryValue& settings_info) { 578 const DictionaryValue& settings_info) {
615 VLOG(1) << "Get printer capabilities finished"; 579 VLOG(1) << "Get printer capabilities finished";
616 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities", 580 web_ui_->CallJavascriptFunction("updateWithPrinterCapabilities",
617 settings_info); 581 settings_info);
618 } 582 }
619 583
620 void PrintPreviewHandler::SendDefaultPrinter( 584 void PrintPreviewHandler::SendDefaultPrinter(
621 const StringValue& default_printer, 585 const StringValue& default_printer,
622 const StringValue& cloud_print_data) { 586 const StringValue& cloud_print_data) {
623 web_ui_->CallJavascriptFunction("setDefaultPrinter", 587 web_ui_->CallJavascriptFunction("setDefaultPrinter",
624 default_printer, 588 default_printer,
625 cloud_print_data); 589 cloud_print_data);
626 } 590 }
627 591
628 void PrintPreviewHandler::SetupPrinterList(const ListValue& printers) { 592 void PrintPreviewHandler::SetupPrinterList(const ListValue& printers) {
629 SendCloudPrintEnabled(); 593 SendCloudPrintEnabled();
630 web_ui_->CallJavascriptFunction("setPrinters", printers); 594 web_ui_->CallJavascriptFunction("setPrinters", printers);
631 } 595 }
632 596
633 void PrintPreviewHandler::SendCloudPrintEnabled() { 597 void PrintPreviewHandler::SendCloudPrintEnabled() {
634 #if defined(OS_MACOSX)
635 bool enable_cloud_print_integration =
636 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableCloudPrint);
637 #else
638 bool enable_cloud_print_integration = true;
639 #endif
640 GURL gcp_url(CloudPrintURL(BrowserList::GetLastActive()->profile()). 598 GURL gcp_url(CloudPrintURL(BrowserList::GetLastActive()->profile()).
641 GetCloudPrintServiceURL()); 599 GetCloudPrintServiceURL());
642 base::FundamentalValue enable(enable_cloud_print_integration);
643 base::StringValue gcp_url_value(gcp_url.spec()); 600 base::StringValue gcp_url_value(gcp_url.spec());
644 web_ui_->CallJavascriptFunction("setUseCloudPrint", enable, gcp_url_value); 601 web_ui_->CallJavascriptFunction("setUseCloudPrint", gcp_url_value);
645 } 602 }
646 603
647 void PrintPreviewHandler::SendCloudPrintJob(const DictionaryValue& settings, 604 void PrintPreviewHandler::SendCloudPrintJob(const DictionaryValue& settings,
648 std::string print_ticket) { 605 std::string print_ticket) {
649 scoped_refptr<RefCountedBytes> data; 606 scoped_refptr<RefCountedBytes> data;
650 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 607 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
651 print_preview_ui->GetPrintPreviewDataForIndex( 608 print_preview_ui->GetPrintPreviewDataForIndex(
652 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data); 609 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data);
653 CHECK(data.get()); 610 CHECK(data.get());
654 DCHECK_GT(data->size(), 0U); 611 DCHECK_GT(data->size(), 0U);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 } 660 }
704 661
705 TabContentsWrapper* PrintPreviewHandler::GetInitiatorTab() const { 662 TabContentsWrapper* PrintPreviewHandler::GetInitiatorTab() const {
706 printing::PrintPreviewTabController* tab_controller = 663 printing::PrintPreviewTabController* tab_controller =
707 printing::PrintPreviewTabController::GetInstance(); 664 printing::PrintPreviewTabController::GetInstance();
708 if (!tab_controller) 665 if (!tab_controller)
709 return NULL; 666 return NULL;
710 return tab_controller->GetInitiatorTab(preview_tab_wrapper()); 667 return tab_controller->GetInitiatorTab(preview_tab_wrapper());
711 } 668 }
712 669
713 void PrintPreviewHandler::ClosePrintPreviewTab() {
714 TabContentsWrapper* tab =
715 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab());
716 if (!tab)
717 return;
718 Browser* preview_tab_browser = BrowserList::FindBrowserWithID(
719 tab->restore_tab_helper()->window_id().id());
720 if (!preview_tab_browser)
721 return;
722 TabStripModel* tabstrip = preview_tab_browser->tabstrip_model();
723 int index = tabstrip->GetIndexOfTabContents(tab);
724 if (index == TabStripModel::kNoTab)
725 return;
726
727 // Keep print preview tab out of the recently closed tab list, because
728 // re-opening that page will just display a non-functional print preview page.
729 tabstrip->CloseTabContentsAt(index, TabStripModel::CLOSE_NONE);
730 }
731
732 void PrintPreviewHandler::OnPrintDialogShown() { 670 void PrintPreviewHandler::OnPrintDialogShown() {
733 ActivateInitiatorTabAndClosePreviewTab(); 671 ActivateInitiatorTabAndClosePreviewTab();
734 } 672 }
735 673
736 void PrintPreviewHandler::SelectFile(const FilePath& default_filename) { 674 void PrintPreviewHandler::SelectFile(const FilePath& default_filename) {
737 SelectFileDialog::FileTypeInfo file_type_info; 675 SelectFileDialog::FileTypeInfo file_type_info;
738 file_type_info.extensions.resize(1); 676 file_type_info.extensions.resize(1);
739 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pdf")); 677 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pdf"));
740 678
741 // Initializing last_saved_path_ if it is not already initialized. 679 // Initializing last_saved_path_ if it is not already initialized.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); 748 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
811 print_to_pdf_path_.reset(); 749 print_to_pdf_path_.reset();
812 ActivateInitiatorTabAndClosePreviewTab(); 750 ActivateInitiatorTabAndClosePreviewTab();
813 } 751 }
814 752
815 void PrintPreviewHandler::FileSelectionCanceled(void* params) { 753 void PrintPreviewHandler::FileSelectionCanceled(void* params) {
816 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 754 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
817 print_preview_ui->OnFileSelectionCancelled(); 755 print_preview_ui->OnFileSelectionCancelled();
818 } 756 }
819 757
820 void PrintPreviewHandler::HidePreviewTab() {
821 if (GetBackgroundPrintingManager()->HasPrintPreviewTab(preview_tab_wrapper()))
822 return;
823 GetBackgroundPrintingManager()->OwnPrintPreviewTab(preview_tab_wrapper());
824 }
825
826 void PrintPreviewHandler::ClearInitiatorTabDetails() { 758 void PrintPreviewHandler::ClearInitiatorTabDetails() {
827 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 759 TabContentsWrapper* initiator_tab = GetInitiatorTab();
828 if (!initiator_tab) 760 if (!initiator_tab)
829 return; 761 return;
830 762
831 // We no longer require the initiator tab details. Remove those details 763 // We no longer require the initiator tab details. Remove those details
832 // associated with the preview tab to allow the initiator tab to create 764 // associated with the preview tab to allow the initiator tab to create
833 // another preview tab. 765 // another preview tab.
834 printing::PrintPreviewTabController* tab_controller = 766 printing::PrintPreviewTabController* tab_controller =
835 printing::PrintPreviewTabController::GetInstance(); 767 printing::PrintPreviewTabController::GetInstance();
836 if (tab_controller) 768 if (tab_controller)
837 tab_controller->EraseInitiatorTabInfo(preview_tab_wrapper()); 769 tab_controller->EraseInitiatorTabInfo(preview_tab_wrapper());
838 } 770 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698