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