From a99af17e2f94cdcbed0fee8bc9a183fdd6b1c7bc Mon Sep 17 00:00:00 2001 From: Marina Samuel Date: Fri, 20 Mar 2015 17:46:24 -0400 Subject: [PATCH] Bug 1145410: Return valid results when querying the provider cache while it's empty or being populated. r=adw --- toolkit/modules/NewTabUtils.jsm | 12 ++++++++-- .../tests/xpcshell/test_NewTabUtils.js | 23 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/toolkit/modules/NewTabUtils.jsm b/toolkit/modules/NewTabUtils.jsm index 2c41fdd3ba4..e8d9030c861 100644 --- a/toolkit/modules/NewTabUtils.jsm +++ b/toolkit/modules/NewTabUtils.jsm @@ -1253,11 +1253,19 @@ this.NewTabUtils = { }, getProviderLinks: function(aProvider) { - return Links._providers.get(aProvider).sortedLinks; + let cache = Links._providers.get(aProvider); + if (cache && cache.sortedLinks) { + return cache.sortedLinks; + } + return []; }, isTopSiteGivenProvider: function(aSite, aProvider) { - return Links._providers.get(aProvider).siteMap.has(aSite); + let cache = Links._providers.get(aProvider); + if (cache && cache.siteMap) { + return cache.siteMap.has(aSite); + } + return false; }, isTopPlacesSite: function(aSite) { diff --git a/toolkit/modules/tests/xpcshell/test_NewTabUtils.js b/toolkit/modules/tests/xpcshell/test_NewTabUtils.js index af0e857f651..fa87b788ccb 100644 --- a/toolkit/modules/tests/xpcshell/test_NewTabUtils.js +++ b/toolkit/modules/tests/xpcshell/test_NewTabUtils.js @@ -16,6 +16,29 @@ function run_test() { run_next_test(); } +add_task(function validCacheMidPopulation() { + let expectedLinks = makeLinks(0, 3, 1); + + let provider = new TestProvider(done => done(expectedLinks)); + provider.maxNumLinks = expectedLinks.length; + + NewTabUtils.initWithoutProviders(); + NewTabUtils.links.addProvider(provider); + let promise = new Promise(resolve => NewTabUtils.links.populateCache(resolve)); + + // isTopSiteGivenProvider() and getProviderLinks() should still return results + // even when cache is empty or being populated. + do_check_false(NewTabUtils.isTopSiteGivenProvider("example1.com", provider)); + do_check_links(NewTabUtils.getProviderLinks(provider), []); + + yield promise; + + // Once the cache is populated, we get the expected results + do_check_true(NewTabUtils.isTopSiteGivenProvider("example1.com", provider)); + do_check_links(NewTabUtils.getProviderLinks(provider), expectedLinks); + NewTabUtils.links.removeProvider(provider); +}); + add_task(function notifyLinkDelete() { let expectedLinks = makeLinks(0, 3, 1);