| 
42 | 42 |   document.getElementById('status').innerHTML = status;  | 
43 | 43 | }  | 
44 | 44 | 
 
  | 
 | 45 | +// This worker will run the application javascript code,  | 
 | 46 | +// making sure that it's run in an environment without a global  | 
 | 47 | +// document, to make it consistent with the JSC executor environment.  | 
 | 48 | +var worker = new Worker('debuggerWorker.js');  | 
 | 49 | + | 
45 | 50 | var messageHandlers = {  | 
46 | 51 |   // This method is a bit hacky. Catalyst asks for a new clean JS runtime.  | 
47 | 52 |   // The easiest way to do this is to reload this page. That also means that  | 
48 | 53 |   // web socket connection will be lost. To send reply back we need to remember  | 
49 |  | -  // message id  | 
 | 54 | +  // message id.  | 
 | 55 | +  // This message also needs to be handled outside of the worker, since the worker  | 
 | 56 | +  // doesn't have access to local storage.  | 
50 | 57 |   'prepareJSRuntime': function(message) {  | 
51 | 58 |     window.onbeforeunload = undefined;  | 
52 | 59 |     window.localStorage.setItem('sessionID', message.id);  | 
53 | 60 |     window.location.reload();  | 
54 | 61 |   },  | 
55 |  | -  'executeApplicationScript': function(message, sendReply) {  | 
56 |  | -    for (var key in message.inject) {  | 
57 |  | -      window[key] = JSON.parse(message.inject[key]);  | 
58 |  | -    }  | 
59 |  | -    loadScript(message.url, sendReply.bind(null, null));  | 
 | 62 | +  'executeApplicationScript': function(message) {  | 
 | 63 | +    worker.postMessage(message);  | 
60 | 64 |   },  | 
61 |  | -  'executeJSCall': function(message, sendReply) {  | 
62 |  | -    var returnValue = null;  | 
63 |  | -    try {  | 
64 |  | -      if (window && window.require) {  | 
65 |  | -        var module = window.require(message.moduleName);  | 
66 |  | -        returnValue = module[message.moduleMethod].apply(module, message.arguments);  | 
67 |  | -      }  | 
68 |  | -    } finally {  | 
69 |  | -      sendReply(JSON.stringify(returnValue));  | 
70 |  | -    }  | 
 | 65 | +  'executeJSCall': function(message) {  | 
 | 66 | +    worker.postMessage(message);  | 
71 | 67 |   }  | 
72 | 68 | };  | 
73 | 69 | 
 
  | 
 | 
89 | 85 |       return;  | 
90 | 86 |     }  | 
91 | 87 | 
 
  | 
92 |  | -    var sendReply = function(result) {  | 
93 |  | -      ws.send(JSON.stringify({replyID: object.id, result: result}));  | 
94 |  | -    };  | 
95 | 88 |     var handler = messageHandlers[object.method];  | 
96 | 89 |     if (handler) {  | 
97 |  | -      handler(object, sendReply);  | 
 | 90 | +      handler(object);  | 
98 | 91 |     } else {  | 
99 | 92 |       console.warn('Unknown method: ' + object.method);  | 
100 | 93 |     }  | 
 | 
107 | 100 |     window.localStorage.removeItem('sessionID');  | 
108 | 101 |     debuggerSetTimeout(connectToDebuggerProxy, 100);  | 
109 | 102 |   };  | 
 | 103 | + | 
 | 104 | +  worker.onmessage = function(message) {  | 
 | 105 | +    ws.send(JSON.stringify(message.data));  | 
 | 106 | +  }  | 
110 | 107 | }  | 
111 | 108 | 
 
  | 
112 | 109 | connectToDebuggerProxy();  | 
113 | 110 | 
 
  | 
114 |  | -function loadScript(src, callback) {  | 
115 |  | -  var script = document.createElement('script');  | 
116 |  | -  script.type = 'text/javascript';  | 
117 |  | -  script.src = src;  | 
118 |  | -  script.onload = callback;  | 
119 |  | -  document.head.appendChild(script);  | 
120 |  | -}  | 
121 |  | - | 
122 | 111 | })();  | 
123 | 112 | </script>  | 
124 | 113 | <style type="text/css">  | 
 | 
0 commit comments