VulpesOS/gaia/dev_apps/uitest/js/API/fxa.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

118 lines
2.6 KiB
JavaScript
Executable file

/**
* Tests for Firefox Accounts observer API
*
* navigator.mozId.watch(), .request(), and .logout().
*/
function unpackAssertion(assertion) {
var parts = assertion.split('.');
return {
header: atob(parts[0]),
claim: atob(parts[1]),
payload: atob(parts[3])
};
}
function FXATests() {
this._eventNum = 1;
}
FXATests.prototype = {
_setupCallbacks: function() {
if (this._running) {
return;
}
var self = this;
try {
navigator.mozId.watch({
wantIssuer: 'firefox-accounts',
onlogin: function(assertion) {
var unpacked = JSON.stringify(unpackAssertion(assertion), null, 2);
self.recordEvent('login', 'login',
{assertion: assertion, unpacked: unpacked});
},
onlogout: function() {
self.recordEvent('logout', 'logout');
},
onready: function() {
self.recordEvent('ready', 'ready');
},
onerror: function(error) {
self.recordEvent('error: ' + JSON.stringify(error), 'error');
}
});
} catch (error) {
this.recordEvent('error: ' + JSON.stringify(error), 'error');
}
},
/**
* Bind UI components
*/
_bindEvents: function() {
if (this._running) {
return;
}
var self = this;
var testElementHandlers = {
'request': function() {
navigator.mozId.request({
oncancel: function() {
self.recordEvent('cancel', 'cancel');
}
});
},
'logout': function() {
navigator.mozId.logout();
}
};
Object.keys(testElementHandlers).forEach(function(selector) {
document.getElementById(selector).addEventListener(
'click', testElementHandlers[selector]);
});
},
recordEvent: function(message, cklass, params) {
var li = document.createElement('li');
if (cklass) {
li.classList.add(cklass);
}
var events = document.getElementById('event-stream');
var html = message;
if (typeof params === 'object') {
Object.keys(params).forEach(function(key) {
html += '<div>' + key + ':</div>';
html += '<div class="' + key + '">' + params[key] + '</div>';
});
}
li.innerHTML = html;
events.appendChild(li);
this._eventNum += 1;
},
init: function() {
this._setupCallbacks();
this._bindEvents();
this._running = true;
this.recordEvent('Starting. Wait for "ready" message.');
},
};
window.addEventListener('DOMContentLoaded', function() {
var fxaTests = new FXATests();
fxaTests.init();
}, false);