/usr/share/webext/browserpass/background.js is in webext-browserpass 2.0.11+dfsg-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | "use strict";
var app = "com.dannyvankooten.browserpass";
var tabInfos = {};
chrome.runtime.onMessage.addListener(onMessage);
chrome.tabs.onUpdated.addListener(onTabUpdated);
// fill login form & submit
function fillLoginForm(login, tab) {
const loginParam = JSON.stringify(login);
const autoSubmit = localStorage.getItem("autoSubmit");
const autoSubmitParam = autoSubmit == "true";
if (autoSubmit === null) {
localStorage.setItem("autoSubmit", autoSubmitParam);
}
chrome.tabs.executeScript(
tab.id,
{
allFrames: true,
file: "/inject.js"
},
function() {
chrome.tabs.executeScript({
allFrames: true,
code: `browserpassFillForm(${loginParam}, ${autoSubmitParam});`
});
}
);
if (login.digits) {
tabInfos[tab.id] = {
login: loginParam,
hostname: getHostname(tab.url)
};
displayOTP(tab.id);
}
}
function displayOTP(tabId) {
chrome.tabs.executeScript(
tabId,
{
file: "/inject_otp.js"
},
function() {
chrome.tabs.executeScript(tabId, {
code: `browserpassDisplayOTP(${tabInfos[tabId].login});`
});
}
);
}
function onMessage(request, sender, sendResponse) {
if (request.action == "login") {
chrome.runtime.sendNativeMessage(
app,
{ action: "get", entry: request.entry },
function(response) {
if (chrome.runtime.lastError) {
var error = chrome.runtime.lastError.message;
console.error(error);
sendResponse({ status: "ERROR", error: error });
}
chrome.tabs.query({ lastFocusedWindow: true, active: true }, function(
tabs
) {
// do not send login data to page if URL changed during search.
if (tabs[0].url == request.urlDuringSearch) {
fillLoginForm(response, tabs[0]);
}
});
sendResponse({ status: "OK" });
}
);
// Need to return true if we are planning to sendResponse asynchronously
return true;
}
if (request.action == "dismissOTP" && sender.tab.id in tabInfos) {
delete tabInfos[sender.tab.id];
}
}
function onTabUpdated(tabId, changeInfo, tab) {
if (changeInfo.url && tabId in tabInfos) {
if (getHostname(changeInfo.url) != tabInfos[tabId].hostname) {
delete tabInfos[tabId];
}
}
if (changeInfo.status == "complete" && tabId in tabInfos) {
displayOTP(tabId);
}
}
function getHostname(url) {
// Manipulate the browser into parsing the URL for us
var a = document.createElement("a");
a.href = url;
return a.hostname;
}
|