|  |  |  | /* | 
					
						
							|  |  |  |  * vim: ts=4:sw=4:expandtab | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  | *  Load this script in a Web Worker to generate new prekeys without | 
					
						
							|  |  |  | *  tying up the main thread. | 
					
						
							|  |  |  | *  https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
 | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | *  Because workers don't have access to the window or localStorage, we | 
					
						
							|  |  |  | *  create our own version that proxies back to the caller for actual | 
					
						
							|  |  |  | *  storage. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | *  Example usage: | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  |     var myWorker = new Worker('/js/key_worker.js'); | 
					
						
							|  |  |  |     myWorker.onmessage = function(e) { | 
					
						
							|  |  |  |         switch(e.data.method) { | 
					
						
							|  |  |  |             case 'set': | 
					
						
							|  |  |  |                 localStorage.setItem(e.data.key, e.data.value); | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             case 'remove': | 
					
						
							|  |  |  |                 localStorage.removeItem(e.data.key); | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             case 'done': | 
					
						
							|  |  |  |                 console.log(e.data.keys); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var store = {}; | 
					
						
							|  |  |  | window.textsecure.storage.impl = { | 
					
						
							|  |  |  |     /***************************** | 
					
						
							|  |  |  |     *** Override Storage Routines *** | 
					
						
							|  |  |  |     *****************************/ | 
					
						
							|  |  |  |     put: function(key, value) { | 
					
						
							|  |  |  |         if (value === undefined) | 
					
						
							|  |  |  |             throw new Error("Tried to store undefined"); | 
					
						
							|  |  |  |         store[key] = value; | 
					
						
							|  |  |  |         postMessage({method: 'set', key: key, value: value}); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     get: function(key, defaultValue) { | 
					
						
							|  |  |  |         if (key in store) { | 
					
						
							|  |  |  |             return store[key]; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return defaultValue; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     remove: function(key) { | 
					
						
							|  |  |  |         delete store[key]; | 
					
						
							|  |  |  |         postMessage({method: 'remove', key: key}); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | onmessage = function(e) { | 
					
						
							|  |  |  |     store = e.data; | 
					
						
							|  |  |  |     textsecure.protocol_wrapper.generateKeys().then(function(keys) { | 
					
						
							|  |  |  |         postMessage({method: 'done', keys: keys}); | 
					
						
							|  |  |  |         close(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } |