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.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,235 @@
'use strict';
var FxAUser = require('./fxa_user'),
config = require('./config.json');
/**
* Abstraction around FxA app.
* 'Entrance point' app URL is passed in since FxA acts more like a
* component than a standalone app
* (launched by Settings, Marketplace, FTU, FMD, dev_apps, etc.)
*
* @param client
* @constructor
*/
function FxA(client) {
this.config = config;
this.fxaUser = new FxAUser();
this.client = client.scope({ searchTimeout: config.MARIONETTE_TIMEOUT});
}
FxA.SETTINGS_ORIGIN = 'app://settings.gaiamobile.org';
FxA.UITEST_ORIGIN = 'app://uitest.gaiamobile.org';
FxA.TEST_FXA_CLIENT_ORIGIN = 'app://test-fxa-client.gaiamobile.org';
FxA.FTU_ORIGIN = 'app://ftu.gaiamobile.org';
FxA.SERVER_PATH = 'http://' +
config.SERVER_HOST + ':' +
config.SERVER_PORT + '/' +
config.SERVER_PATH;
FxA.SERVER_ARGS = [
config.SERVER_HOST,
config.SERVER_PORT,
config.SERVER_PATH
];
FxA.COPPA_YEAR = new Date().getFullYear() - 13;
FxA.Selectors = {
body: 'body',
bodyReady: 'body .view-body',
// dev_apps/uitest
apiFxaFrame: '#test-iframe',
fxaFrame: '#fxa-iframe',
tabAPI: '#API',
fxaButton: '#mozId-fxa',
requestButton: '#request',
// dev_apps/test-fxa-client
tabOpenFlow: '#openFlow',
// apps/settings
menuItemFxa: '#menuItem-fxa',
menuItemFmd: '#menuItem-findmydevice',
fxaLogin: '#fxa-login',
fmdLogin: '#findmydevice-login',
fxaCancelAccountConfirmation: '#fxa-cancel-confirmation',
// apps/ftu
forward: '#forward',
createAccountOrLogin: '#fxa-create-account',
// apps/findmydevice
emailInput: '#fxa-email-input',
fxaForgotPassword: 'fxa-forgot-password',
pwInput: '#fxa-pw-input',
//COPPA (age-restriction menu no longer appears,
// but password input tag is still different)
pwInputPostCOPPA: '#fxa-pw-set-input',
pwSetInput: '#fxa-pw-set-input',
pwRefresh: '#fxa-pw-input-refresh',
COPPAElementId: '#fxa-coppa',
COPPASelectId: '#fxa-age-select',
COPPAOptionVal: FxA.COPPA_YEAR + ' or earlier',
COPPAOptionValToFail: FxA.COPPA_YEAR.toString(),
moduleNext: '#fxa-module-next',
moduleDone: '#fxa-module-done',
errorOK: '#fxa-error-ok'
};
FxA.prototype = {
/**
* Launches FxA app and focuses on frame.
*/
launch: function (origin) {
// do unless FTU
if (origin.search('ftu') === -1) {
this.client.apps.launch(origin);
}
this.client.apps.switchToApp(origin);
},
enterInput: function (inputId, inputString) {
this.client.helper
.waitForElement(inputId)
.sendKeys(inputString);
},
enterCOPPANew: function () {
var sel = FxA.Selectors.COPPASelectId;
var inputString = FxA.Selectors.COPPAOptionVal;
this.client.helper.tapSelectOption(sel, inputString);
},
enterEmailNew: function () {
var sel = FxA.Selectors.emailInput;
var inputString = this.fxaUser.email(config.USER_NEW);
this.client.helper.fillInputField(sel, inputString);
},
enterPasswordNew: function () {
var sel = FxA.Selectors.pwInputPostCOPPA;
var inputString = this.fxaUser.password(config.USER_NEW);
this.client.helper.fillInputField(sel, inputString);
},
enterEmailExisting: function () {
var sel = FxA.Selectors.emailInput;
var inputString = this.fxaUser.email(config.USER_EXISTING);
this.client.helper.fillInputField(sel, inputString);
},
enterPasswordExisting: function () {
var sel = FxA.Selectors.pwInput;
var inputString = this.fxaUser.password(config.USER_EXISTING);
this.client.helper.fillInputField(sel, inputString);
},
onClick: function(searchSelector) {
var element = this.client.findElement(searchSelector);
this.client.helper
.waitForElement(element)
.tap();
},
clickNext: function() {
var element = this.client.findElement(FxA.Selectors.moduleNext);
var client = this.client;
client.waitFor(function () {
return client.findElement(FxA.Selectors.moduleNext)
.scriptWith(function (el) {
return el.getAttribute('disabled') !== 'disabled';
});
});
client.helper
.waitForElement(element)
.tap();
},
clickDone: function() {
var element = this.client.findElement(FxA.Selectors.moduleDone);
this.client.helper
.waitForElement(element)
.tap();
},
clickTabOpenFlow: function() {
var element = this.client.findElement(FxA.Selectors.tabOpenFlow);
this.client.helper
.waitForElement(element)
.tap();
},
clickFxaLogin: function() {
var element = this.client.findElement(FxA.Selectors.fxaLogin);
this.client.helper
.waitForElement(element)
.tap();
},
clickMenuItemFxa: function() {
var element = this.client.findElement(FxA.Selectors.menuItemFxa);
this.client.helper
.waitForElement(element)
.tap();
},
clickRequestButton: function() {
var element = this.client.findElement(FxA.Selectors.requestButton);
this.client.helper
.waitForElement(element)
.tap();
},
clickTabAPI: function() {
var element = this.client.findElement(FxA.Selectors.tabAPI);
this.client.helper
.waitForElement(element)
.tap();
},
clickFxaButton: function() {
var element = this.client.findElement(FxA.Selectors.fxaButton);
this.client.helper
.waitForElement(element)
.tap();
},
switchFrame: function(frameId) {
this.client.switchToFrame();
var frame = this.client.findElement(frameId);
this.client.switchToFrame(frame);
},
switchFrameDirect: function(frameId) {
var frame = this.client.findElement(frameId);
this.client.switchToFrame(frame);
},
clickThruPanel: function(panelId, buttonId) {
if (panelId === '#wifi') {
// The wifi panel will bring up a screen to show it is scanning for
// networks. Not waiting for this to clear will blow test timing
// and cause things to fail.
this.client.helper.waitForElementToDisappear('#loading-overlay');
}
// waitForElement is used to make sure animations and page changes have
// finished, and that the panel is displayed.
this.client.helper.waitForElement(panelId);
if (buttonId) {
var button = this.client.helper.waitForElement(buttonId);
button.click();
}
},
runSettingsMenu: function() {
this.clickMenuItemFxa();
this.clickFxaLogin();
this.switchFrame(FxA.Selectors.fxaFrame);
},
runUITestMenu: function() {
this.clickTabAPI();
this.clickFxaButton();
this.switchFrameDirect(FxA.Selectors.apiFxaFrame);
this.clickRequestButton();
this.switchFrame(FxA.Selectors.fxaFrame);
},
runFTUMenu: function() {
this.clickThruPanel('#languages', '#forward');
this.clickThruPanel('#wifi', '#forward');
this.clickThruPanel('#date_and_time', '#forward');
this.clickThruPanel('#geolocation', '#forward');
this.clickThruPanel('#import_contacts', '#forward');
this.clickThruPanel('#firefox_accounts',
FxA.Selectors.createAccountOrLogin);
this.switchFrame(FxA.Selectors.fxaFrame);
},
runFxAClientTestMenu: function() {
this.clickTabOpenFlow();
this.switchFrame(FxA.Selectors.fxaFrame);
}
};
module.exports = FxA;