Skip to content

Commit

Permalink
Merge pull request #7322 from meeseeksmachine/auto-backport-of-pr-731…
Browse files Browse the repository at this point in the history
…6-on-1.x

Backport PR #7316 on branch 1.x (Fix Safari multiple tabs by working around a Safari bug.)
  • Loading branch information
jasongrout committed Oct 11, 2019
2 parents caf54ed + f0a125e commit a1ffbc1
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions packages/apputils/src/windowresolver.ts
Expand Up @@ -84,6 +84,18 @@ namespace Private {
*/
const WINDOW = `${PREFIX}:window`;

/**
* Current beacon request
*
* #### Notes
* We keep track of the current request so that we can ignore our own beacon
* requests. This is to work around a bug in Safari, where Safari sometimes
* triggers local storage events for changes made by the current tab. See
* https://github.com/jupyterlab/jupyterlab/issues/6921#issuecomment-540817283
* for more details.
*/
let currentBeaconRequest: string | null = null;

/**
* A potential preferred default window name.
*/
Expand Down Expand Up @@ -123,7 +135,11 @@ namespace Private {
}

// If the beacon was fired, respond with a ping.
if (key === BEACON && candidate !== null) {
if (
key === BEACON &&
newValue !== currentBeaconRequest &&
candidate !== null
) {
ping(resolved ? name : candidate);
return;
}
Expand Down Expand Up @@ -163,6 +179,7 @@ namespace Private {
*/
function reject(): void {
resolved = true;
currentBeaconRequest = null;
delegate.reject(`Window name candidate "${candidate}" already exists`);
}

Expand Down Expand Up @@ -197,12 +214,14 @@ namespace Private {
}

resolved = true;
currentBeaconRequest = null;
delegate.resolve((name = candidate));
ping(name);
}, TIMEOUT);

// Fire the beacon to collect other windows' names.
localStorage.setItem(BEACON, `${Math.random()}-${new Date().getTime()}`);
currentBeaconRequest = `${Math.random()}-${new Date().getTime()}`;
localStorage.setItem(BEACON, currentBeaconRequest);

return delegate.promise;
}
Expand Down

0 comments on commit a1ffbc1

Please sign in to comment.