Skip to content

Commit 660b565

Browse files
committed
Auto merge of #2511 - Turbo87:localstorage, r=jtgeibel
Extract `localStorage` wrappers with try/catch We should fail gracefully if the browser has `localStorage` blocked. This wrapper will make sure to handle this case in a predictable way. Resolves #2502 r? @pichfl /cc @danielzgtg
2 parents 1e10455 + c547d65 commit 660b565

File tree

4 files changed

+37
-21
lines changed

4 files changed

+37
-21
lines changed

app/routes/login.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { inject as service } from '@ember/service';
33

44
import window from 'ember-window-mock';
55

6+
import * as localStorage from '../utils/local-storage';
7+
68
/**
79
* This route will open a popup window directed at the `github-login` route.
810
* After the window has opened it will wait for the window to close and
@@ -15,11 +17,7 @@ export default Route.extend({
1517
session: service(),
1618

1719
beforeModel(transition) {
18-
try {
19-
window.localStorage.removeItem('github_response');
20-
} catch (e) {
21-
// ignore error
22-
}
20+
localStorage.removeItem('github_response');
2321

2422
window.github_response = undefined;
2523
let windowDimensions = [

app/services/design.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import { tracked } from '@glimmer/tracking';
55
import window from 'ember-window-mock';
66

77
import config from '../config/environment';
8+
import * as localStorage from '../utils/local-storage';
89

910
export default class DesignService extends Service {
1011
@service fastboot;
1112

12-
@tracked useNewDesign = !this.fastboot.isFastBoot && window.localStorage.getItem('use-new-design') === 'true';
13+
@tracked useNewDesign = !this.fastboot.isFastBoot && localStorage.getItem('use-new-design') === 'true';
1314
@tracked showToggleButton = config.environment === 'development';
1415

1516
constructor() {
@@ -20,6 +21,6 @@ export default class DesignService extends Service {
2021
@action
2122
toggle() {
2223
this.useNewDesign = !this.useNewDesign;
23-
window.localStorage.setItem('use-new-design', String(this.useNewDesign));
24+
localStorage.setItem('use-new-design', String(this.useNewDesign));
2425
}
2526
}

app/services/session.js

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { alias } from '@ember/object/computed';
22
import Service, { inject as service } from '@ember/service';
33

44
import { task } from 'ember-concurrency';
5-
import window from 'ember-window-mock';
65

76
import ajax from '../utils/ajax';
7+
import * as localStorage from '../utils/local-storage';
88

99
export default class SessionService extends Service {
1010
@service store;
@@ -16,22 +16,14 @@ export default class SessionService extends Service {
1616
@alias('loadUserTask.last.value.ownedCrates') ownedCrates;
1717

1818
get isLoggedIn() {
19-
try {
20-
return window.localStorage.getItem('isLoggedIn') === '1';
21-
} catch (e) {
22-
return false;
23-
}
19+
return localStorage.getItem('isLoggedIn') === '1';
2420
}
2521

2622
set isLoggedIn(value) {
27-
try {
28-
if (value) {
29-
window.localStorage.setItem('isLoggedIn', '1');
30-
} else {
31-
window.localStorage.removeItem('isLoggedIn');
32-
}
33-
} catch (e) {
34-
// ignore error
23+
if (value) {
24+
localStorage.setItem('isLoggedIn', '1');
25+
} else {
26+
localStorage.removeItem('isLoggedIn');
3527
}
3628
}
3729

app/utils/local-storage.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import window from 'ember-window-mock';
2+
3+
export function getItem(key) {
4+
try {
5+
return window.localStorage.getItem(key);
6+
} catch (e) {
7+
return null;
8+
}
9+
}
10+
11+
export function setItem(key, value) {
12+
try {
13+
window.localStorage.setItem(key, value);
14+
} catch (e) {
15+
// ignored
16+
}
17+
}
18+
19+
export function removeItem(key) {
20+
try {
21+
window.localStorage.removeItem(key);
22+
} catch (e) {
23+
// ignored
24+
}
25+
}

0 commit comments

Comments
 (0)