Skip to content

Commit de00fbd

Browse files
committed
Merge branch 'feature-callback-timeout'
2 parents bf31f16 + e28a448 commit de00fbd

File tree

1 file changed

+183
-48
lines changed

1 file changed

+183
-48
lines changed

www/securestorage.js

Lines changed: 183 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
var sjcl_ss = cordova.require('cordova-plugin-secure-storage.sjcl_ss');
22
var ESP6Promise = cordova.require('cordova-plugin-secure-storage.es6-promise').Promise;
33

4+
var _rejectOnTimeout = function(callbackError) {
5+
return setTimeout(function() {
6+
if('function' === typeof callbackError) {
7+
callbackError({
8+
code: 'timeout',
9+
error: 'The request took too long'
10+
});
11+
}
12+
}, SecureStorage.Timeout);
13+
};
14+
415
var SecureStorageiOS = function (success, error, service) {
516
var _success = function(){};
617
var _service = service;
@@ -23,20 +34,38 @@ SecureStorageiOS.prototype = {
2334
var defer = new ESP6Promise.defer();
2435
var self = this;
2536
var _key = key;
37+
var _resolved = false;
38+
var _rejectTimeout = null;
2639

2740
var _success = function(value){
28-
if('function' === typeof success) {
29-
success(value);
30-
};
41+
if(!_resolved) {
42+
_resolved = true;
43+
44+
if(_rejectTimeout) {
45+
clearTimeout(_rejectTimeout);
46+
}
3147

32-
defer.resolve(value);
48+
if('function' === typeof success) {
49+
success(value);
50+
};
51+
52+
defer.resolve(value);
53+
}
3354
};
3455
var _error = function(msg){
35-
if('function' === typeof error) {
36-
error(msg);
37-
}
56+
if(!_resolved) {
57+
_resolved = true;
3858

39-
defer.reject(msg);
59+
if(_rejectTimeout) {
60+
clearTimeout(_rejectTimeout);
61+
}
62+
63+
if('function' === typeof error) {
64+
error(msg);
65+
}
66+
67+
defer.reject(msg);
68+
}
4069
};
4170

4271
if('string' === typeof success) {
@@ -45,6 +74,8 @@ SecureStorageiOS.prototype = {
4574

4675
cordova.exec(_success, _error, "SecureStorage", "get", [self.service, _key]);
4776

77+
_rejectTimeout = _rejectOnTimeout(_error);
78+
4879
return defer.promise;
4980
},
5081

@@ -53,20 +84,39 @@ SecureStorageiOS.prototype = {
5384
var self = this;
5485
var _key = key;
5586
var _value = value;
87+
var _resolved = false;
88+
var _rejectTimeout = null;
5689

5790
var _success = function(value){
58-
if(!!success && 'function' === typeof success) {
59-
success(value);
60-
};
91+
if(!_resolved) {
92+
_resolved = true;
6193

62-
defer.resolve(value);
94+
if(_rejectTimeout) {
95+
clearTimeout(_rejectTimeout);
96+
}
97+
98+
if(!!success && 'function' === typeof success) {
99+
success(value);
100+
};
101+
102+
defer.resolve(value);
103+
}
63104
};
105+
64106
var _error = function(msg){
65-
if(!!error && 'function' === typeof error) {
66-
error(msg);
67-
}
107+
if(!_resolved) {
108+
_resolved = true;
109+
110+
if(_rejectTimeout) {
111+
clearTimeout(_rejectTimeout);
112+
}
113+
114+
if(!!error && 'function' === typeof error) {
115+
error(msg);
116+
}
68117

69-
defer.reject(msg);
118+
defer.reject(msg);
119+
}
70120
};
71121

72122
if(!!success && 'string' === typeof success) {
@@ -78,27 +128,47 @@ SecureStorageiOS.prototype = {
78128

79129
cordova.exec(_success, _error, "SecureStorage", "set", [self.service, _key, _value]);
80130

131+
_rejectTimeout = _rejectOnTimeout(_error);
132+
81133
return defer.promise;
82134
},
83135

84136
remove: function(success, error, key) {
85137
var defer = new ESP6Promise.defer();
86138
var self = this;
87139
var _key = key;
140+
var _resolved = false;
141+
var _rejectTimeout = null;
88142

89143
var _success = function(value){
90-
if('function' === typeof success) {
91-
success(value);
92-
};
144+
if(!_resolved) {
145+
_resolved = true;
146+
147+
if(_rejectTimeout) {
148+
clearTimeout(_rejectTimeout);
149+
}
93150

94-
defer.resolve(value);
151+
if('function' === typeof success) {
152+
success(value);
153+
};
154+
155+
defer.resolve(value);
156+
}
95157
};
96158
var _error = function(msg){
97-
if('function' === typeof error) {
98-
error(msg);
99-
}
159+
if(!_resolved) {
160+
_resolved = true;
100161

101-
defer.reject(msg);
162+
if(_rejectTimeout) {
163+
clearTimeout(_rejectTimeout);
164+
}
165+
166+
if('function' === typeof error) {
167+
error(msg);
168+
}
169+
170+
defer.reject(msg);
171+
}
102172
};
103173

104174
if('string' === typeof success) {
@@ -107,6 +177,8 @@ SecureStorageiOS.prototype = {
107177

108178
cordova.exec(_success, _error, "SecureStorage", "remove", [self.service, _key]);
109179

180+
_rejectTimeout = _rejectOnTimeout(_error);
181+
110182
return defer.promise;
111183
}
112184
};
@@ -144,20 +216,39 @@ SecureStorageAndroid.prototype = {
144216
var defer = new ESP6Promise.defer();
145217
var self = this;
146218
var _key = key;
219+
var _resolved = false;
220+
var _rejectTimeout = null;
147221

148222
var _success = function(value){
149-
if('function' === typeof success) {
150-
success(value);
151-
};
223+
if(!_resolved) {
224+
_resolved = true;
225+
226+
if(_rejectTimeout) {
227+
clearTimeout(_rejectTimeout);
228+
}
152229

153-
defer.resolve(value);
230+
if('function' === typeof success) {
231+
success(value);
232+
};
233+
234+
defer.resolve(value);
235+
}
154236
};
237+
155238
var _error = function(msg){
156-
if('function' === typeof error) {
157-
error(msg);
158-
}
239+
if(!_resolved) {
240+
_resolved = true;
241+
242+
if(_rejectTimeout) {
243+
clearTimeout(_rejectTimeout);
244+
}
159245

160-
defer.reject(msg);
246+
if('function' === typeof error) {
247+
error(msg);
248+
}
249+
250+
defer.reject(msg);
251+
}
161252
};
162253

163254
if('string' === typeof success) {
@@ -166,6 +257,8 @@ SecureStorageAndroid.prototype = {
166257

167258
cordova.exec(_success, _error, "SecureStorage", "get", [self.service, _key]);
168259

260+
_rejectTimeout = _rejectOnTimeout(_error);
261+
169262
return defer.promise;
170263
},
171264

@@ -174,20 +267,38 @@ SecureStorageAndroid.prototype = {
174267
var self = this;
175268
var _key = key;
176269
var _value = value;
270+
var _resolved = false;
271+
var _rejectTimeout = null;
177272

178273
var _success = function(value){
179-
if(!!success && 'function' === typeof success) {
180-
success(value);
181-
};
274+
if(!_resolved) {
275+
_resolved = true;
276+
277+
if(_rejectTimeout) {
278+
clearTimeout(_rejectTimeout);
279+
}
182280

183-
defer.resolve(value);
281+
if(!!success && 'function' === typeof success) {
282+
success(value);
283+
};
284+
285+
defer.resolve(value);
286+
}
184287
};
185288
var _error = function(msg){
186-
if(!!error && 'function' === typeof error) {
187-
error(msg);
188-
}
289+
if(!_resolved) {
290+
_resolved = true;
189291

190-
defer.reject(msg);
292+
if(_rejectTimeout) {
293+
clearTimeout(_rejectTimeout);
294+
}
295+
296+
if(!!error && 'function' === typeof error) {
297+
error(msg);
298+
}
299+
300+
defer.reject(msg);
301+
}
191302
};
192303

193304
if(!!success && 'string' === typeof success) {
@@ -199,27 +310,47 @@ SecureStorageAndroid.prototype = {
199310

200311
cordova.exec(_success, _error, "SecureStorage", "set", [self.service, _key, _value]);
201312

313+
_rejectTimeout = _rejectOnTimeout(_error);
314+
202315
return defer.promise;
203316
},
204317

205318
remove: function(success, error, key) {
206319
var defer = new ESP6Promise.defer();
207320
var self = this;
208321
var _key = key;
322+
var _resolved = false;
323+
var _rejectTimeout = null;
209324

210325
var _success = function(value){
211-
if('function' === typeof success) {
212-
success(value);
213-
};
326+
if(!_resolved) {
327+
_resolved = true;
214328

215-
defer.resolve(value);
329+
if(_rejectTimeout) {
330+
clearTimeout(_rejectTimeout);
331+
}
332+
333+
if('function' === typeof success) {
334+
success(value);
335+
};
336+
337+
defer.resolve(value);
338+
}
216339
};
217340
var _error = function(msg){
218-
if('function' === typeof error) {
219-
error(msg);
220-
}
341+
if(!_resolved) {
342+
_resolved = true;
343+
344+
if(_rejectTimeout) {
345+
clearTimeout(_rejectTimeout);
346+
}
347+
348+
if('function' === typeof error) {
349+
error(msg);
350+
}
221351

222-
defer.reject(msg);
352+
defer.reject(msg);
353+
}
223354
};
224355

225356
if('string' === typeof success) {
@@ -228,6 +359,8 @@ SecureStorageAndroid.prototype = {
228359

229360
cordova.exec(_success, _error, "SecureStorage", "remove", [self.service, _key]);
230361

362+
_rejectTimeout = _rejectOnTimeout(_error);
363+
231364
return defer.promise;
232365
}
233366
};
@@ -340,6 +473,8 @@ switch(cordova.platformId) {
340473
SecureStorage = null;
341474
}
342475

476+
SecureStorage.Timeout = 3000;
477+
343478
if (!cordova.plugins) {
344479
cordova.plugins = {};
345480
}

0 commit comments

Comments
 (0)