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,