in media/js/base/fxa-product-button.es6.js [105:156]
FxaProductButton.updateProductLinks = function (
buttons,
flowParams,
overwrite
) {
// if flowParams are undefined (e.g. blocked by CORS), then do nothing.
if (!flowParams) {
return;
}
// applies url to all buttons and adds cta position
for (let i = 0; i < buttons.length; i++) {
const href = buttons[i].href;
const hostName = FxaProductButton.getHostName(href);
// check if link is in the FxA referral allowedListDomains.
if (hostName && allowedList.indexOf(hostName) !== -1) {
// Only add flow params if they do not already exist,
// unless `overwrite` is true.
if (
!overwrite &&
href.indexOf('flow_id') === -1 &&
href.indexOf('flow_begin_time') === -1 &&
href.indexOf('device_id') === -1
) {
buttons[i].href += flowParams;
} else if (overwrite) {
const buttonParams = window._SearchParams.queryStringToObject(
href.split('?')[1]
);
const updated =
window._SearchParams.queryStringToObject(flowParams);
if (buttonParams.flow_id) {
buttonParams.flow_id = updated.flow_id;
}
if (buttonParams.flow_begin_time) {
buttonParams.flow_begin_time = updated.flow_begin_time;
}
if (buttonParams.device_id) {
buttonParams.device_id = updated.device_id;
}
const newParams =
window._SearchParams.objectToQueryString(buttonParams);
buttons[i].href = `${href.split('?')[0]}?${newParams}`;
}
}
}
};