diff options
Diffstat (limited to 'browser/base/content/test/newtab/browser_newtab_enhanced.js')
-rw-r--r-- | browser/base/content/test/newtab/browser_newtab_enhanced.js | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/browser/base/content/test/newtab/browser_newtab_enhanced.js b/browser/base/content/test/newtab/browser_newtab_enhanced.js new file mode 100644 index 000000000..5ac07ce55 --- /dev/null +++ b/browser/base/content/test/newtab/browser_newtab_enhanced.js @@ -0,0 +1,228 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +requestLongerTimeout(2); + +const PRELOAD_PREF = "browser.newtab.preload"; + +var suggestedLink = { + url: "http://example1.com/2", + imageURI: "data:image/png;base64,helloWORLD3", + title: "title2", + type: "affiliate", + adgroup_name: "Technology", + frecent_sites: ["classroom.google.com", "codeacademy.org", "codecademy.com", "codeschool.com", "codeyear.com", "elearning.ut.ac.id", "how-to-build-websites.com", "htmlcodetutorial.com", "htmldog.com", "htmlplayground.com", "learn.jquery.com", "quackit.com", "roseindia.net", "teamtreehouse.com", "tizag.com", "tutorialspoint.com", "udacity.com", "w3schools.com", "webdevelopersnotes.com"] +}; + +gDirectorySource = "data:application/json," + JSON.stringify({ + "enhanced": [{ + url: "http://example.com/", + enhancedImageURI: "data:image/png;base64,helloWORLD", + title: "title", + type: "organic", + }], + "directory": [{ + url: "http://example1.com/", + enhancedImageURI: "data:image/png;base64,helloWORLD2", + title: "title1", + type: "organic" + }], + "suggested": [suggestedLink] +}); + +add_task(function* () { + let origEnhanced = NewTabUtils.allPages.enhanced; + registerCleanupFunction(() => { + NewTabUtils.allPages.enhanced = origEnhanced; + }); + + yield pushPrefs([PRELOAD_PREF, false]); + + function getData(cellNum) { + return performOnCell(cellNum, cell => { + if (!cell.site) + return null; + let siteNode = cell.site.node; + return { + type: siteNode.getAttribute("type"), + enhanced: siteNode.querySelector(".enhanced-content").style.backgroundImage, + title: siteNode.querySelector(".newtab-title").textContent, + suggested: siteNode.querySelector(".newtab-suggested").innerHTML + }; + }); + } + + // Make the page have a directory link, enhanced link, and history link + yield setLinks("-1"); + + // Test with enhanced = false + yield* addNewTabPageTab(); + yield customizeNewTabPage("classic"); + yield customizeNewTabPage("enhanced"); // Toggle enhanced off + let {type, enhanced, title, suggested} = yield getData(0); + isnot(type, "enhanced", "history link is not enhanced"); + is(enhanced, "", "history link has no enhanced image"); + is(title, "example.com"); + is(suggested, "", "There is no suggested explanation"); + + let data = yield getData(1); + is(data, null, "there is only one link and it's a history link"); + + // Test with enhanced = true + yield* addNewTabPageTab(); + yield customizeNewTabPage("enhanced"); // Toggle enhanced on + ({type, enhanced, title, suggested} = yield getData(0)); + is(type, "organic", "directory link is organic"); + isnot(enhanced, "", "directory link has enhanced image"); + is(title, "title1"); + is(suggested, "", "There is no suggested explanation"); + + ({type, enhanced, title, suggested} = yield getData(1)); + is(type, "enhanced", "history link is enhanced"); + isnot(enhanced, "", "history link has enhanced image"); + is(title, "title"); + is(suggested, "", "There is no suggested explanation"); + + data = yield getData(2); + is(data, null, "there are only 2 links, directory and enhanced history"); + + // Test with a pinned link + setPinnedLinks("-1"); + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + is(type, "enhanced", "pinned history link is enhanced"); + isnot(enhanced, "", "pinned history link has enhanced image"); + is(title, "title"); + is(suggested, "", "There is no suggested explanation"); + + ({type, enhanced, title, suggested} = yield getData(1)); + is(type, "organic", "directory link is organic"); + isnot(enhanced, "", "directory link has enhanced image"); + is(title, "title1"); + is(suggested, "", "There is no suggested explanation"); + + data = yield getData(2); + is(data, null, "directory link pushed out by pinned history link"); + + // Test pinned link with enhanced = false + yield* addNewTabPageTab(); + yield customizeNewTabPage("enhanced"); // Toggle enhanced off + ({type, enhanced, title, suggested} = yield getData(0)); + isnot(type, "enhanced", "history link is not enhanced"); + is(enhanced, "", "history link has no enhanced image"); + is(title, "example.com"); + is(suggested, "", "There is no suggested explanation"); + + data = yield getData(1); + is(data, null, "directory link still pushed out by pinned history link"); + + yield unpinCell(0); + + + + // Test that a suggested tile is not enhanced by a directory tile + NewTabUtils.isTopPlacesSite = () => true; + yield setLinks("-1,2,3,4,5,6,7,8"); + + // Test with enhanced = false + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + isnot(type, "enhanced", "history link is not enhanced"); + is(enhanced, "", "history link has no enhanced image"); + is(title, "example.com"); + is(suggested, "", "There is no suggested explanation"); + + data = yield getData(7); + isnot(data, null, "there are 8 history links"); + data = yield getData(8); + is(data, null, "there are 8 history links"); + + + // Test with enhanced = true + yield* addNewTabPageTab(); + yield customizeNewTabPage("enhanced"); + + // Suggested link was not enhanced by directory link with same domain + ({type, enhanced, title, suggested} = yield getData(0)); + is(type, "affiliate", "suggested link is affiliate"); + is(enhanced, "", "suggested link has no enhanced image"); + is(title, "title2"); + ok(suggested.indexOf("Suggested for <strong> Technology </strong> visitors") > -1, "Suggested for 'Technology'"); + + // Enhanced history link shows up second + ({type, enhanced, title, suggested} = yield getData(1)); + is(type, "enhanced", "pinned history link is enhanced"); + isnot(enhanced, "", "pinned history link has enhanced image"); + is(title, "title"); + is(suggested, "", "There is no suggested explanation"); + + data = yield getData(9); + is(data, null, "there is a suggested link followed by an enhanced history link and the remaining history links"); + + + + // Test no override category/adgroup name. + let linksChangedPromise = watchLinksChangeOnce(); + yield pushPrefs([PREF_NEWTAB_DIRECTORYSOURCE, + "data:application/json," + JSON.stringify({"suggested": [suggestedLink]})]); + yield linksChangedPromise; + + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + Cu.reportError("SUGGEST " + suggested); + ok(suggested.indexOf("Suggested for <strong> Technology </strong> visitors") > -1, "Suggested for 'Technology'"); + + + // Test server provided explanation string. + suggestedLink.explanation = "Suggested for %1$S enthusiasts who visit sites like %2$S"; + linksChangedPromise = watchLinksChangeOnce(); + yield pushPrefs([PREF_NEWTAB_DIRECTORYSOURCE, + "data:application/json," + encodeURIComponent(JSON.stringify({"suggested": [suggestedLink]}))]); + yield linksChangedPromise; + + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + Cu.reportError("SUGGEST " + suggested); + ok(suggested.indexOf("Suggested for <strong> Technology </strong> enthusiasts who visit sites like <strong> classroom.google.com </strong>") > -1, "Suggested for 'Technology' enthusiasts"); + + + // Test server provided explanation string with category override. + suggestedLink.adgroup_name = "webdev education"; + linksChangedPromise = watchLinksChangeOnce(); + yield pushPrefs([PREF_NEWTAB_DIRECTORYSOURCE, + "data:application/json," + encodeURIComponent(JSON.stringify({"suggested": [suggestedLink]}))]); + yield linksChangedPromise; + + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + Cu.reportError("SUGGEST " + suggested); + ok(suggested.indexOf("Suggested for <strong> webdev education </strong> enthusiasts who visit sites like <strong> classroom.google.com </strong>") > -1, "Suggested for 'webdev education' enthusiasts"); + + + + // Test with xml entities in category name + suggestedLink.url = "http://example1.com/3"; + suggestedLink.adgroup_name = ">angles< & \"quotes\'"; + linksChangedPromise = watchLinksChangeOnce(); + yield pushPrefs([PREF_NEWTAB_DIRECTORYSOURCE, + "data:application/json," + encodeURIComponent(JSON.stringify({"suggested": [suggestedLink]}))]); + yield linksChangedPromise; + + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + Cu.reportError("SUGGEST " + suggested); + ok(suggested.indexOf("Suggested for <strong> >angles< & \"quotes\' </strong> enthusiasts who visit sites like <strong> classroom.google.com </strong>") > -1, "Suggested for 'xml entities' enthusiasts"); + + + // Test with xml entities in explanation. + suggestedLink.explanation = "Testing junk explanation &<>\"'"; + linksChangedPromise = watchLinksChangeOnce(); + yield pushPrefs([PREF_NEWTAB_DIRECTORYSOURCE, + "data:application/json," + encodeURIComponent(JSON.stringify({"suggested": [suggestedLink]}))]); + yield linksChangedPromise; + + yield* addNewTabPageTab(); + ({type, enhanced, title, suggested} = yield getData(0)); + Cu.reportError("SUGGEST " + suggested); + ok(suggested.indexOf("Testing junk explanation &<>\"'") > -1, "Junk test"); +}); |