Index: chrome_frame/tools/test/reference_build/chrome/resources/inspector/devtools.js |
=================================================================== |
--- chrome_frame/tools/test/reference_build/chrome/resources/inspector/devtools.js (revision 0) |
+++ chrome_frame/tools/test/reference_build/chrome/resources/inspector/devtools.js (revision 0) |
@@ -0,0 +1,392 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * @fileoverview Tools is a main class that wires all components of the |
+ * DevTools frontend together. It is also responsible for overriding existing |
+ * WebInspector functionality while it is getting upstreamed into WebCore. |
+ */ |
+goog.provide('devtools.Tools'); |
+ |
+goog.require('devtools.DebuggerAgent'); |
+ |
+ |
+/** |
+ * Dispatches raw message from the host. |
+ * @param {string} remoteName |
+ * @prama {string} methodName |
+ * @param {string} param1, param2, param3 Arguments to dispatch. |
+ */ |
+devtools$$dispatch = function(remoteName, methodName, param1, param2, param3) { |
+ remoteName = 'Remote' + remoteName.substring(0, remoteName.length - 8); |
+ var agent = window[remoteName]; |
+ if (!agent) { |
+ debugPrint('No remote agent "' + remoteName + '" found.'); |
+ return; |
+ } |
+ var method = agent[methodName]; |
+ if (!method) { |
+ debugPrint('No method "' + remoteName + '.' + methodName + '" found.'); |
+ return; |
+ } |
+ method.call(this, param1, param2, param3); |
+}; |
+ |
+ |
+devtools.ToolsAgent = function() { |
+ RemoteToolsAgent.DidExecuteUtilityFunction = |
+ devtools.Callback.processCallback; |
+ RemoteToolsAgent.FrameNavigate = |
+ goog.bind(this.frameNavigate_, this); |
+ RemoteToolsAgent.DispatchOnClient = |
+ goog.bind(this.dispatchOnClient_, this); |
+ this.debuggerAgent_ = new devtools.DebuggerAgent(); |
+}; |
+ |
+ |
+/** |
+ * Resets tools agent to its initial state. |
+ */ |
+devtools.ToolsAgent.prototype.reset = function() { |
+ DevToolsHost.reset(); |
+ this.debuggerAgent_.reset(); |
+}; |
+ |
+ |
+/** |
+ * @param {string} script Script exression to be evaluated in the context of the |
+ * inspected page. |
+ * @param {function(Object|string, boolean):undefined} opt_callback Function to |
+ * call with the result. |
+ */ |
+devtools.ToolsAgent.prototype.evaluateJavaScript = function(script, |
+ opt_callback) { |
+ InspectorController.evaluate(script, opt_callback || function() {}); |
+}; |
+ |
+ |
+/** |
+ * @return {devtools.DebuggerAgent} Debugger agent instance. |
+ */ |
+devtools.ToolsAgent.prototype.getDebuggerAgent = function() { |
+ return this.debuggerAgent_; |
+}; |
+ |
+ |
+/** |
+ * @param {string} url Url frame navigated to. |
+ * @see tools_agent.h |
+ * @private |
+ */ |
+devtools.ToolsAgent.prototype.frameNavigate_ = function(url) { |
+ this.reset(); |
+ // Do not reset Profiles panel. |
+ var profiles = null; |
+ if ('profiles' in WebInspector.panels) { |
+ profiles = WebInspector.panels['profiles']; |
+ delete WebInspector.panels['profiles']; |
+ } |
+ WebInspector.reset(); |
+ if (profiles != null) { |
+ WebInspector.panels['profiles'] = profiles; |
+ } |
+}; |
+ |
+ |
+/** |
+ * @param {string} message Serialized call to be dispatched on WebInspector. |
+ * @private |
+ */ |
+devtools.ToolsAgent.prototype.dispatchOnClient_ = function(message) { |
+ WebInspector.dispatch.apply(WebInspector, JSON.parse(message)); |
+}; |
+ |
+ |
+/** |
+ * Evaluates js expression. |
+ * @param {string} expr |
+ */ |
+devtools.ToolsAgent.prototype.evaluate = function(expr) { |
+ RemoteToolsAgent.evaluate(expr); |
+}; |
+ |
+ |
+/** |
+ * Enables / disables resources panel in the ui. |
+ * @param {boolean} enabled New panel status. |
+ */ |
+WebInspector.setResourcesPanelEnabled = function(enabled) { |
+ InspectorController.resourceTrackingEnabled_ = enabled; |
+ WebInspector.panels.resources.reset(); |
+}; |
+ |
+ |
+/** |
+ * Prints string to the inspector console or shows alert if the console doesn't |
+ * exist. |
+ * @param {string} text |
+ */ |
+function debugPrint(text) { |
+ var console = WebInspector.console; |
+ if (console) { |
+ console.addMessage(new WebInspector.ConsoleMessage( |
+ WebInspector.ConsoleMessage.MessageSource.JS, |
+ WebInspector.ConsoleMessage.MessageType.Log, |
+ WebInspector.ConsoleMessage.MessageLevel.Log, |
+ 1, 'chrome://devtools/<internal>', undefined, -1, text)); |
+ } else { |
+ alert(text); |
+ } |
+} |
+ |
+ |
+/** |
+ * Global instance of the tools agent. |
+ * @type {devtools.ToolsAgent} |
+ */ |
+devtools.tools = null; |
+ |
+ |
+var context = {}; // Used by WebCore's inspector routines. |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+// Here and below are overrides to existing WebInspector methods only. |
+// TODO(pfeldman): Patch WebCore and upstream changes. |
+var oldLoaded = WebInspector.loaded; |
+WebInspector.loaded = function() { |
+ devtools.tools = new devtools.ToolsAgent(); |
+ devtools.tools.reset(); |
+ |
+ Preferences.ignoreWhitespace = false; |
+ Preferences.samplingCPUProfiler = true; |
+ oldLoaded.call(this); |
+ |
+ // Hide dock button on Mac OS. |
+ // TODO(pfeldman): remove once Mac OS docking is implemented. |
+ if (InspectorController.platform().indexOf('mac') == 0) { |
+ document.getElementById('dock-status-bar-item').addStyleClass('hidden'); |
+ } |
+ |
+ // Mute refresh action. |
+ document.addEventListener("keydown", function(event) { |
+ if (event.keyIdentifier == 'F5') { |
+ event.preventDefault(); |
+ } else if (event.keyIdentifier == 'U+0052' /* 'R' */ && |
+ (event.ctrlKey || event.metaKey)) { |
+ event.preventDefault(); |
+ } |
+ }, true); |
+ |
+ DevToolsHost.loaded(); |
+}; |
+ |
+ |
+/** |
+ * This override is necessary for adding script source asynchronously. |
+ * @override |
+ */ |
+WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded = function() { |
+ if (!this._frameNeedsSetup) { |
+ return; |
+ } |
+ |
+ this.attach(); |
+ |
+ if (this.script.source) { |
+ this.didResolveScriptSource_(); |
+ } else { |
+ var self = this; |
+ devtools.tools.getDebuggerAgent().resolveScriptSource( |
+ this.script.sourceID, |
+ function(source) { |
+ self.script.source = source || |
+ WebInspector.UIString('<source is not available>'); |
+ self.didResolveScriptSource_(); |
+ }); |
+ } |
+}; |
+ |
+ |
+/** |
+ * Performs source frame setup when script source is aready resolved. |
+ */ |
+WebInspector.ScriptView.prototype.didResolveScriptSource_ = function() { |
+ if (!InspectorController.addSourceToFrame( |
+ "text/javascript", this.script.source, this.sourceFrame.element)) { |
+ return; |
+ } |
+ |
+ delete this._frameNeedsSetup; |
+ |
+ this.sourceFrame.addEventListener( |
+ "syntax highlighting complete", this._syntaxHighlightingComplete, this); |
+ this.sourceFrame.syntaxHighlightJavascript(); |
+}; |
+ |
+ |
+/** |
+ * @param {string} type Type of the the property value('object' or 'function'). |
+ * @param {string} className Class name of the property value. |
+ * @constructor |
+ */ |
+WebInspector.UnresolvedPropertyValue = function(type, className) { |
+ this.type = type; |
+ this.className = className; |
+}; |
+ |
+ |
+/** |
+ * This function overrides standard searchableViews getters to perform search |
+ * only in the current view (other views are loaded asynchronously, no way to |
+ * search them yet). |
+ */ |
+WebInspector.searchableViews_ = function() { |
+ var views = []; |
+ const visibleView = this.visibleView; |
+ if (visibleView && visibleView.performSearch) { |
+ views.push(visibleView); |
+ } |
+ return views; |
+}; |
+ |
+ |
+/** |
+ * @override |
+ */ |
+WebInspector.ResourcesPanel.prototype.__defineGetter__( |
+ 'searchableViews', |
+ WebInspector.searchableViews_); |
+ |
+ |
+/** |
+ * @override |
+ */ |
+WebInspector.ScriptsPanel.prototype.__defineGetter__( |
+ 'searchableViews', |
+ WebInspector.searchableViews_); |
+ |
+ |
+(function() { |
+ var oldShow = WebInspector.ScriptsPanel.prototype.show; |
+ WebInspector.ScriptsPanel.prototype.show = function() { |
+ devtools.tools.getDebuggerAgent().initUI(); |
+ this.enableToggleButton.visible = false; |
+ oldShow.call(this); |
+ }; |
+})(); |
+ |
+ |
+(function InterceptProfilesPanelEvents() { |
+ var oldShow = WebInspector.ProfilesPanel.prototype.show; |
+ WebInspector.ProfilesPanel.prototype.show = function() { |
+ devtools.tools.getDebuggerAgent().initializeProfiling(); |
+ this.enableToggleButton.visible = false; |
+ oldShow.call(this); |
+ // Show is called on every show event of a panel, so |
+ // we only need to intercept it once. |
+ WebInspector.ProfilesPanel.prototype.show = oldShow; |
+ }; |
+})(); |
+ |
+ |
+/* |
+ * @override |
+ * TODO(mnaganov): Restore l10n when it will be agreed that it is needed. |
+ */ |
+WebInspector.UIString = function(string) { |
+ return String.vsprintf(string, Array.prototype.slice.call(arguments, 1)); |
+}; |
+ |
+ |
+// There is no clear way of setting frame title yet. So sniffing main resource |
+// load. |
+(function OverrideUpdateResource() { |
+ var originalUpdateResource = WebInspector.updateResource; |
+ WebInspector.updateResource = function(identifier, payload) { |
+ originalUpdateResource.call(this, identifier, payload); |
+ var resource = this.resources[identifier]; |
+ if (resource && resource.mainResource && resource.finished) { |
+ document.title = |
+ WebInspector.UIString('Developer Tools - %s', resource.url); |
+ } |
+ }; |
+})(); |
+ |
+ |
+// Highlight extension content scripts in the scripts list. |
+(function () { |
+ var original = WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu; |
+ WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu = function(script) { |
+ var result = original.apply(this, arguments); |
+ var debuggerAgent = devtools.tools.getDebuggerAgent(); |
+ var type = debuggerAgent.getScriptContextType(script.sourceID); |
+ var option = script.filesSelectOption; |
+ if (type == 'injected' && option) { |
+ option.addStyleClass('injected'); |
+ } |
+ return result; |
+ }; |
+})(); |
+ |
+ |
+/** Pending WebKit upstream by apavlov). Fixes iframe vs drag problem. */ |
+(function() { |
+ var originalDragStart = WebInspector.elementDragStart; |
+ WebInspector.elementDragStart = function(element) { |
+ var glassPane = document.createElement("div"); |
+ glassPane.style.cssText = |
+ 'position:absolute;width:100%;height:100%;opacity:0;z-index:1'; |
+ glassPane.id = 'glass-pane-for-drag'; |
+ element.parentElement.appendChild(glassPane); |
+ |
+ originalDragStart.apply(this, arguments); |
+ }; |
+ |
+ var originalDragEnd = WebInspector.elementDragEnd; |
+ WebInspector.elementDragEnd = function() { |
+ originalDragEnd.apply(this, arguments); |
+ |
+ var glassPane = document.getElementById('glass-pane-for-drag'); |
+ glassPane.parentElement.removeChild(glassPane); |
+ }; |
+})(); |
+ |
+ |
+(function() { |
+ var originalCreatePanels = WebInspector._createPanels; |
+ WebInspector._createPanels = function() { |
+ originalCreatePanels.apply(this, arguments); |
+ this.panels.heap = new WebInspector.HeapProfilerPanel(); |
+ }; |
+})(); |
+ |
+ |
+(function () { |
+var orig = InjectedScriptAccess.getProperties; |
+InjectedScriptAccess.getProperties = function( |
+ objectProxy, ignoreHasOwnProperty, callback) { |
+ if (objectProxy.isScope) { |
+ devtools.tools.getDebuggerAgent().resolveScope(objectProxy.objectId, |
+ callback); |
+ } else if (objectProxy.isV8Ref) { |
+ devtools.tools.getDebuggerAgent().resolveChildren(objectProxy.objectId, |
+ callback, true); |
+ } else { |
+ orig.apply(this, arguments); |
+ } |
+}; |
+})() |
+ |
+ |
+WebInspector.resourceTrackingWasEnabled = function() |
+{ |
+ InspectorController.resourceTrackingEnabled_ = true; |
+ this.panels.resources.resourceTrackingWasEnabled(); |
+}; |
+ |
+WebInspector.resourceTrackingWasDisabled = function() |
+{ |
+ InspectorController.resourceTrackingEnabled_ = false; |
+ this.panels.resources.resourceTrackingWasDisabled(); |
+}; |