Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / inspector.js
index e5098ed..7e53dda 100644 (file)
@@ -32,10 +32,10 @@ var WebInspector = {
     _registerModules: function()
     {
         var configuration;
-        if (WebInspector.WorkerManager.isWorkerFrontend()) {
-            configuration = ["sources", "timeline", "profiles", "console"];
+        if (WebInspector.isWorkerFrontend()) {
+            configuration = ["sources", "timeline", "profiles", "console", "codemirror"];
         } else {
-            configuration = ["elements", "network", "sources", "timeline", "profiles", "resources", "audits", "console"];
+            configuration = ["elements", "network", "sources", "timeline", "profiles", "resources", "audits", "console", "codemirror", "extensions"];
             if (WebInspector.experimentsSettings.layersPanel.isEnabled())
                 configuration.push("layers");
         }
@@ -66,84 +66,107 @@ var WebInspector = {
         return !!WebInspector.queryParamsObject["remoteFrontend"];
     },
 
-    showConsole: function()
+    /**
+     * @return {boolean}
+     */
+    isDedicatedWorkerFrontend: function()
     {
-        if (this.consoleView.isShowing() && !WebInspector.inspectorView.drawer().isHiding())
-            return;
-        this.inspectorView.showViewInDrawer("console");
+        return !!WebInspector.queryParamsObject["dedicatedWorkerId"];
     },
 
-    _resetErrorAndWarningCounts: function()
+    _calculateWorkerInspectorTitle: function()
     {
-        WebInspector.inspectorView.setErrorAndWarningCounts(0, 0);
-    },
+        var expression = "location.href";
+        if (WebInspector.queryParamsObject["isSharedWorker"])
+            expression += " + (this.name ? ' (' + this.name + ')' : '')";
+        RuntimeAgent.evaluate.invoke({expression:expression, doNotPauseOnExceptionsAndMuteConsole:true, returnByValue: true}, evalCallback.bind(this));
 
-    _updateErrorAndWarningCounts: function()
-    {
-        var errors = WebInspector.console.errors;
-        var warnings = WebInspector.console.warnings;
-        WebInspector.inspectorView.setErrorAndWarningCounts(errors, warnings);
+        /**
+         * @param {?Protocol.Error} error
+         * @param {!RuntimeAgent.RemoteObject} result
+         * @param {boolean=} wasThrown
+         */
+        function evalCallback(error, result, wasThrown)
+        {
+            if (error || wasThrown) {
+                console.error(error);
+                return;
+            }
+            InspectorFrontendHost.inspectedURLChanged(result.value);
+        }
     },
 
-    get inspectedPageDomain()
+    _initializeDedicatedWorkerFrontend: function(workerId)
     {
-        var parsedURL = WebInspector.inspectedPageURL && WebInspector.inspectedPageURL.asParsedURL();
-        return parsedURL ? parsedURL.host : "";
+        function receiveMessage(event)
+        {
+            var message = event.data;
+            InspectorBackend.dispatch(message);
+        }
+        window.addEventListener("message", receiveMessage, true);
+
+
+        InspectorBackend.sendMessageObjectToBackend = function(message)
+        {
+            window.opener.postMessage({workerId: workerId, command: "sendMessageToBackend", message: message}, "*");
+        }
     },
 
-    _initializeCapability: function(name, callback, error, result)
+    _loadCompletedForWorkers: function()
     {
-        Capabilities[name] = result;
-        if (callback)
-            callback();
+        // Make sure script execution of dedicated worker is resumed and then paused
+        // on the first script statement in case we autoattached to it.
+        if (WebInspector.queryParamsObject["workerPaused"]) {
+            DebuggerAgent.pause();
+            RuntimeAgent.run(calculateTitle);
+        } else if (WebInspector.isWorkerFrontend())
+            calculateTitle();
+
+        function calculateTitle()
+        {
+            WebInspector._calculateWorkerInspectorTitle();
+        }
     },
 
-    _zoomIn: function()
+    /**
+     * @return {boolean}
+     */
+    isWorkerFrontend: function()
     {
-        this._zoomLevel = Math.min(this._zoomLevel + 1, WebInspector.Zoom.Table.length - WebInspector.Zoom.DefaultOffset - 1);
-        this._requestZoom();
+        return !!WebInspector.queryParamsObject["dedicatedWorkerId"] ||
+                !!WebInspector.queryParamsObject["isSharedWorker"];
     },
 
-    _zoomOut: function()
+    showConsole: function()
     {
-        this._zoomLevel = Math.max(this._zoomLevel - 1, -WebInspector.Zoom.DefaultOffset);
-        this._requestZoom();
+        if (this.consoleView.isShowing())
+            return;
+        this.inspectorView.showViewInDrawer("console");
     },
 
-    _resetZoom: function()
+    _resetErrorAndWarningCounts: function()
     {
-        this._zoomLevel = 0;
-        this._requestZoom();
+        WebInspector.inspectorView.setErrorAndWarningCounts(0, 0);
     },
 
-    _adjustExternalZoomFactor: function()
+    _updateErrorAndWarningCounts: function()
     {
-        var realZoomFactor = InspectorFrontendHost.zoomFactor();
-        var expectedZoomFactor = this.zoomFactor();
-        if (Math.abs(realZoomFactor - expectedZoomFactor) > 1e-3) {
-            // Unexpected zoom factor means that it was overriden by external zoom.
-            WebInspector.settings.externalZoomFactor.set(realZoomFactor);
-            this._requestZoom();
-        }
+        var errors = WebInspector.console.errors;
+        var warnings = WebInspector.console.warnings;
+        WebInspector.inspectorView.setErrorAndWarningCounts(errors, warnings);
     },
 
-    /**
-     * @return {number}
-     * @this {WebInspector}
-     */
-    zoomFactor: function()
+    get inspectedPageDomain()
     {
-        // For backwards compatibility, zoomLevel takes integers (with 0 being default zoom).
-        var index = this._zoomLevel + WebInspector.Zoom.DefaultOffset;
-        index = Math.min(WebInspector.Zoom.Table.length - 1, index);
-        index = Math.max(0, index);
-        return WebInspector.Zoom.Table[index] * WebInspector.settings.externalZoomFactor.get();
+        var parsedURL = WebInspector.inspectedPageURL && WebInspector.inspectedPageURL.asParsedURL();
+        return parsedURL ? parsedURL.host : "";
     },
 
-    _requestZoom: function()
+    _initializeCapability: function(name, callback, error, result)
     {
-        WebInspector.settings.zoomLevel.set(this._zoomLevel);
-        InspectorFrontendHost.setZoomFactor(this.zoomFactor());
+        Capabilities[name] = result;
+        if (callback)
+            callback();
     },
 
     _debuggerPaused: function()
@@ -168,6 +191,18 @@ WebInspector.Events = {
         var pair = params[i].split("=");
         WebInspector.queryParamsObject[pair[0]] = pair[1];
     }
+
+    // Patch settings from the URL param (for tests).
+    var settingsParam = WebInspector.queryParamsObject["settings"];
+    if (settingsParam) {
+        try {
+            var settings = JSON.parse(window.decodeURI(settingsParam));
+            for (var key in settings)
+                localStorage[key] = settings[key];
+        } catch(e) {
+            // Ignore malformed settings.
+        }
+    }
 })();}
 
 WebInspector.suggestReload = function()
@@ -179,19 +214,7 @@ WebInspector.suggestReload = function()
 WebInspector.reload = function()
 {
     InspectorAgent.reset();
-
-    var queryParams = window.location.search;
-    var url = window.location.href;
-    url = url.substring(0, url.length - queryParams.length);
-    var queryParamsObject = {};
-    for (var name in WebInspector.queryParamsObject)
-        queryParamsObject[name] = WebInspector.queryParamsObject[name];
-    if (this.dockController)
-        queryParamsObject["dockSide"] = this.dockController.dockSide();
-    var names = Object.keys(queryParamsObject);
-    for (var i = 0; i < names.length; ++i)
-        url += (i ? "&" : "?") + names[i] + "=" + queryParamsObject[names[i]];
-    document.location = url;
+    window.location.reload();
 }
 
 WebInspector.loaded = function()
@@ -207,7 +230,7 @@ WebInspector.loaded = function()
     InspectorBackend.loadFromJSONIfNeeded("../protocol.json");
     WebInspector.dockController = new WebInspector.DockController();
 
-    if (WebInspector.WorkerManager.isDedicatedWorkerFrontend()) {
+    if (WebInspector.isDedicatedWorkerFrontend()) {
         // Do not create socket for the worker front-end.
         WebInspector.doLoadedDone();
         return;
@@ -256,7 +279,9 @@ WebInspector.doLoadedDone = function()
     if (WebInspector.queryParamsObject.toolbarColor && WebInspector.queryParamsObject.textColor)
         WebInspector.setToolbarColors(WebInspector.queryParamsObject.toolbarColor, WebInspector.queryParamsObject.textColor);
 
-    WebInspector.WorkerManager.loaded();
+    var workerId = WebInspector.queryParamsObject["dedicatedWorkerId"];
+    if (workerId)
+        this._initializeDedicatedWorkerFrontend(workerId);
 
     PageAgent.canScreencast(WebInspector._initializeCapability.bind(WebInspector, "canScreencast", null));
     WorkerAgent.canInspectWorkers(WebInspector._initializeCapability.bind(WebInspector, "canInspectWorkers", WebInspector._doLoadedDoneWithCapabilities.bind(WebInspector)));
@@ -285,18 +310,13 @@ WebInspector._doLoadedDoneWithCapabilities = function()
     this.networkLog = new WebInspector.NetworkLog();
     this.domAgent = new WebInspector.DOMAgent();
     this.domAgent.addEventListener(WebInspector.DOMAgent.Events.InspectNodeRequested, this._inspectNodeRequested, this);
+    this.workerManager = new WebInspector.WorkerManager(Capabilities.canInspectWorkers);
     this.runtimeModel = new WebInspector.RuntimeModel(this.resourceTreeModel);
 
-    this._zoomLevel = WebInspector.settings.zoomLevel.get();
-    // FIXME: when user changes external zoom factor, and after that opens inspector,
-    // we should somehow rescale zoom-dependent settings, e.g. inspectorView split size.
-    WebInspector.settings.externalZoomFactor.set(InspectorFrontendHost.zoomFactor());
-    if (this._zoomLevel)
-        this._requestZoom();
+    this.zoomManager = new WebInspector.ZoomManager();
 
     this.advancedSearchController = new WebInspector.AdvancedSearchController();
-    WebInspector.CSSMetadata.requestCSSShorthandData();
-    this.consoleView = new WebInspector.ConsoleView(WebInspector.WorkerManager.isWorkerFrontend());
+    this.consoleView = new WebInspector.ConsoleView(WebInspector.isWorkerFrontend());
 
     InspectorBackend.registerInspectorDispatcher(this);
 
@@ -308,8 +328,10 @@ WebInspector._doLoadedDoneWithCapabilities = function()
     this.timelineManager = new WebInspector.TimelineManager();
     this.tracingAgent = new WebInspector.TracingAgent();
 
-    if (!WebInspector.WorkerManager.isWorkerFrontend())
+    if (!WebInspector.isWorkerFrontend()) {
         this.inspectElementModeController = new WebInspector.InspectElementModeController();
+        this.workerFrontendManager = new WebInspector.WorkerFrontendManager();
+    }
 
     this.settingsController = new WebInspector.SettingsController();
 
@@ -319,6 +341,7 @@ WebInspector._doLoadedDoneWithCapabilities = function()
     var openAnchorLocationSetting = WebInspector.settings.createSetting("openLinkHandler", autoselectPanel);
     this.openAnchorLocationRegistry = new WebInspector.HandlerRegistry(openAnchorLocationSetting);
     this.openAnchorLocationRegistry.registerHandler(autoselectPanel, function() { return false; });
+    WebInspector.Linkifier.setLinkHandler(new WebInspector.HandlerRegistry.LinkHandler());
 
     new WebInspector.WorkspaceController(this.workspace);
 
@@ -334,7 +357,7 @@ WebInspector._doLoadedDoneWithCapabilities = function()
     this.overridesSupport = new WebInspector.OverridesSupport();
     this.overridesSupport.applyInitialOverrides();
 
-    new WebInspector.DebuggerScriptMapping(this.workspace, this.networkWorkspaceProvider);
+    new WebInspector.DebuggerScriptMapping(this.debuggerModel, this.workspace, this.networkWorkspaceProvider);
     this.liveEditSupport = new WebInspector.LiveEditSupport(this.workspace);
     new WebInspector.CSSStyleSheetMapping(this.cssModel, this.workspace, this.networkWorkspaceProvider);
     new WebInspector.PresentationConsoleMessageHelper(this.workspace);
@@ -349,12 +372,6 @@ WebInspector._doLoadedDoneWithCapabilities = function()
     WebInspector.inspectorView.show(document.body);
     this._createGlobalStatusBarItems();
 
-    if (this.overridesSupport.hasActiveOverrides()) {
-        if (!WebInspector.settings.showEmulationViewInDrawer.get())
-            WebInspector.settings.showEmulationViewInDrawer.set(true);
-        WebInspector.inspectorView.showViewInDrawer("emulation");
-    }
-
     this.addMainEventListeners(document);
 
     window.addEventListener("resize", this.windowResize.bind(this), true);
@@ -363,34 +380,46 @@ WebInspector._doLoadedDoneWithCapabilities = function()
     errorWarningCount.addEventListener("click", this.showConsole.bind(this), false);
     this._updateErrorAndWarningCounts();
 
-    this.extensionServer.initExtensions();
+    WebInspector.extensionServerProxy.setFrontendReady();
 
     this.console.enableAgent();
 
-    InspectorAgent.enable(WebInspector.inspectorView.showInitialPanel.bind(WebInspector.inspectorView));
     this.databaseModel = new WebInspector.DatabaseModel();
     this.domStorageModel = new WebInspector.DOMStorageModel();
-
     this.cpuProfilerModel = new WebInspector.CPUProfilerModel();
-    HeapProfilerAgent.enable();
 
-    if (WebInspector.settings.showPaintRects.get() || WebInspector.settings.showDebugBorders.get() || WebInspector.settings.continuousPainting.get() ||
-            WebInspector.settings.showFPSCounter.get() || WebInspector.settings.showScrollBottleneckRects.get()) {
-        WebInspector.settings.showRenderingViewInDrawer.set(true);
-    }
-
-    WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
-    function showRulersChanged()
+    InspectorAgent.enable(inspectorAgentEnableCallback.bind(this));
+    /**
+     * @this {WebInspector}
+     */
+    function inspectorAgentEnableCallback()
     {
-        PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
+        WebInspector.inspectorView.showInitialPanel();
+
+        if (WebInspector.overridesSupport.hasActiveOverrides()) {
+            if (!WebInspector.settings.showEmulationViewInDrawer.get())
+                WebInspector.settings.showEmulationViewInDrawer.set(true);
+            WebInspector.inspectorView.showViewInDrawer("emulation", true);
+        }
+
+        if (WebInspector.settings.showPaintRects.get() || WebInspector.settings.showDebugBorders.get() || WebInspector.settings.continuousPainting.get() ||
+                WebInspector.settings.showFPSCounter.get() || WebInspector.settings.showScrollBottleneckRects.get()) {
+            WebInspector.settings.showRenderingViewInDrawer.set(true);
+        }
+
+        WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
+        function showRulersChanged()
+        {
+            PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
+        }
+        showRulersChanged();
+
+        if (Capabilities.canScreencast)
+            this._screencastView.initialize();
     }
-    showRulersChanged();
 
-    WebInspector.WorkerManager.loadCompleted();
+    this._loadCompletedForWorkers()
     InspectorFrontendAPI.loadCompleted();
-
-    if (Capabilities.canScreencast)
-        this._screencastView.initialize();
     WebInspector.notifications.dispatchEventToListeners(WebInspector.Events.InspectorLoaded);
 }
 
@@ -424,9 +453,6 @@ WebInspector.dispatch = function(message) {
 
 WebInspector.windowResize = function(event)
 {
-    this._adjustExternalZoomFactor();
-    if (WebInspector.inspectorView)
-        WebInspector.inspectorView.onResize();
     if (WebInspector.settingsController)
         WebInspector.settingsController.resize();
 }
@@ -439,7 +465,7 @@ WebInspector.close = function(event)
 WebInspector.documentClick = function(event)
 {
     var anchor = event.target.enclosingNodeOrSelfWithNodeName("a");
-    if (!anchor || (anchor.target === "_blank"))
+    if (!anchor || !anchor.href || (anchor.target === "_blank"))
         return;
 
     // Prevent the link from navigating, since we don't do any navigation by following links normally.
@@ -451,19 +477,24 @@ WebInspector.documentClick = function(event)
             return;
         if (WebInspector.openAnchorLocationRegistry.dispatch({ url: anchor.href, lineNumber: anchor.lineNumber}))
             return;
-        if (WebInspector.showAnchorLocation(anchor))
+
+        var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(anchor.href);
+        if (uiSourceCode) {
+            WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, anchor.lineNumber || 0, anchor.columnNumber || 0));
             return;
+        }
 
-        var parsedURL = anchor.href.asParsedURL();
-        if (parsedURL && parsedURL.scheme === "webkit-link-action") {
-            if (parsedURL.host === "show-panel") {
-                var panel = parsedURL.path.substring(1);
-                if (WebInspector.panel(panel))
-                    WebInspector.showPanel(panel);
-            }
+        var resource = WebInspector.resourceForURL(anchor.href);
+        if (resource) {
+            WebInspector.Revealer.reveal(resource);
             return;
         }
 
+        var request = WebInspector.networkLog.requestForURL(anchor.href);
+        if (request) {
+            WebInspector.Revealer.reveal(request);
+            return;
+        }
         InspectorFrontendHost.openInNewTab(anchor.href);
     }
 
@@ -540,6 +571,29 @@ WebInspector._registerShortcuts = function()
     section.addAlternateKeys(keys, WebInspector.UIString("Show general settings"));
 }
 
+WebInspector.handleZoomEvent = function(event)
+{
+    switch (event.keyCode) {
+    case 107: // +
+    case 187: // +
+        InspectorFrontendHost.zoomIn();
+        return true;
+    case 109: // -
+    case 189: // -
+        InspectorFrontendHost.zoomOut();
+        return true;
+    case 48: // 0
+    case 96: // Numpad 0
+        // Zoom reset shortcut does not allow "Shift" when handled by the browser.
+        if (!event.shiftKey) {
+            InspectorFrontendHost.resetZoom();
+            return true;
+        }
+        break;
+    }
+    return false;
+};
+
 WebInspector.postDocumentKeyDown = function(event)
 {
     if (event.handled)
@@ -588,32 +642,9 @@ WebInspector.postDocumentKeyDown = function(event)
     var isValidZoomShortcut = WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) &&
         !event.altKey &&
         !InspectorFrontendHost.isStub;
-    switch (event.keyCode) {
-        case 107: // +
-        case 187: // +
-            if (isValidZoomShortcut) {
-                WebInspector._zoomIn();
-                event.consume(true);
-                return;
-            }
-            break;
-        case 109: // -
-        case 189: // -
-            if (isValidZoomShortcut) {
-                WebInspector._zoomOut();
-                event.consume(true);
-                return;
-            }
-            break;
-        case 48: // 0
-        case 96: // Numpad 0
-            // Zoom reset shortcut does not allow "Shift" when handled by the browser.
-            if (isValidZoomShortcut && !event.shiftKey) {
-                WebInspector._resetZoom();
-                event.consume(true);
-                return;
-            }
-            break;
+    if (isValidZoomShortcut && WebInspector.handleZoomEvent(event)) {
+        event.consume(true);
+        return;
     }
 
     if (event.keyCode === WebInspector.KeyboardShortcut.Keys.F1.code ||
@@ -626,10 +657,10 @@ WebInspector.postDocumentKeyDown = function(event)
     var Esc = "U+001B";
     var doNotOpenDrawerOnEsc = WebInspector.experimentsSettings.doNotOpenDrawerOnEsc.isEnabled();
     if (event.keyIdentifier === Esc) {
-        if (this.inspectorView.drawer().visible())
-            this.inspectorView.drawer().hide();
+        if (this.inspectorView.drawerVisible())
+            this.inspectorView.closeDrawer();
         else if (!doNotOpenDrawerOnEsc)
-            this.inspectorView.drawer().show();
+            this.inspectorView.showDrawer();
     }
 
     if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Tilde.code && event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
@@ -763,6 +794,7 @@ WebInspector.inspect = function(payload, hints)
         function callback(nodeId)
         {
             WebInspector._updateFocusedNode(nodeId);
+            InspectorFrontendHost.inspectElementCompleted();
             object.release();
         }
         object.pushNodeToFrontend(callback);
@@ -794,11 +826,7 @@ WebInspector.inspect = function(payload, hints)
         return;
     }
 
-    if (hints.databaseId)
-        WebInspector.showPanel("resources").selectDatabase(WebInspector.databaseModel.databaseForId(hints.databaseId));
-    else if (hints.domStorageId)
-        WebInspector.showPanel("resources").selectDOMStorage(WebInspector.domStorageModel.storageForId(hints.domStorageId));
-    else if (hints.copyToClipboard)
+    if (hints.copyToClipboard)
         InspectorFrontendHost.copyText(object.value);
     object.release();
 }
@@ -831,36 +859,6 @@ WebInspector._updateFocusedNode = function(nodeId)
     WebInspector.showPanel("elements").revealAndSelectNode(nodeId);
 }
 
-WebInspector.showAnchorLocation = function(anchor)
-{
-    var preferredPanel = this.panels[anchor.preferredPanel];
-    if (preferredPanel && WebInspector._showAnchorLocationInPanel(anchor, preferredPanel))
-        return true;
-    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("sources")))
-        return true;
-    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("resources")))
-        return true;
-    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("network")))
-        return true;
-    return false;
-}
-
-WebInspector._showAnchorLocationInPanel = function(anchor, panel)
-{
-    if (!panel)
-        return false;
-
-    var result = panel.showAnchorLocation(anchor);
-    if (result) {
-        // FIXME: support webkit-html-external-link links here.
-        if (anchor.classList.contains("webkit-html-external-link")) {
-            anchor.classList.remove("webkit-html-external-link");
-            anchor.classList.add("webkit-html-resource-link");
-        }
-    }
-    return result;
-}
-
 WebInspector.evaluateInConsole = function(expression, showResultOnly)
 {
     this.showConsole();
@@ -873,31 +871,7 @@ WebInspector.addMainEventListeners = function(doc)
     doc.addEventListener("beforecopy", this.documentCanCopy.bind(this), true);
     doc.addEventListener("copy", this.documentCopy.bind(this), false);
     doc.addEventListener("contextmenu", this.contextMenuEventFired.bind(this), true);
-    doc.addEventListener("click", this.documentClick.bind(this), true);
-}
-
-WebInspector.Zoom = {
-    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],
-    DefaultOffset: 6
-}
-
-
-// Ex-DevTools.js content
-
-/**
- * @param {!ExtensionDescriptor} extensionInfo
- * @return {string}
- */
-function buildPlatformExtensionAPI(extensionInfo)
-{
-    return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
-       "var tabId = " + WebInspector._inspectedTabId + ";" +
-       platformExtensionAPI.toString();
-}
-
-WebInspector.setInspectedTabId = function(tabId)
-{
-    WebInspector._inspectedTabId = tabId;
+    doc.addEventListener("click", this.documentClick.bind(this), false);
 }
 
 window.DEBUG = true;