michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: function openViewSourceWindow(aURI, aCallback) { michael@0: let viewSourceWindow = openDialog("chrome://global/content/viewSource.xul", null, null, aURI); michael@0: viewSourceWindow.addEventListener("pageshow", function pageShowHandler(event) { michael@0: // Wait for the inner window to load, not viewSourceWindow. michael@0: if (event.target.location == "view-source:" + aURI) { michael@0: info("View source window opened: " + event.target.location); michael@0: viewSourceWindow.removeEventListener("pageshow", pageShowHandler, false); michael@0: aCallback(viewSourceWindow); michael@0: } michael@0: }, false); michael@0: } michael@0: michael@0: function closeViewSourceWindow(aWindow, aCallback) { michael@0: Services.wm.addListener({ michael@0: onCloseWindow: function() { michael@0: Services.wm.removeListener(this); michael@0: executeSoon(aCallback); michael@0: } michael@0: }); michael@0: aWindow.close(); michael@0: } michael@0: michael@0: function testViewSourceWindow(aURI, aTestCallback, aCloseCallback) { michael@0: openViewSourceWindow(aURI, function(aWindow) { michael@0: aTestCallback(aWindow); michael@0: closeViewSourceWindow(aWindow, aCloseCallback); michael@0: }); michael@0: } michael@0: michael@0: function openViewPartialSourceWindow(aReference, aCallback) { michael@0: let viewSourceWindow = openDialog("chrome://global/content/viewPartialSource.xul", michael@0: null, null, null, null, aReference, "selection"); michael@0: viewSourceWindow.addEventListener("pageshow", function pageShowHandler(event) { michael@0: // Wait for the inner window to load, not viewSourceWindow. michael@0: if (/^view-source:/.test(event.target.location)) { michael@0: info("View source window opened: " + event.target.location); michael@0: viewSourceWindow.removeEventListener("pageshow", pageShowHandler, false); michael@0: aCallback(viewSourceWindow); michael@0: } michael@0: }, false); michael@0: } michael@0: michael@0: registerCleanupFunction(function() { michael@0: var windows = Services.wm.getEnumerator("navigator:view-source"); michael@0: ok(!windows.hasMoreElements(), "No remaining view source windows still open"); michael@0: while (windows.hasMoreElements()) michael@0: windows.getNext().close(); michael@0: }); michael@0: michael@0: function openDocument(aURI, aCallback) { michael@0: let tab = gBrowser.addTab(aURI); michael@0: let browser = tab.linkedBrowser; michael@0: browser.addEventListener("DOMContentLoaded", function pageLoadedListener() { michael@0: browser.removeEventListener("DOMContentLoaded", pageLoadedListener, false); michael@0: aCallback(tab); michael@0: }, false); michael@0: registerCleanupFunction(function() { michael@0: gBrowser.removeTab(tab); michael@0: }); michael@0: } michael@0: michael@0: function openDocumentSelect(aURI, aCSSSelector, aCallback) { michael@0: openDocument(aURI, function(aTab) { michael@0: let element = aTab.linkedBrowser.contentDocument.querySelector(aCSSSelector); michael@0: let selection = aTab.linkedBrowser.contentWindow.getSelection(); michael@0: selection.selectAllChildren(element); michael@0: michael@0: openViewPartialSourceWindow(selection, aCallback); michael@0: }); michael@0: }