Web Inspector: Save Console Evaluations into Command Line variables $1-$99 ($n)
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Controllers / LogManager.js
1 /*
2  * Copyright (C) 2013 Apple Inc. 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.LogManager = function()
27 {
28     WebInspector.Object.call(this);
29
30     WebInspector.Frame.addEventListener(WebInspector.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
31 };
32
33 WebInspector.LogManager.Event = {
34     SessionStarted: "log-manager-session-was-started",
35     Cleared: "log-manager-cleared",
36     MessageAdded: "log-manager-message-added",
37     ActiveLogCleared: "log-manager-current-log-cleared",
38     PreviousMessageRepeatCountUpdated: "log-manager-previous-message-repeat-count-updated"
39 };
40
41 WebInspector.LogManager.prototype = {
42     constructor: WebInspector.LogManager,
43
44     // Public
45
46     messageWasAdded: function(source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, requestId)
47     {
48         // Called from WebInspector.ConsoleObserver.
49
50         // FIXME: Pass a request. We need a way to get it from the request ID.
51         var consoleMessage = WebInspector.ConsoleMessage.create(source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, null);
52
53         this.dispatchEventToListeners(WebInspector.LogManager.Event.MessageAdded, {message: consoleMessage});
54
55         console.assert(!consoleMessage._element || !consoleMessage._element.parentNode, "This console message shouldn't be added to a view. To add it you need to use clone().");
56     },
57
58     messagesCleared: function()
59     {
60         // Called from WebInspector.ConsoleObserver.
61
62         WebInspector.ConsoleCommandResult.clearMaximumSavedResultIndex();
63
64         // We don't want to clear messages on reloads. We can't determine that easily right now.
65         // FIXME: <rdar://problem/13767079> Console.messagesCleared should include a reason
66         this._shouldClearMessages = true;
67         setTimeout(function() {
68             if (this._shouldClearMessages)
69                 this.dispatchEventToListeners(WebInspector.LogManager.Event.ActiveLogCleared);
70             delete this._shouldClearMessages;
71         }.bind(this), 0);
72     },
73
74     messageRepeatCountUpdated: function(count)
75     {
76         // Called from WebInspector.ConsoleObserver.
77
78         this.dispatchEventToListeners(WebInspector.LogManager.Event.PreviousMessageRepeatCountUpdated, {count: count});
79     },
80
81     requestClearMessages: function()
82     {
83         ConsoleAgent.clearMessages();
84     },
85
86     // Private
87
88     _mainResourceDidChange: function(event)
89     {
90         console.assert(event.target instanceof WebInspector.Frame);
91
92         if (!event.target.isMainFrame())
93             return;
94
95         var oldMainResource = event.data.oldMainResource;
96         var newMainResource = event.target.mainResource;
97         if (oldMainResource.url !== newMainResource.url)
98             this.dispatchEventToListeners(WebInspector.LogManager.Event.Cleared);
99         else
100             this.dispatchEventToListeners(WebInspector.LogManager.Event.SessionStarted);
101
102         WebInspector.ConsoleCommandResult.clearMaximumSavedResultIndex();
103
104         delete this._shouldClearMessages;
105     }
106 };
107
108 WebInspector.LogManager.prototype.__proto__ = WebInspector.Object.prototype;