// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/local_discovery/cloud_device_list.h" #include #include "base/strings/stringprintf.h" #include "chrome/browser/local_discovery/gcd_constants.h" #include "components/cloud_devices/common/cloud_devices_urls.h" namespace local_discovery { namespace { const char kKindDevicesList[] = "clouddevices#devicesListResponse"; } CloudDeviceList::CloudDeviceList(CloudDeviceListDelegate* delegate) : delegate_(delegate) { } CloudDeviceList::~CloudDeviceList() { } void CloudDeviceList::OnGCDAPIFlowError(GCDApiFlow::Status status) { delegate_->OnDeviceListUnavailable(); } void CloudDeviceList::OnGCDAPIFlowComplete(const base::DictionaryValue& value) { std::string kind; value.GetString(kGCDKeyKind, &kind); const base::ListValue* devices = NULL; if (kind != kKindDevicesList || !value.GetList("devices", &devices)) { delegate_->OnDeviceListUnavailable(); return; } std::vector result; for (base::ListValue::const_iterator i = devices->begin(); i != devices->end(); i++) { base::DictionaryValue* device; CloudDeviceListDelegate::Device details; if (!(*i)->GetAsDictionary(&device)) continue; if (!FillDeviceDetails(*device, &details)) continue; result.push_back(details); } delegate_->OnDeviceListReady(result); } GURL CloudDeviceList::GetURL() { return cloud_devices::GetCloudDevicesRelativeURL("devices"); } bool CloudDeviceList::FillDeviceDetails( const base::DictionaryValue& device_value, CloudDeviceListDelegate::Device* details) { if (!device_value.GetString("id", &details->id)) return false; if (!device_value.GetString("displayName", &details->display_name) && !device_value.GetString("systemName", &details->display_name)) { return false; } if (!device_value.GetString("deviceKind", &details->type)) return false; // Non-essential. device_value.GetString("description", &details->description); return true; } } // namespace local_discovery