OSDN Git Service

Merge WebKit at r73109: Initial merge by git.
[android-x86/external-webkit.git] / WebKit / chromium / src / js / DevTools.js
index dcb181b..5bb150c 100644 (file)
  * WebInspector functionality while it is getting upstreamed into WebCore.
  */
 
-/**
- * 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.didDispatchOn = WebInspector.Callback.processCallback;
-    RemoteToolsAgent.frameNavigate = this.frameNavigate_.bind(this);
-    RemoteToolsAgent.dispatchOnClient = this.dispatchOnClient_.bind(this);
-    this.debuggerAgent_ = new devtools.DebuggerAgent();
-    this.profilerAgent_ = new devtools.ProfilerAgent();
-};
-
-
-/**
- * Resets tools agent to its initial state.
- */
-devtools.ToolsAgent.prototype.reset = function()
-{
-    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)
-{
-    InspectorBackend.evaluate(script, opt_callback || function() {});
-};
-
-
-/**
- * @return {devtools.DebuggerAgent} Debugger agent instance.
- */
-devtools.ToolsAgent.prototype.getDebuggerAgent = function()
-{
-    return this.debuggerAgent_;
-};
-
-
-/**
- * @return {devtools.ProfilerAgent} Profiler agent instance.
- */
-devtools.ToolsAgent.prototype.getProfilerAgent = function()
-{
-    return this.profilerAgent_;
-};
-
-
-/**
- * @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)
-{
-    var args = JSON.parse(message);
-    var methodName = args[0];
-    var parameters = args.slice(1);
-    WebInspector[methodName].apply(WebInspector, parameters);
-};
-
-
-/**
- * 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)
-{
-    InspectorBackend._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();
-
+(function () {
     Preferences.ignoreWhitespace = false;
     Preferences.samplingCPUProfiler = true;
     Preferences.heapProfilerPresent = true;
-    oldLoaded.call(this);
-
-    InspectorFrontendHost.loaded();
-};
-
-
-(function()
-{
-
-    /**
-     * Handles an F3 keydown event to focus the Inspector search box.
-     * @param {KeyboardEvent} event Event to optionally handle
-     * @return {boolean} whether the event has been handled
-     */
-    function handleF3Keydown(event) {
-        if (event.keyIdentifier === "F3" && !event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {
-            var searchField = document.getElementById("search");
-            searchField.focus();
-            searchField.select();
-            event.preventDefault();
-            return true;
-        }
-        return false;
-    }
-
-
-    var oldKeyDown = WebInspector.documentKeyDown;
-    /**
-     * This override allows to intercept keydown events we want to handle in a
-     * custom way. Some nested documents (iframes) delegate keydown handling to
-     * WebInspector.documentKeyDown (e.g. SourceFrame).
-     * @param {KeyboardEvent} event
-     * @override
-     */
-    WebInspector.documentKeyDown = function(event) {
-        var isHandled = handleF3Keydown(event);
-        if (!isHandled) {
-            // Mute refresh action.
-            if (event.keyIdentifier === "F5")
-                event.preventDefault();
-            else if (event.keyIdentifier === "U+0052" /* "R" */ && (event.ctrlKey || event.metaKey))
-                event.preventDefault();
-            else
-                oldKeyDown.call(this, event);
-        }
-    };
+    Preferences.debuggerAlwaysEnabled = true;
+    Preferences.profilerAlwaysEnabled = true;
+    Preferences.canEditScriptSource = true;
+    Preferences.onlineDetectionEnabled = false;
+    Preferences.nativeInstrumentationEnabled = true;
+    Preferences.fileSystemEnabled = false;
+    Preferences.showTimingTab = true;
+    Preferences.showCookiesTab = true;
 })();
 
+var devtools = devtools || {};
 
-/**
- * This override is necessary for adding script source asynchronously.
- * @override
- */
-WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded = function()
+devtools.domContentLoaded = 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()
-{
-    this.sourceFrame.setContent("text/javascript", this.script.source);
-    this._sourceFrameSetup = true;
-    delete this._frameNeedsSetup;
-};
-
-
-/**
- * @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;
-};
-
-
-(function()
-{
-    var oldShow = WebInspector.ScriptsPanel.prototype.show;
-    WebInspector.ScriptsPanel.prototype.show =  function()
-    {
-        devtools.tools.getDebuggerAgent().initUI();
-        this.enableToggleButton.visible = false;
-        oldShow.call(this);
-    };
-})();
+    WebInspector.setAttachedWindow(WebInspector.queryParamsObject.docked === "true");
+    if (WebInspector.queryParamsObject.toolbar_color && WebInspector.queryParamsObject.text_color)
+        WebInspector.setToolbarColors(WebInspector.queryParamsObject.toolbar_color, WebInspector.queryParamsObject.text_color);
+}
+document.addEventListener("DOMContentLoaded", devtools.domContentLoaded, false);
 
 
+// FIXME: This needs to be upstreamed.
 (function InterceptProfilesPanelEvents()
 {
     var oldShow = WebInspector.ProfilesPanel.prototype.show;
     WebInspector.ProfilesPanel.prototype.show = function()
     {
-        devtools.tools.getProfilerAgent().initializeProfiling();
         this.enableToggleButton.visible = false;
         oldShow.call(this);
         // Show is called on every show event of a panel, so
@@ -334,36 +87,6 @@ WebInspector.UIString = function(string)
 };
 
 
-// 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()
 {
@@ -392,113 +115,75 @@ WebInspector.UIString = function(string)
 })();
 
 
-(function () {
-var orig = InjectedScriptAccess.prototype.getProperties;
-InjectedScriptAccess.prototype.getProperties = function(objectProxy, ignoreHasOwnProperty, abbreviate, callback)
-{
-    if (objectProxy.isScope)
-        devtools.tools.getDebuggerAgent().resolveScope(objectProxy.objectId, callback);
-    else if (objectProxy.isV8Ref)
-        devtools.tools.getDebuggerAgent().resolveChildren(objectProxy.objectId, callback, false);
-    else
-        orig.apply(this, arguments);
-};
-})();
 
+///////////////////////////////////////////
+// Chromium layout test harness support. //
+///////////////////////////////////////////
 
-(function()
-{
-InjectedScriptAccess.prototype.evaluateInCallFrame = function(callFrameId, code, objectGroup, callback)
-{
-    //TODO(pfeldman): remove once 49084 is rolled.
-    if (!callback)
-        callback = objectGroup;
-    devtools.tools.getDebuggerAgent().evaluateInCallFrame(callFrameId, code, callback);
-};
-})();
-
+WebInspector.runAfterPendingDispatchesQueue = [];
 
-WebInspector.resourceTrackingWasEnabled = function()
+WebInspector.TestController.prototype.runAfterPendingDispatches = function(callback)
 {
-      InspectorBackend._resourceTrackingEnabled = true;
-      this.panels.resources.resourceTrackingWasEnabled();
+    WebInspector.runAfterPendingDispatchesQueue.push(callback);
 };
 
-WebInspector.resourceTrackingWasDisabled = function()
+WebInspector.queuesAreEmpty = function()
 {
-      InspectorBackend._resourceTrackingEnabled = false;
-      this.panels.resources.resourceTrackingWasDisabled();
+    var copy = this.runAfterPendingDispatchesQueue.slice();
+    this.runAfterPendingDispatchesQueue = [];
+    for (var i = 0; i < copy.length; ++i)
+        copy[i].call(this);
 };
 
-(function()
-{
-var orig = WebInspector.ConsoleMessage.prototype.setMessageBody;
-WebInspector.ConsoleMessage.prototype.setMessageBody = function(args)
-{
-    for (var i = 0; i < args.length; ++i) {
-        if (typeof args[i] === "string")
-            args[i] = WebInspector.ObjectProxy.wrapPrimitiveValue(args[i]);
-    }
-    orig.call(this, args);
-};
-})();
 
+/////////////////////////////
+// Chromium theme support. //
+/////////////////////////////
 
-(function()
+WebInspector.setToolbarColors = function(backgroundColor, color)
 {
-var orig = InjectedScriptAccess.prototype.getCompletions;
-InjectedScriptAccess.prototype.getCompletions = function(expressionString, includeInspectorCommandLineAPI, callFrameId, reportCompletions)
-{
-    if (typeof callFrameId === "number")
-        devtools.tools.getDebuggerAgent().resolveCompletionsOnFrame(expressionString, callFrameId, reportCompletions);
-    else
-        return orig.apply(this, arguments);
-};
-})();
-
+    if (!WebInspector._themeStyleElement) {
+        WebInspector._themeStyleElement = document.createElement("style");
+        document.head.appendChild(WebInspector._themeStyleElement);
+    }
+    WebInspector._themeStyleElement.textContent =
+        "#toolbar {\
+             background-image: none !important;\
+             background-color: " + backgroundColor + " !important;\
+         }\
+         \
+         .toolbar-label {\
+             color: " + color + " !important;\
+             text-shadow: none;\
+         }";
+}
 
-(function()
-{
-WebInspector.ElementsPanel.prototype._nodeSearchButtonClicked = function( event)
+WebInspector.resetToolbarColors = function()
 {
-    InspectorBackend.toggleNodeSearch();
-    this.nodeSearchButton.toggled = !this.nodeSearchButton.toggled;
-};
-})();
-
+    if (WebInspector._themeStyleElement)
+        WebInspector._themeStyleElement.textContent = "";
 
-// We need to have a place for postponed tasks
-// which should be executed when all the messages between agent and frontend
-// are processed.
-
-WebInspector.runAfterPendingDispatchesQueue = [];
+}
 
-WebInspector.TestController.prototype.runAfterPendingDispatches = function(callback)
-{
-    WebInspector.runAfterPendingDispatchesQueue.push(callback);
-};
+////////////////////////////////////////////////////////
+// Platform-specific WebInspector extensions support. //
+////////////////////////////////////////////////////////
 
-WebInspector.queuesAreEmpty = function()
+WebInspector.platformExtensionAPI = function(tabId)
 {
-    var copy = this.runAfterPendingDispatchesQueue.slice();
-    this.runAfterPendingDispatchesQueue = [];
-    for (var i = 0; i < copy.length; ++i)
-        copy[i].call(this);
-};
+    function getTabId()
+    {
+        return tabId;
+    }
+    webInspector.inspectedWindow.__proto__.__defineGetter__("tabId", getTabId);
+}
 
-(function()
-{
-var originalAddToFrame = InspectorFrontendHost.addResourceSourceToFrame;
-InspectorFrontendHost.addResourceSourceToFrame = function(identifier, element)
+WebInspector.buildPlatformExtensionAPI = function()
 {
-    var resource = WebInspector.resources[identifier];
-    if (!resource)
-        return;
-    originalAddToFrame.call(this, identifier, resource.mimeType, element);
-};
-})();
+    return "(" + WebInspector.platformExtensionAPI + ")(" + WebInspector._inspectedTabId + ");";
+}
 
-WebInspector.pausedScript = function(callFrames)
+WebInspector.setInspectedTabId = function(tabId)
 {
-    this.panels.scripts.debuggerPaused(callFrames);
-};
+    WebInspector._inspectedTabId = tabId;
+}