fd1678804dc0cfe236dbb893b0e83cea2a9ab59e
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Debug / Bootstrap.js
1 /*
2  * Copyright (C) 2015 University of Washington.
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 WI.isEngineeringBuild = true;
27
28 // This function is invoked after the inspector has loaded and has a backend target.
29 WI.runBootstrapOperations = function() {
30     WI.showDebugUISetting = new WI.Setting("show-debug-ui", false);
31
32     // Toggle Debug UI setting.
33     new WI.KeyboardShortcut(WI.KeyboardShortcut.Modifier.Option | WI.KeyboardShortcut.Modifier.Shift | WI.KeyboardShortcut.Modifier.CommandOrControl, "D", () => {
34         WI.showDebugUISetting.value = !WI.showDebugUISetting.value;
35     });
36
37     // Reload the Web Inspector.
38     new WI.KeyboardShortcut(WI.KeyboardShortcut.Modifier.Option | WI.KeyboardShortcut.Modifier.Shift | WI.KeyboardShortcut.Modifier.CommandOrControl, "R", () => {
39         InspectorFrontendHost.reopen();
40     });
41
42     // Toggle Inspector Messages Filtering.
43     let ignoreChangesToState = false;
44     const DumpMessagesState = {Off: "off", Filtering: "filtering", Everything: "everything"};
45     const dumpMessagesToolTip = WI.unlocalizedString("Enable dump inspector messages to console.\nShift-click to dump all inspector messages with no filtering.");
46     const dumpMessagesActivatedToolTip = WI.unlocalizedString("Disable dump inspector messages to console");
47     let dumpMessagesToolbarItem = new WI.ActivateButtonToolbarItem("dump-messages", dumpMessagesToolTip, dumpMessagesActivatedToolTip, "Images/Console.svg");
48
49     function dumpMessagesCurrentState() {
50         if (!InspectorBackend.dumpInspectorProtocolMessages)
51             return DumpMessagesState.Off;
52         if (InspectorBackend.filterMultiplexingBackendInspectorProtocolMessages)
53             return DumpMessagesState.Filtering;
54         return DumpMessagesState.Everything;
55     }
56
57     function applyDumpMessagesState(state) {
58         ignoreChangesToState = true;
59         switch (state) {
60         case DumpMessagesState.Off:
61             InspectorBackend.dumpInspectorProtocolMessages = false;
62             InspectorBackend.filterMultiplexingBackendInspectorProtocolMessages = false;
63             dumpMessagesToolbarItem.activated = false;
64             dumpMessagesToolbarItem.element.style.removeProperty("color");
65             break;
66         case DumpMessagesState.Filtering:
67             InspectorBackend.dumpInspectorProtocolMessages = true;
68             InspectorBackend.filterMultiplexingBackendInspectorProtocolMessages = true;
69             dumpMessagesToolbarItem.activated = true;
70             dumpMessagesToolbarItem.element.style.removeProperty("color");
71             break;
72         case DumpMessagesState.Everything:
73             InspectorBackend.dumpInspectorProtocolMessages = true;
74             InspectorBackend.filterMultiplexingBackendInspectorProtocolMessages = false;
75             dumpMessagesToolbarItem.activated = true;
76             dumpMessagesToolbarItem.element.style.color = "rgb(164, 41, 154)";
77             break;
78         }
79         ignoreChangesToState = false;
80     }
81
82     WI.toolbar.addToolbarItem(dumpMessagesToolbarItem, WI.Toolbar.Section.CenterRight);
83     dumpMessagesToolbarItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, () => {
84         let nextState;
85         switch (dumpMessagesCurrentState()) {
86         case DumpMessagesState.Off:
87             nextState = WI.modifierKeys.shiftKey ? DumpMessagesState.Everything : DumpMessagesState.Filtering;
88             break;
89         case DumpMessagesState.Filtering:
90             nextState = WI.modifierKeys.shiftKey ? DumpMessagesState.Everything : DumpMessagesState.Off;
91             break;
92         case DumpMessagesState.Everything:
93             nextState = DumpMessagesState.Off;
94             break;
95         }
96         applyDumpMessagesState(nextState);
97     });
98     WI.settings.autoLogProtocolMessages.addEventListener(WI.Setting.Event.Changed, () => {
99         if (ignoreChangesToState)
100             return;
101         applyDumpMessagesState(dumpMessagesCurrentState());
102     });
103     applyDumpMessagesState(dumpMessagesCurrentState());
104
105     // Next Level Inspector.
106     let inspectionLevel = InspectorFrontendHost ? InspectorFrontendHost.inspectionLevel() : 1;
107     const inspectInspectorToolTip = WI.unlocalizedString("Open Web Inspector [%d]").format(inspectionLevel + 1);
108     let inspectInspectorToolbarItem = new WI.ButtonToolbarItem("inspect-inspector", inspectInspectorToolTip);
109     WI.toolbar.addToolbarItem(inspectInspectorToolbarItem, WI.Toolbar.Section.CenterRight);
110     inspectInspectorToolbarItem.element.textContent = inspectionLevel + 1;
111     inspectInspectorToolbarItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, () => {
112         InspectorFrontendHost.inspectInspector();
113     });
114
115     function updateDebugUI() {
116         dumpMessagesToolbarItem.hidden = !WI.showDebugUISetting.value;
117         inspectInspectorToolbarItem.hidden = !WI.showDebugUISetting.value;
118     }
119
120     WI.showDebugUISetting.addEventListener(WI.Setting.Event.Changed, () => {
121         updateDebugUI();
122         WI.notifications.dispatchEventToListeners(WI.Notification.DebugUIEnabledDidChange);
123     });
124
125     updateDebugUI();
126 };