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

Side by Side Diff: extensions/browser/api/printer_provider/printer_provider_api.cc

Issue 1148383002: Add onGetUsbPrinterInfoRequested event to printerProvider API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Switch away from NOTREACHED() and document API expectations. Created 5 years, 6 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
OLDNEW
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 <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/i18n/rtl.h" 13 #include "base/i18n/rtl.h"
14 #include "base/json/json_string_value_serializer.h" 14 #include "base/json/json_string_value_serializer.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ref_counted_memory.h"
17 #include "base/scoped_observer.h" 16 #include "base/scoped_observer.h"
18 #include "base/strings/string16.h" 17 #include "base/strings/string16.h"
19 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
20 #include "base/values.h" 19 #include "base/values.h"
20 #include "device/usb/usb_device.h"
21 #include "extensions/browser/api/printer_provider/printer_provider_print_job.h" 21 #include "extensions/browser/api/printer_provider/printer_provider_print_job.h"
22 #include "extensions/browser/api/printer_provider_internal/printer_provider_inte rnal_api.h" 22 #include "extensions/browser/api/printer_provider_internal/printer_provider_inte rnal_api.h"
23 #include "extensions/browser/api/printer_provider_internal/printer_provider_inte rnal_api_observer.h" 23 #include "extensions/browser/api/printer_provider_internal/printer_provider_inte rnal_api_observer.h"
24 #include "extensions/browser/event_router.h" 24 #include "extensions/browser/event_router.h"
25 #include "extensions/browser/extension_registry.h" 25 #include "extensions/browser/extension_registry.h"
26 #include "extensions/browser/extension_registry_observer.h" 26 #include "extensions/browser/extension_registry_observer.h"
27 #include "extensions/common/api/printer_provider.h" 27 #include "extensions/common/api/printer_provider.h"
28 #include "extensions/common/api/printer_provider_internal.h" 28 #include "extensions/common/api/printer_provider_internal.h"
29 #include "extensions/common/api/usb.h"
29 #include "extensions/common/extension.h" 30 #include "extensions/common/extension.h"
30 31
32 using device::UsbDevice;
33
31 namespace extensions { 34 namespace extensions {
32 35
33 namespace { 36 namespace {
34 37
35 // The separator between extension id and the extension's internal printer id 38 // The separator between extension id and the extension's internal printer id
36 // used when generating a printer id unique across extensions. 39 // used when generating a printer id unique across extensions.
37 const char kPrinterIdSeparator = ':'; 40 const char kPrinterIdSeparator = ':';
38 41
39 // Given an extension ID and an ID of a printer reported by the extension, it 42 // Given an extension ID and an ID of a printer reported by the extension, it
40 // generates a ID for the printer unique across extensions (assuming that the 43 // generates a ID for the printer unique across extensions (assuming that the
(...skipping 13 matching lines...) Expand all
54 std::string* extension_id, 57 std::string* extension_id,
55 std::string* internal_printer_id) { 58 std::string* internal_printer_id) {
56 size_t separator = printer_id.find_first_of(kPrinterIdSeparator); 59 size_t separator = printer_id.find_first_of(kPrinterIdSeparator);
57 if (separator == std::string::npos) 60 if (separator == std::string::npos)
58 return false; 61 return false;
59 *extension_id = printer_id.substr(0, separator); 62 *extension_id = printer_id.substr(0, separator);
60 *internal_printer_id = printer_id.substr(separator + 1); 63 *internal_printer_id = printer_id.substr(separator + 1);
61 return true; 64 return true;
62 } 65 }
63 66
67 void UpdatePrinterWithExtensionInfo(base::DictionaryValue* printer,
68 const Extension* extension) {
69 std::string internal_printer_id;
70 CHECK(printer->GetString("id", &internal_printer_id));
71 printer->SetString("id",
72 GeneratePrinterId(extension->id(), internal_printer_id));
73 printer->SetString("extensionId", extension->id());
74 printer->SetString("extensionName", extension->name());
75
76 base::string16 printer_name;
77 if (printer->GetString("name", &printer_name) &&
78 base::i18n::AdjustStringForLocaleDirection(&printer_name)) {
79 printer->SetString("name", printer_name);
80 }
81
82 base::string16 printer_description;
83 if (printer->GetString("description", &printer_description) &&
84 base::i18n::AdjustStringForLocaleDirection(&printer_description)) {
85 printer->SetString("description", printer_description);
86 }
87 }
88
64 // Holds information about a pending onGetPrintersRequested request; 89 // Holds information about a pending onGetPrintersRequested request;
65 // in particular, the list of extensions to which the event was dispatched but 90 // in particular, the list of extensions to which the event was dispatched but
66 // which haven't yet responded, and the |GetPrinters| callback associated with 91 // which haven't yet responded, and the |GetPrinters| callback associated with
67 // the event. 92 // the event.
68 class GetPrintersRequest { 93 class GetPrintersRequest {
69 public: 94 public:
70 explicit GetPrintersRequest( 95 explicit GetPrintersRequest(
71 const PrinterProviderAPI::GetPrintersCallback& callback); 96 const PrinterProviderAPI::GetPrintersCallback& callback);
72 ~GetPrintersRequest(); 97 ~GetPrintersRequest();
73 98
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // values reported by the extension. 132 // values reported by the extension.
108 bool CompleteForExtension(const std::string& extension_id, 133 bool CompleteForExtension(const std::string& extension_id,
109 int request_id, 134 int request_id,
110 const base::ListValue& result); 135 const base::ListValue& result);
111 136
112 // Runs callbacks for the extension for all requests that are waiting for a 137 // Runs callbacks for the extension for all requests that are waiting for a
113 // response from the extension with the provided extension id. Callbacks are 138 // response from the extension with the provided extension id. Callbacks are
114 // called as if the extension reported empty set of printers. 139 // called as if the extension reported empty set of printers.
115 void FailAllForExtension(const std::string& extension_id); 140 void FailAllForExtension(const std::string& extension_id);
116 141
117 // Adds an extension id to the list of the extensions that need to respond 142 // Adds an extension id to the list of the extensions that need to respond to
118 // to the event. 143 // the event.
119 bool AddSource(int request_id, const std::string& extension_id); 144 bool AddSource(int request_id, const std::string& extension_id);
120 145
121 private: 146 private:
122 int last_request_id_; 147 int last_request_id_;
123 std::map<int, GetPrintersRequest> pending_requests_; 148 std::map<int, GetPrintersRequest> pending_requests_;
124 149
125 DISALLOW_COPY_AND_ASSIGN(PendingGetPrintersRequests); 150 DISALLOW_COPY_AND_ASSIGN(PendingGetPrintersRequests);
126 }; 151 };
127 152
128 // Keeps track of pending chrome.printerProvider.onGetCapabilityRequested 153 // Keeps track of pending chrome.printerProvider.onGetCapabilityRequested
(...skipping 13 matching lines...) Expand all
142 167
143 // Runs all pending callbacks with empty capability value and clears the 168 // Runs all pending callbacks with empty capability value and clears the
144 // set of pending requests. 169 // set of pending requests.
145 void FailAll(); 170 void FailAll();
146 171
147 private: 172 private:
148 int last_request_id_; 173 int last_request_id_;
149 std::map<int, PrinterProviderAPI::GetCapabilityCallback> pending_requests_; 174 std::map<int, PrinterProviderAPI::GetCapabilityCallback> pending_requests_;
150 }; 175 };
151 176
152 // Keeps track of pending chrome.printerProvider.ontPrintRequested requests 177 // Keeps track of pending chrome.printerProvider.onPrintRequested requests
153 // for an extension. 178 // for an extension.
154 class PendingPrintRequests { 179 class PendingPrintRequests {
155 public: 180 public:
156 PendingPrintRequests(); 181 PendingPrintRequests();
157 ~PendingPrintRequests(); 182 ~PendingPrintRequests();
158 183
159 // Adds a new request to the set. Only information needed is the callback 184 // Adds a new request to the set. Only information needed is the callback
160 // associated with the request. Returns the id assigned to the request. 185 // associated with the request. Returns the id assigned to the request.
161 int Add(const PrinterProviderPrintJob& job, 186 int Add(const PrinterProviderPrintJob& job,
162 const PrinterProviderAPI::PrintCallback& callback); 187 const PrinterProviderAPI::PrintCallback& callback);
(...skipping 12 matching lines...) Expand all
175 private: 200 private:
176 struct PrintRequest { 201 struct PrintRequest {
177 PrinterProviderAPI::PrintCallback callback; 202 PrinterProviderAPI::PrintCallback callback;
178 PrinterProviderPrintJob job; 203 PrinterProviderPrintJob job;
179 }; 204 };
180 205
181 int last_request_id_; 206 int last_request_id_;
182 std::map<int, PrintRequest> pending_requests_; 207 std::map<int, PrintRequest> pending_requests_;
183 }; 208 };
184 209
210 // Keeps track of pending chrome.printerProvider.onGetUsbPrinterInfoRequested
211 // requests for an extension.
212 class PendingUsbPrinterInfoRequests {
213 public:
214 PendingUsbPrinterInfoRequests();
215 ~PendingUsbPrinterInfoRequests();
216
217 // Adds a new request to the set. Only information needed is the callback
218 // associated with the request. Returns the id assigned to the request.
219 int Add(const PrinterProviderAPI::GetPrinterInfoCallback& callback);
220
221 // Completes the request with the provided request id. It runs the request
222 // callback and removes the request from the set.
223 void Complete(int request_id, const base::DictionaryValue& printer_info);
224
225 // Runs all pending callbacks with empty capability value and clears the
226 // set of pending requests.
227 void FailAll();
228
229 private:
230 int last_request_id_ = 0;
231 std::map<int, PrinterProviderAPI::GetPrinterInfoCallback> pending_requests_;
232 };
233
185 // Implements chrome.printerProvider API events. 234 // Implements chrome.printerProvider API events.
186 class PrinterProviderAPIImpl : public PrinterProviderAPI, 235 class PrinterProviderAPIImpl : public PrinterProviderAPI,
187 public PrinterProviderInternalAPIObserver, 236 public PrinterProviderInternalAPIObserver,
188 public ExtensionRegistryObserver { 237 public ExtensionRegistryObserver {
189 public: 238 public:
190 explicit PrinterProviderAPIImpl(content::BrowserContext* browser_context); 239 explicit PrinterProviderAPIImpl(content::BrowserContext* browser_context);
191 ~PrinterProviderAPIImpl() override; 240 ~PrinterProviderAPIImpl() override;
192 241
193 private: 242 private:
194 // PrinterProviderAPI implementation: 243 // PrinterProviderAPI implementation:
195 void DispatchGetPrintersRequested( 244 void DispatchGetPrintersRequested(
196 const PrinterProviderAPI::GetPrintersCallback& callback) override; 245 const PrinterProviderAPI::GetPrintersCallback& callback) override;
197 void DispatchGetCapabilityRequested( 246 void DispatchGetCapabilityRequested(
198 const std::string& printer_id, 247 const std::string& printer_id,
199 const PrinterProviderAPI::GetCapabilityCallback& callback) override; 248 const PrinterProviderAPI::GetCapabilityCallback& callback) override;
200 void DispatchPrintRequested( 249 void DispatchPrintRequested(
201 const PrinterProviderPrintJob& job, 250 const PrinterProviderPrintJob& job,
202 const PrinterProviderAPI::PrintCallback& callback) override; 251 const PrinterProviderAPI::PrintCallback& callback) override;
203 const PrinterProviderPrintJob* GetPrintJob(const Extension* extension, 252 const PrinterProviderPrintJob* GetPrintJob(const Extension* extension,
204 int request_id) const override; 253 int request_id) const override;
254 void DispatchGetUsbPrinterInfoRequested(
255 const std::string& extension_id,
256 scoped_refptr<UsbDevice> device,
257 const PrinterProviderAPI::GetPrinterInfoCallback& callback) override;
205 258
206 // PrinterProviderInternalAPIObserver implementation: 259 // PrinterProviderInternalAPIObserver implementation:
207 void OnGetPrintersResult( 260 void OnGetPrintersResult(
208 const Extension* extension, 261 const Extension* extension,
209 int request_id, 262 int request_id,
210 const PrinterProviderInternalAPIObserver::PrinterInfoVector& result) 263 const PrinterProviderInternalAPIObserver::PrinterInfoVector& result)
211 override; 264 override;
212 void OnGetCapabilityResult(const Extension* extension, 265 void OnGetCapabilityResult(const Extension* extension,
213 int request_id, 266 int request_id,
214 const base::DictionaryValue& result) override; 267 const base::DictionaryValue& result) override;
215 void OnPrintResult( 268 void OnPrintResult(
216 const Extension* extension, 269 const Extension* extension,
217 int request_id, 270 int request_id,
218 core_api::printer_provider_internal::PrintError error) override; 271 core_api::printer_provider_internal::PrintError error) override;
272 void OnGetUsbPrinterInfoResult(
273 const Extension* extension,
274 int request_id,
275 const core_api::printer_provider::PrinterInfo* printer_info) override;
219 276
220 // ExtensionRegistryObserver implementation: 277 // ExtensionRegistryObserver implementation:
221 void OnExtensionUnloaded(content::BrowserContext* browser_context, 278 void OnExtensionUnloaded(content::BrowserContext* browser_context,
222 const Extension* extension, 279 const Extension* extension,
223 UnloadedExtensionInfo::Reason reason) override; 280 UnloadedExtensionInfo::Reason reason) override;
224 281
225 // Called before chrome.printerProvider.onGetPrintersRequested event is 282 // Called before chrome.printerProvider.onGetPrintersRequested event is
226 // dispatched to an extension. It returns whether the extension is interested 283 // dispatched to an extension. It returns whether the extension is interested
227 // in the event. If the extension listens to the event, it's added to the set 284 // in the event. If the extension listens to the event, it's added to the set
228 // of |request| sources. |request| is |GetPrintersRequest| object associated 285 // of |request| sources. |request| is |GetPrintersRequest| object associated
229 // with the event. 286 // with the event.
230 bool WillRequestPrinters(int request_id, 287 bool WillRequestPrinters(int request_id,
231 content::BrowserContext* browser_context, 288 content::BrowserContext* browser_context,
232 const Extension* extension, 289 const Extension* extension,
233 base::ListValue* args); 290 base::ListValue* args);
234 291
235 content::BrowserContext* browser_context_; 292 content::BrowserContext* browser_context_;
236 293
237 PendingGetPrintersRequests pending_get_printers_requests_; 294 PendingGetPrintersRequests pending_get_printers_requests_;
238 295
239 std::map<std::string, PendingPrintRequests> pending_print_requests_; 296 std::map<std::string, PendingPrintRequests> pending_print_requests_;
240 297
241 std::map<std::string, PendingGetCapabilityRequests> 298 std::map<std::string, PendingGetCapabilityRequests>
242 pending_capability_requests_; 299 pending_capability_requests_;
243 300
301 std::map<std::string, PendingUsbPrinterInfoRequests>
302 pending_usb_printer_info_requests_;
303
244 ScopedObserver<PrinterProviderInternalAPI, PrinterProviderInternalAPIObserver> 304 ScopedObserver<PrinterProviderInternalAPI, PrinterProviderInternalAPIObserver>
245 internal_api_observer_; 305 internal_api_observer_;
246 306
247 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 307 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
248 extension_registry_observer_; 308 extension_registry_observer_;
249 309
250 DISALLOW_COPY_AND_ASSIGN(PrinterProviderAPIImpl); 310 DISALLOW_COPY_AND_ASSIGN(PrinterProviderAPIImpl);
251 }; 311 };
252 312
253 GetPrintersRequest::GetPrintersRequest( 313 GetPrintersRequest::GetPrintersRequest(
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 return &it->second.job; 454 return &it->second.job;
395 } 455 }
396 456
397 void PendingPrintRequests::FailAll() { 457 void PendingPrintRequests::FailAll() {
398 for (auto& request : pending_requests_) 458 for (auto& request : pending_requests_)
399 request.second.callback.Run(false, 459 request.second.callback.Run(false,
400 PrinterProviderAPI::GetDefaultPrintError()); 460 PrinterProviderAPI::GetDefaultPrintError());
401 pending_requests_.clear(); 461 pending_requests_.clear();
402 } 462 }
403 463
464 PendingUsbPrinterInfoRequests::PendingUsbPrinterInfoRequests() {
465 }
466
467 PendingUsbPrinterInfoRequests::~PendingUsbPrinterInfoRequests() {
468 }
469
470 int PendingUsbPrinterInfoRequests::Add(
471 const PrinterProviderAPI::GetPrinterInfoCallback& callback) {
472 pending_requests_[++last_request_id_] = callback;
473 return last_request_id_;
474 }
475
476 void PendingUsbPrinterInfoRequests::Complete(
477 int request_id,
478 const base::DictionaryValue& printer_info) {
479 auto it = pending_requests_.find(request_id);
480 if (it == pending_requests_.end())
481 return;
482
483 PrinterProviderAPI::GetPrinterInfoCallback callback = it->second;
484 pending_requests_.erase(it);
485
486 callback.Run(printer_info);
487 }
488
489 void PendingUsbPrinterInfoRequests::FailAll() {
490 for (auto& request : pending_requests_) {
491 request.second.Run(base::DictionaryValue());
492 }
493 pending_requests_.clear();
494 }
495
404 PrinterProviderAPIImpl::PrinterProviderAPIImpl( 496 PrinterProviderAPIImpl::PrinterProviderAPIImpl(
405 content::BrowserContext* browser_context) 497 content::BrowserContext* browser_context)
406 : browser_context_(browser_context), 498 : browser_context_(browser_context),
407 internal_api_observer_(this), 499 internal_api_observer_(this),
408 extension_registry_observer_(this) { 500 extension_registry_observer_(this) {
409 internal_api_observer_.Add( 501 internal_api_observer_.Add(
410 PrinterProviderInternalAPI::GetFactoryInstance()->Get(browser_context)); 502 PrinterProviderInternalAPI::GetFactoryInstance()->Get(browser_context));
411 extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context)); 503 extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context));
412 } 504 }
413 505
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 619
528 const PrinterProviderPrintJob* PrinterProviderAPIImpl::GetPrintJob( 620 const PrinterProviderPrintJob* PrinterProviderAPIImpl::GetPrintJob(
529 const Extension* extension, 621 const Extension* extension,
530 int request_id) const { 622 int request_id) const {
531 auto it = pending_print_requests_.find(extension->id()); 623 auto it = pending_print_requests_.find(extension->id());
532 if (it == pending_print_requests_.end()) 624 if (it == pending_print_requests_.end())
533 return nullptr; 625 return nullptr;
534 return it->second.GetPrintJob(request_id); 626 return it->second.GetPrintJob(request_id);
535 } 627 }
536 628
629 void PrinterProviderAPIImpl::DispatchGetUsbPrinterInfoRequested(
630 const std::string& extension_id,
631 scoped_refptr<UsbDevice> device,
632 const PrinterProviderAPI::GetPrinterInfoCallback& callback) {
633 EventRouter* event_router = EventRouter::Get(browser_context_);
634 if (!event_router->ExtensionHasEventListener(
635 extension_id, core_api::printer_provider::
636 OnGetUsbPrinterInfoRequested::kEventName)) {
637 callback.Run(base::DictionaryValue());
638 return;
639 }
640
641 int request_id =
642 pending_usb_printer_info_requests_[extension_id].Add(callback);
643 core_api::usb::Device usb_device;
644 usb_device.device = device->unique_id();
645 usb_device.vendor_id = device->vendor_id();
646 usb_device.product_id = device->product_id();
647
648 scoped_ptr<base::ListValue> internal_args(new base::ListValue);
649 // Request id is not part of the public API and it will be massaged out in
650 // custom bindings.
651 internal_args->AppendInteger(request_id);
652 internal_args->Append(usb_device.ToValue().release());
653 scoped_ptr<Event> event(new Event(
654 core_api::printer_provider::OnGetUsbPrinterInfoRequested::kEventName,
655 internal_args.Pass()));
656 event_router->DispatchEventToExtension(extension_id, event.Pass());
657 }
658
537 void PrinterProviderAPIImpl::OnGetPrintersResult( 659 void PrinterProviderAPIImpl::OnGetPrintersResult(
538 const Extension* extension, 660 const Extension* extension,
539 int request_id, 661 int request_id,
540 const PrinterProviderInternalAPIObserver::PrinterInfoVector& result) { 662 const PrinterProviderInternalAPIObserver::PrinterInfoVector& result) {
541 base::ListValue printer_list; 663 base::ListValue printer_list;
542 664
543 // Update some printer description properties to better identify the extension 665 // Update some printer description properties to better identify the extension
544 // managing the printer. 666 // managing the printer.
545 for (size_t i = 0; i < result.size(); ++i) { 667 for (size_t i = 0; i < result.size(); ++i) {
546 scoped_ptr<base::DictionaryValue> printer(result[i]->ToValue()); 668 scoped_ptr<base::DictionaryValue> printer(result[i]->ToValue());
547 std::string internal_printer_id; 669 UpdatePrinterWithExtensionInfo(printer.get(), extension);
548 CHECK(printer->GetString("id", &internal_printer_id)); 670 printer_list.Append(printer.Pass());
549 printer->SetString("id",
550 GeneratePrinterId(extension->id(), internal_printer_id));
551 printer->SetString("extensionId", extension->id());
552 printer->SetString("extensionName", extension->name());
553
554 base::string16 printer_name;
555 if (printer->GetString("name", &printer_name) &&
556 base::i18n::AdjustStringForLocaleDirection(&printer_name)) {
557 printer->SetString("name", printer_name);
558 }
559
560 base::string16 printer_description;
561 if (printer->GetString("description", &printer_description) &&
562 base::i18n::AdjustStringForLocaleDirection(&printer_description)) {
563 printer->SetString("description", printer_description);
564 }
565
566 printer_list.Append(printer.release());
567 } 671 }
568 672
569 pending_get_printers_requests_.CompleteForExtension(extension->id(), 673 pending_get_printers_requests_.CompleteForExtension(extension->id(),
570 request_id, printer_list); 674 request_id, printer_list);
571 } 675 }
572 676
573 void PrinterProviderAPIImpl::OnGetCapabilityResult( 677 void PrinterProviderAPIImpl::OnGetCapabilityResult(
574 const Extension* extension, 678 const Extension* extension,
575 int request_id, 679 int request_id,
576 const base::DictionaryValue& result) { 680 const base::DictionaryValue& result) {
577 pending_capability_requests_[extension->id()].Complete(request_id, result); 681 pending_capability_requests_[extension->id()].Complete(request_id, result);
578 } 682 }
579 683
580 void PrinterProviderAPIImpl::OnPrintResult( 684 void PrinterProviderAPIImpl::OnPrintResult(
581 const Extension* extension, 685 const Extension* extension,
582 int request_id, 686 int request_id,
583 core_api::printer_provider_internal::PrintError error) { 687 core_api::printer_provider_internal::PrintError error) {
584 const std::string error_str = 688 const std::string error_str =
585 error == core_api::printer_provider_internal::PRINT_ERROR_NONE 689 error == core_api::printer_provider_internal::PRINT_ERROR_NONE
586 ? PrinterProviderAPI::GetDefaultPrintError() 690 ? PrinterProviderAPI::GetDefaultPrintError()
587 : core_api::printer_provider_internal::ToString(error); 691 : core_api::printer_provider_internal::ToString(error);
588 pending_print_requests_[extension->id()].Complete( 692 pending_print_requests_[extension->id()].Complete(
589 request_id, error == core_api::printer_provider_internal::PRINT_ERROR_OK, 693 request_id, error == core_api::printer_provider_internal::PRINT_ERROR_OK,
590 error_str); 694 error_str);
591 } 695 }
592 696
697 void PrinterProviderAPIImpl::OnGetUsbPrinterInfoResult(
698 const Extension* extension,
699 int request_id,
700 const core_api::printer_provider::PrinterInfo* result) {
701 if (result) {
702 scoped_ptr<base::DictionaryValue> printer(result->ToValue());
703 UpdatePrinterWithExtensionInfo(printer.get(), extension);
704 pending_usb_printer_info_requests_[extension->id()].Complete(request_id,
705 *printer);
706 } else {
707 pending_usb_printer_info_requests_[extension->id()].Complete(
708 request_id, base::DictionaryValue());
709 }
710 }
711
593 void PrinterProviderAPIImpl::OnExtensionUnloaded( 712 void PrinterProviderAPIImpl::OnExtensionUnloaded(
594 content::BrowserContext* browser_context, 713 content::BrowserContext* browser_context,
595 const Extension* extension, 714 const Extension* extension,
596 UnloadedExtensionInfo::Reason reason) { 715 UnloadedExtensionInfo::Reason reason) {
597 pending_get_printers_requests_.FailAllForExtension(extension->id()); 716 pending_get_printers_requests_.FailAllForExtension(extension->id());
598 717
599 auto print_it = pending_print_requests_.find(extension->id()); 718 auto print_it = pending_print_requests_.find(extension->id());
600 if (print_it != pending_print_requests_.end()) { 719 if (print_it != pending_print_requests_.end()) {
601 print_it->second.FailAll(); 720 print_it->second.FailAll();
602 pending_print_requests_.erase(print_it); 721 pending_print_requests_.erase(print_it);
603 } 722 }
604 723
605 auto capability_it = pending_capability_requests_.find(extension->id()); 724 auto capability_it = pending_capability_requests_.find(extension->id());
606 if (capability_it != pending_capability_requests_.end()) { 725 if (capability_it != pending_capability_requests_.end()) {
607 capability_it->second.FailAll(); 726 capability_it->second.FailAll();
608 pending_capability_requests_.erase(capability_it); 727 pending_capability_requests_.erase(capability_it);
609 } 728 }
729
730 auto usb_it = pending_usb_printer_info_requests_.find(extension->id());
731 if (usb_it != pending_usb_printer_info_requests_.end()) {
732 usb_it->second.FailAll();
733 pending_usb_printer_info_requests_.erase(usb_it);
734 }
610 } 735 }
611 736
612 bool PrinterProviderAPIImpl::WillRequestPrinters( 737 bool PrinterProviderAPIImpl::WillRequestPrinters(
613 int request_id, 738 int request_id,
614 content::BrowserContext* browser_context, 739 content::BrowserContext* browser_context,
615 const Extension* extension, 740 const Extension* extension,
616 base::ListValue* args) { 741 base::ListValue* args) {
617 if (!extension) 742 if (!extension)
618 return false; 743 return false;
619 EventRouter* event_router = EventRouter::Get(browser_context_); 744 EventRouter* event_router = EventRouter::Get(browser_context_);
(...skipping 14 matching lines...) Expand all
634 return new PrinterProviderAPIImpl(context); 759 return new PrinterProviderAPIImpl(context);
635 } 760 }
636 761
637 // static 762 // static
638 std::string PrinterProviderAPI::GetDefaultPrintError() { 763 std::string PrinterProviderAPI::GetDefaultPrintError() {
639 return core_api::printer_provider_internal::ToString( 764 return core_api::printer_provider_internal::ToString(
640 core_api::printer_provider_internal::PRINT_ERROR_FAILED); 765 core_api::printer_provider_internal::PRINT_ERROR_FAILED);
641 } 766 }
642 767
643 } // namespace extensions 768 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698