diff options
Diffstat (limited to 'browser/components/safebrowsing/content/test/browser_bug415846.js')
-rw-r--r-- | browser/components/safebrowsing/content/test/browser_bug415846.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/browser/components/safebrowsing/content/test/browser_bug415846.js b/browser/components/safebrowsing/content/test/browser_bug415846.js new file mode 100644 index 000000000..fc2e3472f --- /dev/null +++ b/browser/components/safebrowsing/content/test/browser_bug415846.js @@ -0,0 +1,86 @@ +/* Check for the correct behaviour of the report web forgery/not a web forgery +menu items. + +Mac makes this astonishingly painful to test since their help menu is special magic, +but we can at least test it on the other platforms.*/ + +const NORMAL_PAGE = "http://example.com"; +const PHISH_PAGE = "http://www.itisatrap.org/firefox/its-a-trap.html"; + +/** + * Opens a new tab and browses to some URL, tests for the existence + * of the phishing menu items, and then runs a test function to check + * the state of the menu once opened. This function will take care of + * opening and closing the menu. + * + * @param url (string) + * The URL to browse the tab to. + * @param testFn (function) + * The function to run once the menu has been opened. This + * function will be passed the "reportMenu" and "errorMenu" + * DOM nodes as arguments, in that order. This function + * should not yield anything. + * @returns Promise + */ +function check_menu_at_page(url, testFn) { + return BrowserTestUtils.withNewTab({ + gBrowser, + url: "about:blank", + }, function*(browser) { + // We don't get load events when the DocShell redirects to error + // pages, but we do get DOMContentLoaded, so we'll wait for that. + let dclPromise = ContentTask.spawn(browser, null, function*() { + yield ContentTaskUtils.waitForEvent(this, "DOMContentLoaded", false); + }); + browser.loadURI(url); + yield dclPromise; + + let menu = document.getElementById("menu_HelpPopup"); + ok(menu, "Help menu should exist"); + + let reportMenu = + document.getElementById("menu_HelpPopup_reportPhishingtoolmenu"); + ok(reportMenu, "Report phishing menu item should exist"); + + let errorMenu = + document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu"); + ok(errorMenu, "Report phishing error menu item should exist"); + + let menuOpen = BrowserTestUtils.waitForEvent(menu, "popupshown"); + menu.openPopup(null, "", 0, 0, false, null); + yield menuOpen; + + testFn(reportMenu, errorMenu); + + let menuClose = BrowserTestUtils.waitForEvent(menu, "popuphidden"); + menu.hidePopup(); + yield menuClose; + }); +} + +/** + * Tests that we show the "Report this page" menu item at a normal + * page. + */ +add_task(function*() { + yield check_menu_at_page(NORMAL_PAGE, (reportMenu, errorMenu) => { + ok(!reportMenu.hidden, + "Report phishing menu should be visible on normal sites"); + ok(errorMenu.hidden, + "Report error menu item should be hidden on normal sites"); + }); +}); + +/** + * Tests that we show the "Report this page is okay" menu item at + * a reported attack site. + */ +add_task(function*() { + yield check_menu_at_page(PHISH_PAGE, (reportMenu, errorMenu) => { + ok(reportMenu.hidden, + "Report phishing menu should be hidden on phishing sites"); + ok(!errorMenu.hidden, + "Report error menu item should be visible on phishing sites"); + }); +}); + |