15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.Object} 34f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.Target} target 35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {boolean} isMainFrontend 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.WorkerManager = function(target, isMainFrontend) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._reset(); 4007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch target.registerWorkerDispatcher(new WebInspector.WorkerDispatcher(this)); 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (isMainFrontend) { 42197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.workerAgent().enable(); 43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.WorkerManager.Events = { 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WorkerAdded: "WorkerAdded", 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WorkerRemoved: "WorkerRemoved", 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WorkersCleared: "WorkersCleared", 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WorkerSelectionChanged: "WorkerSelectionChanged", 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WorkerDisconnected: "WorkerDisconnected", 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) MessageFromWorker: "MessageFromWorker", 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.WorkerManager.MainThreadId = 0; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.WorkerManager.prototype = { 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _reset: function() 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** @type {!Object.<number, string>} */ 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._threadUrlByThreadId = {}; 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._threadUrlByThreadId[WebInspector.WorkerManager.MainThreadId] = WebInspector.UIString("Thread: Main"); 6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._threadsList = [WebInspector.WorkerManager.MainThreadId]; 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._selectedThreadId = WebInspector.WorkerManager.MainThreadId; 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _workerCreated: function(workerId, url, inspectorConnected) 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._threadsList.push(workerId); 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._threadUrlByThreadId[workerId] = url; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerAdded, {workerId: workerId, url: url, inspectorConnected: inspectorConnected}); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _workerTerminated: function(workerId) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._threadsList.remove(workerId); 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) delete this._threadUrlByThreadId[workerId]; 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerRemoved, workerId); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _dispatchMessageFromWorker: function(workerId, message) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.WorkerManager.Events.MessageFromWorker, {workerId: workerId, message: message}) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _disconnectedFromWorker: function() 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerDisconnected) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _mainFrameNavigated: function(event) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._reset(); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkersCleared); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!Array.<number>} 10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) threadsList: function() 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return this._threadsList; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} threadId 10909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {string} 11009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) threadUrl: function(threadId) 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return this._threadUrlByThreadId[threadId]; 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} threadId 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setSelectedThreadId: function(threadId) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._selectedThreadId = threadId; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 12509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 12609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) selectedThreadId: function() 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return this._selectedThreadId; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.Object.prototype 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WorkerAgent.Dispatcher} 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.WorkerDispatcher = function(workerManager) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._workerManager = workerManager; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.WorkerDispatcher.prototype = { 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) workerCreated: function(workerId, url, inspectorConnected) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._workerManager._workerCreated(workerId, url, inspectorConnected); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) workerTerminated: function(workerId) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._workerManager._workerTerminated(workerId); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispatchMessageFromWorker: function(workerId, message) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._workerManager._dispatchMessageFromWorker(workerId, message); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) disconnectedFromWorker: function() 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._workerManager._disconnectedFromWorker(); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 16809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @type {!WebInspector.WorkerManager} 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.workerManager; 171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 172d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 173d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 174d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {InspectorBackendClass.Connection} 175d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {string} workerId 176d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 177197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.ExternalWorkerConnection = function(workerId) 178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) InspectorBackendClass.Connection.call(this); 180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._workerId = workerId; 181d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) window.addEventListener("message", this._processMessage.bind(this), true); 182d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 18407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.ExternalWorkerConnection.prototype = { 185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 187197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} event 188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) _processMessage: function(event) 190d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 191d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!event) 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 193d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 194d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var message = event.data; 195d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this.dispatch(message); 196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 198d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 199d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!Object} messageObject 200d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 201d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) sendMessage: function(messageObject) 202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 203d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) window.opener.postMessage({workerId: this._workerId, command: "sendMessageToBackend", message: messageObject}, "*"); 204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 206d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: InspectorBackendClass.Connection.prototype 20707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 208