Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/l10n_util.h" | 8 #include "app/l10n_util.h" |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/command_line.h" | |
| 10 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 11 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 12 #include "base/values.h" | 13 #include "base/values.h" |
| 13 #include "chrome/browser/browser_list.h" | 14 #include "chrome/browser/browser_list.h" |
| 14 #include "chrome/browser/browser_thread.h" | 15 #include "chrome/browser/browser_thread.h" |
| 15 #include "chrome/browser/debugger/devtools_manager.h" | 16 #include "chrome/browser/debugger/devtools_manager.h" |
| 16 #include "chrome/browser/dom_ui/dom_ui.h" | 17 #include "chrome/browser/dom_ui/dom_ui.h" |
| 17 #include "chrome/browser/dom_ui/dom_ui_util.h" | 18 #include "chrome/browser/dom_ui/dom_ui_util.h" |
| 19 #if defined(TOOLKIT_GTK) | |
| 20 #include "chrome/browser/gtk/html_dialog_gtk.h" | |
| 21 #endif // defined(TOOLKIT_GTK) | |
| 18 #include "chrome/browser/prefs/pref_service.h" | 22 #include "chrome/browser/prefs/pref_service.h" |
| 19 #include "chrome/browser/printing/cloud_print/cloud_print_url.h" | 23 #include "chrome/browser/printing/cloud_print/cloud_print_url.h" |
| 20 #include "chrome/browser/profiles/profile.h" | 24 #include "chrome/browser/profiles/profile.h" |
| 25 #include "chrome/browser/profiles/profile_manager.h" | |
| 21 #include "chrome/browser/renderer_host/render_view_host.h" | 26 #include "chrome/browser/renderer_host/render_view_host.h" |
| 22 #include "chrome/browser/tab_contents/tab_contents.h" | 27 #include "chrome/browser/tab_contents/tab_contents.h" |
| 23 #include "chrome/browser/tab_contents/tab_contents_view.h" | 28 #include "chrome/browser/tab_contents/tab_contents_view.h" |
| 29 #if defined(TOOLKIT_VIEWS) | |
| 30 #include "chrome/browser/ui/views/browser_dialogs.h" | |
| 31 #endif // defined(TOOLKIT_VIEWS) | |
| 32 #include "chrome/common/chrome_switches.h" | |
| 24 #include "chrome/common/notification_observer.h" | 33 #include "chrome/common/notification_observer.h" |
| 25 #include "chrome/common/notification_registrar.h" | 34 #include "chrome/common/notification_registrar.h" |
| 26 #include "chrome/common/notification_source.h" | 35 #include "chrome/common/notification_source.h" |
| 27 #include "chrome/common/notification_type.h" | 36 #include "chrome/common/notification_type.h" |
| 28 #include "chrome/common/pref_names.h" | 37 #include "chrome/common/pref_names.h" |
| 29 #include "chrome/common/render_messages_params.h" | 38 #include "chrome/common/render_messages_params.h" |
| 30 #include "chrome/common/url_constants.h" | 39 #include "chrome/common/url_constants.h" |
| 31 #include "webkit/glue/webpreferences.h" | 40 #include "webkit/glue/webpreferences.h" |
| 32 | 41 |
| 33 #include "grit/generated_resources.h" | 42 #include "grit/generated_resources.h" |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 386 prefs::kCloudPrintDialogWidth, size.width()); | 395 prefs::kCloudPrintDialogWidth, size.width()); |
| 387 dom_ui_->GetProfile()->GetPrefs()->SetInteger( | 396 dom_ui_->GetProfile()->GetPrefs()->SetInteger( |
| 388 prefs::kCloudPrintDialogHeight, size.height()); | 397 prefs::kCloudPrintDialogHeight, size.height()); |
| 389 } | 398 } |
| 390 } | 399 } |
| 391 | 400 |
| 392 CloudPrintHtmlDialogDelegate::CloudPrintHtmlDialogDelegate( | 401 CloudPrintHtmlDialogDelegate::CloudPrintHtmlDialogDelegate( |
| 393 const FilePath& path_to_pdf, | 402 const FilePath& path_to_pdf, |
| 394 int width, int height, | 403 int width, int height, |
| 395 const std::string& json_arguments, | 404 const std::string& json_arguments, |
| 396 const string16& print_job_title) | 405 const string16& print_job_title, |
| 406 bool modal) | |
| 397 : flow_handler_(new CloudPrintFlowHandler(path_to_pdf, print_job_title)), | 407 : flow_handler_(new CloudPrintFlowHandler(path_to_pdf, print_job_title)), |
| 408 modal_(modal), | |
| 398 owns_flow_handler_(true) { | 409 owns_flow_handler_(true) { |
| 399 Init(width, height, json_arguments); | 410 Init(width, height, json_arguments); |
| 400 } | 411 } |
| 401 | 412 |
| 402 CloudPrintHtmlDialogDelegate::CloudPrintHtmlDialogDelegate( | 413 CloudPrintHtmlDialogDelegate::CloudPrintHtmlDialogDelegate( |
| 403 CloudPrintFlowHandler* flow_handler, | 414 CloudPrintFlowHandler* flow_handler, |
| 404 int width, int height, | 415 int width, int height, |
| 405 const std::string& json_arguments) | 416 const std::string& json_arguments, |
| 417 bool modal) | |
| 406 : flow_handler_(flow_handler), | 418 : flow_handler_(flow_handler), |
| 419 modal_(modal), | |
| 407 owns_flow_handler_(true) { | 420 owns_flow_handler_(true) { |
| 408 Init(width, height, json_arguments); | 421 Init(width, height, json_arguments); |
| 409 } | 422 } |
| 410 | 423 |
| 411 void CloudPrintHtmlDialogDelegate::Init( | 424 void CloudPrintHtmlDialogDelegate::Init( |
| 412 int width, int height, const std::string& json_arguments) { | 425 int width, int height, const std::string& json_arguments) { |
| 413 // This information is needed to show the dialog HTML content. | 426 // This information is needed to show the dialog HTML content. |
| 414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 427 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 415 std::string cloud_print_url(chrome::kCloudPrintResourcesURL); | 428 std::string cloud_print_url(chrome::kCloudPrintResourcesURL); |
| 416 params_.url = GURL(cloud_print_url); | 429 params_.url = GURL(cloud_print_url); |
| 417 params_.height = height; | 430 params_.height = height; |
| 418 params_.width = width; | 431 params_.width = width; |
| 419 params_.json_input = json_arguments; | 432 params_.json_input = json_arguments; |
| 420 | 433 |
| 421 flow_handler_->SetDialogDelegate(this); | 434 flow_handler_->SetDialogDelegate(this); |
| 435 // Keep the browser alive while we are showing the notification. | |
|
sanjeevr
2011/01/11 21:39:55
Nit: Change comment, this is not a notification. A
abodenha
2011/01/12 01:30:50
Done.
| |
| 436 BrowserList::StartKeepAlive(); | |
| 422 } | 437 } |
| 423 | 438 |
| 424 CloudPrintHtmlDialogDelegate::~CloudPrintHtmlDialogDelegate() { | 439 CloudPrintHtmlDialogDelegate::~CloudPrintHtmlDialogDelegate() { |
| 425 // If the flow_handler_ is about to outlive us because we don't own | 440 // If the flow_handler_ is about to outlive us because we don't own |
| 426 // it anymore, we need to have it remove it's reference to us. | 441 // it anymore, we need to have it remove it's reference to us. |
| 427 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 442 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 428 flow_handler_->SetDialogDelegate(NULL); | 443 flow_handler_->SetDialogDelegate(NULL); |
| 429 if (owns_flow_handler_) { | 444 if (owns_flow_handler_) { |
| 430 delete flow_handler_; | 445 delete flow_handler_; |
| 431 } | 446 } |
| 432 } | 447 } |
| 433 | 448 |
| 434 bool CloudPrintHtmlDialogDelegate::IsDialogModal() const { | 449 bool CloudPrintHtmlDialogDelegate::IsDialogModal() const { |
| 435 return true; | 450 return modal_; |
| 436 } | 451 } |
| 437 | 452 |
| 438 std::wstring CloudPrintHtmlDialogDelegate::GetDialogTitle() const { | 453 std::wstring CloudPrintHtmlDialogDelegate::GetDialogTitle() const { |
| 439 return std::wstring(); | 454 return std::wstring(); |
| 440 } | 455 } |
| 441 | 456 |
| 442 GURL CloudPrintHtmlDialogDelegate::GetDialogContentURL() const { | 457 GURL CloudPrintHtmlDialogDelegate::GetDialogContentURL() const { |
| 443 return params_.url; | 458 return params_.url; |
| 444 } | 459 } |
| 445 | 460 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 458 } | 473 } |
| 459 | 474 |
| 460 std::string CloudPrintHtmlDialogDelegate::GetDialogArgs() const { | 475 std::string CloudPrintHtmlDialogDelegate::GetDialogArgs() const { |
| 461 return params_.json_input; | 476 return params_.json_input; |
| 462 } | 477 } |
| 463 | 478 |
| 464 void CloudPrintHtmlDialogDelegate::OnDialogClosed( | 479 void CloudPrintHtmlDialogDelegate::OnDialogClosed( |
| 465 const std::string& json_retval) { | 480 const std::string& json_retval) { |
| 466 // Get the final dialog size and store it. | 481 // Get the final dialog size and store it. |
| 467 flow_handler_->StoreDialogClientSize(); | 482 flow_handler_->StoreDialogClientSize(); |
| 483 // Keep the browser alive while we are showing the notification. | |
|
sanjeevr
2011/01/11 21:39:55
Same here.
abodenha
2011/01/12 01:30:50
Done.
| |
| 484 BrowserList::EndKeepAlive(); | |
| 468 delete this; | 485 delete this; |
| 469 } | 486 } |
| 470 | 487 |
| 471 void CloudPrintHtmlDialogDelegate::OnCloseContents(TabContents* source, | 488 void CloudPrintHtmlDialogDelegate::OnCloseContents(TabContents* source, |
| 472 bool* out_close_dialog) { | 489 bool* out_close_dialog) { |
| 473 if (out_close_dialog) | 490 if (out_close_dialog) |
| 474 *out_close_dialog = true; | 491 *out_close_dialog = true; |
| 475 } | 492 } |
| 476 | 493 |
| 477 bool CloudPrintHtmlDialogDelegate::ShouldShowDialogTitle() const { | 494 bool CloudPrintHtmlDialogDelegate::ShouldShowDialogTitle() const { |
| 478 return false; | 495 return false; |
| 479 } | 496 } |
| 480 | 497 |
| 481 } // end of namespace internal_cloud_print_helpers | 498 } // end of namespace internal_cloud_print_helpers |
| 482 | 499 |
| 483 // static, called on the IO thread. This is the main entry point into | 500 // static, called on the IO thread. This is the main entry point into |
| 484 // creating the dialog. | 501 // creating the dialog. |
| 485 | 502 |
| 486 // TODO(scottbyer): The signature here will need to change as the | 503 // TODO(scottbyer): The signature here will need to change as the |
| 487 // workflow through the printing code changes to allow for dynamically | 504 // workflow through the printing code changes to allow for dynamically |
| 488 // changing page setup parameters while the dialog is active. | 505 // changing page setup parameters while the dialog is active. |
| 489 void PrintDialogCloud::CreatePrintDialogForPdf(const FilePath& path_to_pdf) { | 506 void PrintDialogCloud::CreatePrintDialogForPdf(const FilePath& path_to_pdf) { |
| 490 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 507 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO) || |
| 508 BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
| 491 | 509 |
| 492 BrowserThread::PostTask( | 510 BrowserThread::PostTask( |
| 493 BrowserThread::UI, FROM_HERE, | 511 BrowserThread::UI, FROM_HERE, |
| 494 NewRunnableFunction(&PrintDialogCloud::CreateDialogImpl, path_to_pdf)); | 512 NewRunnableFunction(&PrintDialogCloud::CreateDialogImpl, path_to_pdf)); |
| 495 } | 513 } |
| 496 | 514 |
| 497 // static, called from the UI thread. | 515 // static, called from the UI thread. |
| 498 void PrintDialogCloud::CreateDialogImpl(const FilePath& path_to_pdf) { | 516 void PrintDialogCloud::CreateDialogImpl(const FilePath& path_to_pdf) { |
| 499 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 517 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 500 new PrintDialogCloud(path_to_pdf); | 518 new PrintDialogCloud(path_to_pdf); |
| 501 } | 519 } |
| 502 | 520 |
| 503 // Initialize the print dialog. Called on the UI thread. | 521 // Initialize the print dialog. Called on the UI thread. |
| 504 PrintDialogCloud::PrintDialogCloud(const FilePath& path_to_pdf) | 522 PrintDialogCloud::PrintDialogCloud(const FilePath& path_to_pdf) |
| 505 : browser_(BrowserList::GetLastActive()) { | 523 : browser_(BrowserList::GetLastActive()) { |
| 506 | 524 |
| 507 // TODO(scottbyer): Verify GAIA login valid, execute GAIA login if not (should | 525 // TODO(scottbyer): Verify GAIA login valid, execute GAIA login if not (should |
| 508 // be distilled out of bookmark sync.) | 526 // be distilled out of bookmark sync.) |
| 509 string16 print_job_title; | 527 string16 print_job_title; |
| 510 if (browser_ && browser_->GetSelectedTabContents()) | |
| 511 print_job_title = browser_->GetSelectedTabContents()->GetTitle(); | |
| 512 | |
| 513 const int kDefaultWidth = 497; | 528 const int kDefaultWidth = 497; |
| 514 const int kDefaultHeight = 332; | 529 const int kDefaultHeight = 332; |
| 515 | 530 Profile* profile = NULL; |
| 516 PrefService* pref_service = browser_->GetProfile()->GetPrefs(); | 531 PrefService* pref_service = NULL; |
| 532 bool modal = true; | |
| 533 if (browser_) { | |
| 534 if (browser_->GetSelectedTabContents()) | |
| 535 print_job_title = browser_->GetSelectedTabContents()->GetTitle(); | |
| 536 profile = browser_->GetProfile(); | |
| 537 modal = true; | |
| 538 } else { | |
| 539 #ifdef OS_WIN | |
| 540 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 541 switches::kCloudPrintJobTitle)) { | |
| 542 CommandLine::StringType native_job_title; | |
| 543 native_job_title = CommandLine::ForCurrentProcess()->GetSwitchValueNative( | |
| 544 switches::kCloudPrintJobTitle); | |
|
sanjeevr
2011/01/11 21:39:55
We should probably refactor this and have the titl
abodenha
2011/01/12 01:30:50
Good call. Refactoring makes the code much cleane
| |
| 545 print_job_title = string16(native_job_title); | |
| 546 } | |
| 547 #endif | |
| 548 profile = ProfileManager::GetDefaultProfile(); | |
| 549 modal = false; | |
| 550 } | |
| 551 DCHECK(profile); | |
| 552 pref_service = profile->GetPrefs(); | |
| 517 DCHECK(pref_service); | 553 DCHECK(pref_service); |
| 518 if (!pref_service->FindPreference(prefs::kCloudPrintDialogWidth)) { | 554 if (!pref_service->FindPreference(prefs::kCloudPrintDialogWidth)) { |
| 519 pref_service->RegisterIntegerPref(prefs::kCloudPrintDialogWidth, | 555 pref_service->RegisterIntegerPref(prefs::kCloudPrintDialogWidth, |
| 520 kDefaultWidth); | 556 kDefaultWidth); |
| 521 } | 557 } |
| 522 if (!pref_service->FindPreference(prefs::kCloudPrintDialogHeight)) { | 558 if (!pref_service->FindPreference(prefs::kCloudPrintDialogHeight)) { |
| 523 pref_service->RegisterIntegerPref(prefs::kCloudPrintDialogHeight, | 559 pref_service->RegisterIntegerPref(prefs::kCloudPrintDialogHeight, |
| 524 kDefaultHeight); | 560 kDefaultHeight); |
| 525 } | 561 } |
| 526 | 562 |
| 527 int width = pref_service->GetInteger(prefs::kCloudPrintDialogWidth); | 563 int width = pref_service->GetInteger(prefs::kCloudPrintDialogWidth); |
| 528 int height = pref_service->GetInteger(prefs::kCloudPrintDialogHeight); | 564 int height = pref_service->GetInteger(prefs::kCloudPrintDialogHeight); |
| 565 | |
| 529 HtmlDialogUIDelegate* dialog_delegate = | 566 HtmlDialogUIDelegate* dialog_delegate = |
| 530 new internal_cloud_print_helpers::CloudPrintHtmlDialogDelegate( | 567 new internal_cloud_print_helpers::CloudPrintHtmlDialogDelegate( |
| 531 path_to_pdf, width, height, std::string(), print_job_title); | 568 path_to_pdf, width, height, std::string(), print_job_title, modal); |
| 532 browser_->BrowserShowHtmlDialog(dialog_delegate, NULL); | 569 if (browser_) { |
|
Scott Byer
2011/01/11 21:46:31
I'd be surprised if this pattern wasn't elsewhere
abodenha
2011/01/12 01:30:50
Done.
See comment about refactoring for modal and
| |
| 570 browser_->BrowserShowHtmlDialog(dialog_delegate, NULL); | |
| 571 } else { | |
| 572 #if defined(TOOLKIT_VIEWS) | |
| 573 browser::ShowHtmlDialogView(NULL, profile, dialog_delegate); | |
| 574 #elif defined(TOOLKIT_GTK) | |
| 575 HtmlDialogGtk* html_dialog = | |
| 576 new HtmlDialogGtk(profile, dialog_delegate, NULL); | |
| 577 html_dialog->InitDialog(); | |
| 578 #endif // defined(TOOLKIT_VIEWS) | |
| 579 } | |
| 533 } | 580 } |
| 534 | 581 |
| 535 PrintDialogCloud::~PrintDialogCloud() { | 582 PrintDialogCloud::~PrintDialogCloud() { |
| 536 } | 583 } |
| OLD | NEW |