fune/browser/base/content/test/newtab/browser_newtab_bug1194895.js
2016-08-31 12:53:24 -04:00

146 lines
4.8 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
const PRELOAD_PREF = "browser.newtab.preload";
const PREF_NEWTAB_COLUMNS = "browser.newtabpage.columns";
const PREF_NEWTAB_ROWS = "browser.newtabpage.rows";
function populateDirectoryTiles() {
let directoryTiles = [];
let i = 0;
while (i++ < 14) {
directoryTiles.push({
directoryId: i,
url: "http://example" + i + ".com/",
enhancedImageURI: "data:image/png;base64,helloWORLD",
title: "dirtitle" + i,
type: "affiliate"
});
}
return directoryTiles;
}
gDirectorySource = "data:application/json," + JSON.stringify({
"directory": populateDirectoryTiles()
});
add_task(function* () {
requestLongerTimeout(4);
let origEnhanced = NewTabUtils.allPages.enhanced;
let origCompareLinks = NewTabUtils.links.compareLinks;
registerCleanupFunction(() => {
NewTabUtils.allPages.enhanced = origEnhanced;
NewTabUtils.links.compareLinks = origCompareLinks;
});
// turn off preload to ensure grid updates on every setLinks
yield pushPrefs([PRELOAD_PREF, false]);
// set newtab to have three columns only
yield pushPrefs([PREF_NEWTAB_COLUMNS, 3]);
yield pushPrefs([PREF_NEWTAB_ROWS, 5]);
yield* addNewTabPageTab();
yield customizeNewTabPage("enhanced"); // Toggle enhanced off
// Testing history tiles
// two rows of tiles should always fit on any screen
yield setLinks("0,1,2,3,4,5");
yield* addNewTabPageTab();
// should do not see scrollbar since tiles fit into visible space
yield* checkGrid("0,1,2,3,4,5");
let scrolling = yield hasScrollbar();
ok(!scrolling, "no scrollbar");
// add enough tiles to cause extra two rows and observe scrollbar
yield setLinks("0,1,2,3,4,5,6,7,8,9");
yield* addNewTabPageTab();
yield* checkGrid("0,1,2,3,4,5,6,7,8,9");
scrolling = yield hasScrollbar();
ok(scrolling, "document has scrollbar");
// pin the last tile to make it stay at the bottom of the newtab
yield pinCell(9);
// block first 6 tiles, which should not remove the scroll bar
// since the last tile is pinned in the nineth position
for (let i = 0; i < 6; i++) {
yield blockCell(0);
}
yield* addNewTabPageTab();
yield* checkGrid("6,7,8,,,,,,,9p");
scrolling = yield hasScrollbar();
ok(scrolling, "document has scrollbar when tile is pinned to the last row");
// unpin the site: this will move tile up and make scrollbar disappear
yield unpinCell(9);
yield* addNewTabPageTab();
yield* checkGrid("6,7,8,9");
scrolling = yield hasScrollbar();
ok(!scrolling, "no scrollbar when bottom row tile is unpinned");
// reset everything to clean slate
NewTabUtils.restore();
// Testing directory tiles
yield customizeNewTabPage("enhanced"); // Toggle enhanced on
// setup page with no history tiles to test directory only display
yield setLinks([]);
yield* addNewTabPageTab();
ok(!scrolling, "no scrollbar for directory tiles");
// introduce one history tile - it should occupy the last
// available slot at the bottom of newtab and cause scrollbar
yield setLinks("41");
yield* addNewTabPageTab();
scrolling = yield hasScrollbar();
ok(scrolling, "adding low frecency history site causes scrollbar");
// set PREF_NEWTAB_ROWS to 4, that should clip off the history tile
// and remove scroll bar
yield pushPrefs([PREF_NEWTAB_ROWS, 4]);
yield* addNewTabPageTab();
scrolling = yield hasScrollbar();
ok(!scrolling, "no scrollbar if history tiles falls past max rows");
// restore max rows and watch scrollbar re-appear
yield pushPrefs([PREF_NEWTAB_ROWS, 5]);
yield* addNewTabPageTab();
scrolling = yield hasScrollbar();
ok(scrolling, "scrollbar is back when max rows allow for bottom history tile");
// block that history tile, and watch scrollbar disappear
yield blockCell(14);
yield* addNewTabPageTab();
scrolling = yield hasScrollbar();
ok(!scrolling, "no scrollbar after bottom history tiles is blocked");
// Test well-populated user history - newtab has highly-frecent history sites
// redefine compareLinks to always choose history tiles first
NewTabUtils.links.compareLinks = function (aLink1, aLink2) {
if (aLink1.type == aLink2.type) {
return aLink2.frecency - aLink1.frecency ||
aLink2.lastVisitDate - aLink1.lastVisitDate;
}
if (aLink2.type == "history") {
return 1;
}
return -1;
};
// add a row of history tiles, directory tiles will be clipped off, hence no scrollbar
yield setLinks("31,32,33");
yield* addNewTabPageTab();
scrolling = yield hasScrollbar();
ok(!scrolling, "no scrollbar when directory tiles follow history tiles");
// fill first four rows with history tiles and observer scrollbar
yield setLinks("30,31,32,33,34,35,36,37,38,39");
yield* addNewTabPageTab();
scrolling = yield hasScrollbar();
ok(scrolling, "scrollbar appears when history tiles need extra row");
});