diff options
Diffstat (limited to 'browser/base/content/test/newtab/browser_newtab_bug1194895.js')
-rw-r--r-- | browser/base/content/test/newtab/browser_newtab_bug1194895.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/browser/base/content/test/newtab/browser_newtab_bug1194895.js b/browser/base/content/test/newtab/browser_newtab_bug1194895.js new file mode 100644 index 000000000..c08b23185 --- /dev/null +++ b/browser/base/content/test/newtab/browser_newtab_bug1194895.js @@ -0,0 +1,146 @@ +/* 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"); +}); + |