summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_bug676619.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_bug676619.js')
-rw-r--r--browser/base/content/test/general/browser_bug676619.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_bug676619.js b/browser/base/content/test/general/browser_bug676619.js
new file mode 100644
index 000000000..6b596481d
--- /dev/null
+++ b/browser/base/content/test/general/browser_bug676619.js
@@ -0,0 +1,124 @@
+function test () {
+ requestLongerTimeout(3);
+ waitForExplicitFinish();
+
+ var isHTTPS = false;
+
+ function loadListener() {
+ function testLocation(link, url, next) {
+ new TabOpenListener(url, function () {
+ gBrowser.removeTab(this.tab);
+ }, function () {
+ next();
+ });
+
+ ContentTask.spawn(gBrowser.selectedBrowser, link, contentLink => {
+ content.document.getElementById(contentLink).click();
+ });
+ }
+
+ function testLink(link, name, next) {
+ addWindowListener("chrome://mozapps/content/downloads/unknownContentType.xul", function (win) {
+ ContentTask.spawn(gBrowser.selectedBrowser, null, () => {
+ Assert.equal(content.document.getElementById("unload-flag").textContent,
+ "Okay", "beforeunload shouldn't have fired");
+ }).then(() => {
+ is(win.document.getElementById("location").value, name, "file name should match");
+ win.close();
+ next();
+ });
+ });
+
+ ContentTask.spawn(gBrowser.selectedBrowser, link, contentLink => {
+ content.document.getElementById(contentLink).click();
+ });
+ }
+
+ testLink("link1", "test.txt",
+ testLink.bind(null, "link2", "video.ogg",
+ testLink.bind(null, "link3", "just some video",
+ testLink.bind(null, "link4", "with-target.txt",
+ testLink.bind(null, "link5", "javascript.txt",
+ testLink.bind(null, "link6", "test.blob",
+ testLocation.bind(null, "link7", "http://example.com/",
+ function () {
+ if (isHTTPS) {
+ finish();
+ } else {
+ // same test again with https:
+ isHTTPS = true;
+ gBrowser.loadURI("https://example.com:443/browser/browser/base/content/test/general/download_page.html");
+ }
+ })))))));
+
+ }
+
+ BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
+ loadListener();
+ BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(loadListener);
+ });
+
+ gBrowser.loadURI("http://mochi.test:8888/browser/browser/base/content/test/general/download_page.html");
+}
+
+
+function addWindowListener(aURL, aCallback) {
+ Services.wm.addListener({
+ onOpenWindow: function(aXULWindow) {
+ info("window opened, waiting for focus");
+ Services.wm.removeListener(this);
+
+ var domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
+ .getInterface(Ci.nsIDOMWindow);
+ waitForFocus(function() {
+ is(domwindow.document.location.href, aURL, "should have seen the right window open");
+ aCallback(domwindow);
+ }, domwindow);
+ },
+ onCloseWindow: function(aXULWindow) { },
+ onWindowTitleChange: function(aXULWindow, aNewTitle) { }
+ });
+}
+
+// This listens for the next opened tab and checks it is of the right url.
+// opencallback is called when the new tab is fully loaded
+// closecallback is called when the tab is closed
+function TabOpenListener(url, opencallback, closecallback) {
+ this.url = url;
+ this.opencallback = opencallback;
+ this.closecallback = closecallback;
+
+ gBrowser.tabContainer.addEventListener("TabOpen", this, false);
+}
+
+TabOpenListener.prototype = {
+ url: null,
+ opencallback: null,
+ closecallback: null,
+ tab: null,
+ browser: null,
+
+ handleEvent: function(event) {
+ if (event.type == "TabOpen") {
+ gBrowser.tabContainer.removeEventListener("TabOpen", this, false);
+ this.tab = event.originalTarget;
+ this.browser = this.tab.linkedBrowser;
+ BrowserTestUtils.browserLoaded(this.browser, false, this.url).then(() => {
+ this.tab.addEventListener("TabClose", this, false);
+ var url = this.browser.currentURI.spec;
+ is(url, this.url, "Should have opened the correct tab");
+ this.opencallback();
+ });
+ } else if (event.type == "TabClose") {
+ if (event.originalTarget != this.tab)
+ return;
+ this.tab.removeEventListener("TabClose", this, false);
+ this.opencallback = null;
+ this.tab = null;
+ this.browser = null;
+ // Let the window close complete
+ executeSoon(this.closecallback);
+ this.closecallback = null;
+ }
+ }
+};