diff options
Diffstat (limited to 'docshell/test/browser/file_bug422543_script.js')
-rw-r--r-- | docshell/test/browser/file_bug422543_script.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/docshell/test/browser/file_bug422543_script.js b/docshell/test/browser/file_bug422543_script.js new file mode 100644 index 000000000..cd69df1ec --- /dev/null +++ b/docshell/test/browser/file_bug422543_script.js @@ -0,0 +1,98 @@ +const { utils: Cu, interfaces: Ci } = Components; +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +function SHistoryListener() { +} + +SHistoryListener.prototype = { + retval: true, + last: "initial", + + OnHistoryNewEntry: function (aNewURI) { + this.last = "newentry"; + }, + + OnHistoryGoBack: function (aBackURI) { + this.last = "goback"; + return this.retval; + }, + + OnHistoryGoForward: function (aForwardURI) { + this.last = "goforward"; + return this.retval; + }, + + OnHistoryGotoIndex: function (aIndex, aGotoURI) { + this.last = "gotoindex"; + return this.retval; + }, + + OnHistoryPurge: function (aNumEntries) { + this.last = "purge"; + return this.retval; + }, + + OnHistoryReload: function (aReloadURI, aReloadFlags) { + this.last = "reload"; + return this.retval; + }, + + OnHistoryReplaceEntry: function (aIndex) {}, + + QueryInterface: XPCOMUtils.generateQI([Ci.nsISHistoryListener, + Ci.nsISupportsWeakReference]) +}; + +let testAPI = { + shistory: null, + listeners: [ new SHistoryListener(), + new SHistoryListener() ], + + init() { + this.shistory = docShell.QueryInterface(Ci.nsIWebNavigation).sessionHistory; + for (let listener of this.listeners) { + this.shistory.addSHistoryListener(listener); + } + }, + + cleanup() { + for (let listener of this.listeners) { + this.shistory.removeSHistoryListener(listener); + } + this.shistory = null; + sendAsyncMessage("bug422543:cleanup:return", {}); + }, + + getListenerStatus() { + sendAsyncMessage("bug422543:getListenerStatus:return", + this.listeners.map(l => l.last)); + }, + + resetListeners() { + for (let listener of this.listeners) { + listener.last = "initial"; + } + + sendAsyncMessage("bug422543:resetListeners:return", {}); + }, + + notifyReload() { + let internal = this.shistory.QueryInterface(Ci.nsISHistoryInternal); + let rval = + internal.notifyOnHistoryReload(content.document.documentURIObject, 0); + sendAsyncMessage("bug422543:notifyReload:return", { rval }); + }, + + setRetval({ num, val }) { + this.listeners[num].retval = val; + sendAsyncMessage("bug422543:setRetval:return", {}); + }, +}; + +addMessageListener("bug422543:cleanup", () => { testAPI.cleanup(); }); +addMessageListener("bug422543:getListenerStatus", () => { testAPI.getListenerStatus(); }); +addMessageListener("bug422543:notifyReload", () => { testAPI.notifyReload(); }); +addMessageListener("bug422543:resetListeners", () => { testAPI.resetListeners(); }); +addMessageListener("bug422543:setRetval", (msg) => { testAPI.setRetval(msg.data); }); + +testAPI.init(); |