15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com).
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Joseph Pecoraro
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var WebInspector = {
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _panelDescriptors: function()
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.panels = {};
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView = new WebInspector.InspectorView();
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parentElement = document.getElementById("main");
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView.show(parentElement);
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView.addEventListener(WebInspector.InspectorView.Events.PanelSelected, this._panelSelected, this);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var elements = new WebInspector.ElementsPanelDescriptor();
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var resources = new WebInspector.PanelDescriptor("resources", WebInspector.UIString("Resources"), "ResourcesPanel", "ResourcesPanel.js");
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var network = new WebInspector.NetworkPanelDescriptor();
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var scripts = new WebInspector.ScriptsPanelDescriptor();
44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var timeline = new WebInspector.TimelinePanelDescriptor();
45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var profiles = new WebInspector.ProfilesPanelDescriptor();
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var audits = new WebInspector.PanelDescriptor("audits", WebInspector.UIString("Audits"), "AuditsPanel", "AuditsPanel.js");
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var console = new WebInspector.PanelDescriptor("console", WebInspector.UIString("Console"), "ConsolePanel");
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var allDescriptors = [elements, resources, network, scripts, timeline, profiles, audits, console];
49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var allProfilers = [profiles];
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (WebInspector.experimentsSettings.customizableToolbar.isEnabled()) {
51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            allProfilers = [];
52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            allProfilers.push(new WebInspector.PanelDescriptor("cpu-profiler", WebInspector.UIString("CPU Profiler"), "CPUProfilerPanel", "ProfilesPanel.js"));
53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (!WebInspector.WorkerManager.isWorkerFrontend())
54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                allProfilers.push(new WebInspector.PanelDescriptor("css-profiler", WebInspector.UIString("CSS Profiler"), "CSSSelectorProfilerPanel", "ProfilesPanel.js"));
5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            allProfilers.push(new WebInspector.PanelDescriptor("heap-profiler", WebInspector.UIString("Heap Profiler"), "HeapProfilerPanel", "ProfilesPanel.js"));
56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (!WebInspector.WorkerManager.isWorkerFrontend() && WebInspector.experimentsSettings.canvasInspection.isEnabled())
57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                allProfilers.push(new WebInspector.PanelDescriptor("canvas-profiler", WebInspector.UIString("Canvas Profiler"), "CanvasProfilerPanel", "ProfilesPanel.js"));
58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            Array.prototype.splice.bind(allDescriptors, allDescriptors.indexOf(profiles), 1).apply(null, allProfilers);
59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var panelDescriptors = [];
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (WebInspector.WorkerManager.isWorkerFrontend()) {
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            panelDescriptors.push(scripts);
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            panelDescriptors.push(timeline);
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            panelDescriptors = panelDescriptors.concat(allProfilers);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            panelDescriptors.push(console);
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return panelDescriptors;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        for (var i = 0; i < allDescriptors.length; ++i)
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            panelDescriptors.push(allDescriptors[i]);
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return panelDescriptors;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _panelSelected: function()
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._toggleConsoleButton.setEnabled(WebInspector.inspectorView.currentPanel().name !== "console");
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _createGlobalStatusBarItems: function()
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var bottomStatusBarContainer = document.getElementById("bottom-status-bar-container");
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Create main dock button and options.
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var mainStatusBar = document.getElementById("main-status-bar");
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        mainStatusBar.insertBefore(this.dockController.element, bottomStatusBarContainer);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._toggleConsoleButton = new WebInspector.StatusBarButton(WebInspector.UIString("Show console."), "console-status-bar-item");
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._toggleConsoleButton.addEventListener("click", this._toggleConsoleButtonClicked.bind(this), false);
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        mainStatusBar.insertBefore(this._toggleConsoleButton.element, bottomStatusBarContainer);
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this.inspectElementModeController)
9253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            mainStatusBar.insertBefore(this.inspectElementModeController.toggleSearchButton.element, bottomStatusBarContainer);
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        mainStatusBar.appendChild(this.settingsController.statusBarItem);
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _toggleConsoleButtonClicked: function()
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!this._toggleConsoleButton.enabled())
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var animationType = window.event && window.event.shiftKey ? WebInspector.Drawer.AnimationType.Slow : WebInspector.Drawer.AnimationType.Normal;
10353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
10453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._toggleConsoleButton.toggled)
10553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this.closeConsole(animationType);
10653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        else
10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this.showConsole(animationType);
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {Element} statusBarElement
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {WebInspector.View} view
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function()=} onclose
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    showViewInDrawer: function(statusBarElement, view, onclose)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._toggleConsoleButton.title = WebInspector.UIString("Show console.");
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._toggleConsoleButton.toggled = false;
11953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._removeDrawerView();
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var drawerStatusBarHeader = document.createElement("div");
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        drawerStatusBarHeader.className = "drawer-header status-bar-item";
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        drawerStatusBarHeader.appendChild(statusBarElement);
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        drawerStatusBarHeader.onclose = onclose;
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var closeButton = drawerStatusBarHeader.createChild("div", "close-button");
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        closeButton.addEventListener("click", this.closeViewInDrawer.bind(this), false);
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var panelStatusBar = document.getElementById("panel-status-bar");
130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var drawerViewAnchor = document.getElementById("drawer-view-anchor");
131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        panelStatusBar.insertBefore(drawerStatusBarHeader, drawerViewAnchor);
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._drawerStatusBarHeader = drawerStatusBarHeader;
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.drawer.show(view, WebInspector.Drawer.AnimationType.Immediately);
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    closeViewInDrawer: function()
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._drawerStatusBarHeader) {
13953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._removeDrawerView();
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Once drawer is closed console should be shown if it was shown before current view replaced it in drawer.
14253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (this._consoleWasShown)
14353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                this.showConsole();
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
14553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                this.drawer.hide(WebInspector.Drawer.AnimationType.Immediately);
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _removeDrawerView: function()
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._drawerStatusBarHeader) {
152591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            this._drawerStatusBarHeader.remove();
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._drawerStatusBarHeader.onclose)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._drawerStatusBarHeader.onclose();
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._drawerStatusBarHeader;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
16053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {WebInspector.Drawer.AnimationType=} animationType
16153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
16253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    showConsole: function(animationType)
16353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
16453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        animationType = animationType || WebInspector.Drawer.AnimationType.Normal;
16553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
16653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this.consoleView.isShowing())
16753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            return;
16853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
16953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (WebInspector.drawer.visible)
17053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._removeDrawerView();
17153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
17253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._toggleConsoleButton.toggled = true;
17353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._toggleConsoleButton.title = WebInspector.UIString("Hide console.");
17453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.drawer.show(this.consoleView, animationType);
17553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._consoleWasShown = true;
17653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
17753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
17853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
17953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {WebInspector.Drawer.AnimationType=} animationType
18053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
18153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    closeConsole: function(animationType)
18253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
18353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        animationType = animationType || WebInspector.Drawer.AnimationType.Normal;
18453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
18553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (!this.consoleView.isShowing() || !WebInspector.drawer.visible)
18653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            return;
18753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
18853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._toggleConsoleButton.toggled = false;
18953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._toggleConsoleButton.title = WebInspector.UIString("Show console.");
19053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.drawer.hide(animationType);
19153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._consoleWasShown = false;
19253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
19353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    _resetErrorAndWarningCounts: function()
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var errorWarningElement = document.getElementById("error-warning-count");
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!errorWarningElement)
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2007757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        errorWarningElement.addStyleClass("hidden");
2017757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    },
2027757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
2037757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    _updateErrorAndWarningCounts: function()
2047757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    {
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var errors = WebInspector.console.errors;
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var warnings = WebInspector.console.warnings;
2077757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!errors && !warnings) {
2097757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch            this._resetErrorAndWarningCounts();
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        var errorWarningElement = document.getElementById("error-warning-count");
2147757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch        if (!errorWarningElement)
2157757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch            return;
2167757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        errorWarningElement.removeStyleClass("hidden");
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        errorWarningElement.removeChildren();
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (errors) {
22253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var errorImageElement = errorWarningElement.createChild("div", "error-icon-small");
22353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var errorElement = errorWarningElement.createChild("span");
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            errorElement.id = "error-count";
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            errorElement.textContent = errors;
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (warnings) {
22953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var warningsImageElement = errorWarningElement.createChild("div", "warning-icon-small");
23053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var warningsElement = errorWarningElement.createChild("span");
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            warningsElement.id = "warning-count";
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            warningsElement.textContent = warnings;
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (errors) {
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (warnings) {
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (errors == 1) {
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    if (warnings == 1)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        errorWarningElement.title = WebInspector.UIString("%d error, %d warning", errors, warnings);
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    else
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        errorWarningElement.title = WebInspector.UIString("%d error, %d warnings", errors, warnings);
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                } else if (warnings == 1)
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    errorWarningElement.title = WebInspector.UIString("%d errors, %d warning", errors, warnings);
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                else
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    errorWarningElement.title = WebInspector.UIString("%d errors, %d warnings", errors, warnings);
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            } else if (errors == 1)
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                errorWarningElement.title = WebInspector.UIString("%d error", errors);
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                errorWarningElement.title = WebInspector.UIString("%d errors", errors);
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else if (warnings == 1)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            errorWarningElement.title = WebInspector.UIString("%d warning", warnings);
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else if (warnings)
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            errorWarningElement.title = WebInspector.UIString("%d warnings", warnings);
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            errorWarningElement.title = null;
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get inspectedPageDomain()
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parsedURL = WebInspector.inspectedPageURL && WebInspector.inspectedPageURL.asParsedURL();
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return parsedURL ? parsedURL.host : "";
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _initializeCapability: function(name, callback, error, result)
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Capabilities[name] = result;
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (callback)
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback();
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _zoomIn: function()
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._zoomLevel = Math.min(this._zoomLevel + 1, WebInspector.Zoom.Table.length - WebInspector.Zoom.DefaultOffset - 1);
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestZoom();
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _zoomOut: function()
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._zoomLevel = Math.max(this._zoomLevel - 1, -WebInspector.Zoom.DefaultOffset);
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestZoom();
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _resetZoom: function()
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._zoomLevel = 0;
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestZoom();
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _requestZoom: function()
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.settings.zoomLevel.set(this._zoomLevel);
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // For backwards compatibility, zoomLevel takes integers (with 0 being default zoom).
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var index = this._zoomLevel + WebInspector.Zoom.DefaultOffset;
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        index = Math.min(WebInspector.Zoom.Table.length - 1, index);
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        index = Math.max(0, index);
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        InspectorFrontendHost.setZoomFactor(WebInspector.Zoom.Table[index]);
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _debuggerPaused: function()
30053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
30153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        // Create scripts panel upon demand.
30253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        WebInspector.panel("scripts");
30353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
30453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
30553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _setupTethering: function()
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
30753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (!this._portForwardings) {
30853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._portForwardings = {};
30953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            WebInspector.settings.portForwardings.addChangeListener(this._setupTethering.bind(this));
31053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
31153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var entries = WebInspector.settings.portForwardings.get();
31253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var newForwardings = {};
31353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        for (var i = 0; i < entries.length; ++i)
31453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            newForwardings[entries[i].port] = entries[i].location;
31553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
31653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        for (var port in this._portForwardings) {
31753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (!newForwardings[port])
31853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                unbind(port);
31953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
32053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
32153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        for (var port in newForwardings) {
32253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (this._portForwardings[port] && newForwardings[port] === this._portForwardings[port])
32353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                continue;
32453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (this._portForwardings[port])
32553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)              unbind(port);
32653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            bind(port, newForwardings[port]);
32753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
32853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._portForwardings = newForwardings;
32953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
33153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)         * @param {string} port
33253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)         * @param {string} location
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
33453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        function bind(port, location)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
33653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var command = { method: "Tethering.bind", params: { port: parseInt(port, 10), location: location }, id: InspectorBackend.nextCallbackId() };
33753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            InspectorBackend.sendMessageObjectToBackend(command);
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        /**
34153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)         * @param {string} port
34253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)         */
34353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        function unbind(port)
34453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        {
34553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var command = { method: "Tethering.unbind", params: { port: parseInt(port, 10) }, id: InspectorBackend.nextCallbackId() };
34653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            InspectorBackend.sendMessageObjectToBackend(command);
34753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        }
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Events = {
352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorLoaded: "InspectorLoaded",
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorClosing: "InspectorClosing"
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){(function parseQueryParameters()
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.queryParamsObject = {};
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var queryParams = window.location.search;
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!queryParams)
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var params = queryParams.substring(1).split("&");
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var i = 0; i < params.length; ++i) {
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var pair = params[i].split("=");
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.queryParamsObject[pair[0]] = pair[1];
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)})();}
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.suggestReload = function()
370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (window.confirm(WebInspector.UIString("It is recommended to restart inspector after making these changes. Would you like to restart it?")))
372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.reload();
373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.reload = function()
376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
3775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    InspectorAgent.reset();
3785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    var queryParams = window.location.search;
380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    var url = window.location.href;
381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    url = url.substring(0, url.length - queryParams.length);
382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    var queryParamsObject = {};
383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (var name in WebInspector.queryParamsObject)
384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        queryParamsObject[name] = WebInspector.queryParamsObject[name];
385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (this.dockController)
386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        queryParamsObject["dockSide"] = this.dockController.dockSide();
387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    var names = Object.keys(queryParamsObject);
388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (var i = 0; i < names.length; ++i)
389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        url += (i ? "&" : "?") + names[i] + "=" + queryParamsObject[names[i]];
390926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    document.location = url;
391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.loaded = function()
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
39553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    InspectorBackend.loadFromJSONIfNeeded("../protocol.json");
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.dockController = new WebInspector.DockController();
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.WorkerManager.isDedicatedWorkerFrontend()) {
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Do not create socket for the worker front-end.
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.doLoadedDone();
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var ws;
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if ("ws" in WebInspector.queryParamsObject)
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ws = "ws://" + WebInspector.queryParamsObject.ws;
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if ("page" in WebInspector.queryParamsObject) {
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var page = WebInspector.queryParamsObject.page;
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var host = "host" in WebInspector.queryParamsObject ? WebInspector.queryParamsObject.host : window.location.host;
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ws = "ws://" + host + "/devtools/page/" + page;
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (ws) {
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.socket = new WebSocket(ws);
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.socket.onmessage = function(message) { InspectorBackend.dispatch(message.data); }
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.socket.onerror = function(error) { console.error(error); }
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.socket.onopen = function() {
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            InspectorFrontendHost.sendMessageToBackend = WebInspector.socket.send.bind(WebInspector.socket);
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.doLoadedDone();
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.socket.onclose = function() {
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!WebInspector.socket._detachReason)
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                (new WebInspector.RemoteDebuggingTerminatedScreen("websocket_closed")).showModal();
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.doLoadedDone();
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // In case of loading as a web page with no bindings / harness, kick off initialization manually.
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (InspectorFrontendHost.isStub) {
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        InspectorFrontendAPI.dispatchQueryParameters();
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector._doLoadedDoneWithCapabilities();
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.doLoadedDone = function()
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Install styles and themes
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.installPortStyles();
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.socket)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        document.body.addStyleClass("remote");
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.queryParamsObject.toolbarColor && WebInspector.queryParamsObject.textColor)
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.setToolbarColors(WebInspector.queryParamsObject.toolbarColor, WebInspector.queryParamsObject.textColor);
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.WorkerManager.loaded();
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
44953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    WorkerAgent.canInspectWorkers(WebInspector._initializeCapability.bind(WebInspector, "canInspectWorkers", WebInspector._doLoadedDoneWithCapabilities.bind(WebInspector)));
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector._doLoadedDoneWithCapabilities = function()
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    new WebInspector.VersionController().updateVersion();
455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.shortcutsScreen = new WebInspector.ShortcutsScreen();
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._registerShortcuts();
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // set order of some sections explicitly
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.shortcutsScreen.section(WebInspector.UIString("Console"));
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.shortcutsScreen.section(WebInspector.UIString("Elements Panel"));
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
463926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    var panelDescriptors = this._panelDescriptors();
464926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (var i = 0; i < panelDescriptors.length; ++i)
465926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        panelDescriptors[i].registerShortcuts();
466926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.console = new WebInspector.ConsoleModel();
4687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    this.console.addEventListener(WebInspector.ConsoleModel.Events.ConsoleCleared, this._resetErrorAndWarningCounts, this);
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.console.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, this._updateErrorAndWarningCounts, this);
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.console.addEventListener(WebInspector.ConsoleModel.Events.RepeatCountUpdated, this._updateErrorAndWarningCounts, this);
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
472926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.CSSMetadata.requestCSSShorthandData();
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.drawer = new WebInspector.Drawer();
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.networkManager = new WebInspector.NetworkManager();
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.resourceTreeModel = new WebInspector.ResourceTreeModel(this.networkManager);
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.debuggerModel = new WebInspector.DebuggerModel();
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.networkLog = new WebInspector.NetworkLog();
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.domAgent = new WebInspector.DOMAgent();
48253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.domAgent.addEventListener(WebInspector.DOMAgent.Events.InspectNodeRequested, this._inspectNodeRequested, this);
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.runtimeModel = new WebInspector.RuntimeModel(this.resourceTreeModel);
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.consoleView = new WebInspector.ConsoleView(WebInspector.WorkerManager.isWorkerFrontend());
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorBackend.registerInspectorDispatcher(this);
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.isolatedFileSystemManager = new WebInspector.IsolatedFileSystemManager();
490926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.isolatedFileSystemDispatcher = new WebInspector.IsolatedFileSystemDispatcher(this.isolatedFileSystemManager);
491521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    this.workspace = new WebInspector.Workspace(this.isolatedFileSystemManager.mapping());
492926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.cssModel = new WebInspector.CSSStyleModel(this.workspace);
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.timelineManager = new WebInspector.TimelineManager();
495fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    this.tracingAgent = new WebInspector.TracingAgent();
496e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    this.overridesSupport = new WebInspector.OverridesSupport();
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.searchController = new WebInspector.SearchController();
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.advancedSearchController = new WebInspector.AdvancedSearchController();
50053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!WebInspector.WorkerManager.isWorkerFrontend())
50153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.inspectElementModeController = new WebInspector.InspectElementModeController();
50253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.settingsController = new WebInspector.SettingsController();
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.domBreakpointsSidebarPane = new WebInspector.DOMBreakpointsSidebarPane();
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._zoomLevel = WebInspector.settings.zoomLevel.get();
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (this._zoomLevel)
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._requestZoom();
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var autoselectPanel = WebInspector.UIString("a panel chosen automatically");
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var openAnchorLocationSetting = WebInspector.settings.createSetting("openLinkHandler", autoselectPanel);
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.openAnchorLocationRegistry = new WebInspector.HandlerRegistry(openAnchorLocationSetting);
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.openAnchorLocationRegistry.registerHandler(autoselectPanel, function() { return false; });
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.workspaceController = new WebInspector.WorkspaceController(this.workspace);
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
518926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.fileSystemWorkspaceProvider = new WebInspector.FileSystemWorkspaceProvider(this.isolatedFileSystemManager, this.workspace);
519926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
520926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.networkWorkspaceProvider = new WebInspector.SimpleWorkspaceProvider(this.workspace, WebInspector.projectTypes.Network);
521926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    new WebInspector.NetworkUISourceCodeProvider(this.networkWorkspaceProvider, this.workspace);
522926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.breakpointManager = new WebInspector.BreakpointManager(WebInspector.settings.breakpoints, this.debuggerModel, this.workspace);
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.scriptSnippetModel = new WebInspector.ScriptSnippetModel(this.workspace);
526926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    new WebInspector.DebuggerScriptMapping(this.workspace, this.networkWorkspaceProvider);
528926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.liveEditSupport = new WebInspector.LiveEditSupport(this.workspace);
529926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.styleContentBinding = new WebInspector.StyleContentBinding(this.cssModel, this.workspace);
53093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    new WebInspector.CSSStyleSheetMapping(this.cssModel, this.workspace, this.networkWorkspaceProvider);
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    new WebInspector.PresentationConsoleMessageHelper(this.workspace);
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._createGlobalStatusBarItems();
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.toolbar = new WebInspector.Toolbar();
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.startBatchUpdate();
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var i = 0; i < panelDescriptors.length; ++i)
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView.addPanel(panelDescriptors[i]);
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.endBatchUpdate();
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.addMainEventListeners(document);
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    window.addEventListener("resize", this.windowResize.bind(this), true);
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var errorWarningCount = document.getElementById("error-warning-count");
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    errorWarningCount.addEventListener("click", this.showConsole.bind(this), false);
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._updateErrorAndWarningCounts();
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.extensionServer.initExtensions();
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.console.enableAgent();
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function showInitialPanel()
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!WebInspector.inspectorView.currentPanel())
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.showPanel(WebInspector.settings.lastActivePanel.get());
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorAgent.enable(showInitialPanel);
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.databaseModel = new WebInspector.DatabaseModel();
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.domStorageModel = new WebInspector.DOMStorageModel();
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
56353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    ProfilerAgent.enable();
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
565521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    WebInspector.settings.forceCompositingMode = WebInspector.settings.createBackendSetting("forceCompositingMode", false, PageAgent.setForceCompositingMode.bind(PageAgent));
5665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebInspector.settings.showPaintRects = WebInspector.settings.createBackendSetting("showPaintRects", false, PageAgent.setShowPaintRects.bind(PageAgent));
5675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebInspector.settings.showDebugBorders = WebInspector.settings.createBackendSetting("showDebugBorders", false, PageAgent.setShowDebugBorders.bind(PageAgent));
5685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebInspector.settings.continuousPainting = WebInspector.settings.createBackendSetting("continuousPainting", false, PageAgent.setContinuousPaintingEnabled.bind(PageAgent));
5695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebInspector.settings.showFPSCounter = WebInspector.settings.createBackendSetting("showFPSCounter", false, PageAgent.setShowFPSCounter.bind(PageAgent));
570591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    WebInspector.settings.showScrollBottleneckRects = WebInspector.settings.createBackendSetting("showScrollBottleneckRects", false, PageAgent.setShowScrollBottleneckRects.bind(PageAgent));
571926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
57293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
57393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    function showRulersChanged()
57493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
57593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
57693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    }
57793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    showRulersChanged();
57893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.WorkerManager.loadCompleted();
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorFrontendAPI.loadCompleted();
581926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
58253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (WebInspector.experimentsSettings.tethering.isEnabled())
58353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._setupTethering();
58453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
585926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.notifications.dispatchEventToListeners(WebInspector.Events.InspectorLoaded);
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var windowLoaded = function()
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
59053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    WebInspector.loaded();
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    window.removeEventListener("DOMContentLoaded", windowLoaded, false);
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    delete windowLoaded;
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)window.addEventListener("DOMContentLoaded", windowLoaded, false);
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// We'd like to enforce asynchronous interaction between the inspector controller and the frontend.
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// It is needed to prevent re-entering the backend code.
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Also, native dispatches do not guarantee setTimeouts to be serialized, so we
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// enforce serialization using 'messagesToDispatch' queue. It is also important that JSC debugger
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// tests require that each command was dispatch within individual timeout callback, so we don't batch them.
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var messagesToDispatch = [];
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.dispatchQueueIsEmpty = function() {
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return messagesToDispatch.length == 0;
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.dispatch = function(message) {
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    messagesToDispatch.push(message);
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setTimeout(function() {
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        InspectorBackend.dispatch(messagesToDispatch.shift());
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }, 0);
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.windowResize = function(event)
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.inspectorView)
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView.doResize();
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.drawer)
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.drawer.resize();
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.toolbar)
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.toolbar.resize();
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.settingsController)
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.settingsController.resize();
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.setDockingUnavailable = function(unavailable)
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (this.dockController)
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dockController.setDockingUnavailable(unavailable);
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.close = function(event)
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (this._isClosing)
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isClosing = true;
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.notifications.dispatchEventToListeners(WebInspector.Events.InspectorClosing);
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorFrontendHost.closeWindow();
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.documentClick = function(event)
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var anchor = event.target.enclosingNodeOrSelfWithNodeName("a");
646926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!anchor || (anchor.target === "_blank"))
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Prevent the link from navigating, since we don't do any navigation by following links normally.
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    event.consume(true);
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function followLink()
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (WebInspector.isBeingEdited(event.target))
6555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
6565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (WebInspector.openAnchorLocationRegistry.dispatch({ url: anchor.href, lineNumber: anchor.lineNumber}))
6575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
6585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (WebInspector.showAnchorLocation(anchor))
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
661926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        const profileMatch = WebInspector.ProfilesPanelDescriptor.ProfileURLRegExp.exec(anchor.href);
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (profileMatch) {
663926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            WebInspector.showPanel("profiles").showProfile(profileMatch[1], profileMatch[2]);
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parsedURL = anchor.href.asParsedURL();
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (parsedURL && parsedURL.scheme === "webkit-link-action") {
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (parsedURL.host === "show-panel") {
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var panel = parsedURL.path.substring(1);
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (WebInspector.panel(panel))
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    WebInspector.showPanel(panel);
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        InspectorFrontendHost.openInNewTab(anchor.href);
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.followLinkTimeout)
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        clearTimeout(WebInspector.followLinkTimeout);
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (anchor.preventFollowOnDoubleClick) {
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Start a timeout if this is the first click, if the timeout is canceled
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // before it fires, then a double clicked happened or another link was clicked.
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (event.detail === 1)
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.followLinkTimeout = setTimeout(followLink, 333);
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    followLink();
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.openResource = function(resourceURL, inResourcesPanel)
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var resource = WebInspector.resourceForURL(resourceURL);
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (inResourcesPanel && resource)
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.showPanel("resources").showResource(resource);
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        InspectorFrontendHost.openInNewTab(resourceURL);
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector._registerShortcuts = function()
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var shortcut = WebInspector.KeyboardShortcut;
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("All Panels"));
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var keys = [
708926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        shortcut.makeDescriptor("[", shortcut.Modifiers.CtrlOrMeta),
709926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        shortcut.makeDescriptor("]", shortcut.Modifiers.CtrlOrMeta)
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ];
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    section.addRelatedKeys(keys, WebInspector.UIString("Go to the panel to the left/right"));
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
713926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    keys = [
714926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        shortcut.makeDescriptor("[", shortcut.Modifiers.CtrlOrMeta | shortcut.Modifiers.Alt),
715926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        shortcut.makeDescriptor("]", shortcut.Modifiers.CtrlOrMeta | shortcut.Modifiers.Alt)
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ];
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    section.addRelatedKeys(keys, WebInspector.UIString("Go back/forward in panel history"));
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
719926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    section.addKey(shortcut.makeDescriptor(shortcut.Keys.Esc), WebInspector.UIString("Toggle console"));
720926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    section.addKey(shortcut.makeDescriptor("f", shortcut.Modifiers.CtrlOrMeta), WebInspector.UIString("Search"));
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var advancedSearchShortcut = WebInspector.AdvancedSearchController.createShortcut();
723926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    section.addKey(advancedSearchShortcut, WebInspector.UIString("Search across all sources"));
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
72553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    var inspectElementModeShortcut = WebInspector.InspectElementModeController.createShortcut();
72653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    section.addKey(inspectElementModeShortcut, WebInspector.UIString("Select node to inspect"));
72753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var openResourceShortcut = WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta);
729926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    section.addKey(openResourceShortcut, WebInspector.UIString("Go to source"));
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.isMac()) {
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        keys = [
733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            shortcut.makeDescriptor("g", shortcut.Modifiers.Meta),
734926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            shortcut.makeDescriptor("g", shortcut.Modifiers.Meta | shortcut.Modifiers.Shift)
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ];
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        section.addRelatedKeys(keys, WebInspector.UIString("Find next/previous"));
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var goToShortcut = WebInspector.GoToLineDialog.createShortcut();
740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    section.addKey(goToShortcut, WebInspector.UIString("Go to line"));
741926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
742926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    keys = [
743926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        shortcut.Keys.F1,
744926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        shortcut.makeDescriptor("?")
745926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ];
746521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    section.addAlternateKeys(keys, WebInspector.UIString("Show general settings"));
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {KeyboardEvent} event
751926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.documentKeyDown = function(event)
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const helpKey = WebInspector.isMac() ? "U+003F" : "U+00BF"; // "?" for both platforms
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (event.keyIdentifier === "F1" ||
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        (event.keyIdentifier === helpKey && event.shiftKey && (!WebInspector.isBeingEdited(event.target) || event.metaKey))) {
75853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.settingsController.showSettingsScreen(WebInspector.SettingsScreen.Tabs.General);
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        event.consume(true);
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.currentFocusElement() && WebInspector.currentFocusElement().handleKeyEvent) {
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.currentFocusElement().handleKeyEvent(event);
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (event.handled) {
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            event.consume(true);
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.inspectorView.currentPanel()) {
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView.currentPanel().handleShortcut(event);
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (event.handled) {
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            event.consume(true);
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.searchController.handleShortcut(event))
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.advancedSearchController.handleShortcut(event))
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
78353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (WebInspector.inspectElementModeController && WebInspector.inspectElementModeController.handleShortcut(event))
78453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return;
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (event.keyIdentifier) {
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "U+004F": // O key
7885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        case "U+0050": // P key
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!event.shiftKey && !event.altKey && WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event)) {
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                WebInspector.showPanel("scripts").showGoToSourceDialog();
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                event.consume(true);
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "U+0052": // R key
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event)) {
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                PageAgent.reload(event.shiftKey);
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                event.consume(true);
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
799926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (window.DEBUG && event.altKey) {
800926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                WebInspector.reload();
801926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                return;
802926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            }
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "F5":
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!WebInspector.isMac()) {
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                PageAgent.reload(event.ctrlKey || event.shiftKey);
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                event.consume(true);
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var isValidZoomShortcut = WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) &&
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        !event.altKey &&
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        !InspectorFrontendHost.isStub;
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (event.keyCode) {
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case 107: // +
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case 187: // +
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (isValidZoomShortcut) {
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                WebInspector._zoomIn();
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                event.consume(true);
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case 109: // -
8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case 189: // -
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (isValidZoomShortcut) {
8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                WebInspector._zoomOut();
8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                event.consume(true);
8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case 48: // 0
8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Zoom reset shortcut does not allow "Shift" when handled by the browser.
8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (isValidZoomShortcut && !event.shiftKey) {
8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                WebInspector._resetZoom();
8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                event.consume(true);
8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.postDocumentKeyDown = function(event)
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
842e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    var Esc = "U+001B";
843e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (event.handled)
8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
847e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (event.keyIdentifier === Esc) {
848591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (WebInspector.searchController.isSearchVisible()) {
849591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            WebInspector.searchController.closeSearch();
850591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            return;
851591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        }
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // If drawer is open with some view other than console then close it.
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._toggleConsoleButton.toggled && WebInspector.drawer.visible)
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.closeViewInDrawer();
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._toggleConsoleButtonClicked();
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.documentCanCopy = function(event)
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.inspectorView.currentPanel() && WebInspector.inspectorView.currentPanel().handleCopyEvent)
8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        event.preventDefault();
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.documentCopy = function(event)
8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector.inspectorView.currentPanel() && WebInspector.inspectorView.currentPanel().handleCopyEvent)
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.inspectorView.currentPanel().handleCopyEvent(event);
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.documentCopyEventFired(event);
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.documentCopyEventFired = function(event)
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.contextMenuEventFired = function(event)
8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (event.handled || event.target.hasStyleClass("popup-glasspane"))
8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        event.preventDefault();
8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.showPanel = function(panel)
8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return WebInspector.inspectorView.showPanel(panel);
8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.panel = function(panel)
8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return WebInspector.inspectorView.panel(panel);
8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.bringToFront = function()
8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorFrontendHost.bringToFront();
8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string=} messageLevel
9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} showConsole
9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.log = function(message, messageLevel, showConsole)
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // remember 'this' for setInterval() callback
9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var self = this;
9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // return indication if we can actually log a message
9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function isLogAvailable()
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return WebInspector.ConsoleMessage && WebInspector.RemoteObject && self.console;
9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // flush the queue of pending messages
9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function flushQueue()
9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var queued = WebInspector.log.queued;
9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!queued)
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < queued.length; ++i)
9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            logMessage(queued[i]);
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete WebInspector.log.queued;
9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // flush the queue if it console is available
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // - this function is run on an interval
9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function flushQueueIfAvailable()
9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!isLogAvailable())
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        clearInterval(WebInspector.log.interval);
9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete WebInspector.log.interval;
9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        flushQueue();
9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // actually log the message
9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function logMessage(message)
9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // post the message
9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var msg = WebInspector.ConsoleMessage.create(
9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.ConsoleMessage.MessageSource.Other,
9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            messageLevel || WebInspector.ConsoleMessage.MessageLevel.Debug,
9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            message);
9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.console.addMessage(msg);
9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (showConsole)
9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.showConsole();
9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // if we can't log the message, queue it
9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!isLogAvailable()) {
9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!WebInspector.log.queued)
9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.log.queued = [];
9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.log.queued.push(message);
9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!WebInspector.log.interval)
9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.log.interval = setInterval(flushQueueIfAvailable, 1000);
9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // flush the pending queue if any
9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    flushQueue();
9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // log the message
9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    logMessage(message);
9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.showErrorMessage = function(error)
9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.log(error, WebInspector.ConsoleMessage.MessageLevel.Error, true);
9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Inspector.inspect protocol event
9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.inspect = function(payload, hints)
9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var object = WebInspector.RemoteObject.fromPayload(payload);
9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (object.subtype === "node") {
9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(nodeId)
9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector._updateFocusedNode(nodeId);
9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            object.release();
9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        object.pushNodeToFrontend(callback);
9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (hints.databaseId)
9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.showPanel("resources").selectDatabase(WebInspector.databaseModel.databaseForId(hints.databaseId));
9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else if (hints.domStorageId)
9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.showPanel("resources").selectDOMStorage(WebInspector.domStorageModel.storageForId(hints.domStorageId));
996fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    else if (hints.copyToClipboard)
997fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch        InspectorFrontendHost.copyText(object.value);
9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    object.release();
9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Inspector.detached protocol event
10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.detached = function(reason)
10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.socket._detachReason = reason;
10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    (new WebInspector.RemoteDebuggingTerminatedScreen(reason)).showModal();
10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1008926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.targetCrashed = function()
1009926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
1010926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    (new WebInspector.HelpScreenUntilReload(
1011926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebInspector.UIString("Inspected target crashed"),
1012926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebInspector.UIString("Inspected target has crashed. Once it reloads we will attach to it automatically."))).showModal();
1013926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
1014926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
101553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector._inspectNodeRequested = function(event)
101653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
101753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    WebInspector._updateFocusedNode(event.data);
101853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
101953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector._updateFocusedNode = function(nodeId)
10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
102253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (WebInspector.inspectElementModeController && WebInspector.inspectElementModeController.enabled()) {
10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        InspectorFrontendHost.bringToFront();
102453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        WebInspector.inspectElementModeController.disable();
10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.showPanel("elements").revealAndSelectNode(nodeId);
10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebInspector.showAnchorLocation = function(anchor)
10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var preferredPanel = this.panels[anchor.preferredPanel];
10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (preferredPanel && WebInspector._showAnchorLocationInPanel(anchor, preferredPanel))
10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("scripts")))
10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("resources")))
10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("network")))
10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector._showAnchorLocationInPanel = function(anchor, panel)
10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!panel || !panel.canShowAnchorLocation(anchor))
10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: support webkit-html-external-link links here.
10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (anchor.hasStyleClass("webkit-html-external-link")) {
10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        anchor.removeStyleClass("webkit-html-external-link");
10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        anchor.addStyleClass("webkit-html-resource-link");
10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1054591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    WebInspector.inspectorView.setCurrentPanel(panel);
10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    panel.showAnchorLocation(anchor);
10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.evaluateInConsole = function(expression, showResultOnly)
10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.showConsole();
10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.consoleView.evaluateUsingTextPrompt(expression, showResultOnly);
10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.addMainEventListeners = function(doc)
10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    doc.addEventListener("keydown", this.documentKeyDown.bind(this), true);
10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    doc.addEventListener("keydown", this.postDocumentKeyDown.bind(this), false);
10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    doc.addEventListener("beforecopy", this.documentCanCopy.bind(this), true);
107053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    doc.addEventListener("copy", this.documentCopy.bind(this), false);
10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    doc.addEventListener("contextmenu", this.contextMenuEventFired.bind(this), true);
10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    doc.addEventListener("click", this.documentClick.bind(this), true);
10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Zoom = {
10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Table: [0.25, 0.33, 0.5, 0.66, 0.75, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5],
10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DefaultOffset: 6
10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
107953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
108053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
108153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)// Ex-DevTools.js content
108253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
108353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/**
108453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {ExtensionDescriptor} extensionInfo
108553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @return {string}
108653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */
108753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)function buildPlatformExtensionAPI(extensionInfo)
108853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
108953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
109053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)       "var tabId = " + WebInspector._inspectedTabId + ";" +
109153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)       platformExtensionAPI.toString();
109253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
109353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
109453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.setInspectedTabId = function(tabId)
109553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
109653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    WebInspector._inspectedTabId = tabId;
109753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
109853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
109953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/**
110053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @return {string}
110153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */
110253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.getSelectionBackgroundColor = function()
110353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
110453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return InspectorFrontendHost.getSelectionBackgroundColor();
110553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
110653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
110753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/**
110853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @return {string}
110953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */
111053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.getSelectionForegroundColor = function()
111153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
111253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return InspectorFrontendHost.getSelectionForegroundColor();
111353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
111453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
111553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)window.DEBUG = true;
1116