Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/ui/webui/print_preview/print_preview_handler.h" | 5 #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h" |
| 6 | 6 |
| 7 #include <ctype.h> | 7 #include <ctype.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 82 | 82 |
| 83 #if defined(OS_CHROMEOS) | 83 #if defined(OS_CHROMEOS) |
| 84 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" | 84 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" |
| 85 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h " | 85 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h " |
| 86 #endif | 86 #endif |
| 87 | 87 |
| 88 #if defined(ENABLE_SERVICE_DISCOVERY) | 88 #if defined(ENABLE_SERVICE_DISCOVERY) |
| 89 #include "chrome/browser/local_discovery/privet_constants.h" | 89 #include "chrome/browser/local_discovery/privet_constants.h" |
| 90 #endif | 90 #endif |
| 91 | 91 |
| 92 #if defined(ENABLE_EXTENSIONS) | |
| 93 #include "extensions/browser/api/printer_provider/printer_provider_api.h" | |
| 94 #endif | |
| 95 | |
| 92 using content::BrowserThread; | 96 using content::BrowserThread; |
| 93 using content::RenderViewHost; | 97 using content::RenderViewHost; |
| 94 using content::WebContents; | 98 using content::WebContents; |
| 95 | 99 |
| 96 namespace { | 100 namespace { |
| 97 | 101 |
| 98 enum UserActionBuckets { | 102 enum UserActionBuckets { |
| 99 PRINT_TO_PRINTER, | 103 PRINT_TO_PRINTER, |
| 100 PRINT_TO_PDF, | 104 PRINT_TO_PDF, |
| 101 CANCEL, | 105 CANCEL, |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 base::Unretained(this))); | 644 base::Unretained(this))); |
| 641 web_ui()->RegisterMessageCallback("getPrivetPrinters", | 645 web_ui()->RegisterMessageCallback("getPrivetPrinters", |
| 642 base::Bind(&PrintPreviewHandler::HandleGetPrivetPrinters, | 646 base::Bind(&PrintPreviewHandler::HandleGetPrivetPrinters, |
| 643 base::Unretained(this))); | 647 base::Unretained(this))); |
| 644 web_ui()->RegisterMessageCallback("stopGetPrivetPrinters", | 648 web_ui()->RegisterMessageCallback("stopGetPrivetPrinters", |
| 645 base::Bind(&PrintPreviewHandler::HandleStopGetPrivetPrinters, | 649 base::Bind(&PrintPreviewHandler::HandleStopGetPrivetPrinters, |
| 646 base::Unretained(this))); | 650 base::Unretained(this))); |
| 647 web_ui()->RegisterMessageCallback("getPrivetPrinterCapabilities", | 651 web_ui()->RegisterMessageCallback("getPrivetPrinterCapabilities", |
| 648 base::Bind(&PrintPreviewHandler::HandleGetPrivetPrinterCapabilities, | 652 base::Bind(&PrintPreviewHandler::HandleGetPrivetPrinterCapabilities, |
| 649 base::Unretained(this))); | 653 base::Unretained(this))); |
| 654 web_ui()->RegisterMessageCallback( | |
| 655 "getExtensionPrinters", | |
| 656 base::Bind(&PrintPreviewHandler::HandleGetExtensionPrinters, | |
| 657 base::Unretained(this))); | |
| 658 web_ui()->RegisterMessageCallback( | |
| 659 "getExtensionPrinterCapabilities", | |
| 660 base::Bind(&PrintPreviewHandler::HandleGetExtensionPrinterCapabilities, | |
| 661 base::Unretained(this))); | |
| 650 RegisterForMergeSession(); | 662 RegisterForMergeSession(); |
| 651 } | 663 } |
| 652 | 664 |
| 653 bool PrintPreviewHandler::PrivetPrintingEnabled() { | 665 bool PrintPreviewHandler::PrivetPrintingEnabled() { |
| 654 #if defined(ENABLE_SERVICE_DISCOVERY) | 666 #if defined(ENABLE_SERVICE_DISCOVERY) |
| 655 return true; | 667 return true; |
| 656 #else | 668 #else |
| 657 return false; | 669 return false; |
| 658 #endif | 670 #endif |
| 659 } | 671 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 699 bool success = args->GetString(0, &name); | 711 bool success = args->GetString(0, &name); |
| 700 DCHECK(success); | 712 DCHECK(success); |
| 701 | 713 |
| 702 CreatePrivetHTTP( | 714 CreatePrivetHTTP( |
| 703 name, | 715 name, |
| 704 base::Bind(&PrintPreviewHandler::PrivetCapabilitiesUpdateClient, | 716 base::Bind(&PrintPreviewHandler::PrivetCapabilitiesUpdateClient, |
| 705 base::Unretained(this))); | 717 base::Unretained(this))); |
| 706 #endif | 718 #endif |
| 707 } | 719 } |
| 708 | 720 |
| 721 void PrintPreviewHandler::HandleGetExtensionPrinters( | |
| 722 const base::ListValue* args) { | |
| 723 #if defined(ENABLE_EXTENSIONS) | |
| 724 // TODO(tbarzic): Handle case where a new search is initiated before the | |
| 725 // previous one finishes. Currently, in this case Web UI layer may get | |
| 726 // multiple events with printer list from some extensions, and it may get | |
| 727 // fooled by |done| flag from the first search into marking the search | |
| 728 // complete. | |
|
Aleksey Shlyapnikov
2015/02/03 20:18:24
I'm fine with implementing it later. Just curious,
tbarzic
2015/02/04 02:21:23
Closer to former. I'll probably just end up invali
| |
| 729 extensions::PrinterProviderAPI::GetFactoryInstance() | |
| 730 ->Get(preview_web_contents()->GetBrowserContext()) | |
| 731 ->DispatchGetPrintersRequested( | |
| 732 base::Bind(&PrintPreviewHandler::OnGotPrintersForExtension, | |
| 733 weak_factory_.GetWeakPtr())); | |
| 734 #else | |
| 735 OnGotPrintersForExtension(base::ListValue(), true /* done */); | |
| 736 #endif | |
| 737 } | |
| 738 | |
| 739 void PrintPreviewHandler::HandleGetExtensionPrinterCapabilities( | |
| 740 const base::ListValue* args) { | |
| 741 std::string extension_id; | |
| 742 std::string printer_id; | |
| 743 bool ok = args->GetString(0, &extension_id); | |
| 744 DCHECK(ok); | |
| 745 ok = args->GetString(1, &printer_id); | |
| 746 DCHECK(ok); | |
| 747 | |
| 748 #if defined(ENABLE_EXTENSIONS) | |
| 749 extensions::PrinterProviderAPI::GetFactoryInstance() | |
| 750 ->Get(preview_web_contents()->GetBrowserContext()) | |
| 751 ->DispatchGetCapabilityRequested( | |
| 752 extension_id, printer_id, | |
| 753 base::Bind(&PrintPreviewHandler::OnGotExtensionPrinterCapabilities, | |
| 754 weak_factory_.GetWeakPtr(), extension_id, printer_id)); | |
| 755 #else | |
| 756 OnGotExtensionPrinterCapabilities(extension_id, printer_id, | |
| 757 base::DictionaryValue()); | |
|
Aleksey Shlyapnikov
2015/02/03 20:18:24
Empty capabilities are not valid. How do you plan
tbarzic
2015/02/04 02:21:23
Added error handling.
| |
| 758 #endif | |
| 759 } | |
| 760 | |
| 709 void PrintPreviewHandler::HandleGetPreview(const base::ListValue* args) { | 761 void PrintPreviewHandler::HandleGetPreview(const base::ListValue* args) { |
| 710 DCHECK_EQ(3U, args->GetSize()); | 762 DCHECK_EQ(3U, args->GetSize()); |
| 711 scoped_ptr<base::DictionaryValue> settings(GetSettingsDictionary(args)); | 763 scoped_ptr<base::DictionaryValue> settings(GetSettingsDictionary(args)); |
| 712 if (!settings.get()) | 764 if (!settings.get()) |
| 713 return; | 765 return; |
| 714 int request_id = -1; | 766 int request_id = -1; |
| 715 if (!settings->GetInteger(printing::kPreviewRequestID, &request_id)) | 767 if (!settings->GetInteger(printing::kPreviewRequestID, &request_id)) |
| 716 return; | 768 return; |
| 717 | 769 |
| 718 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( | 770 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1581 printer_value->SetBoolean("hasLocalPrinting", has_local_printing); | 1633 printer_value->SetBoolean("hasLocalPrinting", has_local_printing); |
| 1582 printer_value->SetBoolean( | 1634 printer_value->SetBoolean( |
| 1583 "isUnregistered", | 1635 "isUnregistered", |
| 1584 description.id.empty() && | 1636 description.id.empty() && |
| 1585 command_line->HasSwitch(switches::kEnablePrintPreviewRegisterPromos)); | 1637 command_line->HasSwitch(switches::kEnablePrintPreviewRegisterPromos)); |
| 1586 printer_value->SetString("cloudID", description.id); | 1638 printer_value->SetString("cloudID", description.id); |
| 1587 } | 1639 } |
| 1588 | 1640 |
| 1589 #endif // defined(ENABLE_SERVICE_DISCOVERY) | 1641 #endif // defined(ENABLE_SERVICE_DISCOVERY) |
| 1590 | 1642 |
| 1643 void PrintPreviewHandler::OnGotPrintersForExtension( | |
| 1644 const base::ListValue& printers, | |
| 1645 bool done) { | |
| 1646 web_ui()->CallJavascriptFunction("onExtensionPrintersAdded", printers, | |
| 1647 base::FundamentalValue(done)); | |
| 1648 } | |
| 1649 | |
| 1650 void PrintPreviewHandler::OnGotExtensionPrinterCapabilities( | |
| 1651 const std::string& extension_id, | |
| 1652 const std::string& printer_id, | |
| 1653 const base::DictionaryValue& capabilities) { | |
| 1654 web_ui()->CallJavascriptFunction("onExtensionCapabilitiesSet", | |
| 1655 base::StringValue(extension_id), | |
| 1656 base::StringValue(printer_id), | |
| 1657 capabilities); | |
| 1658 } | |
| 1659 | |
| 1591 void PrintPreviewHandler::RegisterForMergeSession() { | 1660 void PrintPreviewHandler::RegisterForMergeSession() { |
| 1592 DCHECK(!reconcilor_); | 1661 DCHECK(!reconcilor_); |
| 1593 Profile* profile = Profile::FromWebUI(web_ui()); | 1662 Profile* profile = Profile::FromWebUI(web_ui()); |
| 1594 if (switches::IsEnableAccountConsistency() && !profile->IsOffTheRecord()) { | 1663 if (switches::IsEnableAccountConsistency() && !profile->IsOffTheRecord()) { |
| 1595 reconcilor_ = AccountReconcilorFactory::GetForProfile(profile); | 1664 reconcilor_ = AccountReconcilorFactory::GetForProfile(profile); |
| 1596 if (reconcilor_) | 1665 if (reconcilor_) |
| 1597 reconcilor_->AddMergeSessionObserver(this); | 1666 reconcilor_->AddMergeSessionObserver(this); |
| 1598 } | 1667 } |
| 1599 } | 1668 } |
| 1600 | 1669 |
| 1601 void PrintPreviewHandler::UnregisterForMergeSession() { | 1670 void PrintPreviewHandler::UnregisterForMergeSession() { |
| 1602 if (reconcilor_) | 1671 if (reconcilor_) |
| 1603 reconcilor_->RemoveMergeSessionObserver(this); | 1672 reconcilor_->RemoveMergeSessionObserver(this); |
| 1604 } | 1673 } |
| 1605 | 1674 |
| 1606 void PrintPreviewHandler::SetPdfSavedClosureForTesting( | 1675 void PrintPreviewHandler::SetPdfSavedClosureForTesting( |
| 1607 const base::Closure& closure) { | 1676 const base::Closure& closure) { |
| 1608 pdf_file_saved_closure_ = closure; | 1677 pdf_file_saved_closure_ = closure; |
| 1609 } | 1678 } |
| OLD | NEW |