Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / local_discovery / cloud_print_printer_list.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/local_discovery/cloud_print_printer_list.h"
6
7 #include <utility>
8
9 #include "base/strings/stringprintf.h"
10 #include "chrome/common/cloud_print/cloud_print_constants.h"
11 #include "components/cloud_devices/common/cloud_devices_urls.h"
12
13 namespace local_discovery {
14
15 CloudPrintPrinterList::CloudPrintPrinterList(CloudDeviceListDelegate* delegate)
16     : delegate_(delegate) {
17 }
18
19 CloudPrintPrinterList::~CloudPrintPrinterList() {
20 }
21
22 void CloudPrintPrinterList::OnGCDAPIFlowError(GCDApiFlow::Status status) {
23   delegate_->OnDeviceListUnavailable();
24 }
25
26 void CloudPrintPrinterList::OnGCDAPIFlowComplete(
27     const base::DictionaryValue& value) {
28   const base::ListValue* printers;
29
30   if (!value.GetList(cloud_print::kPrinterListValue, &printers)) {
31     delegate_->OnDeviceListUnavailable();
32     return;
33   }
34
35   std::vector<CloudDeviceListDelegate::Device> devices;
36   for (base::ListValue::const_iterator i = printers->begin();
37        i != printers->end();
38        i++) {
39     base::DictionaryValue* printer;
40     CloudDeviceListDelegate::Device printer_details;
41
42     if (!(*i)->GetAsDictionary(&printer))
43       continue;
44
45     if (!FillPrinterDetails(*printer, &printer_details))
46       continue;
47
48     devices.push_back(printer_details);
49   }
50
51   delegate_->OnDeviceListReady(devices);
52 }
53
54 GURL CloudPrintPrinterList::GetURL() {
55   return cloud_devices::GetCloudPrintRelativeURL("search");
56 }
57
58 bool CloudPrintPrinterList::FillPrinterDetails(
59     const base::DictionaryValue& printer_value,
60     CloudDeviceListDelegate::Device* printer_details) {
61   if (!printer_value.GetString(cloud_print::kIdValue, &printer_details->id))
62     return false;
63
64   if (!printer_value.GetString(cloud_print::kDisplayNameValue,
65                                &printer_details->display_name)) {
66     return false;
67   }
68
69   // Non-essential.
70   printer_value.GetString(cloud_print::kPrinterDescValue,
71                           &printer_details->description);
72
73   printer_details->type = CloudDeviceListDelegate::kDeviceTypePrinter;
74
75   return true;
76 }
77
78 }  // namespace local_discovery