- a/Source/WebInspectorUI/ChangeLog +42 lines
Lines 1-3 a/Source/WebInspectorUI/ChangeLog_sec1
1
2014-07-22  Brian J. Burg  <burg@cs.washington.edu>
2
3
        Web Inspector: show a replay dashboard when capturing or replaying
4
        https://bugs.webkit.org/show_bug.cgi?id=135170
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        This patch adds a replay dashboard with record/play/pause buttons. It
9
        is shown automatically when the user starts capturing an execution from
10
        the replay menu in the Timelines sidebar panel.
11
12
        * Localizations/en.lproj/localizedStrings.js:
13
        * UserInterface/Base/Main.js:
14
        (WebInspector.loaded):
15
        (WebInspector._captureDidStart):
16
        * UserInterface/Controllers/DashboardManager.js:
17
        (WebInspector.DashboardManager):
18
        * UserInterface/Images/ReplayPauseButton.svg: Added.
19
        * UserInterface/Images/ReplayPlayButton.svg: Added.
20
        * UserInterface/Images/ReplayRecordingButton.svg: Added.
21
        * UserInterface/Main.html:
22
        * UserInterface/Models/ReplayDashboard.js: Added.
23
        (WebInspector.ReplayDashboard):
24
        * UserInterface/Views/ButtonNavigationItem.js:
25
        (WebInspector.ButtonNavigationItem.prototype._updateImage):
26
        * UserInterface/Views/DashboardView.js:
27
        (WebInspector.DashboardView):
28
        * UserInterface/Views/ReplayDashboardView.css: Added.
29
        (.toolbar .dashboard.replay):
30
        (.toolbar .dashboard.replay div.navigation-bar):
31
        (.toolbar .dashboard.replay .item.button > .glyph):
32
        (.toolbar.label-only .dashboard.replay .item.button > .glyph):
33
        * UserInterface/Views/ReplayDashboardView.js: Added.
34
        (WebInspector.ReplayDashboardView):
35
        (WebInspector.ReplayDashboardView.prototype._captureButtonItemClicked):
36
        (WebInspector.ReplayDashboardView.prototype._replayButtonItemClicked):
37
        (WebInspector.ReplayDashboardView.prototype._captureStarted):
38
        (WebInspector.ReplayDashboardView.prototype._captureStopped):
39
        (WebInspector.ReplayDashboardView.prototype._playbackStarted):
40
        (WebInspector.ReplayDashboardView.prototype._playbackPaused):
41
        (WebInspector.ReplayDashboardView.prototype._playbackFinished):
42
1
2014-07-21  Brian J. Burg  <burg@cs.washington.edu>
43
2014-07-21  Brian J. Burg  <burg@cs.washington.edu>
2
44
3
        Web Inspector: cannot navigate between multiple applicable dashboards
45
        Web Inspector: cannot navigate between multiple applicable dashboards
- a/Source/WebInspectorUI/UserInterface/Base/Main.js +6 lines
Lines 124-129 WebInspector.loaded = function() a/Source/WebInspectorUI/UserInterface/Base/Main.js_sec1
124
        ConsoleAgent.enable();
124
        ConsoleAgent.enable();
125
125
126
    // Register for events.
126
    // Register for events.
127
    this.replayManager.addEventListener(WebInspector.ReplayManager.Event.CaptureStarted, this._captureDidStart, this);
127
    this.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Paused, this._debuggerDidPause, this);
128
    this.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Paused, this._debuggerDidPause, this);
128
    this.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Resumed, this._debuggerDidResume, this);
129
    this.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Resumed, this._debuggerDidResume, this);
129
    this.domTreeManager.addEventListener(WebInspector.DOMTreeManager.Event.InspectModeStateChanged, this._inspectModeStateChanged, this);
130
    this.domTreeManager.addEventListener(WebInspector.DOMTreeManager.Event.InspectModeStateChanged, this._inspectModeStateChanged, this);
Lines 744-749 WebInspector._dragOver = function(event) a/Source/WebInspectorUI/UserInterface/Base/Main.js_sec2
744
    event.preventDefault();
745
    event.preventDefault();
745
}
746
}
746
747
748
WebInspector._captureDidStart = function(event)
749
{
750
    this.dashboardContainer.showDashboardViewForRepresentedObject(this.dashboardManager.dashboards.replay);
751
}
752
747
WebInspector._debuggerDidPause = function(event)
753
WebInspector._debuggerDidPause = function(event)
748
{
754
{
749
    this.debuggerSidebarPanel.show();
755
    this.debuggerSidebarPanel.show();
- a/Source/WebInspectorUI/UserInterface/Controllers/DashboardManager.js +1 lines
Lines 29-34 WebInspector.DashboardManager = function() { a/Source/WebInspectorUI/UserInterface/Controllers/DashboardManager.js_sec1
29
    this._dashboards = {};
29
    this._dashboards = {};
30
    this._dashboards.default = new WebInspector.DefaultDashboard;
30
    this._dashboards.default = new WebInspector.DefaultDashboard;
31
    this._dashboards.debugger = new WebInspector.DebuggerDashboard;
31
    this._dashboards.debugger = new WebInspector.DebuggerDashboard;
32
    this._dashboards.replay = new WebInspector.ReplayDashboard;
32
};
33
};
33
34
34
WebInspector.DashboardManager.prototype = {
35
WebInspector.DashboardManager.prototype = {
- a/Source/WebInspectorUI/UserInterface/Images/ReplayPauseButton.svg +10 lines
Line 0 a/Source/WebInspectorUI/UserInterface/Images/ReplayPauseButton.svg_sec1
1
<?xml version="1.0" encoding="utf-8"?>
2
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
3
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
	 width="36px" height="36px" viewBox="0 0 36 36" enable-background="new 0 0 36 36" xml:space="preserve">
6
<g>
7
	<rect x="5.656" y="4.202" width="9.255" height="27.597"/>
8
	<rect x="21.09" y="4.202" width="9.254" height="27.597"/>
9
</g>
10
</svg>
- a/Source/WebInspectorUI/UserInterface/Images/ReplayPlayButton.svg +7 lines
Line 0 a/Source/WebInspectorUI/UserInterface/Images/ReplayPlayButton.svg_sec1
1
<?xml version="1.0" encoding="utf-8"?>
2
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
3
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
	 width="36px" height="36px" viewBox="0 0 36 36" enable-background="new 0 0 36 36" xml:space="preserve">
6
<polygon fill="#38AF4A" points="5.625,4.21 30.375,18 5.625,31.79 "/>
7
</svg>
- a/Source/WebInspectorUI/UserInterface/Images/ReplayRecordingButton.svg +7 lines
Line 0 a/Source/WebInspectorUI/UserInterface/Images/ReplayRecordingButton.svg_sec1
1
<?xml version="1.0" encoding="utf-8"?>
2
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
3
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
	 width="36px" height="36px" viewBox="0 0 36 36" enable-background="new 0 0 36 36" xml:space="preserve">
6
<circle fill="#EE2D24" cx="18" cy="18" r="13.605"/>
7
</svg>
- a/Source/WebInspectorUI/UserInterface/Main.html +3 lines
Lines 106-111 a/Source/WebInspectorUI/UserInterface/Main.html_sec1
106
    <link rel="stylesheet" href="Views/ProbeSetDataGrid.css">
106
    <link rel="stylesheet" href="Views/ProbeSetDataGrid.css">
107
    <link rel="stylesheet" href="Views/QuickConsole.css">
107
    <link rel="stylesheet" href="Views/QuickConsole.css">
108
    <link rel="stylesheet" href="Views/RadioButtonNavigationItem.css">
108
    <link rel="stylesheet" href="Views/RadioButtonNavigationItem.css">
109
    <link rel="stylesheet" href="Views/ReplayDashboardView.css">
109
    <link rel="stylesheet" href="Views/ResourceIcons.css">
110
    <link rel="stylesheet" href="Views/ResourceIcons.css">
110
    <link rel="stylesheet" href="Views/ResourceSidebarPanel.css">
111
    <link rel="stylesheet" href="Views/ResourceSidebarPanel.css">
111
    <link rel="stylesheet" href="Views/ResourceTreeElement.css">
112
    <link rel="stylesheet" href="Views/ResourceTreeElement.css">
Lines 248-253 a/Source/WebInspectorUI/UserInterface/Main.html_sec2
248
    <script src="Models/Profile.js"></script>
249
    <script src="Models/Profile.js"></script>
249
    <script src="Models/ProfileNode.js"></script>
250
    <script src="Models/ProfileNode.js"></script>
250
    <script src="Models/ProfileNodeCall.js"></script>
251
    <script src="Models/ProfileNodeCall.js"></script>
252
    <script src="Models/ReplayDashboard.js"></script>
251
    <script src="Models/ReplaySession.js"></script>
253
    <script src="Models/ReplaySession.js"></script>
252
    <script src="Models/ReplaySessionSegment.js"></script>
254
    <script src="Models/ReplaySessionSegment.js"></script>
253
    <script src="Models/Resource.js"></script>
255
    <script src="Models/Resource.js"></script>
Lines 419-424 a/Source/WebInspectorUI/UserInterface/Main.html_sec3
419
    <script src="Views/QuickConsole.js"></script>
421
    <script src="Views/QuickConsole.js"></script>
420
    <script src="Views/QuickConsoleNavigationBar.js"></script>
422
    <script src="Views/QuickConsoleNavigationBar.js"></script>
421
    <script src="Views/RadioButtonNavigationItem.js"></script>
423
    <script src="Views/RadioButtonNavigationItem.js"></script>
424
    <script src="Views/ReplayDashboardView.js"></script>
422
    <script src="Views/ResourceClusterContentView.js"></script>
425
    <script src="Views/ResourceClusterContentView.js"></script>
423
    <script src="Views/ResourceDetailsSidebarPanel.js"></script>
426
    <script src="Views/ResourceDetailsSidebarPanel.js"></script>
424
    <script src="Views/ResourceSidebarPanel.js"></script>
427
    <script src="Views/ResourceSidebarPanel.js"></script>
- a/Source/WebInspectorUI/UserInterface/Models/ReplayDashboard.js +33 lines
Line 0 a/Source/WebInspectorUI/UserInterface/Models/ReplayDashboard.js_sec1
1
/*
2
 * Copyright (C) 2014 University of Washington. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
 * THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
WebInspector.ReplayDashboard = function() {
27
    WebInspector.Object.call(this);
28
};
29
30
WebInspector.ReplayDashboard.prototype = {
31
    constructor: WebInspector.ReplayDashboard,
32
    __proto__: WebInspector.Object.prototype,
33
};
- a/Source/WebInspectorUI/UserInterface/Views/DashboardView.js +3 lines
Lines 35-40 WebInspector.DashboardView = function(representedObject, identifier) a/Source/WebInspectorUI/UserInterface/Views/DashboardView.js_sec1
35
        if (representedObject instanceof WebInspector.DebuggerDashboard)
35
        if (representedObject instanceof WebInspector.DebuggerDashboard)
36
            return new WebInspector.DebuggerDashboardView(representedObject);
36
            return new WebInspector.DebuggerDashboardView(representedObject);
37
37
38
        if (representedObject instanceof WebInspector.ReplayDashboard)
39
            return new WebInspector.ReplayDashboardView(representedObject);
40
38
        throw "Can't make a DashboardView for an unknown representedObject.";
41
        throw "Can't make a DashboardView for an unknown representedObject.";
39
    }
42
    }
40
43
- a/Source/WebInspectorUI/UserInterface/Views/ReplayDashboardView.css +55 lines
Line 0 a/Source/WebInspectorUI/UserInterface/Views/ReplayDashboardView.css_sec1
1
/*
2
 * Copyright (C) 2014 University of Washington. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
 * THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
.toolbar .dashboard.replay {
26
    display: -webkit-flex;
27
    -webkit-flex-wrap: nowrap;
28
    -webkit-justify-content: center;
29
    -webkit-align-items: center;
30
31
    text-align: center;
32
    text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0;
33
    color: rgb(60, 60, 60);
34
    padding: 0 5px;
35
}
36
37
.toolbar .dashboard.replay div.navigation-bar {
38
    border-bottom: none !important;
39
}
40
41
.toolbar .dashboard.replay .item.button > .glyph {
42
    /* ButtonNavigationItem is not aware of alternate button sizes, so override here. */
43
    width: 16px !important;
44
    height: 16px !important;
45
}
46
47
.toolbar.label-only .dashboard.replay .item.button > .glyph {
48
    /* The default styles here will try to elide buttons in label-only mode. */
49
    display: -webkit-flex !important;
50
51
    /* ButtonNavigationItem is not aware of alternate button sizes, so override here. */
52
    width: 14px !important;
53
    height: 14px !important;
54
}
55
- a/Source/WebInspectorUI/UserInterface/Views/ReplayDashboardView.js +126 lines
Line 0 a/Source/WebInspectorUI/UserInterface/Views/ReplayDashboardView.js_sec1
1
/*
2
 * Copyright (C) 2014 University of Washington. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
 * THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
WebInspector.ReplayDashboardView = function(representedObject)
27
{
28
    WebInspector.DashboardView.call(this, representedObject, "replay");
29
30
    this._navigationBar = new WebInspector.NavigationBar;
31
    this.element.appendChild(this._navigationBar.element);
32
33
    replayManager = WebInspector.replayManager;
34
35
    this._captureButtonItem = new WebInspector.ActivateButtonNavigationItem("replay-dashboard-capture", WebInspector.UIString("Start Recording"), WebInspector.UIString("Stop Recording"), "Images/ReplayReadyButton.svg", 16, 16);
36
    this._captureButtonItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, this._captureButtonItemClicked, this);
37
    this._captureButtonItem.hidden = true;
38
    this._navigationBar.addNavigationItem(this._captureButtonItem);
39
40
    this._replayButtonItem = new WebInspector.ToggleButtonNavigationItem("replay-dashboard-replay", WebInspector.UIString("Start Playback"), WebInspector.UIString("Pause Playback"), "Images/ReplayPlayButton.svg", "Images/ReplayPauseButton.svg", 16, 16);
41
    this._replayButtonItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, this._replayButtonItemClicked, this);
42
    this._replayButtonItem.hidden = true;
43
    this._navigationBar.addNavigationItem(this._replayButtonItem);
44
45
    // Add events required to track capture and replay state.
46
    WebInspector.replayManager.addEventListener(WebInspector.ReplayManager.Event.CaptureStarted, this._captureStarted, this);
47
    WebInspector.replayManager.addEventListener(WebInspector.ReplayManager.Event.CaptureStopped, this._captureStopped, this);
48
    WebInspector.replayManager.addEventListener(WebInspector.ReplayManager.Event.PlaybackStarted, this._playbackStarted, this);
49
    WebInspector.replayManager.addEventListener(WebInspector.ReplayManager.Event.PlaybackPaused, this._playbackPaused, this);
50
    WebInspector.replayManager.addEventListener(WebInspector.ReplayManager.Event.PlaybackFinished, this._playbackFinished, this);
51
52
    // Manually initialize style classes by querying current replay state.
53
    if (WebInspector.replayManager.sessionState === WebInspector.ReplayManager.SessionState.Capturing)
54
        this._captureStarted();
55
    else if (WebInspector.replayManager.sessionState === WebInspector.ReplayManager.SessionState.Inactive)
56
        this._captureStopped();
57
    // ReplayManager.sessionState must be Replaying.
58
    else if (WebInspector.replayManager.segmentState === WebInspector.ReplayManager.SegmentState.Dispatching)
59
        this._playbackStarted();
60
    // ReplayManager.sessionState must be Unloaded or Loaded, so execution is paused.
61
    else
62
        this._playbackPaused();
63
};
64
65
// Class names for top-level flex items within the replay dashboard.
66
WebInspector.ReplayDashboardView.RecordingContainerStyleClassName = "recording-container";
67
68
// Class names for single buttons.
69
WebInspector.ReplayDashboardView.RecordButtonStyleClassName = "record-button";
70
WebInspector.ReplayDashboardView.ReplayButtonStyleClassName = "replay-button";
71
72
WebInspector.ReplayDashboardView.prototype = {
73
    constructor: WebInspector.ReplayDashboardView,
74
    __proto__: WebInspector.DashboardView.prototype,
75
76
    // Private
77
78
    _captureButtonItemClicked: function()
79
    {
80
        if (WebInspector.replayManager.sessionState !== WebInspector.ReplayManager.SessionState.Capturing)
81
            WebInspector.replayManager.startCapturing();
82
        else
83
            WebInspector.replayManager.stopCapturing();
84
    },
85
86
    _replayButtonItemClicked: function(event)
87
    {
88
        console.assert(WebInspector.replayManager.sessionState !== WebInspector.ReplayManager.SessionState.Capturing, "Tried to start replaying while SessionState is Capturing!");
89
90
        if (WebInspector.replayManager.sessionState === WebInspector.ReplayManager.SessionState.Inactive)
91
            WebInspector.replayManager.replayToCompletion();
92
        else if (WebInspector.replayManager.segmentState === WebInspector.ReplayManager.SegmentState.Dispatching)
93
            WebInspector.replayManager.pausePlayback();
94
        else
95
            WebInspector.replayManager.replayToCompletion();
96
    },
97
98
    _captureStarted: function()
99
    {
100
        this._captureButtonItem.hidden = false;
101
        this._captureButtonItem.activated = true;
102
        this._replayButtonItem.hidden = true;
103
    },
104
105
    _captureStopped: function()
106
    {
107
        this._captureButtonItem.activated = false;
108
        this._captureButtonItem.hidden = true;
109
        this._replayButtonItem.hidden = false;
110
    },
111
112
    _playbackStarted: function()
113
    {
114
        this._replayButtonItem.toggled = true;
115
    },
116
117
    _playbackPaused: function()
118
    {
119
        this._replayButtonItem.toggled = false;
120
    },
121
122
    _playbackFinished: function()
123
    {
124
        this._replayButtonItem.toggled = false;
125
    }
126
};

Return to Bug 135170