summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/resources/chromeos/nfc_debug.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/resources/chromeos/nfc_debug.js')
-rw-r--r--chromium/chrome/browser/resources/chromeos/nfc_debug.js375
1 files changed, 375 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/chromeos/nfc_debug.js b/chromium/chrome/browser/resources/chromeos/nfc_debug.js
new file mode 100644
index 00000000000..02ccf517977
--- /dev/null
+++ b/chromium/chrome/browser/resources/chromeos/nfc_debug.js
@@ -0,0 +1,375 @@
+// 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.
+
+cr.define('nfcDebug', function() {
+ 'use strict';
+
+ function NfcDebugUI() {
+ this.adapterData_ = {};
+ this.peerData_ = {};
+ this.tagData_ = {};
+ }
+
+ NfcDebugUI.prototype = {
+ setAdapterData: function(data) {
+ this.adapterData_ = data;
+ },
+
+ setPeerData: function(data) {
+ this.peerData_ = data;
+ },
+
+ setTagData: function(data) {
+ this.tagData_ = data;
+ },
+
+ /**
+ * Powers the NFC adapter ON or OFF.
+ */
+ toggleAdapterPower: function() {
+ chrome.send('setAdapterPower', [!this.adapterData_.powered]);
+ },
+
+ /**
+ * Tells the NFC adapter to start or stop polling.
+ */
+ toggleAdapterPolling: function() {
+ chrome.send('setAdapterPolling', [!this.adapterData_.polling]);
+ },
+
+ /**
+ * Notifies the UI that the user made an NDEF type selection and the
+ * appropriate form should be displayed.
+ */
+ recordTypeChanged: function() {
+ this.updateRecordFormContents();
+ },
+
+ /**
+ * Creates a table element and populates it for each record contained
+ * in the given list of records and adds them as a child of the given
+ * DOMElement. This method will replace the contents of the given element
+ * with the tables.
+ *
+ * @param {DOMElement} div The container that the records should be rendered
+ * to.
+ * @param {Array} records List of NDEF record data.
+ */
+ renderRecords: function(div, records) {
+ div.textContent = '';
+ if (records.length == 0) {
+ return;
+ }
+ var self = this;
+ records.forEach(function(record) {
+ var recordDiv = document.createElement('div');
+ recordDiv.setAttribute('class', 'record-div');
+ for (var key in record) {
+ if (!record.hasOwnProperty(key))
+ continue;
+
+ var rowDiv = document.createElement('div');
+ rowDiv.setAttribute('class', 'record-key-value-div');
+
+ var keyElement, valueElement;
+ if (key == 'titles') {
+ keyElement = document.createElement('div');
+ keyElement.setAttribute('class', 'record-key-div');
+ keyElement.appendChild(document.createTextNode(key));
+ valueElement = document.createElement('div');
+ valueElement.setAttribute('class', 'record-value-div');
+ self.renderRecords(valueElement, record[key]);
+ } else {
+ keyElement = document.createElement('span');
+ keyElement.setAttribute('class', 'record-key-span');
+ keyElement.appendChild(document.createTextNode(key));
+ valueElement = document.createElement('span');
+ valueElement.setAttribute('class', 'record-value-span');
+ valueElement.appendChild(document.createTextNode(record[key]));
+ }
+ rowDiv.appendChild(keyElement);
+ rowDiv.appendChild(valueElement);
+ recordDiv.appendChild(rowDiv);
+ }
+ div.appendChild(recordDiv);
+ if (records[records.length - 1] !== record)
+ div.appendChild(document.createElement('hr'));
+ });
+ },
+
+ /**
+ * Updates which record type form is displayed based on the currently
+ * selected type.
+ */
+ updateRecordFormContents: function() {
+ var recordTypeMenu = $('record-type-menu');
+ var selectedType =
+ recordTypeMenu.options[recordTypeMenu.selectedIndex].value;
+ this.updateRecordFormContentsFromType(selectedType);
+ },
+
+ /**
+ * Updates which record type form is displayed based on the passed in
+ * type string.
+ *
+ * @param {string} type The record type.
+ */
+ updateRecordFormContentsFromType: function(type) {
+ $('text-form').hidden = (type != 'text');
+ $('uri-form').hidden = (type != 'uri');
+ $('smart-poster-form').hidden = (type != 'smart-poster');
+ },
+
+ /**
+ * Tries to push or write the record to the remote tag or device based on
+ * the contents of the record form fields.
+ */
+ submitRecordForm: function() {
+ var recordTypeMenu = $('record-type-menu');
+ var selectedType =
+ recordTypeMenu.options[recordTypeMenu.selectedIndex].value;
+ var recordData = {};
+ if (selectedType == 'text') {
+ recordData.type = 'TEXT';
+ if ($('text-form-text').value)
+ recordData.text = $('text-form-text').value;
+ if ($('text-form-encoding').value)
+ recordData.encoding = $('text-form-encoding').value;
+ if ($('text-form-language-code').value)
+ recordData.languageCode = $('text-form-language-code').value;
+ } else if (selectedType == 'uri') {
+ recordData.type = 'URI';
+ if ($('uri-form-uri').value)
+ recordData.uri = $('uri-form-uri').value;
+ if ($('uri-form-mime-type').value)
+ recordData.mimeType = $('uri-form-mime-type').value;
+ if ($('uri-form-target-size').value) {
+ var targetSize = $('uri-form-target-size').value;
+ targetSize = parseFloat(targetSize);
+ recordData.targetSize = isNaN(targetSize) ? 0.0 : targetSize;
+ }
+ } else if (selectedType == 'smart-poster') {
+ recordData.type = 'SMART_POSTER';
+ if ($('smart-poster-form-uri').value)
+ recordData.uri = $('smart-poster-form-uri').value;
+ if ($('smart-poster-form-mime-type').value)
+ recordData.mimeType = $('smart-poster-form-mime-type').value;
+ if ($('smart-poster-form-target-size').value) {
+ var targetSize = $('smart-poster-form-target-size').value;
+ targetSize = parseFloat(targetSize);
+ recordData.targetSize = isNaN(targetSize) ? 0.0 : targetSize;
+ }
+ var title = {};
+ if ($('smart-poster-form-title-text').value)
+ title.text = $('smart-poster-form-title-text').value;
+ if ($('smart-poster-form-title-encoding').value)
+ title.encoding = $('smart-poster-form-title-encoding').value;
+ if ($('smart-poster-form-title-language-code').value)
+ title.languageCode =
+ $('smart-poster-form-title-language-code').value;
+ if (Object.keys(title).length != 0)
+ recordData.titles = [title];
+ }
+ chrome.send('submitRecordForm', [recordData]);
+ },
+
+ /**
+ * Given a dictionary |data|, builds a table where each row contains the
+ * a key and its value. The resulting table is then added as the sole child
+ * of |div|. |data| contains information about an adapter, tag, or peer and
+ * this method creates a table for display, thus the value of some keys
+ * will be processed.
+ *
+ * @param {DOMElement} div The container that the table should be rendered
+ * to.
+ * @param {dictionary} data Data to generate the table from.
+ */
+ createTableFromData: function(div, data) {
+ div.textContent = '';
+ var table = document.createElement('table');
+ table.classList.add('parameters-table');
+ for (var key in data) {
+ var row = document.createElement('tr');
+ var col = document.createElement('td');
+ col.textContent = key;
+ row.appendChild(col);
+
+ col = document.createElement('td');
+ var value = data[key];
+ if (key == 'records')
+ value = value.length;
+ else if (key == 'supportedTechnologies')
+ value = value.join(', ');
+ col.textContent = value;
+ row.appendChild(col);
+ table.appendChild(row);
+ }
+ div.appendChild(table);
+ },
+ };
+
+ cr.addSingletonGetter(NfcDebugUI);
+
+ /**
+ * Initializes the page after the content has loaded.
+ */
+ NfcDebugUI.initialize = function() {
+ $('nfc-adapter-info').hidden = true;
+ $('adapter-toggles').hidden = true;
+ $('nfc-adapter-info').classList.add('transition-out');
+ $('ndef-record-form').classList.add('transition-out');
+ $('nfc-peer-info').classList.add('transition-out');
+ $('nfc-tag-info').classList.add('transition-out');
+ $('power-toggle').onclick = function() {
+ NfcDebugUI.getInstance().toggleAdapterPower();
+ };
+ $('poll-toggle').onclick = function() {
+ NfcDebugUI.getInstance().toggleAdapterPolling();
+ };
+ $('record-type-menu').onchange = function() {
+ NfcDebugUI.getInstance().recordTypeChanged();
+ };
+ $('record-form-submit-button').onclick = function() {
+ NfcDebugUI.getInstance().submitRecordForm();
+ };
+ $('record-form-submit-button').hidden = true;
+ NfcDebugUI.getInstance().updateRecordFormContents();
+ chrome.send('initialize');
+ };
+
+ /**
+ * Updates the UI based on the NFC availability on the current platform.
+ *
+ * @param {bool} available If true, NFC is supported on the current platform.
+ */
+ NfcDebugUI.onNfcAvailabilityDetermined = function(available) {
+ $('nfc-not-supported').hidden = available;
+ };
+
+ /**
+ * Notifies the UI that information about the NFC adapter has been received.
+ *
+ * @param {dictionary} data Properties of the NFC adapter.
+ */
+ NfcDebugUI.onNfcAdapterInfoChanged = function(data) {
+ NfcDebugUI.getInstance().setAdapterData(data);
+
+ $('nfc-adapter-info').hidden = false;
+ NfcDebugUI.getInstance().createTableFromData($('adapter-parameters'), data);
+
+ $('nfc-adapter-info').classList.toggle('transition-out', !data.present);
+ $('nfc-adapter-info').classList.toggle('transition-in', data.present);
+ $('ndef-record-form').classList.toggle('transition-out', !data.present);
+ $('ndef-record-form').classList.toggle('transition-in', data.present);
+
+ $('adapter-toggles').hidden = !data.present;
+ $('ndef-record-form').hidden = !data.present;
+
+ $('power-toggle').textContent = loadTimeData.getString(
+ data.powered ? 'adapterPowerOffText' : 'adapterPowerOnText');
+ $('poll-toggle').textContent = loadTimeData.getString(
+ data.polling ? 'adapterStopPollText' : 'adapterStartPollText');
+ };
+
+ /**
+ * Notifies the UI that information about an NFC peer has been received.
+ *
+ * @param {dictionary} data Properties of the NFC peer device.
+ */
+ NfcDebugUI.onNfcPeerDeviceInfoChanged = function(data) {
+ NfcDebugUI.getInstance().setPeerData(data);
+
+ if (Object.keys(data).length == 0) {
+ $('nfc-peer-info').classList.add('transition-out');
+ $('nfc-peer-info').classList.remove('transition-in');
+ $('record-form-submit-button').hidden = true;
+ return;
+ }
+
+ $('nfc-peer-info').classList.remove('transition-out');
+ $('nfc-peer-info').classList.add('transition-in');
+
+ NfcDebugUI.getInstance().createTableFromData($('peer-parameters'), data);
+
+ $('record-form-submit-button').hidden = false;
+ $('record-form-submit-button').textContent =
+ loadTimeData.getString('ndefFormPushButtonText');
+
+ if (data.records.length == 0) {
+ $('peer-records-entry').hidden = true;
+ return;
+ }
+
+ $('peer-records-entry').hidden = false;
+ NfcDebugUI.getInstance().renderRecords($('peer-records-container'),
+ data.records);
+ };
+
+ /**
+ * Notifies the UI that information about an NFC tag has been received.
+ *
+ * @param {dictionary} data Properties of the NFC tag.
+ */
+ NfcDebugUI.onNfcTagInfoChanged = function(data) {
+ NfcDebugUI.getInstance().setTagData(data);
+
+ if (Object.keys(data).length == 0) {
+ $('nfc-tag-info').classList.add('transition-out');
+ $('nfc-tag-info').classList.remove('transition-in');
+ $('record-form-submit-button').hidden = true;
+ return;
+ }
+
+ $('nfc-tag-info').classList.remove('transition-out');
+ $('nfc-tag-info').classList.add('transition-in');
+
+ NfcDebugUI.getInstance().createTableFromData($('tag-parameters'), data);
+
+ $('record-form-submit-button').hidden = false;
+ $('record-form-submit-button').textContent =
+ loadTimeData.getString('ndefFormWriteButtonText');
+
+ if (data.records.length == 0) {
+ $('tag-records-entry').hidden = true;
+ return;
+ }
+
+ $('tag-records-entry').hidden = false;
+ NfcDebugUI.getInstance().renderRecords($('tag-records-container'),
+ data.records);
+ };
+
+ /**
+ * Notifies the UI that a call to "setAdapterPower" failed. Displays an
+ * alert.
+ */
+ NfcDebugUI.onSetAdapterPowerFailed = function() {
+ alert(loadTimeData.getString('errorFailedToSetPowerText'));
+ };
+
+ /**
+ * Notifies the UI that a call to "setAdapterPolling" failed. Displays an
+ * alert.
+ */
+ NfcDebugUI.onSetAdapterPollingFailed = function() {
+ alert(loadTimeData.getString('errorFailedToSetPollingText'));
+ };
+
+ /**
+ * Notifies the UI that an error occurred while submitting an NDEF record
+ * form.
+ * @param {string} errorMessage An error message, describing the failure.
+ */
+ NfcDebugUI.onSubmitRecordFormFailed = function(errorMessage) {
+ alert(loadTimeData.getString('errorFailedToSubmitPrefixText') +
+ ' ' + errorMessage);
+ };
+
+ // Export
+ return {
+ NfcDebugUI: NfcDebugUI
+ };
+});
+
+document.addEventListener('DOMContentLoaded', nfcDebug.NfcDebugUI.initialize);