Merge branch 'develop'

This commit is contained in:
varjolintu 2017-07-21 11:16:55 +03:00
commit e831620661
14 changed files with 145 additions and 174 deletions

View file

@ -1,3 +1,9 @@
0.2.5 (2107-07-21)
=========================
- Fixed incorrect return value in keepass.getCryptoKey
- Added a better error message handling
- Added an error message when Native Messaging is disabled in KeePassXC
0.2.4 (2017-07-11)
=========================
- Changed comparison operators to strict ones (and some code cleaning)

View file

@ -1,8 +1,4 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
var browserAction = {};

View file

@ -1,14 +1,10 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
var event = {};
event.onMessage = function(request, sender, callback) {
if (request.action in event.messageHandlers) {
//console.log("onMessage(" + request.action + ") for #" + sender.tab.id);
//console.log('onMessage(' + request.action + ') for #' + sender.tab.id);
if (!sender.hasOwnProperty('tab') || sender.tab.id < 1) {
sender.tab = {};
sender.tab.id = page.currentTabId;
@ -48,7 +44,7 @@ event.invoke = function(handler, callback, senderTabId, args, secondTime) {
page.removePageInformationFromNotExistingTabs();
browser.tabs.get(senderTabId, (tab) => {
//browser.tabs.query({"active": true, "windowId": browser.windows.WINDOW_ID_CURRENT}, function(tabs) {
//browser.tabs.query({'active': true, 'windowId': browser.windows.WINDOW_ID_CURRENT}, function(tabs) {
//if (tabs.length === 0)
// return; // For example: only the background devtools or a popup are opened
//var tab = tabs[0];
@ -92,6 +88,24 @@ event.onShowAlert = function(callback, tab, message) {
else { alert(message); }
}
event.showStatus = function(configured, tab, callback) {
let keyId = null;
if (configured) {
keyId = keepass.keyRing[keepass.databaseHash].id;
}
browserAction.showDefault(null, tab);
callback({
identifier: keyId,
configured: configured,
databaseClosed: keepass.isDatabaseClosed,
keePassXCAvailable: keepass.isKeePassXCAvailable,
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
associated: keepass.isAssociated(),
error: page.tabs[tab.id].errorMessage
});
}
event.onLoadSettings = function(callback, tab) {
page.settings = (typeof(localStorage.settings) === 'undefined') ? {} : JSON.parse(localStorage.settings);
}
@ -119,22 +133,7 @@ event.onSaveSettings = function(callback, tab, settings) {
event.onGetStatus = function(callback, tab) {
keepass.testAssociation((response) => {
keepass.isConfigured((configured) => {
let keyId = null;
if (configured) {
keyId = keepass.keyRing[keepass.databaseHash].id;
}
browserAction.showDefault(null, tab);
console.log(page.tabs[tab.id].errorMessage);
callback({
identifier: keyId,
configured: configured,
databaseClosed: keepass.isDatabaseClosed,
keePassXCAvailable: keepass.isKeePassXCAvailable,
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
associated: keepass.isAssociated(),
error: page.tabs[tab.id].errorMessage
});
event.showStatus(configured, tab, callback);
});
}, tab);
}
@ -150,22 +149,7 @@ event.onReconnect = function(callback, tab) {
if (gdRes) {
keepass.testAssociation((response) => {
keepass.isConfigured((configured) => {
let keyId = null;
if (configured) {
keyId = keepass.keyRing[keepass.databaseHash].id;
}
browserAction.showDefault(null, tab);
console.log(page.tabs[tab.id].errorMessage);
callback({
identifier: keyId,
configured: configured,
databaseClosed: keepass.isDatabaseClosed,
keePassXCAvailable: keepass.isKeePassXCAvailable,
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
associated: keepass.isAssociated(),
error: page.tabs[tab.id].errorMessage
});
event.showStatus(configured, tab, callback);
});
}, tab);
}
@ -277,5 +261,5 @@ event.messageHandlers = {
'update_available_keepassxc': event.onUpdateAvailableKeePassXC,
'generate_password': keepass.generatePassword,
'copy_password': keepass.copyPassword,
"reconnect": event.onReconnect
'reconnect': event.onReconnect
};

View file

@ -7,11 +7,7 @@ keepass.changePublicKeys(null, (pkRes) => {
keepass.getDatabaseHash((gdRes) => {}, null);
});
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
// Set initial tab-ID
browser.tabs.query({'active': true, 'windowId': browser.windows.WINDOW_ID_CURRENT}, (tabs) => {
@ -30,7 +26,7 @@ let _interval = 250;
*/
browser.tabs.onCreated.addListener((tab) => {
if (tab.id > 0) {
//console.log("browser.tabs.onCreated(" + tab.id+ ")");
//console.log('browser.tabs.onCreated(' + tab.id+ ')');
if (tab.selected) {
page.currentTabId = tab.id;
event.invoke(page.switchTab, null, tab.id, []);
@ -61,11 +57,11 @@ browser.tabs.onActivated.addListener((activeInfo) => {
browserAction.removeRememberPopup(null, {'id': page.currentTabId}, true);
browser.tabs.get(activeInfo.tabId, (info) => {
//console.log(info.id + ": " + info.url);
//console.log(info.id + ': ' + info.url);
if (info && info.id) {
page.currentTabId = info.id;
if (info.status === 'complete') {
//console.log("event.invoke(page.switchTab, null, "+info.id + ", []);");
//console.log('event.invoke(page.switchTab, null, '+info.id + ', []);');
event.invoke(page.switchTab, null, info.id, []);
}
}

View file

@ -15,16 +15,12 @@ keepass.nativePort = null;
keepass.keySize = 24;
keepass.latestVersionUrl = 'https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest';
keepass.cacheTimeout = 30 * 1000; // milliseconds
keepass.databaseHash = "no-hash"; //no-hash = KeePassXC is too old and does not return a hash value
keepass.databaseHash = 'no-hash'; //no-hash = KeePassXC is too old and does not return a hash value
keepass.keyRing = (typeof(localStorage.keyRing) === 'undefined') ? {} : JSON.parse(localStorage.keyRing);
keepass.keyId = 'keepassxc-browser-cryptokey-name';
keepass.keyBody = 'keepassxc-browser-key';
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
const kpActions = {
SET_LOGIN: 'set-login',
@ -34,7 +30,36 @@ const kpActions = {
TEST_ASSOCIATE: 'test-associate',
GET_DATABASE_HASH: 'get-databasehash',
CHANGE_PUBLIC_KEYS: 'change-public-keys'
}
};
const kpErrors = {
UNKNOWN_ERROR: 0,
DATABASE_NOT_OPENED: 1,
DATABASE_HASH_NOT_RECEIVED: 2,
CLIENT_PUBLIC_KEY_NOT_RECEIVED: 3,
CANNOT_DECRYPT_MESSAGE: 4,
TIMEOUT_OR_NOT_CONNECTED: 5,
ACTION_CANCELLED_OR_DENIED: 6,
PUBLIC_KEY_NOT_FOUND: 7,
ASSOCIATION_FAILED: 8,
KEY_CHANGE_FAILED: 9,
ENCRYPTION_KEY_UNRECOGNIZED: 10,
NO_SAVED_DATABASES_FOUND: 11,
errorMessages : {
0: { msg: 'Unknown error' },
1: { msg: 'Database not opened' },
2: { msg: 'Database hash not received' },
3: { msg: 'Client public key not reveiced' },
4: { msg: 'Cannot decrypt message' },
5: { msg: 'Timeout or not connected to KeePassXC' },
6: { msg: 'Action cancelled or denied' },
7: { msg: 'Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC?' },
8: { msg: 'KeePassXC association failed, try again.' },
9: { msg: 'Key change was not successful.' },
10: { msg: 'Encryption key is not recognized' },
11: { msg: 'No saved databases found.' }
}
};
keepass.addCredentials = function(callback, tab, username, password, url) {
keepass.updateCredentials(callback, tab, null, username, password, url);
@ -150,7 +175,7 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
entries = parsed.entries;
keepass.updateLastUsed(keepass.databaseHash);
if (entries.length === 0) {
//questionmark-icon is not triggered, so we have to trigger for the normal symbol
// questionmark-icon is not triggered, so we have to trigger for the normal symbol
browserAction.showDefault(null, tab);
}
callback(entries);
@ -309,7 +334,7 @@ keepass.associate = function(callback, tab) {
const id = parsed.id;
if (!keepass.verifyResponse(parsed, response.nonce)) {
page.tabs[tab.id].errorMessage = 'KeePassXC association failed, try again.';
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_ASSOCIATION_FAILED);
}
else {
keepass.setCryptoKey(id, key); // Save the current public key as id key for the database
@ -347,9 +372,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
if (!keepass.serverPublicKey) {
if (tab && page.tabs[tab.id]) {
const errorMessage = 'No KeePassXC public key available.';
page.tabs[tab.id].errorMessage = errorMessage;
console.log(errorMessage);
handleError(tab, kpErrors.ERROR_KEEPASS_PUBLIC_KEY_NOT_FOUND);
}
callback(false);
return false;
@ -359,11 +382,9 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
const nonce = nacl.randomBytes(keepass.keySize);
const {dbid, dbkey} = keepass.getCryptoKey();
if (dbkey === null) {
if (dbkey === null || dbid === null) {
if (tab && page.tabs[tab.id]) {
const errorMessage = 'No saved databases found.';
page.tabs[tab.id].errorMessage = errorMessage;
console.log(errorMessage);
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND);
}
callback(false);
return false;
@ -395,16 +416,12 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
const hash = response.hash || 0;
keepass.deleteKey(hash);
keepass.isEncryptionKeyUnrecognized = true;
const errMsg = 'Encryption key is not recognized!';
console.log(errMsg);
page.tabs[tab.id].errorMessage = errMsg;
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED);
keepass.associated.value = false;
keepass.associated.hash = null;
}
else if (!keepass.isAssociated()) {
const errMsg = 'Association was not successful!';
console.log(errMsg);
page.tabs[tab.id].errorMessage = errMsg;
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_ASSOCIATION_FAILED);
}
else {
if (tab && page.tabs[tab.id]) {
@ -424,7 +441,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
if (!keepass.isConnected) {
page.tabs[tab.id].errorMessage = 'Not connected with KeePassXC.';
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED);
callback([]);
return;
}
@ -440,9 +457,16 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
action: kpAction
};
const encrypted = keepass.encrypt(messageData, nonce);
if (encrypted.length <= 0) {
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_PUBLIC_KEY_NOT_FOUND);
callback(keepass.databaseHash);
return;
}
const request = {
action: kpAction,
message: keepass.encrypt(messageData, nonce),
message: encrypted,
nonce: keepass.b64e(nonce)
};
@ -453,9 +477,7 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
const message = nacl.util.encodeUTF8(res);
const parsed = JSON.parse(message);
if (parsed.hash)
{
console.log('hash reply received: ' + parsed.hash);
if (parsed.hash) {
const oldDatabaseHash = keepass.databaseHash;
keepass.setcurrentKeePassXCVersion(parsed.version);
keepass.databaseHash = parsed.hash || 'no-hash';
@ -469,24 +491,17 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
keepass.isKeePassXCAvailable = true;
callback(parsed.hash);
}
else if (parsed.errorCode)
{
else if (parsed.errorCode) {
keepass.databaseHash = 'no-hash';
keepass.isDatabaseClosed = true;
console.log('Error: KeePass database is not opened.');
if (tab && page.tabs[tab.id]) {
page.tabs[tab.id].errorMessage = 'KeePass database is not opened.';
}
keepass.handleError(tab, ERROR_KEEPASS_DATABASE_NOT_OPENED);
callback(keepass.databaseHash);
}
}
}
else
{
else {
keepass.databaseHash = 'no-hash';
if (tab && page.tabs[tab.id]) {
page.tabs[tab.id].errorMessage = response.error.length > 0 ? response.error : 'Database hash not received.';
}
keepass.handleError(tab, response.errorCode, response.error);
callback(keepass.databaseHash);
}
});
@ -510,14 +525,12 @@ keepass.changePublicKeys = function(tab, callback) {
nonce: nonce
}
keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, function(response) {
keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
keepass.setcurrentKeePassXCVersion(response.version);
if (!keepass.verifyKeyResponse(response, key, nonce)) {
if (tab && page.tabs[tab.id]) {
const errMsg = 'Key change was not successful.';
page.tabs[tab.id].errorMessage = errMsg;
console.log(errMsg);
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_KEY_CHANGE_FAILED);
callback(false);
}
}
@ -525,7 +538,6 @@ keepass.changePublicKeys = function(tab, callback) {
console.log('Server public key: ' + keepass.b64e(keepass.serverPublicKey));
}
callback(true);
});
keepass.nativePort.postMessage(message);
}
@ -541,8 +553,7 @@ keepass.isConfigured = function(callback) {
callback(keepass.databaseHash in keepass.keyRing);
}, null);
}
else
{
else {
callback(keepass.databaseHash in keepass.keyRing);
}
}
@ -656,7 +667,7 @@ keepass.connectToNative = function() {
}
keepass.onNativeMessage = function (response) {
//console.log("Received message: " + JSON.stringify(response));
//console.log('Received message: ' + JSON.stringify(response));
}
function onDisconnected() {
@ -720,9 +731,14 @@ keepass.verifyResponse = function(response, nonce, id) {
}
keepass.handleError = function(tabId, errorMessage, errorCode) {
console.log('Received error ${errorCode}: ${errorMessage}');
page.tabs[tabId].errorMessage = errorMessage;
keepass.handleError = function(tab, errorCode, errorMessage = '') {
if (errorMessage.length === 0) {
errorMessage = kpErrors.errorMessages[errorCode].msg;
}
console.log('Error ' + errorCode + ': ' + errorMessage);
if (tab && page.tabs[tab.id]) {
page.tabs[tab.id].errorMessage = errorMessage;
}
}
keepass.b64e = function(d) {
@ -734,12 +750,13 @@ keepass.b64d = function(d) {
}
keepass.getCryptoKey = function() {
let dbkey = null;
let dbid = null;
if (!(keepass.databaseHash in keepass.keyRing)) {
return null;
return {dbid, dbkey};
}
const dbid = keepass.keyRing[keepass.databaseHash].id;
let dbkey = null;
dbid = keepass.keyRing[keepass.databaseHash].id;
if (dbid) {
dbkey = keepass.keyRing[keepass.databaseHash].key;
@ -761,7 +778,6 @@ keepass.encrypt = function(input, nonce) {
return keepass.b64e(message);
}
}
console.log('Cannot encrypt message! Server public key needed.');
return '';
}
@ -769,9 +785,5 @@ keepass.decrypt = function(input, nonce, toStr) {
const m = keepass.b64d(input);
const n = keepass.b64d(nonce);
const res = nacl.box.open(m, n, keepass.serverPublicKey, keepass.keyPair.secretKey);
if (!res) {
console.log('Failed to decrypt message');
}
return res;
}

View file

@ -1,8 +1,14 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
const defaultSettings = {
checkUpdateKeePassXC: 3,
autoCompleteUsernames: true,
autoFillAndSend: true,
usePasswordGenerator: true,
autoFillSingleEntry: false,
autoRetrieveCredentials: true,
proxyPort: '19700'
}
var page = {};
page.tabs = {};
@ -14,25 +20,25 @@ page.blockedTabs = {};
page.initSettings = function() {
event.onLoadSettings();
if (!('checkUpdateKeePassXC' in page.settings)) {
page.settings.checkUpdateKeePassXC = 3;
page.settings.checkUpdateKeePassXC = defaultSettings.checkUpdateKeePassXC;
}
if (!('autoCompleteUsernames' in page.settings)) {
page.settings.autoCompleteUsernames = true;
page.settings.autoCompleteUsernames = defaultSettings.autoCompleteUsernames;
}
if (!('autoFillAndSend' in page.settings)) {
page.settings.autoFillAndSend = true;
page.settings.autoFillAndSend = defaultSettings.autoFillAndSend;
}
if (!('usePasswordGenerator' in page.settings)) {
page.settings.usePasswordGenerator = true;
page.settings.usePasswordGenerator = defaultSettings.usePasswordGenerator;
}
if (!('autoFillSingleEntry' in page.settings)) {
page.settings.autoFillSingleEntry = false;
page.settings.autoFillSingleEntry = defaultSettings.autoFillSingleEntry;
}
if (!('autoRetrieveCredentials' in page.settings)) {
page.settings.autoRetrieveCredentials = true;
page.settings.autoRetrieveCredentials = defaultSettings.autoRetrieveCredentials;
}
if (!('port' in page.settings)) {
page.settings.port = '19700';
page.settings.port = defaultSettings.proxyPort;
}
localStorage.settings = JSON.stringify(page.settings);
}
@ -74,7 +80,7 @@ page.clearCredentials = function(tabId, complete) {
}
page.createTabEntry = function(tabId) {
//console.log("page.createTabEntry("+tabId+")");
//console.log('page.createTabEntry('+tabId+')');
page.tabs[tabId] = {
'stack': [],
'errorMessage': null,

View file

@ -3,11 +3,7 @@ if (typeof browser !== 'undefined') {
isFirefox = true;
}
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
// Initialize autocomplete feature
$(this.target).find('input').autocomplete();
@ -91,7 +87,7 @@ cipAutocomplete.elements = [];
cipAutocomplete.init = function(field) {
if (field.hasClass('ui-autocomplete-input')) {
//_f(credentialInputs[i].username).autocomplete("source", autocompleteSource);
//_f(credentialInputs[i].username).autocomplete('source', autocompleteSource);
field.autocomplete('destroy');
}
@ -144,7 +140,7 @@ cipAutocomplete.onBlur = function() {
else {
const fieldId = cipFields.prepareId(jQuery(this).attr('data-cip-id'));
const fields = cipFields.getCombination('username', fieldId);
if (_f(fields.password) && _f(fields.password).data('unchanged') !== true && jQuery(this).val() !== "") {
if (_f(fields.password) && _f(fields.password).data('unchanged') !== true && jQuery(this).val() !== '') {
cip.fillInCredentials(fields, true, true);
}
}
@ -437,7 +433,7 @@ cipPassword.checkObservedElements = function() {
}
else if (!field.is(':visible')) {
iconField.hide();
//field.removeData("cip-password-generator");
//field.removeData('cip-password-generator');
}
else if (field.is(':visible')) {
iconField.show();
@ -558,7 +554,7 @@ cipDefine.initDescription = function() {
cipDefine.prepareStep2();
cipDefine.markAllPasswordFields(jQuery('#b2c-cipDefine-fields'));
}
else if (jQuery(this).data("step") === 2) {
else if (jQuery(this).data('step') === 2) {
cipDefine.selection.password = null;
cipDefine.prepareStep3();
cipDefine.markAllStringFields(jQuery('#b2c-cipDefine-fields'));
@ -716,8 +712,8 @@ cipDefine.markFields = function ($chooser, $pattern) {
/* skip step if no entry was found
if(!$found) {
alert("No username field found.\nContinue with choosing a password field.");
jQuery("button#b2c-btn-skip").click();
alert('No username field found.\nContinue with choosing a password field.'');
jQuery('button#b2c-btn-skip').click();
}
*/
}
@ -743,9 +739,9 @@ cipDefine.prepareStep2 = function() {
cipDefine.prepareStep3 = function() {
/* skip step if no entry was found
if(!jQuery("div#b2c-cipDefine-fields").data("username") && !jQuery("div#b2c-cipDefine-fields").data("password")) {
alert("Neither an username field nor a password field were selected.\nNothing will be changed and chooser will be closed now.");
jQuery("button#b2c-btn-dismiss").click();
if(!jQuery('div#b2c-cipDefine-fields').data('username') && !jQuery('div#b2c-cipDefine-fields').data('password')) {
alert('Neither an username field nor a password field were selected.\nNothing will be changed and chooser will be closed now.'');
jQuery('button#b2c-btn-dismiss').click();
return;
}
*/
@ -791,7 +787,7 @@ cipFields.setUniqueId = function(field) {
}
cipFields.prepareId = function(id) {
return id.replace(/[:#.,\[\]\(\)' "]/g, function(m) { return "\\"+m });
return id.replace(/[:#.,\[\]\(\)' "]/g, function(m) { return '\\'+m });
}
cipFields.getAllFields = function() {
@ -1275,7 +1271,7 @@ cip.fillInCredentials = function(combination, onlyPassword, suppressWarnings) {
const fieldId = combination.password || combination.username;
const field = _f(fieldId);
if (field) {
const form2 = field.closest("form");
const form2 = field.closest('form');
if (form2 && form2.length > 0) {
cipForm.init(form2, combination);
}

View file

@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "keepassxc-browser",
"version": "0.2.4",
"version": "0.2.5",
"description": "KeePassXC integration for modern web browsers",
"author": "Sami Vänttinen",
"icons": {

View file

@ -1,8 +1,4 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
if (jQuery) {
var $ = jQuery.noConflict(true);

View file

@ -1,11 +1,6 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
function status_response(r) {
console.log(r);
$('#initial-state').hide();
$('#error-encountered').hide();
$('#need-reconfigure').hide();
@ -28,7 +23,7 @@ function status_response(r) {
$('#need-reconfigure').show();
$('#need-reconfigure-message').html(r.error);
}
else if (r.error != null) {
else if (r.error !== null) {
$('#error-encountered').show();
$('#error-message').html(r.error);
}
@ -63,7 +58,7 @@ $(function() {
browser.tabs.query({'active': true, 'windowId': browser.windows.WINDOW_ID_CURRENT}, (tabs) => {
if (tabs.length === 0)
return; // For example: only the background devtools or a popup are opened
var tab = tabs[0];
let tab = tabs[0];
browser.tabs.sendMessage(tab.id, {
action: 'redetect_fields'

View file

@ -1,8 +1,4 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
var $ = jQuery.noConflict(true);
var _settings = typeof(localStorage.settings) ==='undefined' ? {} : JSON.parse(localStorage.settings);

View file

@ -1,13 +1,9 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
$(function() {
browser.runtime.getBackgroundPage(function(global) {
browser.tabs.query(null, (tab) => {
//var data = global.tab_httpauth_list["tab" + tab.id];
//const data = global.tab_httpauth_list['tab' + tab.id];
const data = global.page.tabs[tab.id].loginList;
let ul = document.getElementById('login-list');
for (let i = 0; i < data.logins.length; i++) {

View file

@ -1,8 +1,4 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
$(function() {
browser.runtime.getBackgroundPage(function(global) {

View file

@ -1,8 +1,4 @@
window.browser = (function () {
return window.msBrowser ||
window.browser ||
window.chrome;
})();
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
var _tab;