|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 function openViewSourceWindow(aURI, aCallback) { |
|
6 let viewSourceWindow = openDialog("chrome://global/content/viewSource.xul", null, null, aURI); |
|
7 viewSourceWindow.addEventListener("pageshow", function pageShowHandler(event) { |
|
8 // Wait for the inner window to load, not viewSourceWindow. |
|
9 if (event.target.location == "view-source:" + aURI) { |
|
10 info("View source window opened: " + event.target.location); |
|
11 viewSourceWindow.removeEventListener("pageshow", pageShowHandler, false); |
|
12 aCallback(viewSourceWindow); |
|
13 } |
|
14 }, false); |
|
15 } |
|
16 |
|
17 function closeViewSourceWindow(aWindow, aCallback) { |
|
18 Services.wm.addListener({ |
|
19 onCloseWindow: function() { |
|
20 Services.wm.removeListener(this); |
|
21 executeSoon(aCallback); |
|
22 } |
|
23 }); |
|
24 aWindow.close(); |
|
25 } |
|
26 |
|
27 function testViewSourceWindow(aURI, aTestCallback, aCloseCallback) { |
|
28 openViewSourceWindow(aURI, function(aWindow) { |
|
29 aTestCallback(aWindow); |
|
30 closeViewSourceWindow(aWindow, aCloseCallback); |
|
31 }); |
|
32 } |
|
33 |
|
34 function openViewPartialSourceWindow(aReference, aCallback) { |
|
35 let viewSourceWindow = openDialog("chrome://global/content/viewPartialSource.xul", |
|
36 null, null, null, null, aReference, "selection"); |
|
37 viewSourceWindow.addEventListener("pageshow", function pageShowHandler(event) { |
|
38 // Wait for the inner window to load, not viewSourceWindow. |
|
39 if (/^view-source:/.test(event.target.location)) { |
|
40 info("View source window opened: " + event.target.location); |
|
41 viewSourceWindow.removeEventListener("pageshow", pageShowHandler, false); |
|
42 aCallback(viewSourceWindow); |
|
43 } |
|
44 }, false); |
|
45 } |
|
46 |
|
47 registerCleanupFunction(function() { |
|
48 var windows = Services.wm.getEnumerator("navigator:view-source"); |
|
49 ok(!windows.hasMoreElements(), "No remaining view source windows still open"); |
|
50 while (windows.hasMoreElements()) |
|
51 windows.getNext().close(); |
|
52 }); |
|
53 |
|
54 function openDocument(aURI, aCallback) { |
|
55 let tab = gBrowser.addTab(aURI); |
|
56 let browser = tab.linkedBrowser; |
|
57 browser.addEventListener("DOMContentLoaded", function pageLoadedListener() { |
|
58 browser.removeEventListener("DOMContentLoaded", pageLoadedListener, false); |
|
59 aCallback(tab); |
|
60 }, false); |
|
61 registerCleanupFunction(function() { |
|
62 gBrowser.removeTab(tab); |
|
63 }); |
|
64 } |
|
65 |
|
66 function openDocumentSelect(aURI, aCSSSelector, aCallback) { |
|
67 openDocument(aURI, function(aTab) { |
|
68 let element = aTab.linkedBrowser.contentDocument.querySelector(aCSSSelector); |
|
69 let selection = aTab.linkedBrowser.contentWindow.getSelection(); |
|
70 selection.selectAllChildren(element); |
|
71 |
|
72 openViewPartialSourceWindow(selection, aCallback); |
|
73 }); |
|
74 } |