diff --git a/browser/base/content/test/newtab/browser_newtab_background_captures.js b/browser/base/content/test/newtab/browser_newtab_background_captures.js index 2cffa70a44c..82ba365b7e2 100644 --- a/browser/base/content/test/newtab/browser_newtab_background_captures.js +++ b/browser/base/content/test/newtab/browser_newtab_background_captures.js @@ -18,8 +18,7 @@ function runTests() { Services.prefs.setBoolPref(CAPTURE_PREF, true); // Make sure the thumbnail doesn't exist yet. - let siteName = "newtab_background_captures"; - let url = "http://example.com/#" + siteName; + let url = "http://example.com/"; let path = imports.PageThumbsStorage.getFilePathForURL(url); let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(path); @@ -29,7 +28,7 @@ function runTests() { catch (err) {} // Add a top site. - yield setLinks(siteName); + yield setLinks("-1"); // We need a handle to a hidden, pre-loaded newtab so we can verify that it // doesn't allow background captures. Add a newtab, which triggers creation diff --git a/browser/base/content/test/newtab/browser_newtab_bug721442.js b/browser/base/content/test/newtab/browser_newtab_bug721442.js index 597aed25137..f5223f85d4e 100644 --- a/browser/base/content/test/newtab/browser_newtab_bug721442.js +++ b/browser/base/content/test/newtab/browser_newtab_bug721442.js @@ -4,17 +4,17 @@ function runTests() { yield setLinks("0,1,2,3,4,5,6,7,8"); setPinnedLinks([ - {url: "http://example.com/#7", title: ""}, - {url: "http://example.com/#8", title: "title"}, - {url: "http://example.com/#9", title: "http://example.com/#9"} + {url: "http://example7.com/", title: ""}, + {url: "http://example8.com/", title: "title"}, + {url: "http://example9.com/", title: "http://example9.com/"} ]); yield addNewTabPageTab(); checkGrid("7p,8p,9p,0,1,2,3,4,5"); - checkTooltip(0, "http://example.com/#7", "1st tooltip is correct"); - checkTooltip(1, "title\nhttp://example.com/#8", "2nd tooltip is correct"); - checkTooltip(2, "http://example.com/#9", "3rd tooltip is correct"); + checkTooltip(0, "http://example7.com/", "1st tooltip is correct"); + checkTooltip(1, "title\nhttp://example8.com/", "2nd tooltip is correct"); + checkTooltip(2, "http://example9.com/", "3rd tooltip is correct"); } function checkTooltip(aIndex, aExpected, aMessage) { diff --git a/browser/base/content/test/newtab/browser_newtab_bug725996.js b/browser/base/content/test/newtab/browser_newtab_bug725996.js index 4d3ef7d5ed7..fee792dc655 100644 --- a/browser/base/content/test/newtab/browser_newtab_bug725996.js +++ b/browser/base/content/test/newtab/browser_newtab_bug725996.js @@ -10,14 +10,14 @@ function runTests() { let cell = getCell(0).node; - sendDragEvent("drop", cell, "http://example.com/#99\nblank"); - is(NewTabUtils.pinnedLinks.links[0].url, "http://example.com/#99", + sendDragEvent("drop", cell, "http://example99.com/\nblank"); + is(NewTabUtils.pinnedLinks.links[0].url, "http://example99.com/", "first cell is pinned and contains the dropped site"); yield whenPagesUpdated(); checkGrid("99p,0,1,2,3,4,5,6,7"); sendDragEvent("drop", cell, ""); - is(NewTabUtils.pinnedLinks.links[0].url, "http://example.com/#99", + is(NewTabUtils.pinnedLinks.links[0].url, "http://example99.com/", "first cell is still pinned with the site we dropped before"); } diff --git a/browser/base/content/test/newtab/browser_newtab_bug765628.js b/browser/base/content/test/newtab/browser_newtab_bug765628.js index 6b93c8e6de7..9fc80e3ccbb 100644 --- a/browser/base/content/test/newtab/browser_newtab_bug765628.js +++ b/browser/base/content/test/newtab/browser_newtab_bug765628.js @@ -2,7 +2,7 @@ http://creativecommons.org/publicdomain/zero/1.0/ */ const BAD_DRAG_DATA = "javascript:alert('h4ck0rz');\nbad stuff"; -const GOOD_DRAG_DATA = "http://example.com/#99\nsite 99"; +const GOOD_DRAG_DATA = "http://example99.com/\nsite 99"; function runTests() { yield setLinks("0,1,2,3,4,5,6,7,8"); diff --git a/browser/base/content/test/newtab/browser_newtab_bug991111.js b/browser/base/content/test/newtab/browser_newtab_bug991111.js index 6149bf51e7a..e9932094ca8 100644 --- a/browser/base/content/test/newtab/browser_newtab_bug991111.js +++ b/browser/base/content/test/newtab/browser_newtab_bug991111.js @@ -2,7 +2,7 @@ http://creativecommons.org/publicdomain/zero/1.0/ */ function runTests() { - yield setLinks("0"); + yield setLinks("-1"); yield addNewTabPageTab(); // Remember if the click handler was triggered diff --git a/browser/base/content/test/newtab/browser_newtab_enhanced.js b/browser/base/content/test/newtab/browser_newtab_enhanced.js index 5fdc6c1d142..71b8b1f3c07 100644 --- a/browser/base/content/test/newtab/browser_newtab_enhanced.js +++ b/browser/base/content/test/newtab/browser_newtab_enhanced.js @@ -21,7 +21,10 @@ function runTests() { Services.prefs.setBoolPref(PRELOAD_PREF, false); function getData(cellNum) { - let siteNode = getCell(cellNum).site.node; + let cell = getCell(cellNum); + if (!cell.site) + return null; + let siteNode = cell.site.node; return { type: siteNode.getAttribute("type"), enhanced: siteNode.querySelector(".enhanced-content").style.backgroundImage, @@ -29,7 +32,7 @@ function runTests() { } // Make the page have a directory link followed by a history link - yield setLinks("1"); + yield setLinks("-1"); // Test with enhanced = false NewTabUtils.allPages.enhanced = false; @@ -38,9 +41,7 @@ function runTests() { is(type, "organic", "directory link is organic"); isnot(enhanced, "", "directory link has enhanced image"); - let {type, enhanced} = getData(1); - is(type, "history", "history link is history"); - is(enhanced, "", "history link has no enhanced image"); + is(getData(1), null, "history link pushed out by directory link"); // Test with enhanced = true NewTabUtils.allPages.enhanced = true; @@ -49,7 +50,14 @@ function runTests() { is(type, "organic", "directory link is still organic"); isnot(enhanced, "", "directory link still has enhanced image"); - let {type, enhanced} = getData(1); - is(type, "enhanced", "history link now is enhanced"); - isnot(enhanced, "", "history link now has enhanced image"); + is(getData(1), null, "history link still pushed out by directory link"); + + // Test with a pinned link + setPinnedLinks("-1"); + yield addNewTabPageTab(); + let {type, enhanced} = getData(0); + is(type, "enhanced", "pinned history link is enhanced"); + isnot(enhanced, "", "pinned history link has enhanced image"); + + is(getData(1), null, "directory link pushed out by pinned history link"); } diff --git a/browser/base/content/test/newtab/browser_newtab_update.js b/browser/base/content/test/newtab/browser_newtab_update.js index bf03a5a8c89..a0151e95332 100644 --- a/browser/base/content/test/newtab/browser_newtab_update.js +++ b/browser/base/content/test/newtab/browser_newtab_update.js @@ -47,5 +47,5 @@ function runTests() { } function link(id) { - return { url: "http://example.com/#" + id, title: "site#" + id }; + return { url: "http://example" + id + ".com/", title: "site#" + id }; } diff --git a/browser/base/content/test/newtab/head.js b/browser/base/content/test/newtab/head.js index cd094f59ed8..11ca3064e1f 100644 --- a/browser/base/content/test/newtab/head.js +++ b/browser/base/content/test/newtab/head.js @@ -203,17 +203,20 @@ function getCell(aIndex) { * Allows to provide a list of links that is used to construct the grid. * @param aLinksPattern the pattern (see below) * - * Example: setLinks("1,2,3") - * Result: [{url: "http://example.com/#1", title: "site#1"}, - * {url: "http://example.com/#2", title: "site#2"} - * {url: "http://example.com/#3", title: "site#3"}] + * Example: setLinks("-1,0,1,2,3") + * Result: [{url: "http://example.com/", title: "site#-1"}, + * {url: "http://example0.com/", title: "site#0"}, + * {url: "http://example1.com/", title: "site#1"}, + * {url: "http://example2.com/", title: "site#2"}, + * {url: "http://example3.com/", title: "site#3"}] */ function setLinks(aLinks) { let links = aLinks; if (typeof links == "string") { links = aLinks.split(/\s*,\s*/).map(function (id) { - return {url: "http://example.com/#" + id, title: "site#" + id}; + return {url: "http://example" + (id != "-1" ? id : "") + ".com/", + title: "site#" + id}; }); } @@ -284,7 +287,7 @@ function fillHistory(aLinks, aCallback) { * @param aLinksPattern the pattern (see below) * * Example: setPinnedLinks("3,,1") - * Result: 'http://example.com/#3' is pinned in the first cell. 'http://example.com/#1' is + * Result: 'http://example3.com/' is pinned in the first cell. 'http://example1.com/' is * pinned in the third cell. */ function setPinnedLinks(aLinks) { @@ -293,7 +296,8 @@ function setPinnedLinks(aLinks) { if (typeof links == "string") { links = aLinks.split(/\s*,\s*/).map(function (id) { if (id) - return {url: "http://example.com/#" + id, title: "site#" + id}; + return {url: "http://example" + (id != "-1" ? id : "") + ".com/", + title: "site#" + id}; }); } @@ -355,9 +359,9 @@ function addNewTabPageTab() { * @param the array of sites to compare with (optional) * * Example: checkGrid("3p,2,,1p") - * Result: We expect the first cell to contain the pinned site 'http://example.com/#3'. - * The second cell contains 'http://example.com/#2'. The third cell is empty. - * The fourth cell contains the pinned site 'http://example.com/#4'. + * Result: We expect the first cell to contain the pinned site 'http://example3.com/'. + * The second cell contains 'http://example2.com/'. The third cell is empty. + * The fourth cell contains the pinned site 'http://example4.com/'. */ function checkGrid(aSitesPattern, aSites) { let length = aSitesPattern.split(",").length; @@ -372,7 +376,7 @@ function checkGrid(aSitesPattern, aSites) { if (pinned != hasPinnedAttr) ok(false, "invalid state (site.isPinned() != site[pinned])"); - return aSite.url.replace(/^http:\/\/example\.com\/#(\d+)$/, "$1") + (pinned ? "p" : ""); + return aSite.url.replace(/^http:\/\/example(\d+)\.com\/$/, "$1") + (pinned ? "p" : ""); }); is(current, aSitesPattern, "grid status = " + aSitesPattern); @@ -489,7 +493,7 @@ function startAndCompleteDragOperation(aSource, aDest, aCallback) { */ function createExternalDropIframe() { const url = "data:text/html;charset=utf-8," + - "link"; + "link"; let deferred = Promise.defer(); let doc = getContentDocument(); diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js b/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js index b87156d4cd8..02679c6e088 100644 --- a/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js +++ b/toolkit/components/thumbnails/test/browser_thumbnails_privacy.js @@ -36,14 +36,6 @@ function runTests() { {scheme: "https", cacheControl: "private", diskCacheSSL: false} ]; - let urls = positive.map((combi) => { - let url = combi.scheme + URL; - if (combi.cacheControl) - url += "?" + combi.cacheControl; - return url; - }); - yield addVisitsAndRepopulateNewTabLinks(urls, next); - yield checkCombinations(positive, true); yield checkCombinations(negative, false); } @@ -60,6 +52,13 @@ function checkCombinations(aCombinations, aResult) { url += "?" + combi.cacheControl; Services.prefs.setBoolPref(PREF_DISK_CACHE_SSL, combi.diskCacheSSL); + // Add the test page as a top link so it has a chance to be thumbnailed + addVisitsAndRepopulateNewTabLinks(url, _ => { + testCombination(combi, url, aCombinations, aResult); + }); +} + +function testCombination(combi, url, aCombinations, aResult) { let tab = gBrowser.selectedTab = gBrowser.addTab(url); let browser = gBrowser.selectedBrowser; diff --git a/toolkit/modules/NewTabUtils.jsm b/toolkit/modules/NewTabUtils.jsm index c5bf020fbfb..dff9d1eae99 100644 --- a/toolkit/modules/NewTabUtils.jsm +++ b/toolkit/modules/NewTabUtils.jsm @@ -829,8 +829,34 @@ let Links = { let pinnedLinks = Array.slice(PinnedLinks.links); let links = this._getMergedProviderLinks(); - // Filter blocked and pinned links. + function getBaseDomain(url) { + let uri; + try { + uri = Services.io.newURI(url, null, null); + } catch (e) { + return null; + } + + try { + return Services.eTLD.getBaseDomain(uri); + } catch (e) { + return uri.asciiHost; + } + } + + let baseDomains = new Set(); + for (let link of pinnedLinks) { + if (link) + baseDomains.add(getBaseDomain(link.url)); + } + + // Filter blocked and pinned links and duplicate base domains. links = links.filter(function (link) { + let baseDomain = getBaseDomain(link.url); + if (baseDomain == null || baseDomains.has(baseDomain)) + return false; + baseDomains.add(baseDomain); + return !BlockedLinks.isBlocked(link) && !PinnedLinks.isPinned(link); }); diff --git a/toolkit/modules/tests/xpcshell/test_NewTabUtils.js b/toolkit/modules/tests/xpcshell/test_NewTabUtils.js index 0b764570d4e..b8ca35d91c5 100644 --- a/toolkit/modules/tests/xpcshell/test_NewTabUtils.js +++ b/toolkit/modules/tests/xpcshell/test_NewTabUtils.js @@ -191,7 +191,7 @@ function makeLinks(frecRangeStart, frecRangeEnd, step) { function makeLink(frecency) { return { - url: "http://example.com/" + frecency, + url: "http://example" + frecency + ".com/", title: "My frecency is " + frecency, frecency: frecency, lastVisitDate: 0,