diff --git a/system-addon/lib/ActivityStreamMessageChannel.jsm b/system-addon/lib/ActivityStreamMessageChannel.jsm index 6b44369ffe..081e0723e2 100644 --- a/system-addon/lib/ActivityStreamMessageChannel.jsm +++ b/system-addon/lib/ActivityStreamMessageChannel.jsm @@ -133,6 +133,13 @@ this.ActivityStreamMessageChannel = class ActivityStreamMessageChannel { this.channel.addMessageListener("RemotePage:Load", this.onNewTabLoad); this.channel.addMessageListener("RemotePage:Unload", this.onNewTabUnload); this.channel.addMessageListener(this.incomingMessageName, this.onMessage); + + // Some pages might have already loaded, so we won't get the usual message + for (const {loaded, portID} of this.channel.messagePorts) { + if (loaded) { + this.onNewTabLoad({target: {portID}}); + } + } } /** diff --git a/system-addon/test/unit/lib/ActivityStreamMessageChannel.test.js b/system-addon/test/unit/lib/ActivityStreamMessageChannel.test.js index da6e068469..5b2ee79313 100644 --- a/system-addon/test/unit/lib/ActivityStreamMessageChannel.test.js +++ b/system-addon/test/unit/lib/ActivityStreamMessageChannel.test.js @@ -9,10 +9,12 @@ describe("ActivityStreamMessageChannel", () => { let globals; let dispatch; let mm; + let RPmessagePorts; beforeEach(() => { + RPmessagePorts = []; function RP(url, isFromAboutNewTab = false) { this.url = url; - this.messagePorts = []; + this.messagePorts = RPmessagePorts; this.addMessageListener = globals.sandbox.spy(); this.removeMessageListener = globals.sandbox.spy(); this.sendAsyncMessage = globals.sandbox.spy(); @@ -78,6 +80,14 @@ describe("ActivityStreamMessageChannel", () => { mm.createChannel(); assert.notCalled(global.AboutNewTab.override); }); + it("should simluate load for loaded ports", () => { + sinon.stub(mm, "onActionFromContent"); + RPmessagePorts.push({loaded: true, portID: "foo"}); + + mm.createChannel(); + + assert.calledWith(mm.onActionFromContent, {type: at.NEW_TAB_LOAD}, "foo"); + }); }); describe("#destroyChannel", () => { let channel;