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

Side by Side Diff: chrome/browser/printing/print_dialog_cloud.cc

Issue 10214001: WebDialogs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/printing/print_dialog_cloud.h" 5 #include "chrome/browser/printing/print_dialog_cloud.h"
6 #include "chrome/browser/printing/print_dialog_cloud_internal.h" 6 #include "chrome/browser/printing/print_dialog_cloud_internal.h"
7 7
8 #include "base/base64.h" 8 #include "base/base64.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #if defined(OS_WIN) 43 #if defined(OS_WIN)
44 #include "ui/base/win/foreground_helper.h" 44 #include "ui/base/win/foreground_helper.h"
45 #endif 45 #endif
46 46
47 #include "webkit/glue/webpreferences.h" 47 #include "webkit/glue/webpreferences.h"
48 48
49 #include "grit/generated_resources.h" 49 #include "grit/generated_resources.h"
50 50
51 #if defined(USE_AURA) 51 #if defined(USE_AURA)
52 #include "chrome/browser/ui/browser_window.h" 52 #include "chrome/browser/ui/browser_window.h"
53 #include "chrome/browser/ui/views/html_dialog_view.h" 53 #include "chrome/browser/ui/views/web_dialog_view.h"
54 #include "ui/aura/root_window.h" 54 #include "ui/aura/root_window.h"
55 #include "ui/views/widget/widget.h" 55 #include "ui/views/widget/widget.h"
56 #endif 56 #endif
57 57
58 // This module implements the UI support in Chrome for cloud printing. 58 // This module implements the UI support in Chrome for cloud printing.
59 // This means hosting a dialog containing HTML/JavaScript and using 59 // This means hosting a dialog containing HTML/JavaScript and using
60 // the published cloud print user interface integration APIs to get 60 // the published cloud print user interface integration APIs to get
61 // page setup settings from the dialog contents and provide the 61 // page setup settings from the dialog contents and provide the
62 // generated print data to the dialog contents for uploading to the 62 // generated print data to the dialog contents for uploading to the
63 // cloud print service. 63 // cloud print service.
64 64
65 // Currently, the flow between these classes is as follows: 65 // Currently, the flow between these classes is as follows:
66 66
67 // PrintDialogCloud::CreatePrintDialogForFile is called from 67 // PrintDialogCloud::CreatePrintDialogForFile is called from
68 // resource_message_filter_gtk.cc once the renderer has informed the 68 // resource_message_filter_gtk.cc once the renderer has informed the
69 // renderer host that print data generation into the renderer host provided 69 // renderer host that print data generation into the renderer host provided
70 // temp file has been completed. That call is on the FILE thread. 70 // temp file has been completed. That call is on the FILE thread.
71 // That, in turn, hops over to the UI thread to create an instance of 71 // That, in turn, hops over to the UI thread to create an instance of
72 // PrintDialogCloud. 72 // PrintDialogCloud.
73 73
74 // The constructor for PrintDialogCloud creates a 74 // The constructor for PrintDialogCloud creates a
75 // CloudPrintHtmlDialogDelegate and asks the current active browser to 75 // CloudPrintWebDialogDelegate and asks the current active browser to
76 // show an HTML dialog using that class as the delegate. That class 76 // show an HTML dialog using that class as the delegate. That class
77 // hands in the kChromeUICloudPrintResourcesURL as the URL to visit. That is 77 // hands in the kChromeUICloudPrintResourcesURL as the URL to visit. That is
78 // recognized by the GetWebUIFactoryFunction as a signal to create an 78 // recognized by the GetWebUIFactoryFunction as a signal to create an
79 // ExternalHtmlDialogUI. 79 // ExternalHtmlDialogUI.
80 80
81 // CloudPrintHtmlDialogDelegate also temporarily owns a 81 // CloudPrintWebDialogDelegate also temporarily owns a
82 // CloudPrintFlowHandler, a class which is responsible for the actual 82 // CloudPrintFlowHandler, a class which is responsible for the actual
83 // interactions with the dialog contents, including handing in the 83 // interactions with the dialog contents, including handing in the
84 // print data and getting any page setup parameters that the dialog 84 // print data and getting any page setup parameters that the dialog
85 // contents provides. As part of bringing up the dialog, 85 // contents provides. As part of bringing up the dialog,
86 // HtmlDialogUI::RenderViewCreated is called (an override of 86 // HtmlDialogUI::RenderViewCreated is called (an override of
87 // WebUI::RenderViewCreated). That routine, in turn, calls the 87 // WebUI::RenderViewCreated). That routine, in turn, calls the
88 // delegate's GetWebUIMessageHandlers routine, at which point the 88 // delegate's GetWebUIMessageHandlers routine, at which point the
89 // ownership of the CloudPrintFlowHandler is handed over. A pointer 89 // ownership of the CloudPrintFlowHandler is handed over. A pointer
90 // to the flow handler is kept to facilitate communication back and 90 // to the flow handler is kept to facilitate communication back and
91 // forth between the two classes. 91 // forth between the two classes.
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 callback_(callback) { 280 callback_(callback) {
281 } 281 }
282 282
283 CloudPrintFlowHandler::~CloudPrintFlowHandler() { 283 CloudPrintFlowHandler::~CloudPrintFlowHandler() {
284 // This will also cancel any task in flight. 284 // This will also cancel any task in flight.
285 CancelAnyRunningTask(); 285 CancelAnyRunningTask();
286 } 286 }
287 287
288 288
289 void CloudPrintFlowHandler::SetDialogDelegate( 289 void CloudPrintFlowHandler::SetDialogDelegate(
290 CloudPrintHtmlDialogDelegate* delegate) { 290 CloudPrintWebDialogDelegate* delegate) {
291 // Even if setting a new WebUI, it means any previous task needs 291 // Even if setting a new WebUI, it means any previous task needs
292 // to be canceled, its now invalid. 292 // to be canceled, its now invalid.
293 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 293 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
294 CancelAnyRunningTask(); 294 CancelAnyRunningTask();
295 dialog_delegate_ = delegate; 295 dialog_delegate_ = delegate;
296 } 296 }
297 297
298 // Cancels any print data sender we have in flight and removes our 298 // Cancels any print data sender we have in flight and removes our
299 // reference to it, so when the task that is calling it finishes and 299 // reference to it, so when the task that is calling it finishes and
300 // removes its reference, it goes away. 300 // removes its reference, it goes away.
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 web_ui()->GetWebContents()->GetView()) { 480 web_ui()->GetWebContents()->GetView()) {
481 gfx::Size size = web_ui()->GetWebContents()->GetView()->GetContainerSize(); 481 gfx::Size size = web_ui()->GetWebContents()->GetView()->GetContainerSize();
482 Profile* profile = Profile::FromWebUI(web_ui()); 482 Profile* profile = Profile::FromWebUI(web_ui());
483 profile->GetPrefs()->SetInteger(prefs::kCloudPrintDialogWidth, 483 profile->GetPrefs()->SetInteger(prefs::kCloudPrintDialogWidth,
484 size.width()); 484 size.width());
485 profile->GetPrefs()->SetInteger(prefs::kCloudPrintDialogHeight, 485 profile->GetPrefs()->SetInteger(prefs::kCloudPrintDialogHeight,
486 size.height()); 486 size.height());
487 } 487 }
488 } 488 }
489 489
490 CloudPrintHtmlDialogDelegate::CloudPrintHtmlDialogDelegate( 490 CloudPrintWebDialogDelegate::CloudPrintWebDialogDelegate(
491 const FilePath& path_to_file, 491 const FilePath& path_to_file,
492 int width, int height, 492 int width, int height,
493 const std::string& json_arguments, 493 const std::string& json_arguments,
494 const string16& print_job_title, 494 const string16& print_job_title,
495 const string16& print_ticket, 495 const string16& print_ticket,
496 const std::string& file_type, 496 const std::string& file_type,
497 bool modal, 497 bool modal,
498 bool delete_on_close, 498 bool delete_on_close,
499 bool close_after_signin, 499 bool close_after_signin,
500 const base::Closure& callback) 500 const base::Closure& callback)
501 : delete_on_close_(delete_on_close), 501 : delete_on_close_(delete_on_close),
502 flow_handler_(new CloudPrintFlowHandler(path_to_file, 502 flow_handler_(new CloudPrintFlowHandler(path_to_file,
503 print_job_title, 503 print_job_title,
504 print_ticket, 504 print_ticket,
505 file_type, 505 file_type,
506 close_after_signin, 506 close_after_signin,
507 callback)), 507 callback)),
508 modal_(modal), 508 modal_(modal),
509 owns_flow_handler_(true), 509 owns_flow_handler_(true),
510 path_to_file_(path_to_file) { 510 path_to_file_(path_to_file) {
511 Init(width, height, json_arguments); 511 Init(width, height, json_arguments);
512 } 512 }
513 513
514 // For unit testing. 514 // For unit testing.
515 CloudPrintHtmlDialogDelegate::CloudPrintHtmlDialogDelegate( 515 CloudPrintWebDialogDelegate::CloudPrintWebDialogDelegate(
516 CloudPrintFlowHandler* flow_handler, 516 CloudPrintFlowHandler* flow_handler,
517 int width, int height, 517 int width, int height,
518 const std::string& json_arguments, 518 const std::string& json_arguments,
519 bool modal, 519 bool modal,
520 bool delete_on_close) 520 bool delete_on_close)
521 : delete_on_close_(delete_on_close), 521 : delete_on_close_(delete_on_close),
522 flow_handler_(flow_handler), 522 flow_handler_(flow_handler),
523 modal_(modal), 523 modal_(modal),
524 owns_flow_handler_(true) { 524 owns_flow_handler_(true) {
525 Init(width, height, json_arguments); 525 Init(width, height, json_arguments);
526 } 526 }
527 527
528 void CloudPrintHtmlDialogDelegate::Init(int width, int height, 528 void CloudPrintWebDialogDelegate::Init(int width, int height,
529 const std::string& json_arguments) { 529 const std::string& json_arguments) {
530 // This information is needed to show the dialog HTML content. 530 // This information is needed to show the dialog HTML content.
531 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 531 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
532 params_.url = GURL(chrome::kChromeUICloudPrintResourcesURL); 532 params_.url = GURL(chrome::kChromeUICloudPrintResourcesURL);
533 params_.height = height; 533 params_.height = height;
534 params_.width = width; 534 params_.width = width;
535 params_.json_input = json_arguments; 535 params_.json_input = json_arguments;
536 536
537 flow_handler_->SetDialogDelegate(this); 537 flow_handler_->SetDialogDelegate(this);
538 // If we're not modal we can show the dialog with no browser. 538 // If we're not modal we can show the dialog with no browser.
539 // We need this to keep Chrome alive while our dialog is up. 539 // We need this to keep Chrome alive while our dialog is up.
540 if (!modal_) 540 if (!modal_)
541 BrowserList::StartKeepAlive(); 541 BrowserList::StartKeepAlive();
542 } 542 }
543 543
544 CloudPrintHtmlDialogDelegate::~CloudPrintHtmlDialogDelegate() { 544 CloudPrintWebDialogDelegate::~CloudPrintWebDialogDelegate() {
545 // If the flow_handler_ is about to outlive us because we don't own 545 // If the flow_handler_ is about to outlive us because we don't own
546 // it anymore, we need to have it remove its reference to us. 546 // it anymore, we need to have it remove its reference to us.
547 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 547 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
548 flow_handler_->SetDialogDelegate(NULL); 548 flow_handler_->SetDialogDelegate(NULL);
549 if (owns_flow_handler_) { 549 if (owns_flow_handler_) {
550 delete flow_handler_; 550 delete flow_handler_;
551 } 551 }
552 } 552 }
553 553
554 ui::ModalType CloudPrintHtmlDialogDelegate::GetDialogModalType() const { 554 ui::ModalType CloudPrintWebDialogDelegate::GetDialogModalType() const {
555 return modal_ ? ui::MODAL_TYPE_WINDOW : ui::MODAL_TYPE_NONE; 555 return modal_ ? ui::MODAL_TYPE_WINDOW : ui::MODAL_TYPE_NONE;
556 } 556 }
557 557
558 string16 CloudPrintHtmlDialogDelegate::GetDialogTitle() const { 558 string16 CloudPrintWebDialogDelegate::GetDialogTitle() const {
559 return string16(); 559 return string16();
560 } 560 }
561 561
562 GURL CloudPrintHtmlDialogDelegate::GetDialogContentURL() const { 562 GURL CloudPrintWebDialogDelegate::GetDialogContentURL() const {
563 return params_.url; 563 return params_.url;
564 } 564 }
565 565
566 void CloudPrintHtmlDialogDelegate::GetWebUIMessageHandlers( 566 void CloudPrintWebDialogDelegate::GetWebUIMessageHandlers(
567 std::vector<WebUIMessageHandler*>* handlers) const { 567 std::vector<WebUIMessageHandler*>* handlers) const {
568 handlers->push_back(flow_handler_); 568 handlers->push_back(flow_handler_);
569 // We don't own flow_handler_ anymore, but it sticks around until at 569 // We don't own flow_handler_ anymore, but it sticks around until at
570 // least right after OnDialogClosed() is called (and this object is 570 // least right after OnDialogClosed() is called (and this object is
571 // destroyed). 571 // destroyed).
572 owns_flow_handler_ = false; 572 owns_flow_handler_ = false;
573 } 573 }
574 574
575 void CloudPrintHtmlDialogDelegate::GetDialogSize(gfx::Size* size) const { 575 void CloudPrintWebDialogDelegate::GetDialogSize(gfx::Size* size) const {
576 size->set_width(params_.width); 576 size->set_width(params_.width);
577 size->set_height(params_.height); 577 size->set_height(params_.height);
578 } 578 }
579 579
580 std::string CloudPrintHtmlDialogDelegate::GetDialogArgs() const { 580 std::string CloudPrintWebDialogDelegate::GetDialogArgs() const {
581 return params_.json_input; 581 return params_.json_input;
582 } 582 }
583 583
584 void CloudPrintHtmlDialogDelegate::OnDialogClosed( 584 void CloudPrintWebDialogDelegate::OnDialogClosed(
585 const std::string& json_retval) { 585 const std::string& json_retval) {
586 // Get the final dialog size and store it. 586 // Get the final dialog size and store it.
587 flow_handler_->StoreDialogClientSize(); 587 flow_handler_->StoreDialogClientSize();
588 588
589 if (delete_on_close_) { 589 if (delete_on_close_) {
590 BrowserThread::PostTask( 590 BrowserThread::PostTask(
591 BrowserThread::FILE, FROM_HERE, 591 BrowserThread::FILE, FROM_HERE,
592 base::Bind(&internal_cloud_print_helpers::Delete, path_to_file_)); 592 base::Bind(&internal_cloud_print_helpers::Delete, path_to_file_));
593 } 593 }
594 594
595 // If we're modal we can show the dialog with no browser. 595 // If we're modal we can show the dialog with no browser.
596 // End the keep-alive so that Chrome can exit. 596 // End the keep-alive so that Chrome can exit.
597 if (!modal_) 597 if (!modal_)
598 BrowserList::EndKeepAlive(); 598 BrowserList::EndKeepAlive();
599 delete this; 599 delete this;
600 } 600 }
601 601
602 void CloudPrintHtmlDialogDelegate::OnCloseContents(WebContents* source, 602 void CloudPrintWebDialogDelegate::OnCloseContents(WebContents* source,
603 bool* out_close_dialog) { 603 bool* out_close_dialog) {
604 if (out_close_dialog) 604 if (out_close_dialog)
605 *out_close_dialog = true; 605 *out_close_dialog = true;
606 } 606 }
607 607
608 bool CloudPrintHtmlDialogDelegate::ShouldShowDialogTitle() const { 608 bool CloudPrintWebDialogDelegate::ShouldShowDialogTitle() const {
609 return false; 609 return false;
610 } 610 }
611 611
612 bool CloudPrintHtmlDialogDelegate::HandleContextMenu( 612 bool CloudPrintWebDialogDelegate::HandleContextMenu(
613 const content::ContextMenuParams& params) { 613 const content::ContextMenuParams& params) {
614 return true; 614 return true;
615 } 615 }
616 616
617 void CreatePrintDialogForBytesImpl(scoped_refptr<base::RefCountedBytes> data, 617 void CreatePrintDialogForBytesImpl(scoped_refptr<base::RefCountedBytes> data,
618 const string16& print_job_title, 618 const string16& print_job_title,
619 const string16& print_ticket, 619 const string16& print_ticket,
620 const std::string& file_type, 620 const std::string& file_type,
621 bool modal) { 621 bool modal) {
622 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 622 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 } 677 }
678 if (!pref_service->FindPreference(prefs::kCloudPrintDialogHeight)) { 678 if (!pref_service->FindPreference(prefs::kCloudPrintDialogHeight)) {
679 pref_service->RegisterIntegerPref(prefs::kCloudPrintDialogHeight, 679 pref_service->RegisterIntegerPref(prefs::kCloudPrintDialogHeight,
680 kDefaultHeight, 680 kDefaultHeight,
681 PrefService::UNSYNCABLE_PREF); 681 PrefService::UNSYNCABLE_PREF);
682 } 682 }
683 683
684 int width = pref_service->GetInteger(prefs::kCloudPrintDialogWidth); 684 int width = pref_service->GetInteger(prefs::kCloudPrintDialogWidth);
685 int height = pref_service->GetInteger(prefs::kCloudPrintDialogHeight); 685 int height = pref_service->GetInteger(prefs::kCloudPrintDialogHeight);
686 686
687 HtmlDialogUIDelegate* dialog_delegate = 687 WebDialogDelegate* dialog_delegate =
688 new internal_cloud_print_helpers::CloudPrintHtmlDialogDelegate( 688 new internal_cloud_print_helpers::CloudPrintWebDialogDelegate(
689 path_to_file, width, height, std::string(), job_title, print_ticket, 689 path_to_file, width, height, std::string(), job_title, print_ticket,
690 file_type, modal, delete_on_close, close_after_signin, 690 file_type, modal, delete_on_close, close_after_signin,
691 callback); 691 callback);
692 browser::ShowHtmlDialog(modal ? browser->window()->GetNativeHandle() : NULL, 692 browser::ShowWebDialog(modal ? browser->window()->GetNativeHandle() : NULL,
693 profile, 693 profile,
694 browser, 694 browser,
695 dialog_delegate, 695 dialog_delegate,
696 STYLE_GENERIC); 696 STYLE_GENERIC);
697 } 697 }
698 698
699 void CreateDialogSigninImpl(const base::Closure& callback) { 699 void CreateDialogSigninImpl(const base::Closure& callback) {
700 CreateDialogImpl(FilePath(), string16(), string16(), std::string(), 700 CreateDialogImpl(FilePath(), string16(), string16(), std::string(),
701 true, false, true, callback); 701 true, false, true, callback);
702 } 702 }
703 703
704 void CreateDialogFullImpl(const FilePath& path_to_file, 704 void CreateDialogFullImpl(const FilePath& path_to_file,
705 const string16& print_job_title, 705 const string16& print_job_title,
706 const string16& print_ticket, 706 const string16& print_ticket,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 file_type, 803 file_type,
804 false, 804 false,
805 delete_on_close); 805 delete_on_close);
806 return true; 806 return true;
807 } 807 }
808 } 808 }
809 return false; 809 return false;
810 } 810 }
811 811
812 } // end namespace 812 } // end namespace
OLDNEW
« no previous file with comments | « chrome/browser/printing/cloud_print/cloud_print_setup_flow.cc ('k') | chrome/browser/printing/print_dialog_cloud_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698