1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/*
2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Copyright 2014 The Chromium Authors. All rights reserved.
3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * found in the LICENSE file.
5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/**
8d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor
9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {Protocol.Agents}
1076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {string} name
11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!InspectorBackendClass.Connection} connection
129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) * @param {function(?WebInspector.Target)=} callback
13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
1476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebInspector.Target = function(name, connection, callback)
15d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    Protocol.Agents.call(this, connection.agentsMap());
1776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    this._name = name;
18d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this._connection = connection;
19197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    connection.addEventListener(InspectorBackendClass.Connection.Events.Disconnected, this._onDisconnect, this);
20d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    this._id = WebInspector.Target._nextId++;
2110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
22c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /** @type {!Map.<!Function, !WebInspector.SDKModel>} */
23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._modelByConstructor = new Map();
24c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
25197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /** @type {!Object.<string, boolean>} */
26197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    this._capabilities = {};
27c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this.pageAgent().canScreencast(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.CanScreencast, null));
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this.pageAgent().canEmulate(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.CanEmulate, null));
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (Runtime.experiments.isEnabled("timelinePowerProfiler"))
30c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this.powerAgent().canProfilePower(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.CanProfilePower, null));
31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this.workerAgent().canInspectWorkers(this._initializeCapability.bind(this, WebInspector.Target.Capabilities.CanInspectWorkers, this._loadedWithCapabilities.bind(this, callback)));
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (Runtime.experiments.isEnabled("timelineOnTraceEvents"))
33e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        this.consoleAgent().setTracingBasedTimeline(true);
34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/**
37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @enum {string}
38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */
39197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.Target.Capabilities = {
40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    CanScreencast: "CanScreencast",
41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    HasTouchInputs: "HasTouchInputs",
42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    CanProfilePower: "CanProfilePower",
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    CanInspectWorkers: "CanInspectWorkers",
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    CanEmulate: "CanEmulate"
45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
47d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebInspector.Target._nextId = 1;
48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.Target.prototype = {
50d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
51d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    /**
52d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)     * @return {number}
53d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)     */
54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    id: function()
55d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    {
56d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return this._id;
57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    },
58d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
5910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    /**
6076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     *
6176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @return {string}
6276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     */
6376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    name: function()
6476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    {
6576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        return this._name;
6676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    },
6776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
6876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    /**
6910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {string} name
7010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {function()|null} callback
71f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @param {?Protocol.Error} error
72197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {boolean} result
7310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     */
74d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _initializeCapability: function(name, callback, error, result)
75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
76197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._capabilities[name] = result;
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (callback)
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            callback();
79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
82197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {string} capability
83197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {boolean}
84197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     */
85197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    hasCapability: function(capability)
86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
87197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return !!this._capabilities[capability];
88197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /**
919e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @param {function(?WebInspector.Target)=} callback
92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _loadedWithCapabilities: function(callback)
94d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
959e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (this._connection.isClosed()) {
969e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            callback(null);
979e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            return;
989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        }
999e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
10010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.ConsoleModel} */
101d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.consoleModel = new WebInspector.ConsoleModel(this);
10207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
10310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.NetworkManager} */
104d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.networkManager = new WebInspector.NetworkManager(this);
10507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
10610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.ResourceTreeModel} */
107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.resourceTreeModel = new WebInspector.ResourceTreeModel(this);
10807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        if (!WebInspector.resourceTreeModel)
10907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            WebInspector.resourceTreeModel = this.resourceTreeModel;
11007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
11110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.NetworkLog} */
112a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.networkLog = new WebInspector.NetworkLog(this);
113a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!WebInspector.networkLog)
114a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            WebInspector.networkLog = this.networkLog;
115a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
11610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.DebuggerModel} */
117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.debuggerModel = new WebInspector.DebuggerModel(this);
11807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        if (!WebInspector.debuggerModel)
11907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            WebInspector.debuggerModel = this.debuggerModel;
12007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
12110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.RuntimeModel} */
122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.runtimeModel = new WebInspector.RuntimeModel(this);
12307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        if (!WebInspector.runtimeModel)
12407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            WebInspector.runtimeModel = this.runtimeModel;
12507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
12610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.DOMModel} */
127aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this.domModel = new WebInspector.DOMModel(this);
128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
12910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.CSSStyleModel} */
130aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this.cssModel = new WebInspector.CSSStyleModel(this);
131aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (!WebInspector.cssModel)
132aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            WebInspector.cssModel = this.cssModel;
133aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
13410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.WorkerManager} */
135c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this.workerManager = new WebInspector.WorkerManager(this, this.hasCapability(WebInspector.Target.Capabilities.CanInspectWorkers));
13607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        if (!WebInspector.workerManager)
13707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            WebInspector.workerManager = this.workerManager;
13807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
139c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        if (this.hasCapability(WebInspector.Target.Capabilities.CanProfilePower))
1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            WebInspector.powerProfiler = new WebInspector.PowerProfiler(this);
141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
14210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.TimelineManager} */
143a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.timelineManager = new WebInspector.TimelineManager(this);
144a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
14510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.DatabaseModel} */
146a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.databaseModel = new WebInspector.DatabaseModel(this);
147a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!WebInspector.databaseModel)
148a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            WebInspector.databaseModel = this.databaseModel;
149a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
15010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.DOMStorageModel} */
151a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.domStorageModel = new WebInspector.DOMStorageModel(this);
152a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!WebInspector.domStorageModel)
153a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            WebInspector.domStorageModel = this.domStorageModel;
154a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
15510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        /** @type {!WebInspector.CPUProfilerModel} */
156a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.cpuProfilerModel = new WebInspector.CPUProfilerModel(this);
157a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!WebInspector.cpuProfilerModel)
158a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            WebInspector.cpuProfilerModel = this.cpuProfilerModel;
159a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        /** @type {!WebInspector.HeapProfilerModel} */
161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.heapProfilerModel = new WebInspector.HeapProfilerModel(this);
162d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        /** @type {!WebInspector.IndexedDBModel} */
1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        this.indexedDBModel = new WebInspector.IndexedDBModel(this);
1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        /** @type {!WebInspector.LayerTreeModel} */
1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        this.layerTreeModel = new WebInspector.LayerTreeModel(this);
1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (callback)
170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            callback(this);
171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
172d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
173d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
174d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
175d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {string} domain
176d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!Object} dispatcher
177d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    registerDispatcher: function(domain, dispatcher)
179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._connection.registerDispatcher(domain, dispatcher);
181d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
182d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
184d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {boolean}
185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    isWorkerTarget: function()
187d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
188c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return !this.hasCapability(WebInspector.Target.Capabilities.CanInspectWorkers);
189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
190d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
191f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    /**
192f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu     * @return {boolean}
193f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu     */
1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    canEmulate: function()
195f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    {
1967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return this.hasCapability(WebInspector.Target.Capabilities.CanEmulate);
197f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    },
198f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
199197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    _onDisconnect: function()
200197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
201197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        WebInspector.targetManager.removeTarget(this);
202197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._dispose();
203197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
204aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
205197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    _dispose: function()
206aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.debuggerModel.dispose();
208197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.networkManager.dispose();
209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.cpuProfilerModel.dispose();
210197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
211197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
212c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
213c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {boolean}
214c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
215c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    isDetached: function()
216c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
217c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return this._connection.isClosed();
218c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
219c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
220197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: Protocol.Agents.prototype
221aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
222aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
223aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch/**
224aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @constructor
22507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @extends {WebInspector.Object}
226aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.Target} target
227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
228197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.SDKObject = function(target)
229d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
23007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    WebInspector.Object.call(this);
231aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._target = target;
232aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
233aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
234197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.SDKObject.prototype = {
235aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
236aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {!WebInspector.Target}
237aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
238aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    target: function()
239aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
240aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return this._target;
241aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
242aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
243aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    __proto__: WebInspector.Object.prototype
244aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
245aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
246aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch/**
247aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @constructor
248c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @extends {WebInspector.SDKObject}
249c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!Function} modelClass
250c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.Target} target
251c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */
252c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SDKModel = function(modelClass, target)
253c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){
254c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    WebInspector.SDKObject.call(this, target);
2559e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    target._modelByConstructor.set(modelClass, this);
256c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}
257c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
258c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.SDKModel.prototype = {
259c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    __proto__: WebInspector.SDKObject.prototype
260c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}
261c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
262c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/**
263c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @constructor
2649e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) * @extends {WebInspector.Object}
265aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch */
266aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.TargetManager = function()
267aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{
2689e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    WebInspector.Object.call(this);
269d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /** @type {!Array.<!WebInspector.Target>} */
270d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this._targets = [];
27110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    /** @type {!Array.<!WebInspector.TargetManager.Observer>} */
272aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._observers = [];
273c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /** @type {!Object.<string, !Array.<{modelClass: !Function, thisObject: (!Object|undefined), listener: function(!WebInspector.Event)}>>} */
2749e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    this._modelListeners = {};
2759e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)}
2769e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
2779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)WebInspector.TargetManager.Events = {
2789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    InspectedURLChanged: "InspectedURLChanged",
2799e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    MainFrameNavigated: "MainFrameNavigated",
2809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    Load: "Load",
2819e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    WillReloadPage: "WillReloadPage"
282d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
283d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
284d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.TargetManager.prototype = {
285c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
2869e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @return {string}
2879e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     */
2889e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    inspectedPageURL: function()
2899e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
2909e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (!this._targets.length)
2919e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            return "";
2929e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
2939e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        return this._targets[0].resourceTreeModel.inspectedPageURL();
2949e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
2959e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
2969e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    /**
2979e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @return {string}
2989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     */
2999e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    inspectedPageDomain: function()
3009e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
3019e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (!this._targets.length)
3029e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            return "";
3039e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
3049e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        return this._targets[0].resourceTreeModel.inspectedPageDomain();
3059e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
3069e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
3079e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    /**
3089e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @param {!WebInspector.Event} event
3099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     */
3109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    _redispatchEvent: function(event)
3119e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
3129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        this.dispatchEventToListeners(event.type, event.data);
3139e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
3149e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
3159e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    /**
3169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @param {boolean=} ignoreCache
3179e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     */
3189e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    reloadPage: function(ignoreCache)
3199e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
3209e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (this._targets.length)
3219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            this._targets[0].resourceTreeModel.reloadPage(ignoreCache);
3229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
3239e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
3249e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    /**
325c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!Function} modelClass
326c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {string} eventType
327c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {function(!WebInspector.Event)} listener
328c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!Object=} thisObject
329c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
330c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    addModelListener: function(modelClass, eventType, listener, thisObject)
331c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
332c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        for (var i = 0; i < this._targets.length; ++i) {
333c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            var model = this._targets[i]._modelByConstructor.get(modelClass);
334c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            model.addEventListener(eventType, listener, thisObject);
335c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
3369e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (!this._modelListeners[eventType])
3379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            this._modelListeners[eventType] = [];
3389e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        this._modelListeners[eventType].push({ modelClass: modelClass, thisObject: thisObject, listener: listener });
339c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
340c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
341c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
342c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!Function} modelClass
343c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {string} eventType
344c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {function(!WebInspector.Event)} listener
345c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!Object=} thisObject
346c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
347c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    removeModelListener: function(modelClass, eventType, listener, thisObject)
348c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
3499e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (!this._modelListeners[eventType])
350c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            return;
351c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
352c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        for (var i = 0; i < this._targets.length; ++i) {
353c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            var model = this._targets[i]._modelByConstructor.get(modelClass);
354c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            model.removeEventListener(eventType, listener, thisObject);
355c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
356c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
3579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        var listeners = this._modelListeners[eventType];
358c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        for (var i = 0; i < listeners.length; ++i) {
359c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            if (listeners[i].modelClass === modelClass && listeners[i].listener === listener && listeners[i].thisObject === thisObject)
360c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                listeners.splice(i--, 1);
361c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
362c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        if (!listeners.length)
3639e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            delete this._modelListeners[eventType];
364c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
365d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
366d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
367aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TargetManager.Observer} targetObserver
368aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
369aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    observeTargets: function(targetObserver)
370aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
371f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        this.targets().forEach(targetObserver.targetAdded.bind(targetObserver));
372aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._observers.push(targetObserver);
373aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
374aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
375aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
376f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @param {!WebInspector.TargetManager.Observer} targetObserver
377f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     */
378f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    unobserveTargets: function(targetObserver)
379f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    {
380f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        this._observers.remove(targetObserver);
381f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    },
382f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
383f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    /**
38476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @param {string} name
385d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!InspectorBackendClass.Connection} connection
3869e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @param {function(?WebInspector.Target)=} callback
387d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
38876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    createTarget: function(name, connection, callback)
389d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
39076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        var target = new WebInspector.Target(name, connection, callbackWrapper.bind(this));
39107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
39207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        /**
39307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.TargetManager}
3949e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)         * @param {?WebInspector.Target} newTarget
39507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         */
39607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        function callbackWrapper(newTarget)
39707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        {
3989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            if (newTarget)
3999e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)                this.addTarget(newTarget);
400a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            if (callback)
401a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch                callback(newTarget);
40207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        }
40307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    },
404d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
40507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    /**
406c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!WebInspector.Target} target
4075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)     */
408c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    addTarget: function(target)
4095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    {
410c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._targets.push(target);
4119e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (this._targets.length === 1) {
4129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
4139e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
4149e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._redispatchEvent, this);
4159e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.WillReloadPage, this._redispatchEvent, this);
4169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        }
417c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var copy = this._observers.slice();
4185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        for (var i = 0; i < copy.length; ++i)
419c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            copy[i].targetAdded(target);
420c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
4219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        for (var eventType in this._modelListeners) {
4229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            var listeners = this._modelListeners[eventType];
423c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            for (var i = 0; i < listeners.length; ++i) {
424c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                var model = target._modelByConstructor.get(listeners[i].modelClass);
425c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                model.addEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
426c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            }
427c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
4285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    },
4295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
4305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    /**
4315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)     * @param {!WebInspector.Target} target
4325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)     */
4335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    removeTarget: function(target)
4345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    {
4355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        this._targets.remove(target);
4369e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        if (this._targets.length === 0) {
4379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._redispatchEvent, this);
4389e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._redispatchEvent, this);
4399e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._redispatchEvent, this);
4409e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.WillReloadPage, this._redispatchEvent, this);
4419e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        }
442197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var copy = this._observers.slice();
4435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        for (var i = 0; i < copy.length; ++i)
4445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)            copy[i].targetRemoved(target);
445c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
4469e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        for (var eventType in this._modelListeners) {
4479e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            var listeners = this._modelListeners[eventType];
448c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            for (var i = 0; i < listeners.length; ++i) {
449c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                var model = target._modelByConstructor.get(listeners[i].modelClass);
450c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                model.removeEventListener(eventType, listeners[i].listener, listeners[i].thisObject);
451c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            }
452c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
4535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    },
4545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
4555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    /**
4569e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     * @return {boolean}
4579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)     */
4589e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    hasTargets: function()
4599e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    {
4609e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        return !!this._targets.length;
4619e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
4629e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
4639e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    /**
46407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch     * @return {!Array.<!WebInspector.Target>}
46507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch     */
46607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    targets: function()
46707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    {
468197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return this._targets.slice();
46907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    },
47007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
47107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    /**
472aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {?WebInspector.Target}
47307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch     */
474197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    mainTarget: function()
47507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    {
47607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        return this._targets[0];
4779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    },
4789e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)
4799e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    __proto__: WebInspector.Object.prototype
480aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
48107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
482aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch/**
483aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @interface
484aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch */
485aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.TargetManager.Observer = function()
486aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{
487aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
488aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
489aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.TargetManager.Observer.prototype = {
490aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
491aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.Target} target
492aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
493aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    targetAdded: function(target) { },
494aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
495aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
496aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.Target} target
497aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
498aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    targetRemoved: function(target) { },
499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
50007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
50107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch/**
50207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @type {!WebInspector.TargetManager}
50307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch */
504197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.targetManager = new WebInspector.TargetManager();
505