| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "extensions/browser/api/printer_provider/printer_provider_api.h" | 5 #include "extensions/browser/api/printer_provider/printer_provider_api.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 api::printer_provider::OnGetPrintersRequested::kEventName)) { | 516 api::printer_provider::OnGetPrintersRequested::kEventName)) { |
| 517 callback.Run(base::ListValue(), true /* done */); | 517 callback.Run(base::ListValue(), true /* done */); |
| 518 return; | 518 return; |
| 519 } | 519 } |
| 520 | 520 |
| 521 // |pending_get_printers_requests_| take ownership of |request| which gets | 521 // |pending_get_printers_requests_| take ownership of |request| which gets |
| 522 // NULLed out. Save the pointer before passing it to the requests, as it will | 522 // NULLed out. Save the pointer before passing it to the requests, as it will |
| 523 // be needed later on. | 523 // be needed later on. |
| 524 int request_id = pending_get_printers_requests_.Add(callback); | 524 int request_id = pending_get_printers_requests_.Add(callback); |
| 525 | 525 |
| 526 scoped_ptr<base::ListValue> internal_args(new base::ListValue); | 526 std::unique_ptr<base::ListValue> internal_args(new base::ListValue); |
| 527 // Request id is not part of the public API, but it will be massaged out in | 527 // Request id is not part of the public API, but it will be massaged out in |
| 528 // custom bindings. | 528 // custom bindings. |
| 529 internal_args->AppendInteger(request_id); | 529 internal_args->AppendInteger(request_id); |
| 530 | 530 |
| 531 scoped_ptr<Event> event( | 531 std::unique_ptr<Event> event( |
| 532 new Event(events::PRINTER_PROVIDER_ON_GET_PRINTERS_REQUESTED, | 532 new Event(events::PRINTER_PROVIDER_ON_GET_PRINTERS_REQUESTED, |
| 533 api::printer_provider::OnGetPrintersRequested::kEventName, | 533 api::printer_provider::OnGetPrintersRequested::kEventName, |
| 534 std::move(internal_args))); | 534 std::move(internal_args))); |
| 535 // This callback is called synchronously during |BroadcastEvent|, so | 535 // This callback is called synchronously during |BroadcastEvent|, so |
| 536 // Unretained is safe. | 536 // Unretained is safe. |
| 537 event->will_dispatch_callback = | 537 event->will_dispatch_callback = |
| 538 base::Bind(&PrinterProviderAPIImpl::WillRequestPrinters, | 538 base::Bind(&PrinterProviderAPIImpl::WillRequestPrinters, |
| 539 base::Unretained(this), request_id); | 539 base::Unretained(this), request_id); |
| 540 | 540 |
| 541 event_router->BroadcastEvent(std::move(event)); | 541 event_router->BroadcastEvent(std::move(event)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 554 EventRouter* event_router = EventRouter::Get(browser_context_); | 554 EventRouter* event_router = EventRouter::Get(browser_context_); |
| 555 if (!event_router->ExtensionHasEventListener( | 555 if (!event_router->ExtensionHasEventListener( |
| 556 extension_id, | 556 extension_id, |
| 557 api::printer_provider::OnGetCapabilityRequested::kEventName)) { | 557 api::printer_provider::OnGetCapabilityRequested::kEventName)) { |
| 558 callback.Run(base::DictionaryValue()); | 558 callback.Run(base::DictionaryValue()); |
| 559 return; | 559 return; |
| 560 } | 560 } |
| 561 | 561 |
| 562 int request_id = pending_capability_requests_[extension_id].Add(callback); | 562 int request_id = pending_capability_requests_[extension_id].Add(callback); |
| 563 | 563 |
| 564 scoped_ptr<base::ListValue> internal_args(new base::ListValue); | 564 std::unique_ptr<base::ListValue> internal_args(new base::ListValue); |
| 565 // Request id is not part of the public API, but it will be massaged out in | 565 // Request id is not part of the public API, but it will be massaged out in |
| 566 // custom bindings. | 566 // custom bindings. |
| 567 internal_args->AppendInteger(request_id); | 567 internal_args->AppendInteger(request_id); |
| 568 internal_args->AppendString(internal_printer_id); | 568 internal_args->AppendString(internal_printer_id); |
| 569 | 569 |
| 570 scoped_ptr<Event> event( | 570 std::unique_ptr<Event> event( |
| 571 new Event(events::PRINTER_PROVIDER_ON_GET_CAPABILITY_REQUESTED, | 571 new Event(events::PRINTER_PROVIDER_ON_GET_CAPABILITY_REQUESTED, |
| 572 api::printer_provider::OnGetCapabilityRequested::kEventName, | 572 api::printer_provider::OnGetCapabilityRequested::kEventName, |
| 573 std::move(internal_args))); | 573 std::move(internal_args))); |
| 574 | 574 |
| 575 event_router->DispatchEventToExtension(extension_id, std::move(event)); | 575 event_router->DispatchEventToExtension(extension_id, std::move(event)); |
| 576 } | 576 } |
| 577 | 577 |
| 578 void PrinterProviderAPIImpl::DispatchPrintRequested( | 578 void PrinterProviderAPIImpl::DispatchPrintRequested( |
| 579 const PrinterProviderPrintJob& job, | 579 const PrinterProviderPrintJob& job, |
| 580 const PrinterProviderAPI::PrintCallback& callback) { | 580 const PrinterProviderAPI::PrintCallback& callback) { |
| 581 std::string extension_id; | 581 std::string extension_id; |
| 582 std::string internal_printer_id; | 582 std::string internal_printer_id; |
| 583 if (!ParsePrinterId(job.printer_id, &extension_id, &internal_printer_id)) { | 583 if (!ParsePrinterId(job.printer_id, &extension_id, &internal_printer_id)) { |
| 584 callback.Run(false, PrinterProviderAPI::GetDefaultPrintError()); | 584 callback.Run(false, PrinterProviderAPI::GetDefaultPrintError()); |
| 585 return; | 585 return; |
| 586 } | 586 } |
| 587 | 587 |
| 588 EventRouter* event_router = EventRouter::Get(browser_context_); | 588 EventRouter* event_router = EventRouter::Get(browser_context_); |
| 589 if (!event_router->ExtensionHasEventListener( | 589 if (!event_router->ExtensionHasEventListener( |
| 590 extension_id, api::printer_provider::OnPrintRequested::kEventName)) { | 590 extension_id, api::printer_provider::OnPrintRequested::kEventName)) { |
| 591 callback.Run(false, PrinterProviderAPI::GetDefaultPrintError()); | 591 callback.Run(false, PrinterProviderAPI::GetDefaultPrintError()); |
| 592 return; | 592 return; |
| 593 } | 593 } |
| 594 | 594 |
| 595 api::printer_provider::PrintJob print_job; | 595 api::printer_provider::PrintJob print_job; |
| 596 print_job.printer_id = internal_printer_id; | 596 print_job.printer_id = internal_printer_id; |
| 597 | 597 |
| 598 JSONStringValueDeserializer deserializer(job.ticket_json); | 598 JSONStringValueDeserializer deserializer(job.ticket_json); |
| 599 scoped_ptr<base::Value> ticket_value = deserializer.Deserialize(NULL, NULL); | 599 std::unique_ptr<base::Value> ticket_value = |
| 600 deserializer.Deserialize(NULL, NULL); |
| 600 if (!ticket_value || | 601 if (!ticket_value || |
| 601 !api::printer_provider::PrintJob::Ticket::Populate(*ticket_value, | 602 !api::printer_provider::PrintJob::Ticket::Populate(*ticket_value, |
| 602 &print_job.ticket)) { | 603 &print_job.ticket)) { |
| 603 callback.Run(false, api::printer_provider::ToString( | 604 callback.Run(false, api::printer_provider::ToString( |
| 604 api::printer_provider::PRINT_ERROR_INVALID_TICKET)); | 605 api::printer_provider::PRINT_ERROR_INVALID_TICKET)); |
| 605 return; | 606 return; |
| 606 } | 607 } |
| 607 | 608 |
| 608 print_job.content_type = job.content_type; | 609 print_job.content_type = job.content_type; |
| 609 print_job.title = base::UTF16ToUTF8(job.job_title); | 610 print_job.title = base::UTF16ToUTF8(job.job_title); |
| 610 int request_id = pending_print_requests_[extension_id].Add(job, callback); | 611 int request_id = pending_print_requests_[extension_id].Add(job, callback); |
| 611 | 612 |
| 612 scoped_ptr<base::ListValue> internal_args(new base::ListValue); | 613 std::unique_ptr<base::ListValue> internal_args(new base::ListValue); |
| 613 // Request id is not part of the public API and it will be massaged out in | 614 // Request id is not part of the public API and it will be massaged out in |
| 614 // custom bindings. | 615 // custom bindings. |
| 615 internal_args->AppendInteger(request_id); | 616 internal_args->AppendInteger(request_id); |
| 616 internal_args->Append(print_job.ToValue().release()); | 617 internal_args->Append(print_job.ToValue().release()); |
| 617 scoped_ptr<Event> event( | 618 std::unique_ptr<Event> event( |
| 618 new Event(events::PRINTER_PROVIDER_ON_PRINT_REQUESTED, | 619 new Event(events::PRINTER_PROVIDER_ON_PRINT_REQUESTED, |
| 619 api::printer_provider::OnPrintRequested::kEventName, | 620 api::printer_provider::OnPrintRequested::kEventName, |
| 620 std::move(internal_args))); | 621 std::move(internal_args))); |
| 621 event_router->DispatchEventToExtension(extension_id, std::move(event)); | 622 event_router->DispatchEventToExtension(extension_id, std::move(event)); |
| 622 } | 623 } |
| 623 | 624 |
| 624 const PrinterProviderPrintJob* PrinterProviderAPIImpl::GetPrintJob( | 625 const PrinterProviderPrintJob* PrinterProviderAPIImpl::GetPrintJob( |
| 625 const Extension* extension, | 626 const Extension* extension, |
| 626 int request_id) const { | 627 int request_id) const { |
| 627 auto it = pending_print_requests_.find(extension->id()); | 628 auto it = pending_print_requests_.find(extension->id()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 640 api::printer_provider::OnGetUsbPrinterInfoRequested::kEventName)) { | 641 api::printer_provider::OnGetUsbPrinterInfoRequested::kEventName)) { |
| 641 callback.Run(base::DictionaryValue()); | 642 callback.Run(base::DictionaryValue()); |
| 642 return; | 643 return; |
| 643 } | 644 } |
| 644 | 645 |
| 645 int request_id = | 646 int request_id = |
| 646 pending_usb_printer_info_requests_[extension_id].Add(callback); | 647 pending_usb_printer_info_requests_[extension_id].Add(callback); |
| 647 api::usb::Device api_device; | 648 api::usb::Device api_device; |
| 648 UsbGuidMap::Get(browser_context_)->GetApiDevice(device, &api_device); | 649 UsbGuidMap::Get(browser_context_)->GetApiDevice(device, &api_device); |
| 649 | 650 |
| 650 scoped_ptr<base::ListValue> internal_args(new base::ListValue()); | 651 std::unique_ptr<base::ListValue> internal_args(new base::ListValue()); |
| 651 // Request id is not part of the public API and it will be massaged out in | 652 // Request id is not part of the public API and it will be massaged out in |
| 652 // custom bindings. | 653 // custom bindings. |
| 653 internal_args->AppendInteger(request_id); | 654 internal_args->AppendInteger(request_id); |
| 654 internal_args->Append(api_device.ToValue()); | 655 internal_args->Append(api_device.ToValue()); |
| 655 scoped_ptr<Event> event( | 656 std::unique_ptr<Event> event( |
| 656 new Event(events::PRINTER_PROVIDER_ON_GET_USB_PRINTER_INFO_REQUESTED, | 657 new Event(events::PRINTER_PROVIDER_ON_GET_USB_PRINTER_INFO_REQUESTED, |
| 657 api::printer_provider::OnGetUsbPrinterInfoRequested::kEventName, | 658 api::printer_provider::OnGetUsbPrinterInfoRequested::kEventName, |
| 658 std::move(internal_args))); | 659 std::move(internal_args))); |
| 659 event_router->DispatchEventToExtension(extension_id, std::move(event)); | 660 event_router->DispatchEventToExtension(extension_id, std::move(event)); |
| 660 } | 661 } |
| 661 | 662 |
| 662 void PrinterProviderAPIImpl::OnGetPrintersResult( | 663 void PrinterProviderAPIImpl::OnGetPrintersResult( |
| 663 const Extension* extension, | 664 const Extension* extension, |
| 664 int request_id, | 665 int request_id, |
| 665 const PrinterProviderInternalAPIObserver::PrinterInfoVector& result) { | 666 const PrinterProviderInternalAPIObserver::PrinterInfoVector& result) { |
| 666 base::ListValue printer_list; | 667 base::ListValue printer_list; |
| 667 | 668 |
| 668 // Update some printer description properties to better identify the extension | 669 // Update some printer description properties to better identify the extension |
| 669 // managing the printer. | 670 // managing the printer. |
| 670 for (const api::printer_provider::PrinterInfo& p : result) { | 671 for (const api::printer_provider::PrinterInfo& p : result) { |
| 671 scoped_ptr<base::DictionaryValue> printer(p.ToValue()); | 672 std::unique_ptr<base::DictionaryValue> printer(p.ToValue()); |
| 672 UpdatePrinterWithExtensionInfo(printer.get(), extension); | 673 UpdatePrinterWithExtensionInfo(printer.get(), extension); |
| 673 printer_list.Append(std::move(printer)); | 674 printer_list.Append(std::move(printer)); |
| 674 } | 675 } |
| 675 | 676 |
| 676 pending_get_printers_requests_.CompleteForExtension(extension->id(), | 677 pending_get_printers_requests_.CompleteForExtension(extension->id(), |
| 677 request_id, printer_list); | 678 request_id, printer_list); |
| 678 } | 679 } |
| 679 | 680 |
| 680 void PrinterProviderAPIImpl::OnGetCapabilityResult( | 681 void PrinterProviderAPIImpl::OnGetCapabilityResult( |
| 681 const Extension* extension, | 682 const Extension* extension, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 695 pending_print_requests_[extension->id()].Complete( | 696 pending_print_requests_[extension->id()].Complete( |
| 696 request_id, error == api::printer_provider_internal::PRINT_ERROR_OK, | 697 request_id, error == api::printer_provider_internal::PRINT_ERROR_OK, |
| 697 error_str); | 698 error_str); |
| 698 } | 699 } |
| 699 | 700 |
| 700 void PrinterProviderAPIImpl::OnGetUsbPrinterInfoResult( | 701 void PrinterProviderAPIImpl::OnGetUsbPrinterInfoResult( |
| 701 const Extension* extension, | 702 const Extension* extension, |
| 702 int request_id, | 703 int request_id, |
| 703 const api::printer_provider::PrinterInfo* result) { | 704 const api::printer_provider::PrinterInfo* result) { |
| 704 if (result) { | 705 if (result) { |
| 705 scoped_ptr<base::DictionaryValue> printer(result->ToValue()); | 706 std::unique_ptr<base::DictionaryValue> printer(result->ToValue()); |
| 706 UpdatePrinterWithExtensionInfo(printer.get(), extension); | 707 UpdatePrinterWithExtensionInfo(printer.get(), extension); |
| 707 pending_usb_printer_info_requests_[extension->id()].Complete(request_id, | 708 pending_usb_printer_info_requests_[extension->id()].Complete(request_id, |
| 708 *printer); | 709 *printer); |
| 709 } else { | 710 } else { |
| 710 pending_usb_printer_info_requests_[extension->id()].Complete( | 711 pending_usb_printer_info_requests_[extension->id()].Complete( |
| 711 request_id, base::DictionaryValue()); | 712 request_id, base::DictionaryValue()); |
| 712 } | 713 } |
| 713 } | 714 } |
| 714 | 715 |
| 715 void PrinterProviderAPIImpl::OnExtensionUnloaded( | 716 void PrinterProviderAPIImpl::OnExtensionUnloaded( |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 return new PrinterProviderAPIImpl(context); | 764 return new PrinterProviderAPIImpl(context); |
| 764 } | 765 } |
| 765 | 766 |
| 766 // static | 767 // static |
| 767 std::string PrinterProviderAPI::GetDefaultPrintError() { | 768 std::string PrinterProviderAPI::GetDefaultPrintError() { |
| 768 return api::printer_provider_internal::ToString( | 769 return api::printer_provider_internal::ToString( |
| 769 api::printer_provider_internal::PRINT_ERROR_FAILED); | 770 api::printer_provider_internal::PRINT_ERROR_FAILED); |
| 770 } | 771 } |
| 771 | 772 |
| 772 } // namespace extensions | 773 } // namespace extensions |
| OLD | NEW |