summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/nfc/nfc_type_converters.cc
blob: b1d727b785c39ba46c2ea2b6f140a923111146e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright 2019 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 "third_party/blink/renderer/modules/nfc/nfc_type_converters.h"

#include <limits>
#include <utility>

#include "services/device/public/mojom/nfc.mojom-blink.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_ndef_write_options.h"
#include "third_party/blink/renderer/modules/nfc/ndef_message.h"
#include "third_party/blink/renderer/modules/nfc/ndef_record.h"
#include "third_party/blink/renderer/modules/nfc/nfc_utils.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

using device::mojom::blink::NDEFMessage;
using device::mojom::blink::NDEFMessagePtr;
using device::mojom::blink::NDEFRecord;
using device::mojom::blink::NDEFRecordPtr;
using device::mojom::blink::NDEFWriteOptions;
using device::mojom::blink::NDEFWriteOptionsPtr;

// Mojo type converters
namespace mojo {

NDEFRecordPtr TypeConverter<NDEFRecordPtr, blink::NDEFRecord*>::Convert(
    const blink::NDEFRecord* record) {
  return NDEFRecord::New(
      record->category(), record->recordType(), record->mediaType(),
      record->id(), record->encoding(), record->lang(), record->payloadData(),
      TypeConverter<NDEFMessagePtr, blink::NDEFMessage*>::Convert(
          record->payload_message()));
}

NDEFMessagePtr TypeConverter<NDEFMessagePtr, blink::NDEFMessage*>::Convert(
    const blink::NDEFMessage* message) {
  // |message| may come from blink::NDEFRecord::payload_message() which is
  // possible to be null for some "smart-poster" and external type records.
  if (!message)
    return nullptr;
  NDEFMessagePtr message_ptr = NDEFMessage::New();
  message_ptr->data.resize(message->records().size());
  for (wtf_size_t i = 0; i < message->records().size(); ++i) {
    NDEFRecordPtr record = NDEFRecord::From(message->records()[i].Get());
    DCHECK(record);
    message_ptr->data[i] = std::move(record);
  }
  return message_ptr;
}

NDEFWriteOptionsPtr
TypeConverter<NDEFWriteOptionsPtr, const blink::NDEFWriteOptions*>::Convert(
    const blink::NDEFWriteOptions* write_options) {
  // https://w3c.github.io/web-nfc/#the-ndefwriteoptions-dictionary
  // Default values for NDEFWriteOptions dictionary are:
  // overwrite = true
  NDEFWriteOptionsPtr write_options_ptr = NDEFWriteOptions::New();
  write_options_ptr->overwrite = write_options->overwrite();

  return write_options_ptr;
}

}  // namespace mojo