Bug422543Child.sys.mjs (1924B)
1 class SHistoryListener { 2 constructor() { 3 this.retval = true; 4 this.last = "initial"; 5 } 6 7 OnHistoryNewEntry() { 8 this.last = "newentry"; 9 } 10 11 OnHistoryGotoIndex() { 12 this.last = "gotoindex"; 13 } 14 15 OnHistoryPurge() { 16 this.last = "purge"; 17 } 18 19 OnHistoryReload() { 20 this.last = "reload"; 21 return this.retval; 22 } 23 24 OnHistoryReplaceEntry() {} 25 } 26 SHistoryListener.prototype.QueryInterface = ChromeUtils.generateQI([ 27 "nsISHistoryListener", 28 "nsISupportsWeakReference", 29 ]); 30 31 let listeners; 32 33 export class Bug422543Child extends JSWindowActorChild { 34 constructor() { 35 super(); 36 } 37 38 actorCreated() { 39 if (listeners) { 40 return; 41 } 42 43 this.shistory = this.docShell.nsIWebNavigation.sessionHistory; 44 listeners = [new SHistoryListener(), new SHistoryListener()]; 45 46 for (let listener of listeners) { 47 this.shistory.legacySHistory.addSHistoryListener(listener); 48 } 49 } 50 51 cleanup() { 52 for (let listener of listeners) { 53 this.shistory.legacySHistory.removeSHistoryListener(listener); 54 } 55 this.shistory = null; 56 listeners = null; 57 return {}; 58 } 59 60 getListenerStatus() { 61 return listeners.map(l => l.last); 62 } 63 64 resetListeners() { 65 for (let listener of listeners) { 66 listener.last = "initial"; 67 } 68 69 return {}; 70 } 71 72 notifyReload() { 73 let history = this.shistory.legacySHistory; 74 let rval = history.notifyOnHistoryReload(); 75 return { rval }; 76 } 77 78 setRetval({ num, val }) { 79 listeners[num].retval = val; 80 return {}; 81 } 82 83 receiveMessage(msg) { 84 switch (msg.name) { 85 case "cleanup": 86 return this.cleanup(); 87 case "getListenerStatus": 88 return this.getListenerStatus(); 89 case "notifyReload": 90 return this.notifyReload(); 91 case "resetListeners": 92 return this.resetListeners(); 93 case "setRetval": 94 return this.setRetval(msg.data); 95 } 96 return null; 97 } 98 }