| Index: device/nfc/nfc_ndef_record_utils_chromeos.cc
|
| diff --git a/device/nfc/nfc_ndef_record_utils_chromeos.cc b/device/nfc/nfc_ndef_record_utils_chromeos.cc
|
| deleted file mode 100644
|
| index 9b44ff83f388c3bbbf316cd858f6a2a2a264a559..0000000000000000000000000000000000000000
|
| --- a/device/nfc/nfc_ndef_record_utils_chromeos.cc
|
| +++ /dev/null
|
| @@ -1,239 +0,0 @@
|
| -// Copyright 2013 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 "device/nfc/nfc_ndef_record_utils_chromeos.h"
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/logging.h"
|
| -#include "device/nfc/nfc_ndef_record.h"
|
| -#include "third_party/cros_system_api/dbus/service_constants.h"
|
| -
|
| -using device::NfcNdefRecord;
|
| -
|
| -namespace chromeos {
|
| -namespace nfc_ndef_record_utils {
|
| -
|
| -namespace {
|
| -
|
| -// Maps the NDEF type |type| as returned by neard to the corresponding
|
| -// device::NfcNdefRecord::Type value.
|
| -NfcNdefRecord::Type DBusRecordTypeValueToNfcNdefRecordType(
|
| - const std::string& type) {
|
| - if (type == nfc_record::kTypeSmartPoster)
|
| - return NfcNdefRecord::kTypeSmartPoster;
|
| - if (type == nfc_record::kTypeText)
|
| - return NfcNdefRecord::kTypeText;
|
| - if (type == nfc_record::kTypeUri)
|
| - return NfcNdefRecord::kTypeURI;
|
| - if (type == nfc_record::kTypeHandoverRequest)
|
| - return NfcNdefRecord::kTypeHandoverRequest;
|
| - if (type == nfc_record::kTypeHandoverSelect)
|
| - return NfcNdefRecord::kTypeHandoverSelect;
|
| - if (type == nfc_record::kTypeHandoverCarrier)
|
| - return NfcNdefRecord::kTypeHandoverCarrier;
|
| - return NfcNdefRecord::kTypeUnknown;
|
| -}
|
| -
|
| -// Maps the NDEF type |type| given as a NFC C++ API enumeration to the
|
| -// corresponding string value defined by neard.
|
| -std::string NfcRecordTypeEnumToPropertyValue(NfcNdefRecord::Type type) {
|
| - switch (type) {
|
| - case NfcNdefRecord::kTypeSmartPoster:
|
| - return nfc_record::kTypeSmartPoster;
|
| - case NfcNdefRecord::kTypeText:
|
| - return nfc_record::kTypeText;
|
| - case NfcNdefRecord::kTypeURI:
|
| - return nfc_record::kTypeUri;
|
| - case NfcNdefRecord::kTypeHandoverRequest:
|
| - return nfc_record::kTypeHandoverRequest;
|
| - case NfcNdefRecord::kTypeHandoverSelect:
|
| - return nfc_record::kTypeHandoverSelect;
|
| - case NfcNdefRecord::kTypeHandoverCarrier:
|
| - return nfc_record::kTypeHandoverCarrier;
|
| - default:
|
| - return "";
|
| - }
|
| -}
|
| -
|
| -// Maps the field name |field_name| given as defined in NfcNdefRecord to the
|
| -// Neard Record D-Bus property name. This handles all fields except for
|
| -// NfcNdefRecord::kFieldTitles and NfcNdefRecord::kFieldAction, which need
|
| -// special handling.
|
| -std::string NdefRecordFieldToDBusProperty(const std::string& field_name) {
|
| - if (field_name == NfcNdefRecord::kFieldEncoding)
|
| - return nfc_record::kEncodingProperty;
|
| - if (field_name == NfcNdefRecord::kFieldLanguageCode)
|
| - return nfc_record::kLanguageProperty;
|
| - if (field_name == NfcNdefRecord::kFieldText)
|
| - return nfc_record::kRepresentationProperty;
|
| - if (field_name == NfcNdefRecord::kFieldURI)
|
| - return nfc_record::kUriProperty;
|
| - if (field_name == NfcNdefRecord::kFieldMimeType)
|
| - return nfc_record::kMimeTypeProperty;
|
| - if (field_name == NfcNdefRecord::kFieldTargetSize)
|
| - return nfc_record::kSizeProperty;
|
| - return "";
|
| -}
|
| -
|
| -std::string NfcNdefRecordActionValueToDBusActionValue(
|
| - const std::string& action) {
|
| - // TODO(armansito): Add bindings for values returned by neard to
|
| - // service_constants.h.
|
| - if (action == device::NfcNdefRecord::kSmartPosterActionDo)
|
| - return "Do";
|
| - if (action == device::NfcNdefRecord::kSmartPosterActionSave)
|
| - return "Save";
|
| - if (action == device::NfcNdefRecord::kSmartPosterActionOpen)
|
| - return "Edit";
|
| - return "";
|
| -}
|
| -
|
| -std::string DBusActionValueToNfcNdefRecordActionValue(
|
| - const std::string& action) {
|
| - // TODO(armansito): Add bindings for values returned by neard to
|
| - // service_constants.h.
|
| - if (action == "Do")
|
| - return device::NfcNdefRecord::kSmartPosterActionDo;
|
| - if (action == "Save")
|
| - return device::NfcNdefRecord::kSmartPosterActionSave;
|
| - if (action == "Edit")
|
| - return device::NfcNdefRecord::kSmartPosterActionOpen;
|
| - return "";
|
| -}
|
| -
|
| -
|
| -// Translates the given dictionary of NDEF fields by recursively converting
|
| -// each key in |record_data| to its corresponding Record property name defined
|
| -// by the Neard D-Bus API. The output is stored in |out|. Returns false if an
|
| -// error occurs.
|
| -bool ConvertNdefFieldsToDBusAttributes(
|
| - const base::DictionaryValue& fields,
|
| - base::DictionaryValue* out) {
|
| - DCHECK(out);
|
| - for (base::DictionaryValue::Iterator iter(fields);
|
| - !iter.IsAtEnd(); iter.Advance()) {
|
| - // Special case the "titles" and "action" fields.
|
| - if (iter.key() == NfcNdefRecord::kFieldTitles) {
|
| - const base::ListValue* titles = NULL;
|
| - bool value_result = iter.value().GetAsList(&titles);
|
| - DCHECK(value_result);
|
| - DCHECK(titles->GetSize() != 0);
|
| - // TODO(armansito): For now, pick the first title in the list and write
|
| - // its contents directly to the top level of the field. This is due to an
|
| - // error in the Neard D-Bus API design. This code will need to be updated
|
| - // if the neard API changes to correct this.
|
| - const base::DictionaryValue* first_title = NULL;
|
| - value_result = titles->GetDictionary(0, &first_title);
|
| - DCHECK(value_result);
|
| - if (!ConvertNdefFieldsToDBusAttributes(*first_title, out)) {
|
| - LOG(ERROR) << "Invalid title field.";
|
| - return false;
|
| - }
|
| - } else if (iter.key() == NfcNdefRecord::kFieldAction) {
|
| - // The value of the action field needs to be translated.
|
| - std::string action_value;
|
| - bool value_result = iter.value().GetAsString(&action_value);
|
| - DCHECK(value_result);
|
| - std::string action =
|
| - NfcNdefRecordActionValueToDBusActionValue(action_value);
|
| - if (action.empty()) {
|
| - VLOG(1) << "Invalid action value: \"" << action_value << "\"";
|
| - return false;
|
| - }
|
| - out->SetString(nfc_record::kActionProperty, action);
|
| - } else {
|
| - std::string dbus_property = NdefRecordFieldToDBusProperty(iter.key());
|
| - if (dbus_property.empty()) {
|
| - LOG(ERROR) << "Invalid field: " << iter.key();
|
| - return false;
|
| - }
|
| - out->Set(dbus_property, iter.value().DeepCopy());
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -bool NfcNdefRecordToDBusAttributes(
|
| - const NfcNdefRecord* record,
|
| - base::DictionaryValue* out) {
|
| - DCHECK(record);
|
| - DCHECK(out);
|
| - if (!record->IsPopulated()) {
|
| - LOG(ERROR) << "Record is not populated.";
|
| - return false;
|
| - }
|
| - out->SetString(nfc_record::kTypeProperty,
|
| - NfcRecordTypeEnumToPropertyValue(record->type()));
|
| - return ConvertNdefFieldsToDBusAttributes(record->data(), out);
|
| -}
|
| -
|
| -bool RecordPropertiesToNfcNdefRecord(
|
| - const NfcRecordClient::Properties* properties,
|
| - device::NfcNdefRecord* out) {
|
| - if (out->IsPopulated()) {
|
| - LOG(ERROR) << "Record is already populated!";
|
| - return false;
|
| - }
|
| - NfcNdefRecord::Type type =
|
| - DBusRecordTypeValueToNfcNdefRecordType(properties->type.value());
|
| - if (type == NfcNdefRecord::kTypeUnknown) {
|
| - LOG(ERROR) << "Record type is unknown.";
|
| - return false;
|
| - }
|
| -
|
| - // Extract each property.
|
| - base::DictionaryValue attributes;
|
| - if (!properties->uri.value().empty())
|
| - attributes.SetString(NfcNdefRecord::kFieldURI, properties->uri.value());
|
| - if (!properties->mime_type.value().empty()) {
|
| - attributes.SetString(NfcNdefRecord::kFieldMimeType,
|
| - properties->mime_type.value());
|
| - }
|
| - if (properties->size.value() != 0) {
|
| - attributes.SetDouble(NfcNdefRecord::kFieldTargetSize,
|
| - static_cast<double>(properties->size.value()));
|
| - }
|
| - std::string action_value =
|
| - DBusActionValueToNfcNdefRecordActionValue(properties->action.value());
|
| - if (!action_value.empty())
|
| - attributes.SetString(NfcNdefRecord::kFieldAction, action_value);
|
| -
|
| - // The "representation", "encoding", and "language" properties will be stored
|
| - // differently, depending on whether the record type is "SmartPoster" or
|
| - // "Text".
|
| - {
|
| - std::unique_ptr<base::DictionaryValue> text_attributes(
|
| - new base::DictionaryValue());
|
| - if (!properties->representation.value().empty()) {
|
| - text_attributes->SetString(NfcNdefRecord::kFieldText,
|
| - properties->representation.value());
|
| - }
|
| - if (!properties->encoding.value().empty()) {
|
| - text_attributes->SetString(NfcNdefRecord::kFieldEncoding,
|
| - properties->encoding.value());
|
| - }
|
| - if (!properties->language.value().empty()) {
|
| - text_attributes->SetString(NfcNdefRecord::kFieldLanguageCode,
|
| - properties->language.value());
|
| - }
|
| - if (!text_attributes->empty()) {
|
| - if (type == NfcNdefRecord::kTypeSmartPoster) {
|
| - base::ListValue* titles = new base::ListValue();
|
| - titles->Append(text_attributes.release());
|
| - attributes.Set(NfcNdefRecord::kFieldTitles, titles);
|
| - } else {
|
| - attributes.MergeDictionary(text_attributes.get());
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Populate the given record.
|
| - return out->Populate(type, &attributes);
|
| -}
|
| -
|
| -} // namespace nfc_ndef_record_utils
|
| -} // namespace chromeos
|
|
|