Skip to content

Commit 5c852b1

Browse files
committed
Postpone client messages until document is visible
1 parent 023818f commit 5c852b1

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

platform/safari/vapi-background.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@
828828

829829
CallbackWrapper.prototype.init = function(port, request, timeout) {
830830
this.port = port;
831-
this.request = request;
831+
this.request = request || port;
832832
this.timerId = timeout !== undefined ?
833833
vAPI.setTimeout(this.callback, timeout) :
834834
null;
@@ -841,7 +841,7 @@
841841
delete toAuxPending[this.timerId];
842842
this.timerId = null;
843843
}
844-
this.port.dispatchMessage(this.request.name, {
844+
this.port.target.page.dispatchMessage(this.request.name, {
845845
auxProcessId: this.request.message.auxProcessId,
846846
channelName: this.request.message.channelName,
847847
msg: response !== undefined ? response : null
@@ -931,7 +931,7 @@
931931
// Auxiliary process to auxiliary process
932932
if ( message.toTabId !== undefined ) {
933933
// TODO: this doesn't work.
934-
toAux(message, request.target.page);
934+
toAux(message, request);
935935
return;
936936
}
937937

@@ -944,7 +944,7 @@
944944
// Auxiliary process to main process: prepare response
945945
var callback = messaging.NOOPFUNC;
946946
if ( message.auxProcessId !== undefined ) {
947-
callback = callbackWrapperFactory(request.target.page, request).callback;
947+
callback = callbackWrapperFactory(request).callback;
948948
}
949949

950950
var sender = {

platform/safari/vapi-client.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,11 @@
319319
vAPI.messaging = {
320320
channels: Object.create(null),
321321
channelCount: 0,
322+
// Waiting for response
322323
pending: Object.create(null),
323324
pendingCount: 0,
325+
// Waiting to send
326+
queued: [],
324327
auxProcessId: 1,
325328
shuttingDown: false,
326329

@@ -414,6 +417,16 @@
414417
Function(msg.details.code).call(self);
415418
}
416419
});
420+
// Handle queued messages when page becomes visible
421+
document.addEventListener('visibilitychange', function() {
422+
if (document.hidden === true) return;
423+
var message;
424+
for (var i = 0; i < this.queued.length; i++) {
425+
message = this.queued[i];
426+
this.postMessage(message.auxProcessId, message);
427+
}
428+
this.queued.length = 0;
429+
}.bind(this));
417430
},
418431

419432
send: function(channelName, message, callback) {
@@ -437,14 +450,19 @@
437450
if (!this.connector) {
438451
this.connect();
439452
}
440-
this.postMessage(auxProcessId, {
453+
message = {
441454
channelName: channelName,
442455
auxProcessId: auxProcessId,
443456
toTabId: toTabId,
444457
toChannel: toChannel,
445458
msg: message
446-
});
447-
459+
};
460+
if (document.hidden === true) {
461+
// Wait for visibility change
462+
this.queued.push(message);
463+
} else {
464+
this.postMessage(auxProcessId, message);
465+
}
448466
},
449467

450468
postMessage: function(auxProcessId, message) {

0 commit comments

Comments
 (0)