key_worker.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * vim: ts=4:sw=4:expandtab
  3. */
  4. 'use strict';
  5. /*
  6. * Load this script in a Web Worker to generate new prekeys without
  7. * tying up the main thread.
  8. * https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
  9. *
  10. * Because workers don't have access to the window or localStorage, we
  11. * create our own version that proxies back to the caller for actual
  12. * storage.
  13. *
  14. * Example usage:
  15. *
  16. var myWorker = new Worker('/js/key_worker.js');
  17. myWorker.onmessage = function(e) {
  18. switch(e.data.method) {
  19. case 'set':
  20. localStorage.setItem(e.data.key, e.data.value);
  21. break;
  22. case 'remove':
  23. localStorage.removeItem(e.data.key);
  24. break;
  25. case 'done':
  26. console.log(e.data.keys);
  27. }
  28. };
  29. */
  30. var store = {};
  31. window.textsecure.storage.impl = {
  32. /*****************************
  33. *** Override Storage Routines ***
  34. *****************************/
  35. put: function(key, value) {
  36. if (value === undefined)
  37. throw new Error("Tried to store undefined");
  38. store[key] = value;
  39. postMessage({method: 'set', key: key, value: value});
  40. },
  41. get: function(key, defaultValue) {
  42. if (key in store) {
  43. return store[key];
  44. } else {
  45. return defaultValue;
  46. }
  47. },
  48. remove: function(key) {
  49. delete store[key];
  50. postMessage({method: 'remove', key: key});
  51. },
  52. };
  53. onmessage = function(e) {
  54. store = e.data;
  55. textsecure.protocol_wrapper.generateKeys().then(function(keys) {
  56. postMessage({method: 'done', keys: keys});
  57. close();
  58. });
  59. }