18a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/*
28a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Copyright (C) 2010 Google Inc. All rights reserved.
38a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block *
48a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Redistribution and use in source and binary forms, with or without
58a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * modification, are permitted provided that the following conditions are
68a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * met:
78a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block *
88a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block *     * Redistributions of source code must retain the above copyright
98a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * notice, this list of conditions and the following disclaimer.
108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block *     * Redistributions in binary form must reproduce the above
118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * copyright notice, this list of conditions and the following disclaimer
128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * in the documentation and/or other materials provided with the
138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * distribution.
148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block *     * Neither the name of Google Inc. nor the names of its
158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * contributors may be used to endorse or promote products derived from
168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * this software without specific prior written permission.
178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block *
188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */
308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/**
328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * FIXME: change field naming style to use trailing underscore.
338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @fileoverview Tools is a main class that wires all components of the
348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * DevTools frontend together. It is also responsible for overriding existing
358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * WebInspector functionality while it is getting upstreamed into WebCore.
368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */
378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvar context = {};  // Used by WebCore's inspector routines.
398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
405ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen(function () {
418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    Preferences.ignoreWhitespace = false;
428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    Preferences.samplingCPUProfiler = true;
438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    Preferences.heapProfilerPresent = true;
442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    Preferences.detailedHeapProfiles = false;
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Preferences.debuggerAlwaysEnabled = true;
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Preferences.profilerAlwaysEnabled = true;
47545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    Preferences.canEditScriptSource = true;
48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    Preferences.onlineDetectionEnabled = false;
49bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    Preferences.nativeInstrumentationEnabled = true;
5028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    Preferences.fileSystemEnabled = false;
514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    Preferences.showTimingTab = true;
52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    Preferences.showCookiesTab = true;
535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen})();
548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvar devtools = devtools || {};
568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
5721939df44de1705786c545cd1bf519d47250322dBen Murdochdevtools.domContentLoaded = function()
5821939df44de1705786c545cd1bf519d47250322dBen Murdoch{
59f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    WebInspector.setAttachedWindow(WebInspector.queryParamsObject.docked === "true");
60f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    if (WebInspector.queryParamsObject.toolbar_color && WebInspector.queryParamsObject.text_color)
61f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        WebInspector.setToolbarColors(WebInspector.queryParamsObject.toolbar_color, WebInspector.queryParamsObject.text_color);
6221939df44de1705786c545cd1bf519d47250322dBen Murdoch}
6321939df44de1705786c545cd1bf519d47250322dBen Murdochdocument.addEventListener("DOMContentLoaded", devtools.domContentLoaded, false);
6421939df44de1705786c545cd1bf519d47250322dBen Murdoch
658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// FIXME: This needs to be upstreamed.
678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block(function InterceptProfilesPanelEvents()
688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    var oldShow = WebInspector.ProfilesPanel.prototype.show;
708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    WebInspector.ProfilesPanel.prototype.show = function()
718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    {
728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        this.enableToggleButton.visible = false;
738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        oldShow.call(this);
748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        // Show is called on every show event of a panel, so
758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        // we only need to intercept it once.
768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        WebInspector.ProfilesPanel.prototype.show = oldShow;
778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    };
788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block})();
798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/*
828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @override
838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * TODO(mnaganov): Restore l10n when it will be agreed that it is needed.
848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */
858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockWebInspector.UIString = function(string)
868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    return String.vsprintf(string, Array.prototype.slice.call(arguments, 1));
888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block};
898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block/*
922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * This label must be kept consistent with that in English.lproj/localizedStrings.js
932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block *
942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * http://code.google.com/p/chromium/issues/detail?id=61302 requires a custom label for Chromium,
952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * since its behavior is different.
962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block */
972fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWebInspector.openLinkExternallyLabel = function()
982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return WebInspector.UIString("Open Link in New Tab");
1002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block};
1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** Pending WebKit upstream by apavlov). Fixes iframe vs drag problem. */
1048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block(function()
1058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
1068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    var originalDragStart = WebInspector.elementDragStart;
1078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    WebInspector.elementDragStart = function(element)
1088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    {
1098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        if (element) {
1108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block            var glassPane = document.createElement("div");
1118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block            glassPane.style.cssText = "position:absolute;width:100%;height:100%;opacity:0;z-index:1";
1128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block            glassPane.id = "glass-pane-for-drag";
1138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block            element.parentElement.appendChild(glassPane);
1148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        }
1158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
1168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        originalDragStart.apply(this, arguments);
1178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    };
1188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
1198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    var originalDragEnd = WebInspector.elementDragEnd;
1208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    WebInspector.elementDragEnd = function()
1218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    {
1228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        originalDragEnd.apply(this, arguments);
1238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
1248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        var glassPane = document.getElementById("glass-pane-for-drag");
1258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        if (glassPane)
1268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block            glassPane.parentElement.removeChild(glassPane);
1278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    };
1288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block})();
1298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
1308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
13106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
13206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/////////////////////////////
13306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen// Chromium theme support. //
13406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/////////////////////////////
13506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.setToolbarColors = function(backgroundColor, color)
1378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!WebInspector._themeStyleElement) {
139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebInspector._themeStyleElement = document.createElement("style");
140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        document.head.appendChild(WebInspector._themeStyleElement);
141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebInspector._themeStyleElement.textContent =
14321939df44de1705786c545cd1bf519d47250322dBen Murdoch        "#toolbar {\
144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block             background-image: none !important;\
145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block             background-color: " + backgroundColor + " !important;\
146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block         }\
147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block         \
14821939df44de1705786c545cd1bf519d47250322dBen Murdoch         .toolbar-label {\
14921939df44de1705786c545cd1bf519d47250322dBen Murdoch             color: " + color + " !important;\
150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block             text-shadow: none;\
151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block         }";
152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebInspector.resetToolbarColors = function()
155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (WebInspector._themeStyleElement)
157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        WebInspector._themeStyleElement.textContent = "";
158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
160967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
161a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch////////////////////////////////////////////////////////
162a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch// Platform-specific WebInspector extensions support. //
163a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch////////////////////////////////////////////////////////
164a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
165a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.platformExtensionAPI = function(tabId)
166a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
167a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    function getTabId()
168a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    {
169a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        return tabId;
170a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    }
171a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    webInspector.inspectedWindow.__proto__.__defineGetter__("tabId", getTabId);
1722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    chrome = window.chrome || {};
1732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    chrome.devTools = chrome.devTools || {};
1742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    for (var property in webInspector)
1752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        chrome.devTools[property] = webInspector[property];
176a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
177a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
178a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.buildPlatformExtensionAPI = function()
179a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
180a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    return "(" + WebInspector.platformExtensionAPI + ")(" + WebInspector._inspectedTabId + ");";
181a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
182a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
183a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWebInspector.setInspectedTabId = function(tabId)
184a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
185a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    WebInspector._inspectedTabId = tabId;
186a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
187