dom/tests/browser/browser_ConsoleStorageAPITests.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:444a6aaa79d1
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 const TEST_URI = "http://example.com/browser/dom/tests/browser/test-console-api.html";
5 const TEST_URI_NAV = "http://example.com/browser/dom/tests/browser/";
6
7 let ConsoleAPIStorage = Cc["@mozilla.org/consoleAPI-storage;1"]
8 .getService(Ci.nsIConsoleAPIStorage);
9
10 var apiCallCount;
11
12 var ConsoleObserver = {
13 QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
14
15 init: function CO_init()
16 {
17 Services.obs.addObserver(this, "console-storage-cache-event", false);
18 apiCallCount = 0;
19 },
20
21 observe: function CO_observe(aSubject, aTopic, aData)
22 {
23 if (aTopic == "console-storage-cache-event") {
24 apiCallCount ++;
25 if (apiCallCount == 4) {
26 Services.obs.removeObserver(this, "console-storage-cache-event");
27
28 try {
29 let tab = gBrowser.selectedTab;
30 let browser = gBrowser.selectedBrowser;
31 let win = browser.contentWindow;
32 let windowID = getWindowId(win);
33 let messages = ConsoleAPIStorage.getEvents(windowID);
34 ok(messages.length >= 4, "Some messages found in the storage service");
35
36 ConsoleAPIStorage.clearEvents();
37 messages = ConsoleAPIStorage.getEvents(windowID);
38 is(messages.length, 0, "Cleared Storage");
39
40 // make sure a closed window's events are in fact removed from the
41 // storage cache
42 win.console.log("adding a new event");
43 // Close the window.
44 gBrowser.removeTab(tab, {animate: false});
45 // Ensure actual window destruction is not delayed (too long).
46 SpecialPowers.DOMWindowUtils.garbageCollect();
47 // Ensure "inner-window-destroyed" event is processed,
48 // so the storage cache is cleared.
49 executeSoon(function () {
50 // use the old windowID again to see if we have any stray cached messages
51 messages = ConsoleAPIStorage.getEvents(windowID);
52 is(messages.length, 0, "tab close is clearing the cache");
53 finish();
54 });
55 } catch (ex) {
56 dump(ex + "\n\n\n");
57 dump(ex.stack + "\n\n\n");
58 ok(false, "We got an unexpected exception");
59 }
60 }
61 }
62 }
63 };
64
65 function tearDown()
66 {
67 while (gBrowser.tabs.length > 1)
68 gBrowser.removeCurrentTab();
69 }
70
71 function test()
72 {
73 // Don't cache removed tabs, so "clear console cache on tab close" triggers.
74 Services.prefs.setIntPref("browser.tabs.max_tabs_undo", 0);
75 registerCleanupFunction(function() {
76 Services.prefs.clearUserPref("browser.tabs.max_tabs_undo");
77 });
78
79 registerCleanupFunction(tearDown);
80
81 ConsoleObserver.init();
82
83 waitForExplicitFinish();
84
85 var tab = gBrowser.addTab(TEST_URI);
86 gBrowser.selectedTab = tab;
87 var browser = gBrowser.selectedBrowser;
88 browser.addEventListener("DOMContentLoaded", function onLoad(event) {
89 browser.removeEventListener("DOMContentLoaded", onLoad, false);
90 executeSoon(function test_executeSoon() {
91 let win = browser.contentWindow;
92 win.console.log("this", "is", "a", "log message");
93 win.console.info("this", "is", "a", "info message");
94 win.console.warn("this", "is", "a", "warn message");
95 win.console.error("this", "is", "a", "error message");
96 });
97 }, false);
98 }
99
100 function getWindowId(aWindow)
101 {
102 return aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
103 .getInterface(Ci.nsIDOMWindowUtils)
104 .currentInnerWindowID;
105 }

mercurial