diff --git a/src/background.js b/src/background.js index 3e46de5531..5ece7320cf 100644 --- a/src/background.js +++ b/src/background.js @@ -7,9 +7,9 @@ var cryptoService = new CryptoService(constantsService); var tokenService = new TokenService(); var apiService = new ApiService(tokenService); var userService = new UserService(tokenService, apiService, cryptoService); -var loginService = new LoginService(cryptoService, userService, apiService); -var folderService = new FolderService(cryptoService, userService, apiService); var settingsService = new SettingsService(userService); +var loginService = new LoginService(cryptoService, userService, apiService, settingsService); +var folderService = new FolderService(cryptoService, userService, apiService); var syncService = new SyncService(loginService, folderService, userService, apiService, settingsService); var autofillService = new AutofillService(); var passwordGenerationService = new PasswordGenerationService(); diff --git a/src/popup/app/current/currentController.js b/src/popup/app/current/currentController.js index 4a25057ef0..aae9ba0a82 100644 --- a/src/popup/app/current/currentController.js +++ b/src/popup/app/current/currentController.js @@ -41,17 +41,9 @@ angular canAutofill = true; }); - var filteredLogins = []; - var loginPromise = $q.when(loginService.getAllDecrypted()); - loginPromise.then(function (logins) { - for (var i = 0; i < logins.length; i++) { - if (logins[i].domain && logins[i].domain === domain) { - filteredLogins.push(logins[i]); - } - } - + $q.when(loginService.getAllDecryptedForDomain(domain)).then(function (logins) { $scope.loaded = true; - $scope.logins = filteredLogins; + $scope.logins = logins; }); }); } diff --git a/src/services/loginService.js b/src/services/loginService.js index 62e5485945..3280caad91 100644 --- a/src/services/loginService.js +++ b/src/services/loginService.js @@ -1,7 +1,8 @@ -function LoginService(cryptoService, userService, apiService) { +function LoginService(cryptoService, userService, apiService, settingsService) { this.cryptoService = cryptoService; this.userService = userService; this.apiService = apiService; + this.settingsService = settingsService; this.decryptedLoginCache = null; initLoginService(); @@ -133,10 +134,29 @@ function initLoginService() { LoginService.prototype.getAllDecryptedForDomain = function (domain) { var self = this; - return self.getAllDecrypted().then(function (logins) { + var eqDomainsPromise = self.settingsService.getEquivalentDomains().then(function (eqDomains) { + var matchingDomains = []; + for (var i = 0; i < eqDomains.length; i++) { + for (var j = 0; j < eqDomains[i].length; j++) { + if (eqDomains[i][j] === domain) { + matchingDomains = matchingDomains.concat(eqDomains[i]); + } + } + } + + return matchingDomains; + }); + + var loginsPromise = self.getAllDecrypted().then(function (logins) { + return logins; + }); + + return Q.all([eqDomainsPromise, loginsPromise]).then(function (result) { + var matchingDomains = result[0]; + var logins = result[1]; var loginsToReturn = []; for (var i = 0; i < logins.length; i++) { - if (logins[i].domain === domain) { + if (logins[i].domain && matchingDomains.indexOf(logins[i].domain) >= 0) { loginsToReturn.push(logins[i]); } } diff --git a/src/services/settingsService.js b/src/services/settingsService.js index 2268b6c207..0a33dfe2fc 100644 --- a/src/services/settingsService.js +++ b/src/services/settingsService.js @@ -32,7 +32,13 @@ function initSettingsService() { }; SettingsService.prototype.getEquivalentDomains = function (callback) { - getSettingsKey(this, 'equivalentDomains', callback); + var deferred = Q.defer(); + + getSettingsKey(this, 'equivalentDomains', function (domains) { + deferred.resolve(domains); + }); + + return deferred.promise; }; function getSettingsKey(self, key, callback) { diff --git a/src/services/syncService.js b/src/services/syncService.js index f249e49c74..fff916d1fc 100644 --- a/src/services/syncService.js +++ b/src/services/syncService.js @@ -188,7 +188,9 @@ function initSyncService() { } if (response && response.globalEquivalentDomains) { for (var i = 0; i < response.globalEquivalentDomains.length; i++) { - eqDomains = eqDomains.concat(response.globalEquivalentDomains[i].domains); + if (response.globalEquivalentDomains[i].domains.length) { + eqDomains.push(response.globalEquivalentDomains[i].domains); + } } }