File: ThreadsSidebarPane.js

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (110 lines) | stat: -rw-r--r-- 3,722 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @constructor
 * @extends {WebInspector.SidebarPane}
 * @implements {WebInspector.TargetManager.Observer}
 */
WebInspector.ThreadsSidebarPane = function()
{
    WebInspector.SidebarPane.call(this, WebInspector.UIString("Threads"));
    /** @type {!Map.<!WebInspector.Target, !WebInspector.Placard>} */
    this._targetsToPlacards = new Map();
    /** @type {!Map.<!WebInspector.Placard, !WebInspector.Target>} */
    this._placardsToTargets = new Map();
    /** @type {?WebInspector.Placard} */
    this._selectedPlacard = null;
    WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.DebuggerPaused, this._onDebuggerStateChanged, this);
    WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.DebuggerResumed, this._onDebuggerStateChanged, this);
    WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._targetChanged, this);
    WebInspector.targetManager.observeTargets(this);
}

WebInspector.ThreadsSidebarPane.prototype = {

    /**
     * @override
     * @param {!WebInspector.Target} target
     */
    targetAdded: function(target)
    {
        var placard = new WebInspector.Placard(target.name(), "");
        placard.element.addEventListener("click", this._onPlacardClick.bind(this, placard), false);
        var currentTarget = WebInspector.context.flavor(WebInspector.Target);
        if (currentTarget === target)
            this._selectPlacard(placard);

        this._targetsToPlacards.set(target, placard);
        this._placardsToTargets.set(placard, target);
        this.bodyElement.appendChild(placard.element);
        this._updateDebuggerState(target);
    },

    /**
     * @override
     * @param {!WebInspector.Target} target
     */
    targetRemoved: function(target)
    {
        var placard = this._targetsToPlacards.remove(target);
        this._placardsToTargets.remove(placard);
        this.bodyElement.removeChild(placard.element);
    },

    /**
     * @param {!WebInspector.Event} event
     */
    _targetChanged: function(event)
    {
        var newTarget = /** @type {!WebInspector.Target} */(event.data);
        var placard =  /** @type {!WebInspector.Placard} */ (this._targetsToPlacards.get(newTarget));
        this._selectPlacard(placard);
    },

    /**
     * @param {!WebInspector.Event} event
     */
    _onDebuggerStateChanged: function(event)
    {
        var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (event.target);
        this._updateDebuggerState(debuggerModel.target());
    },

    /**
     * @param {!WebInspector.Target} target
     */
    _updateDebuggerState: function(target)
    {
        var placard = this._targetsToPlacards.get(target);
        placard.subtitle = target.debuggerModel.isPaused() ? WebInspector.UIString("paused") : WebInspector.UIString("");
    },

    /**
     * @param {!WebInspector.Placard} placard
     */
    _selectPlacard: function(placard)
    {
        if (placard === this._selectedPlacard)
            return;

        if (this._selectedPlacard)
            this._selectedPlacard.selected = false;

        this._selectedPlacard = placard;
        placard.selected = true;
    },

    /**
     * @param {!WebInspector.Placard} placard
     */
    _onPlacardClick: function(placard)
    {
        WebInspector.context.setFlavor(WebInspector.Target, this._placardsToTargets.get(placard));
        placard.element.scrollIntoViewIfNeeded();
    },


    __proto__: WebInspector.SidebarPane.prototype
}