HomePhabricator

Add JX.Leader: synchronization over localStorage

Description

Add JX.Leader: synchronization over localStorage

Summary:
Ref T6559. Adds a "JX.Leader" primitive to replace the synchronization over Flash. This does a couple of things:

  • Offers an "onBecomeLeader" event, which we can use to open the WebSocket.
  • Offers an "onReceiveMessage" event, which we can use to dispatch notifications and handle requests to play sounds and send desktop notifications.
  • Offers a "broadcast()" method, which we can use to send desktop notification and sound requests.

Test Plan:
Added some code like this:

if (!statics.leader) {
  statics.leader = true;

  JX.Leader.listen('onBecomeLeader', function() {
    JX.log("This tab is now the leader.");
  });

  JX.Leader.listen('onReceiveBroadcast', function(message, is_leader) {
    JX.log('[' + (is_leader ? 'As Leader' : 'Not Leader') + '] ' + message);
  });

  JX.Leader.start();
}

Then:

  • Saw first tab open become leader reliably in Safari, Chrome, Firefox.
  • Saw new tab become leader reliably when the first tab was closed.
  • Saw broadcast() work as documented and deliver messages with correct leadership-flag and uniqueness.

Reviewers: joshuaspence, btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T6559

Differential Revision: https://secure.phabricator.com/D11235

Details

Provenance
epriestleyAuthored on
epriestleyPushed on Jan 7 2015, 1:50 AM
Reviewer
btrahan
Differential Revision
D11235: Add JX.Leader: synchronization over localStorage
Parents
rP8c21ef2c0b25: Implement JX.WebSocket
Branches
Unknown
Tags
Unknown
Tasks
T6559: Change notification system implementation not to require Flash