Skip to content

Commit 4f77c85

Browse files
committed
close navigators when error during signin or signout
1 parent 6af4938 commit 4f77c85

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

src/CordovaPopupWindow.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ export default class CordovaPopupWindow {
8585
this._reject(new Error(message));
8686
}
8787

88+
close() {
89+
this._cleanup();
90+
}
91+
8892
_cleanup() {
8993
Log.debug("CordovaPopupWindow._cleanup");
9094

src/IFrameWindow.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,22 @@ export default class IFrameWindow {
5656
this._reject(new Error(message));
5757
}
5858

59+
close() {
60+
this._cleanup();
61+
}
62+
5963
_cleanup() {
60-
Log.debug("IFrameWindow._cleanup");
64+
if (this._frame) {
65+
Log.debug("IFrameWindow._cleanup");
6166

62-
window.removeEventListener("message", this._boundMessageEvent, false);
63-
window.clearTimeout(this._timer);
64-
window.document.body.removeChild(this._frame);
67+
window.removeEventListener("message", this._boundMessageEvent, false);
68+
window.clearTimeout(this._timer);
69+
window.document.body.removeChild(this._frame);
6570

66-
this._timer = null;
67-
this._frame = null;
68-
this._boundMessageEvent = null;
71+
this._timer = null;
72+
this._frame = null;
73+
this._boundMessageEvent = null;
74+
}
6975
}
7076

7177
_timeout() {

src/PopupWindow.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ export default class PopupWindow {
7171
this._reject(new Error(message));
7272
}
7373

74+
close() {
75+
this._cleanup(false);
76+
}
77+
7478
_cleanup(keepOpen) {
7579
Log.debug("PopupWindow._cleanup");
7680

src/UserManager.js

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,20 +318,26 @@ export default class UserManager extends OidcClient {
318318
_signinStart(args, navigator, navigatorParams = {}) {
319319
Log.debug("_signinStart");
320320

321+
return navigator.prepare(navigatorParams).then(handle => {
322+
Log.debug("got navigator window handle");
321323

322-
return this.createSigninRequest(args).then(signinRequest => {
323-
Log.debug("got signin request");
324-
325-
navigatorParams.url = signinRequest.url;
326-
navigatorParams.id = signinRequest.state.id;
324+
return this.createSigninRequest(args).then(signinRequest => {
325+
Log.debug("got signin request");
327326

328-
return navigator.prepare(navigatorParams).then(handle => {
329-
Log.debug("got navigator window handle");
327+
navigatorParams.url = signinRequest.url;
328+
navigatorParams.id = signinRequest.state.id;
330329

331330
return handle.navigate(navigatorParams);
331+
}).catch(err => {
332+
if (handle.close) {
333+
Log.debug("Error after preparing navigator, closing navigator window");
334+
handle.close();
335+
}
336+
throw err;
332337
});
333338
});
334339
}
340+
335341
_signinEnd(url) {
336342
Log.debug("_signinEnd");
337343

@@ -382,6 +388,12 @@ export default class UserManager extends OidcClient {
382388
});
383389
});
384390
});
391+
}).catch(err => {
392+
if (handle.close) {
393+
Log.debug("Error after preparing navigator, closing navigator window");
394+
handle.close();
395+
}
396+
throw err;
385397
});
386398
});
387399
}

0 commit comments

Comments
 (0)