1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 * @param {!WebInspector.Target} mainTarget
9 * @param {!WebInspector.TargetManager} targetManager
11 WebInspector.WorkerTargetManager = function(mainTarget, targetManager)
13 this._mainTarget = mainTarget;
14 this._targetManager = targetManager;
15 mainTarget.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerAdded, this._onWorkerAdded, this);
16 mainTarget.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._onWorkersCleared, this);
17 WebInspector.profilingLock().addEventListener(WebInspector.Lock.Events.StateChanged, this._onProfilingStateChanged, this);
18 this._onProfilingStateChanged();
19 this._lastAnonymousTargetId = 0;
22 WebInspector.WorkerTargetManager.prototype = {
23 _onProfilingStateChanged: function()
25 var acquired = WebInspector.profilingLock().isAcquired();
26 this._mainTarget.workerAgent().setAutoconnectToWorkers(!acquired);
30 * @param {!WebInspector.Event} event
32 _onWorkerAdded: function(event)
34 var data = /** @type {{workerId: number, url: string, inspectorConnected: boolean}} */ (event.data);
35 new WebInspector.WorkerConnection(this._mainTarget, data.workerId, data.inspectorConnected, onConnectionReady.bind(this));
38 * @this {WebInspector.WorkerTargetManager}
39 * @param {!InspectorBackendClass.Connection} connection
41 function onConnectionReady(connection)
43 var parsedURL = data.url.asParsedURL();
44 var workerId = parsedURL ? parsedURL.lastPathComponent : "#" + (++this._lastAnonymousTargetId);
45 this._targetManager.createTarget(WebInspector.UIString("Worker %s", workerId), connection, targetCreated);
49 * @param {!WebInspector.Target} target
51 function targetCreated(target)
53 if (data.inspectorConnected)
54 target.runtimeAgent().run();
58 _onWorkersCleared: function()
60 this._lastAnonymousTargetId = 0;
66 * @extends {InspectorBackendClass.Connection}
67 * @param {!WebInspector.Target} target
68 * @param {number} workerId
69 * @param {boolean} inspectorConnected
70 * @param {!function(!InspectorBackendClass.Connection)} onConnectionReady
72 WebInspector.WorkerConnection = function(target, workerId, inspectorConnected, onConnectionReady)
74 InspectorBackendClass.Connection.call(this);
75 //FIXME: remove resourceTreeModel and others from worker targets
76 this.suppressErrorsForDomains(["Worker", "Page", "CSS", "DOM", "DOMStorage", "Database", "Network"]);
77 this._target = target;
78 this._workerId = workerId;
79 this._workerAgent = target.workerAgent();
80 target.workerManager.addEventListener(WebInspector.WorkerManager.Events.MessageFromWorker, this._dispatchMessageFromWorker, this);
81 target.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerRemoved, this._onWorkerRemoved, this);
82 target.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._close, this);
83 if (!inspectorConnected)
84 this._workerAgent.connectToWorker(workerId, onConnectionReady.bind(null, this));
86 onConnectionReady.call(null, this);
89 WebInspector.WorkerConnection.prototype = {
92 * @param {!WebInspector.Event} event
94 _dispatchMessageFromWorker: function(event)
96 var data = /** @type {{workerId: number, command: string, message: !Object}} */ (event.data);
97 if (data.workerId === this._workerId)
98 this.dispatch(data.message);
102 * @param {!Object} messageObject
104 sendMessage: function(messageObject)
106 this._workerAgent.sendMessageToWorker(this._workerId, messageObject);
110 * @param {!WebInspector.Event} event
112 _onWorkerRemoved: function(event)
114 var workerId = /** @type {number} */ (event.data);
115 if (workerId === this._workerId)
121 this._target.workerManager.removeEventListener(WebInspector.WorkerManager.Events.MessageFromWorker, this._dispatchMessageFromWorker, this);
122 this._target.workerManager.removeEventListener(WebInspector.WorkerManager.Events.WorkerRemoved, this._onWorkerRemoved, this);
123 this._target.workerManager.removeEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._close, this);
124 this.connectionClosed("worker_terminated");
127 __proto__: InspectorBackendClass.Connection.prototype